Presentation is loading. Please wait.

Presentation is loading. Please wait.

George Mason University ECE 448 – FPGA and ASIC Design with VHDL Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448.

Similar presentations


Presentation on theme: "George Mason University ECE 448 – FPGA and ASIC Design with VHDL Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448."— Presentation transcript:

1 George Mason University ECE 448 – FPGA and ASIC Design with VHDL Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 Lecture 3

2 2ECE 448 – FPGA and ASIC Design with VHDL Required reading S. Brown and Z. Vranesic, Fundamentals of Digital Logic with VHDL Design Chapter 6, Combinational-Circuit Building Blocks Chapter 5.5, Design of Arithmetic Circuits Using CAD Tools P. Chu, FPGA Prototyping by VHDL Examples Chapter 3, RT-level combinational circuit

3 3ECE 448 – FPGA and ASIC Design with VHDL VHDL Design Styles

4 4ECE 448 – FPGA and ASIC Design with VHDL 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 5ECE 448 – FPGA and ASIC Design with VHDL Synthesizable VHDL Dataflow VHDL Design Style VHDL code synthesizable VHDL code synthesizable Dataflow VHDL Design Style

6 6ECE 448 – FPGA and ASIC Design with VHDL 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

7 7ECE 448 – FPGA and ASIC Design with VHDL Modeling Wires and Buses

8 8ECE 448 – FPGA and ASIC Design with VHDL Signals SIGNAL a : STD_LOGIC; SIGNAL b : STD_LOGIC_VECTOR(7 DOWNTO 0); wire a bus b 1 8

9 9ECE 448 – FPGA and ASIC Design with VHDL 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

10 ECE 448 – FPGA and ASIC Design with VHDL 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

11 11ECE 448 – FPGA and ASIC Design with VHDL Combinational-Circuit Building Blocks

12 12ECE 448 – FPGA and ASIC Design with VHDL Fixed Shifters & Rotators

13 13ECE 448 – FPGA and ASIC Design with VHDL 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

14 14ECE 448 – FPGA and ASIC Design with VHDL 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

15 15ECE 448 – FPGA and ASIC Design with VHDL Gates

16 16ECE 448 – FPGA and ASIC Design with VHDL Basic Gates – AND, OR, NOT

17 17ECE 448 – FPGA and ASIC Design with VHDL Basic Gates – NAND, NOR

18 18ECE 448 – FPGA and ASIC Design with VHDL DeMorgan’s Theorem and other symbols for NAND, NOR

19 19ECE 448 – FPGA and ASIC Design with VHDL Basic Gates – XOR (b) Graphical symbol(a) Truth table 0 0 1 1 0 1 0 1 0 1 1 0 x 1 x 2 x 1 x 2 fx 1 x 2  = fx 1 x 2  = (c) Sum-of-products implementation fx 1 x 2  = x 1 x 2

20 20ECE 448 – FPGA and ASIC Design with VHDL Basic Gates – XNOR (b) Graphical symbol(a) Truth table 0 0 1 1 0 1 0 1 1 0 0 1 x 1 x 2 x 1 x 2 fx 1 x 2  = fx 1 x 2  = (c) Sum-of-products implementation fx 1 x 2  = x 1 x 2 x 1 x 2 =.

21 21ECE 448 – FPGA and ASIC Design with VHDL Data-flow VHDL: Example x y cin s cout

22 22ECE 448 – FPGA and ASIC Design with VHDL 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 ;

23 23ECE 448 – FPGA and ASIC Design with VHDL 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 ;

24 24ECE 448 – FPGA and ASIC Design with VHDL 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

25 25ECE 448 – FPGA and ASIC Design with VHDL 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

26 26ECE 448 – FPGA and ASIC Design with VHDL Multiplexers

27 27ECE 448 – FPGA and ASIC Design with VHDL 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

28 28ECE 448 – FPGA and ASIC Design with VHDL VHDL code for a 2-to-1 Multiplexer LIBRARY ieee ; USE ieee.std_logic_1164.all ; ENTITY mux2to1 IS PORT (w0, w1, s : INSTD_LOGIC ; f : OUTSTD_LOGIC ) ; END mux2to1 ; ARCHITECTURE dataflow OF mux2to1 IS BEGIN f <= w0 WHEN s = '0' ELSE w1 ; END dataflow ;

29 29ECE 448 – FPGA and ASIC Design with VHDL Cascade of two multiplexers s1 w 3 w 1 0 1 s2 w 2 0 1 y

30 30ECE 448 – FPGA and ASIC Design with VHDL 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 : OUTSTD_LOGIC ) ; END mux_cascade ; ARCHITECTURE dataflow OF mux2to1 IS BEGIN f <= w1 WHEN s1 = ‘1' ELSE w2 WHEN s2 = ‘1’ ELSE w3 ; END dataflow ;

31 31ECE 448 – FPGA and ASIC Design with VHDL Operators Relational operators Logic and relational operators precedence = /= >= not = /= >= and or nand nor xor xnor Highest Lowest

32 32ECE 448 – FPGA and ASIC Design with VHDL 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

33 33ECE 448 – FPGA and ASIC Design with VHDL VHDL operators

34 34ECE 448 – FPGA and ASIC Design with VHDL 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 fs 1 0 s 0 w 2 w 3 (a) Graphic symbol 4-to-1 Multiplexer

35 35ECE 448 – FPGA and ASIC Design with VHDL 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 ;

36 36ECE 448 – FPGA and ASIC Design with VHDL Decoders

37 37ECE 448 – FPGA and ASIC Design with VHDL 2-to-4 Decoder 0 0 1 1 1 0 1 y 3 w 1 0 w 0 xx 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 y 3 w 0 y 2 y 1 y 0 (a) Truth table(b) Graphical symbol

38 38ECE 448 – FPGA and ASIC Design with VHDL 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 ;

39 39ECE 448 – FPGA and ASIC Design with VHDL Adders

40 40ECE 448 – FPGA and ASIC Design with VHDL 16-bit Unsigned Adder 16 XY CinCout S

41 41ECE 448 – FPGA and ASIC Design with VHDL Arithmetic Operators in VHDL (1) To use basic arithmetic operations involving std_logic_vectors you need to include the following library packages: LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; or USE ieee.std_logic_signed.all;

42 42ECE 448 – FPGA and ASIC Design with VHDL Arithmetic Operators in VHDL (2) You can use standard + and - operators to perform addition and subtraction: signal A : STD_LOGIC_VECTOR(3 downto 0); signal B : STD_LOGIC_VECTOR(3 downto 0); signal C : STD_LOGIC_VECTOR(3 downto 0); …… C <= A + B;

43 43ECE 448 – FPGA and ASIC Design with VHDL VHDL code for a 16-bit Unsigned Adder LIBRARY ieee ; USE ieee.std_logic_1164.all ; USE ieee.std_logic_unsigned.all ; ENTITY adder16 IS PORT ( Cin : IN STD_LOGIC ; X, Y : IN STD_LOGIC_VECTOR(15 DOWNTO 0) ; S : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ; Cout: OUT STD_LOGIC ) ; END adder16 ; ARCHITECTURE dataflow OF adder16 IS SIGNAL Sum : STD_LOGIC_VECTOR(16 DOWNTO 0) ; BEGIN Sum <= ('0' & X) + Y + Cin ; S <= Sum(15 DOWNTO 0) ; Cout <= Sum(16) ; END dataflow ;

44 44ECE 448 – FPGA and ASIC Design with VHDL Comparators

45 45ECE 448 – FPGA and ASIC Design with VHDL 4-bit Number Comparator 4 4 A B AeqB AgtB AltB

46 46ECE 448 – FPGA and ASIC Design with VHDL VHDL code for a 4-bit Unsigned Number Comparator LIBRARY ieee ; USE ieee.std_logic_1164.all ; USE ieee.std_logic_unsigned.all ; ENTITY compare IS PORT (A, B: IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; AeqB, AgtB, AltB: OUT STD_LOGIC ) ; END compare ; ARCHITECTURE dataflow OF compare IS BEGIN AeqB <='1' WHEN A = B ELSE '0' ; AgtB B ELSE '0' ; AltB <= '1' WHEN A < B ELSE '0' ; END dataflow ;

47 47ECE 448 – FPGA and ASIC Design with VHDL VHDL code for a 4-bit Signed Number Comparator LIBRARY ieee ; USE ieee.std_logic_1164.all ; USE ieee.std_logic_signed.all ; ENTITY compare IS PORT (A, B: IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; AeqB, AgtB, AltB: OUT STD_LOGIC ) ; END compare ; ARCHITECTURE dataflow OF compare IS BEGIN AeqB <='1' WHEN A = B ELSE '0' ; AgtB B ELSE '0' ; AltB <= '1' WHEN A < B ELSE '0' ; END dataflow ;

48 48ECE 448 – FPGA and ASIC Design with VHDL Buffers

49 49ECE 448 – FPGA and ASIC Design with VHDL (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 ex x f e = 0 e = 1 x f Tri-state Buffer

50 50ECE 448 – FPGA and ASIC Design with VHDL Four types of Tri-state Buffers

51 51ECE 448 – FPGA and ASIC Design with VHDL 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;

52 52ECE 448 – FPGA and ASIC Design with VHDL Tri-state Buffer – example (2) ARCHITECTURE dataflow OF tri_state IS BEGIN output <= input WHEN (ena = ‘1’) ELSE ‘Z’; END dataflow;

53 53ECE 448 – FPGA and ASIC Design with VHDL Encoders

54 54ECE 448 – FPGA and ASIC Design with VHDL Priority Encoder w 0 w 3 y 0 y 1 d 0 0 1 0 1 0 w 0 y 1 d y 0 11 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

55 55ECE 448 – FPGA and ASIC Design with VHDL 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 ;

56 56ECE 448 – FPGA and ASIC Design with VHDL Describing Combinational Logic Using Dataflow Design Style

57 57ECE 448 – FPGA and ASIC Design with VHDL MLU Example

58 MLU Block Diagram B A NEG_A NEG_B IN0 IN1 IN2 IN3 OUTPUT SEL1 SEL0 MUX_4_1 L0L1 NEG_Y Y Y1 A1 B1 MUX_0 MUX_1 MUX_2 MUX_3 0101 0101 0101

59 59ECE 448 – FPGA and ASIC Design with VHDL 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;

60 60ECE 448 – FPGA and ASIC Design with VHDL 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);

61 61ECE 448 – FPGA and ASIC Design with VHDL 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;

62 62ECE 448 – FPGA and ASIC Design with VHDL Logic Implied Most Often by Conditional and Selected Concurrent Signal Assignments

63 63ECE 448 – FPGA and ASIC Design with VHDL 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

64 64ECE 448 – FPGA and ASIC Design with VHDL Conditional concurrent signal assignment target_signal <= value1 when condition1 else value2 when condition2 else... valueN-1 when conditionN-1 else valueN; When - Else

65 65ECE 448 – FPGA and ASIC Design with VHDL 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 … 0101 0101 0101

66 66ECE 448 – FPGA and ASIC Design with VHDL 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

67 67ECE 448 – FPGA and ASIC Design with VHDL 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

68 68ECE 448 – FPGA and ASIC Design with VHDL 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

69 69ECE 448 – FPGA and ASIC Design with VHDL Allowed formats of choices_k WHEN value WHEN value_1 | value_2 |.... | value N WHEN OTHERS

70 70ECE 448 – FPGA and ASIC Design with VHDL Allowed formats of choice_k - example WITH sel SELECT y <= a WHEN "000", c WHEN "001" | "111", d WHEN OTHERS;


Download ppt "George Mason University ECE 448 – FPGA and ASIC Design with VHDL Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448."

Similar presentations


Ads by Google