<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Programmable_logic_array</id>
	<title>Programmable logic array - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sarg.dev/index.php?action=history&amp;feed=atom&amp;title=Programmable_logic_array"/>
	<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Programmable_logic_array&amp;action=history"/>
	<updated>2026-06-23T08:16:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.sarg.dev/index.php?title=Programmable_logic_array&amp;diff=351129&amp;oldid=prev</id>
		<title>imported&gt;Nyq: Decapitlized table contents to sentence case</title>
		<link rel="alternate" type="text/html" href="https://wiki.sarg.dev/index.php?title=Programmable_logic_array&amp;diff=351129&amp;oldid=prev"/>
		<updated>2025-06-15T02:52:25Z</updated>

		<summary type="html">&lt;p&gt;Decapitlized table contents to sentence case&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Type of programmable logic device}}&lt;br /&gt;
{{confused|Programmable Array Logic}}&lt;br /&gt;
&lt;br /&gt;
[[Image:Programmable logic array (schematic drawing example).svg|thumb|right|PLA schematic example]]&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039; programmable logic array&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;PLA&amp;#039;&amp;#039;&amp;#039;) is a kind of [[programmable logic device]] used to implement [[combinational logic]] [[electrical network|circuits]]. The PLA has a set of programmable [[AND gate]] planes, which link to a set of programmable [[OR gate]] planes, which can then be conditionally complemented to produce an output. It has 2&amp;lt;sup&amp;gt;N&amp;lt;/sup&amp;gt; AND gates for N input variables, and for M outputs from the PLA, there should be M OR gates, each with programmable inputs from all of the AND gates. This layout allows for many logic functions to be synthesized in the sum of products [[Canonical normal form|canonical forms]].&lt;br /&gt;
&lt;br /&gt;
PLAs differ from [[Programmable Array Logic|programmable array logic]] devices ([[Programmable Array Logic|PALs]] and [[Generic Array Logic|GAL]]s) in that both the AND and OR gate planes are programmable. PAL has programmable AND gates but fixed OR gates {{clarify|date=March 2021}}&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
In 1970, [[Texas Instruments]] developed a [[photomask|mask]]-programmable IC based on the [[IBM]] read-only [[Content-addressable memory|associative memory]] or ROAM. This device, the TMS2000, was programmed by altering the metal layer during the production of the IC. The TMS2000 had up to 17 inputs and 18 outputs with 8 [[JK flip-flops]] for memory. TI coined the term &amp;#039;&amp;#039;Programmable Logic Array&amp;#039;&amp;#039; for this device.&amp;lt;ref name = &amp;quot;TI PLA 1970&amp;quot;&amp;gt;{{Cite book | last = Andres | first = Kent | title = A Texas Instruments Application Report: MOS programmable logic arrays. | publisher = Texas Instruments | date = October 1970 | id = Bulletin CA-158}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation procedure==&lt;br /&gt;
&lt;br /&gt;
# Preparation in SOP ([[sum of products]]) form.&lt;br /&gt;
# Obtain the minimum SOP form to reduce the number of product terms to a minimum.&lt;br /&gt;
# Decide the input connection of the AND matrix for generating the required product term.&lt;br /&gt;
# Then decide the input connections of the OR matrix to generate the sum terms.&lt;br /&gt;
# Decide the connections of the inversion matrix.&lt;br /&gt;
# Program the PLA.&lt;br /&gt;
&lt;br /&gt;
PLA block diagram:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1&amp;lt;sup&amp;gt;st&amp;lt;/sup&amp;gt; block !! 2&amp;lt;sup&amp;gt;nd&amp;lt;/sup&amp;gt; block !! 3&amp;lt;sup&amp;gt;rd&amp;lt;/sup&amp;gt; block !! 4&amp;lt;sup&amp;gt;TH&amp;lt;/sup&amp;gt; block !! 5&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; block&lt;br /&gt;
|-&lt;br /&gt;
| Input buffer || AND matrix || OR matrix || Invert/non-invert matrix || Flip-flop output buffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Advantages over read-only memory ==&lt;br /&gt;
The desired outputs for each combination of inputs &amp;#039;&amp;#039;could&amp;#039;&amp;#039; be programmed into a [[read-only memory]], with the inputs being driven by the address bus and the outputs being read out as data. However, that would require a separate memory location for &amp;#039;&amp;#039;every&amp;#039;&amp;#039; possible combination of inputs, including combinations that are never supposed to occur, and also duplicating data for &amp;quot;don&amp;#039;t care&amp;quot; conditions (for example, logic like &amp;quot;if input A is 1, then, as far as output X is concerned, we don&amp;#039;t care what input B is&amp;quot;: in a ROM this would have to be written out twice, once for each possible value of B, and as more &amp;quot;don&amp;#039;t care&amp;quot; inputs are added, the duplication grows exponentially); therefore, a programmable logic array can often implement a piece of logic using fewer transistors than the equivalent in read-only memory. This is particularly valuable when it is part of a processing chip where transistors are scarce (for example, the original [[MOS Technology 6502|6502]] chip contained a PLA to direct various operations of the processor&amp;lt;ref&amp;gt;[http://www.pagetable.com/?p=39 How MOS 6502 Illegal Opcodes really work]&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
One application of a PLA is to implement the control over a [[datapath]]. It defines various states in an instruction set, and produces the next state (by conditional branching). [e.g. if the machine is in state 2, and will go to state 4 if the instruction contains an immediate field; then the PLA should define the actions of the control in state 2, will set the next state to be 4 if the instruction contains an immediate field, and will define the actions of the control in state 4]. Programmable logic arrays should correspond to a [[state diagram]] for the system.&lt;br /&gt;
&lt;br /&gt;
The earliest [[Commodore 64]] home computers released in 1982 (into early 1983) initially used a programmed Signetics 82S100 PLA, but as the demand increased, MOS Technology / Commodore Semiconductor Group began producing a mask-programmed PLA, which bore part number 906114-01.&amp;lt;ref&amp;gt;[http://www.arcadecomponents.com/catalog/item/3054735/2582640.htm arcadecomponents.com - Commodore 906114-01 64 PLA IC]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Field-programmable gate array]]&lt;br /&gt;
* [[Gate array]]&lt;br /&gt;
* [[Programmable Array Logic]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* {{cite web |url= http://www.cs.umd.edu/class/spring2003/cmsc311/Notes/Comb/pla.html |date= 2003 |work= cmsc311 |title= Programmable Logic Array (PLA) |publisher= [[University of Maryland]] |archive-url=https://web.archive.org/web/20171214191144/www.cs.umd.edu/class/spring2003/cmsc311/Notes/Comb/pla.html |archive-date=2017-12-14 |url-status= dead}}&lt;br /&gt;
* {{cite web |url= http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/42-programmable/10-pla/pla.html |title= PLA (programmable logic array) |work= Java Applet |publisher= [[University of Hamburg]] |access-date= 2010-04-07 |archive-url= https://web.archive.org/web/20130115113124/http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/42-programmable/10-pla/pla.html |archive-date= 2013-01-15 |url-status= dead }}&lt;br /&gt;
&lt;br /&gt;
{{Programmable Logic}}&lt;br /&gt;
{{Digital electronics}}&lt;br /&gt;
{{Authority control}}&lt;br /&gt;
[[Category:Electronic design automation]]&lt;br /&gt;
[[Category:Gate arrays]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Nyq</name></author>
	</entry>
</feed>