pla
Attributes
Members list
Value members
Concrete methods
Construct a https://en.wikipedia.org/wiki/Programmable_logic_array from specified table.
Construct a https://en.wikipedia.org/wiki/Programmable_logic_array from specified table.
Each position in the input matrix corresponds to an input variable where 0 implies the corresponding input literal appears complemented in the product term. 1 implies the input literal appears uncomplemented in the product term ? implies the input literal does not appear in the product term.
For each output a 1 means this product term makes the function value to 1 and a 0 or ? means this product term make the function value to 0
Value parameters
- invert
-
A BitPat specify which bit of the output should be inverted.
1means the correspond position of the output should be inverted in the PLA, a0or a?means direct output from the OR matrix. - table
-
A
Seqof inputs -> outputs mapping
Attributes
- Returns
-
the (input, output) Wire of UInt of the constructed pla.
// A 1-of-8 decoder (like the 74xx138) can be constructed as follow val (inputs, outputs) = pla(Seq( (BitPat("b000"), BitPat("b00000001")), (BitPat("b001"), BitPat("b00000010")), (BitPat("b010"), BitPat("b00000100")), (BitPat("b011"), BitPat("b00001000")), (BitPat("b100"), BitPat("b00010000")), (BitPat("b101"), BitPat("b00100000")), (BitPat("b110"), BitPat("b01000000")), (BitPat("b111"), BitPat("b10000000")), )) - Note
-
There is one special case which we call it
? -> 1. In this scenario, for some of the output functions (bits), all input terms that make this function value to1is purely composed by?. In a real pla, this will result in no connection to the gates in the AND Plane (verilogzon gate inputs), which in turn makes the outputs of the AND Plane undetermined (verilogxon outputs). This is not desired behavior in most cases, for example the minimization result of following truth table: 0 -> 1 1 -> 1 which is: ? -> 1 actually means something other than a verilogx. To ease the generation of minimized truth tables, this pla generation api will hard wire outputs to a1on this special case. This behavior is formally described as: if product terms that make one function value to1is solely consisted of don't-cares (?s), then this function is implemented as a constant1. - Source
- pla.scala