This document discusses data flow modeling of combinational logic using VHDL. It covers different VHDL design styles including structural, dataflow, and behavioral. It focuses on the dataflow style using concurrent signal assignments, conditional concurrent assignments, selected concurrent assignments, and generate schemes. Examples are provided to illustrate full adders, logic operators, and multiplexers implemented using dataflow VHDL. The document also discusses synthesizable VHDL and provides an example of modeling a 4-to-1 multiplexer logic unit using dataflow VHDL.
Download as PPT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
44 views
ECE545 Lecture5 Dataflow
This document discusses data flow modeling of combinational logic using VHDL. It covers different VHDL design styles including structural, dataflow, and behavioral. It focuses on the dataflow style using concurrent signal assignments, conditional concurrent assignments, selected concurrent assignments, and generate schemes. Examples are provided to illustrate full adders, logic operators, and multiplexers implemented using dataflow VHDL. The document also discusses synthesizable VHDL and provides an example of modeling a 4-to-1 multiplexer logic unit using dataflow VHDL.
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 85
George Mason University
Data Flow Modeling of
Combinational Logic ECE 545 Lecture 5 2 Required reading P. Chu, RTL Hardware Design using VHDL
Chapter 4, Concurrent Signal Assignment Statements of VHDL 3 ECE 448 FPGA and ASIC Design with VHDL Dataflow VHDL Design Style 4 VHDL Design Styles Components and interconnects structural VHDL Design Styles dataflow Concurrent statements behavioral (sequential) Registers State machines Instruction decoders Sequential statements Subset most suitable for synthesis Testbenches 5 Synthesizable VHDL Dataflow VHDL Design Style VHDL code synthesizable VHDL code synthesizable Dataflow VHDL Design Style 6 Register Transfer Level (RTL) Design Description Combinational Logic Combinational Logic Registers
Todays Topic 7 Data-Flow VHDL concurrent signal assignment ()
conditional concurrent signal assignment (when-else)
selected concurrent signal assignment (with-select-when)
generate scheme for equations (for-generate) Concurrent Statements Data-flow VHDL concurrent signal assignment () conditional concurrent signal assignment (when-else) selected concurrent signal assignment (with-select-when) generate scheme for equations (for-generate) Major instructions Concurrent statements 9 Data-flow VHDL: Example x y cin s cout 10 Data-flow VHDL: Example (1) LIBRARY ieee ; USE ieee.std_logic_1164.all ;
ENTITY fulladd IS PORT ( x : IN STD_LOGIC ; y : IN STD_LOGIC ; cin : IN STD_LOGIC ; s : OUT STD_LOGIC ; cout : OUT STD_LOGIC ) ; END fulladd ; 11 Data-flow VHDL: Example (2)
ARCHITECTURE dataflow OF fulladd IS BEGIN s <= x XOR y XOR cin ; cout <= (x AND y) OR (cin AND x) OR (cin AND y) ; END dataflow ; 12 Logic Operators Logic operators
Logic operators precedence and or nand nor xor not xnor not and or nand nor xor xnor Highest Lowest only in VHDL-93 or later 13 Wanted: y = ab + cd Incorrect y <= a and b or c and d ; equivalent to y <= ((a and b) or c) and d ; equivalent to y = (ab + c)d
Correct y <= (a and b) or (c and d) ; No Implied Precedence RTL Hardware Design Chapter 4 14 E.g., status <= '1'; even <= (p1 and p2) or (p3 and p4); arith_out <= a + b + c - 1; Implementation of last statement RTL Hardware Design Chapter 4 15 Signal assignment statement with a closed feedback loop a signal appears in both sides of a concurrent assignment statement E.g., q <= ((not q) and (not en)) or (d and en); Syntactically correct Form a closed feedback loop Should be avoided
16 Data-flow VHDL concurrent signal assignment () conditional concurrent signal assignment (when-else) selected concurrent signal assignment (with-select-when) generate scheme for equations (for-generate) Major instructions Concurrent statements 17 Conditional concurrent signal assignment target_signal <= value1 when condition1 else value2 when condition2 else . . . valueN-1 when conditionN-1 else valueN; When - Else 18 Most often implied structure target_signal <= value1 when condition1 else value2 when condition2 else . . . valueN-1 when conditionN-1 else valueN; When - Else . Value N Value N-1 Condition N-1 Condition 2 Condition 1 Value 2 Value 1 Target Signal
0 1 0 1 0 1 RTL Hardware Design Chapter 4 19 2-to-1 abstract mux sel has a data type of boolean If sel is true, the input from T port is connected to output. If sel is false, the input from F port is connected to output. RTL Hardware Design Chapter 4 20 RTL Hardware Design Chapter 4 21 RTL Hardware Design Chapter 4 22 RTL Hardware Design Chapter 4 23 E.g., RTL Hardware Design Chapter 4 24 E.g., RTL Hardware Design Chapter 4 25 RTL Hardware Design Chapter 4 26 E.g., 27 Signed and Unsigned Types Behave exactly like STD_LOGIC_VECTOR plus, they determine whether a given vector should be treated as a signed or unsigned number. Require USE ieee.numeric_std.all; 28 Operators Relational operators
Logic and relational operators precedence = /= < <= > >= not = /= < <= > >= and or nand nor xor xnor Highest Lowest 29 compare a = bc Incorrect when a = b and c else equivalent to when (a = b) and c else
Correct when a = (b and c) else
Priority of logic and relational operators 30 VHDL operators 31 Data-flow VHDL concurrent signal assignment () conditional concurrent signal assignment (when-else) selected concurrent signal assignment (with-select-when) generate scheme for equations (for-generate) Major instructions Concurrent statements 32 Selected concurrent signal assignment with choice_expression select target_signal <= expression1 when choices_1, expression2 when choices_2, . . . expressionN when choices_N; With Select-When 33 Most Often Implied Structure with choice_expression select target_signal <= expression1 when choices_1, expression2 when choices_2, . . . expressionN when choices_N; With Select-When choices_1 choices_2 choices_N expression1 target_signal choice expression expression2 expressionN 34 Allowed formats of choices_k WHEN value
WHEN value_1 | value_2 | .... | value N
WHEN OTHERS 35 Allowed formats of choice_k - example WITH sel SELECT y <= a WHEN "000", c WHEN "001" | "111", d WHEN OTHERS; RTL Hardware Design Chapter 4 36 Syntax Simplified syntax: with select_expression select signal_name <= value_expr_1 when choice_1, value_expr_2 when choice_2, value_expr_3 when choice_3, . . . value_expr_n when choice_n; RTL Hardware Design Chapter 4 37 select_expression Discrete type or 1-D array With finite possible values choice_i A value of the data type Choices must be mutually exclusive all inclusive others can be used as last choice_i
RTL Hardware Design Chapter 4 38 E.g., 4-to-1 mux RTL Hardware Design Chapter 4 39 Can 11 be used to replace others? RTL Hardware Design Chapter 4 40 E.g., 2-to-2 2 binary decoder RTL Hardware Design Chapter 4 41 E.g., 4-to-2 priority encoder RTL Hardware Design Chapter 4 42 Can we use -? RTL Hardware Design Chapter 4 43 E.g., simple ALU RTL Hardware Design Chapter 4 44 E.g., Truth table RTL Hardware Design Chapter 4 45 Conceptual implementation Achieved by a multiplexing circuit Abstract (k+1)-to-1 multiplexer sel is with a data type of (k+1) values: c0, c1, c2, . . . , ck
RTL Hardware Design Chapter 4 46 select_expression is with a data type of 5 values: c0, c1, c2, c3, c4 RTL Hardware Design Chapter 4 47 RTL Hardware Design Chapter 4 48 E.g., RTL Hardware Design Chapter 4 49 3. Conditional vs. selected signal assignment Conversion between conditional vs. selected signal assignment Comparison
RTL Hardware Design Chapter 4 50 From selected assignment to conditional assignment RTL Hardware Design Chapter 4 51 From conditional assignment to selected assignment RTL Hardware Design Chapter 4 52 Comparison Selected signal assignment: good match for a circuit described by a functional table E.g., binary decoder, multiplexer Less effective when an input pattern is given a preferential treatment RTL Hardware Design Chapter 4 53 Conditional signal assignment: good match for a circuit a circuit that needs to give preferential treatment for certain conditions or to prioritize the operations E.g., priority encoder Can handle complicated conditions. e.g., RTL Hardware Design Chapter 4 54 May over-specify for a functional table based circuit. E.g., mux 55 MLU Example 56 MLU Block Diagram B A NEG_A NEG_B IN0 IN1 IN2 IN3 OUTPUT SEL1 SEL0 MUX_4_1 L0 L1 NEG_Y Y Y1 A1 B1 MUX_0 MUX_1 MUX_2 MUX_3 0
1 0
1 0
1 57 MLU: Entity Declaration LIBRARY ieee; USE ieee.std_logic_1164.all;
ENTITY mlu IS PORT( NEG_A : IN STD_LOGIC; NEG_B : IN STD_LOGIC; NEG_Y : IN STD_LOGIC; A : IN STD_LOGIC; B : IN STD_LOGIC; L1 : IN STD_LOGIC; L0 : IN STD_LOGIC; Y : OUT STD_LOGIC ); END mlu;
58 MLU: Architecture Declarative Section ARCHITECTURE mlu_dataflow OF mlu IS
SIGNAL A1 : STD_LOGIC; SIGNAL B1 : STD_LOGIC; SIGNAL Y1 : STD_LOGIC; SIGNAL MUX_0 : STD_LOGIC; SIGNAL MUX_1 : STD_LOGIC; SIGNAL MUX_2 : STD_LOGIC; SIGNAL MUX_3 : STD_LOGIC; SIGNAL L: STD_LOGIC_VECTOR(1 DOWNTO 0);
59 MLU - Architecture Body BEGIN A1<= NOT A WHEN (NEG_A='1') ELSE A; B1<= NOT B WHEN (NEG_B='1') ELSE B; Y <= NOT Y1 WHEN (NEG_Y='1') ELSE Y1;
MUX_0 <= A1 AND B1; MUX_1 <= A1 OR B1; MUX_2 <= A1 XOR B1; MUX_3 <= A1 XNOR B1;
L <= L1 & L0;
with (L) select Y1 <= MUX_0 WHEN "00", MUX_1 WHEN "01", MUX_2 WHEN "10", MUX_3 WHEN OTHERS;
END mlu_dataflow;
ECE 448 FPGA and ASIC Design with VHDL Modeling Common Combinational Logic Components Using Dataflow VHDL 61 ECE 448 FPGA and ASIC Design with VHDL Wires and Buses 62 Signals SIGNAL a : STD_LOGIC;
SIGNAL b : STD_LOGIC_VECTOR(7 DOWNTO 0); wire a bus b 1 8 63 Merging wires and buses SIGNAL a: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL b: STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL c: STD_LOGIC; SIGNAL d: STD_LOGIC_VECTOR(9 DOWNTO 0);
d <= a & b & c; 4 5 10 a b c d 64 Splitting buses SIGNAL a: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL b: STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL c: STD_LOGIC; SIGNAL d: STD_LOGIC_VECTOR(9 DOWNTO 0);
a <= d(9 downto 6); b <= d(5 downto 1); c <= d(0); 4 5 10 a b c d 65 ECE 448 FPGA and ASIC Design with VHDL Fixed Shifters & Rotators 66 Fixed Shift in VHDL A(3) A(2) A(1) A(0) 0 A(3) A(2) A(1) A>>1 SIGNAL A : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL AshiftR: STD_LOGIC_VECTOR(3 DOWNTO 0); AshiftR <= AshiftR A 67 Fixed Rotation in VHDL A(3) A(2) A(1) A(0) A(2) A(1) A(0) A(3) A<<<1 SIGNAL A : STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ArotL: STD_LOGIC_VECTOR(3 DOWNTO 0); ArotL <= ArotL A 68 ECE 448 FPGA and ASIC Design with VHDL Buffers 69 (b) Equivalent circuit (c) Truth table x f e (a) A tri-state buffer 0 0 1 1 0 1 0 1 Z Z 0 1 f e x x f e = 0 e = 1 x f Tri-state Buffer 70 x f e (b) x f e (a) x f e (c ) x f e (d) Four types of Tri-state Buffers 71 Tri-state Buffer example (1) LIBRARY ieee; USE ieee.std_logic_1164.all;
ENTITY tri_state IS PORT ( ena: IN STD_LOGIC; input: IN STD_LOGIC; output: OUT STD_LOGIC ); END tri_state;
72 Tri-state Buffer example (2)
ARCHITECTURE dataflow OF tri_state IS BEGIN output <= input WHEN (ena = 1) ELSE Z; END dataflow;
73 ECE 448 FPGA and ASIC Design with VHDL Multiplexers 74 2-to-1 Multiplexer (a) Graphical symbol (b) Truth table 0 1 f s w 0 w 1 f s w 0 w 1 0 1 75 VHDL code for a 2-to-1 Multiplexer LIBRARY ieee ; USE ieee.std_logic_1164.all ;
ENTITY mux2to1 IS PORT ( w0, w1, s : IN STD_LOGIC ; f : OUT STD_LOGIC ) ; END mux2to1 ;
ARCHITECTURE dataflow OF mux2to1 IS BEGIN f <= w0 WHEN s = '0' ELSE w1 ; END dataflow ; 76 Cascade of two multiplexers s1 w 3 w 1 0 1 s2 w 2 0 1 y 77 VHDL code for a cascade of two multiplexers LIBRARY ieee ; USE ieee.std_logic_1164.all ;
ENTITY mux_cascade IS PORT ( w1, w2, w3: IN STD_LOGIC ; s1, s2 : IN STD_LOGIC ; f : OUT STD_LOGIC ) ; END mux_cascade ;
ARCHITECTURE dataflow OF mux2to1 IS BEGIN f <= w1 WHEN s1 = 1' ELSE w2 WHEN s2 = 1 ELSE w3 ; END dataflow ; 78 f s 1 w 0 w 1 00 01 (b) Truth table w 0 w 1 s 0 w 2 w 3 10 11 0 0 1 1 1 0 1 f s 1 0 s 0 w 2 w 3 (a) Graphic symbol 4-to-1 Multiplexer 79 VHDL code for a 4-to-1 Multiplexer LIBRARY ieee ; USE ieee.std_logic_1164.all ;
ENTITY mux4to1 IS PORT ( w0, w1, w2, w3 : IN STD_LOGIC ; s : IN STD_LOGIC_VECTOR(1 DOWNTO 0) ; f : OUT STD_LOGIC ) ; END mux4to1 ;
ARCHITECTURE dataflow OF mux4to1 IS BEGIN WITH s SELECT f <= w0 WHEN "00", w1 WHEN "01", w2 WHEN "10", w3 WHEN OTHERS ; END dataflow ;
80 ECE 448 FPGA and ASIC Design with VHDL Decoders 81 2-to-4 Decoder 0 0 1 1 1 0 1 y 3 w 1 0 w 0 x x 1 1 0 1 1 En 0 0 1 0 0 y 2 0 1 0 0 0 y 1 1 0 0 0 0 y 0 0 0 0 1 0 w 1 En y 3 w 0 y 2 y 1 y 0 (a) Truth table (b) Graphical symbol 82 VHDL code for a 2-to-4 Decoder LIBRARY ieee ; USE ieee.std_logic_1164.all ;
ENTITY dec2to4 IS PORT ( w : IN STD_LOGIC_VECTOR(1 DOWNTO 0) ; En : IN STD_LOGIC ; y : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END dec2to4 ;
ARCHITECTURE dataflow OF dec2to4 IS SIGNAL Enw : STD_LOGIC_VECTOR(2 DOWNTO 0) ; BEGIN Enw <= En & w ; WITH Enw SELECT y <= 0001" WHEN "100", "0010" WHEN "101", "0100" WHEN "110", 1000" WHEN "111", "0000" WHEN OTHERS ; END dataflow ; 83 ECE 448 FPGA and ASIC Design with VHDL Encoders 84 Priority Encoder w 0 w 3 y 0 y 1 d 0 0 1 0 1 0 w 0 y 1 d y 0 1 1 0 1 1 1 1 z 1 x x 0 x w 1 0 1 x 0 x w 2 0 0 1 0 x w 3 0 0 0 0 1 z w 1 w 2 85 VHDL code for a Priority Encoder LIBRARY ieee ; USE ieee.std_logic_1164.all ;
ENTITY priority IS PORT ( w : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; y : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) ; z : OUT STD_LOGIC ) ; END priority ;
ARCHITECTURE dataflow OF priority IS BEGIN y <= "11" WHEN w(3) = '1' ELSE "10" WHEN w(2) = '1' ELSE "01" WHEN w(1) = '1' ELSE "00" ; z <= '0' WHEN w = "0000" ELSE '1' ; END dataflow ;