1 / 120

Outline

CPE 626 Advanced VLSI Design Lecture 3: VHDL Recapitulation Aleksandar Milenkovic http://www.ece.uah.edu/~milenka http://www.ece.uah.edu/~milenka/cpe626-04F/ milenka@ece.uah.edu Assistant Professor Electrical and Computer Engineering Dept. University of Alabama in Huntsville. Outline.

obert
Télécharger la présentation

Outline

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CPE 626 Advanced VLSI DesignLecture 3: VHDL Recapitulation Aleksandar Milenkovichttp://www.ece.uah.edu/~milenkahttp://www.ece.uah.edu/~milenka/cpe626-04F/milenka@ece.uah.eduAssistant ProfessorElectrical and Computer Engineering Dept. University of Alabama in Huntsville

  2. Outline • Introduction to VHDL • Modeling of Combinational Networks • Modeling of FFs • Delays • Modeling of FSMs • Wait Statements • VHDL Data Types • VHDL Operators • Functions, Procedures, Packages  A. Milenkovic

  3. Intro to VHDL • Technology trends • 1 billion transistor chip running at 20 GHz in 2007 • Need for Hardware Description Languages • Systems become more complex • Design at the gate and flip-flop level becomes very tedious and time consuming • HDLs allow • Design and debugging at a higher level before conversion to the gate and flip-flop level • Tools for synthesis do the conversion • VHDL, Verilog • VHDL – VHSIC Hardware Description Language  A. Milenkovic

  4. Intro to VHDL • Developed originally by DARPA • for specifying digital systems • International IEEE standard (IEEE 1076-1993) • Hardware Description, Simulation, Synthesis • Provides a mechanism for digital design and reusable design documentation • Support different description levels • Structural (specifying interconnections of the gates), • Dataflow (specifying logic equations), and • Behavioral (specifying behavior)  A. Milenkovic

  5. VHDL Description of Combinational Networks  A. Milenkovic

  6. Entity-Architecture Pair Full Adder Example  A. Milenkovic

  7. VHDL Program Structure  A. Milenkovic

  8. 4-bit Adder  A. Milenkovic

  9. 4-bit Adder (cont’d)  A. Milenkovic

  10. 4-bit Adder - Simulation  A. Milenkovic

  11. General form of process Modeling Flip-Flops Using VHDL Processes • Whenever one of the signals in the sensitivity list changes, the sequential statements are executed in sequence one time  A. Milenkovic

  12. D Flip-flop Model Bit values are enclosed in single quotes  A. Milenkovic

  13. JK Flip-Flop Model  A. Milenkovic

  14. Concurrent Statements vs. Process A, B, C, D are integers A=1, B=2, C=3, D=0 D changes to 4 at time 10 Simulation Results • time delta A B C D • 0 +0 0 1 2 0 • +0 1 2 3 4 (stat. 3 exe.) • 10 +1 1 2 4 4 (stat. 2 exe.) • +2 1 4 4 4 (stat. 1 exe.) • 10 +3 4 4 4 4 (no exec.)  A. Milenkovic

  15. Using Nested IFs and ELSEIFs  A. Milenkovic

  16. VHDL Models for a MUX Sel represents the integerequivalent of a 2-bit binary number with bits A and B If a MUX model is used inside a process, the MUX can be modeled using a CASE statement(cannot use a concurrent statement):  A. Milenkovic

  17. library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity SELECTOR is port ( A : in std_logic_vector(15 downto 0); SEL : in std_logic_vector( 3 downto 0); Y : out std_logic); end SELECTOR; architecture RTL1 of SELECTOR is begin p0 : process (A, SEL) begin if (SEL = "0000") then Y <= A(0); elsif (SEL = "0001") then Y <= A(1); elsif (SEL = "0010") then Y <= A(2); elsif (SEL = "0011") then Y <= A(3); elsif (SEL = "0100") then Y <= A(4); elsif (SEL = "0101") then Y <= A(5); elsif (SEL = "0110") then Y <= A(6); elsif (SEL = "0111") then Y <= A(7); elsif (SEL = "1000") then Y <= A(8); elsif (SEL = "1001") then Y <= A(9); elsif (SEL = "1010") then Y <= A(10); elsif (SEL = "1011") then Y <= A(11); elsif (SEL = "1100") then Y <= A(12); elsif (SEL = "1101") then Y <= A(13); elsif (SEL = "1110") then Y <= A(14); else Y <= A(15); end if; end process; end RTL1; MUX Models (1)  A. Milenkovic

  18. library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity SELECTOR is port ( A : in std_logic_vector(15 downto 0); SEL : in std_logic_vector( 3 downto 0); Y : out std_logic); end SELECTOR; architecture RTL3 of SELECTOR is begin with SEL select Y <= A(0) when "0000", A(1) when "0001", A(2) when "0010", A(3) when "0011", A(4) when "0100", A(5) when "0101", A(6) when "0110", A(7) when "0111", A(8) when "1000", A(9) when "1001", A(10) when "1010", A(11) when "1011", A(12) when "1100", A(13) when "1101", A(14) when "1110", A(15) when others; end RTL3; MUX Models (2)  A. Milenkovic

  19. library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity SELECTOR is port ( A : in std_logic_vector(15 downto 0); SEL : in std_logic_vector( 3 downto 0); Y : out std_logic); end SELECTOR; architecture RTL2 of SELECTOR is begin p1 : process (A, SEL) begin case SEL is when "0000" => Y <= A(0); when "0001" => Y <= A(1); when "0010" => Y <= A(2); when "0011" => Y <= A(3); when "0100" => Y <= A(4); when "0101" => Y <= A(5); when "0110" => Y <= A(6); when "0111" => Y <= A(7); when "1000" => Y <= A(8); when "1001" => Y <= A(9); when "1010" => Y <= A(10); when "1011" => Y <= A(11); when "1100" => Y <= A(12); when "1101" => Y <= A(13); when "1110" => Y <= A(14); when others => Y <= A(15); end case; end process; end RTL2; MUX Models (3)  A. Milenkovic

  20. library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity SELECTOR is port ( A : in std_logic_vector(15 downto 0); SEL : in std_logic_vector( 3 downto 0); Y : out std_logic); end SELECTOR; architecture RTL4 of SELECTOR is begin Y <= A(conv_integer(SEL)); end RTL4; MUX Models (4)  A. Milenkovic

  21. Compilation and Simulation of VHDL Code • Compiler (Analyzer) – checks the VHDL source code • does it conforms with VHDL syntax and semantic rules • are references to libraries correct • Intermediate form used by a simulator or by a synthesizer • Elaboration • create ports, allocate memory storage, create interconnections, ... • establish mechanism for executing of VHDL processes  A. Milenkovic

  22. Timing Model • VHDL uses the following simulation cycle to model the stimulus and response nature of digital hardware Start Simulation Delay Update Signals Execute Processes End Simulation  A. Milenkovic

  23. Delay Types • All VHDL signal assignment statements prescribe an amount of time that must transpire before the signal assumes its new value • This prescribed delay can be in one of three forms: • Transport -- prescribes propagation delay only • Inertial -- prescribes propagation delay and minimum input pulse width • Delta -- the default if no delay time is explicitly specified Input Output delay  A. Milenkovic

  24. Input Output Input Output 0 5 10 15 20 25 30 35 Transport Delay • Transport delay must be explicitly specified • I.e. keyword “TRANSPORT” must be used • Signal will assume its new value after specified delay -- TRANSPORT delay example Output <= TRANSPORT NOT Input AFTER 10 ns;  A. Milenkovic

  25. Input Input Output Output 0 5 10 15 20 25 30 35 Inertial Delay • Provides for specification propagation delay and input pulse width, i.e. ‘inertia’ of output: • Inertial delay is default and REJECT is optional: target <= [REJECT time_expression] INERTIAL waveform; Output <= NOT Input AFTER 10 ns; -- Propagation delay and minimum pulse width are 10ns  A. Milenkovic

  26. Input Output 0 5 10 15 20 25 30 35 Inertial Delay (cont.) • Example of gate with ‘inertia’ smaller than propagation delay • e.g. Inverter with propagation delay of 10ns which suppresses pulses shorter than 5ns • Note: the REJECT feature is new to VHDL 1076-1993 Output <= REJECT 5ns INERTIAL NOT Input AFTER 10ns;  A. Milenkovic

  27. Delta Delay • Default signal assignment propagation delay if no delay is explicitly prescribed • VHDL signal assignments do not take place immediately • Delta is an infinitesimal VHDL time unit so that all signal assignments can result in signals assuming their values at a future time • E.g. • Supports a model of concurrent VHDL process execution • Order in which processes are executed by simulator does not affect simulation output Output <= NOT Input; -- Output assumes new value in one delta cycle  A. Milenkovic

  28. Simulation Example  A. Milenkovic

  29. Modeling a Sequential Machine Mealy Machine for 8421 BCD to 8421 BCD + 3 bit serial converter How to model this in VHDL?  A. Milenkovic

  30. Modeling a Sequential Machine  A. Milenkovic

  31. Behavioral VHDL Model • Two processes: • the first represents the combinational network; • the second represents the state register  A. Milenkovic

  32. Simulation of the VHDL Model Simulation command file: Waveforms:  A. Milenkovic

  33. Dataflow VHDL Model  A. Milenkovic

  34. Structural Model Package bit_pack is a part of library BITLIB – includes gates, flip-flops, counters (See Appendix B for details)  A. Milenkovic

  35. Simulation of the Structural Model Simulation command file: Waveforms:  A. Milenkovic

  36. Wait Statements • ... an alternative to a sensitivity list • Note: a process cannot have both wait statement(s)and a sensitivity list • Generic form of a process with wait statement(s) • How wait statements work? • Execute seq. statement until a wait statement is encountered. • Wait until the specified condition is satisfied. • Then execute the next set of sequential statements until the next wait statement is encountered. • ... • When the end of the process is reached start over again at the beginning. process begin sequential-statements wait statement sequential-statements wait-statement ... end process;  A. Milenkovic

  37. Wait on until one of the signals in the sensitivity list changes Wait for waits until the time specified by the time expression has elapsed What is this:wait for 0 ns; Wait until the boolean expression is evaluated whenever one of the signals in the expression changes, and the process continues execution when the expression evaluates to TRUE Forms of Wait Statements wait on sensitivity-list; wait for time-expression; wait until boolean-expression;  A. Milenkovic

  38. Using Wait Statements (1)  A. Milenkovic

  39. Using Wait Statements (2)  A. Milenkovic

  40. Problem #1 entity not_another_prob is port (in1, in2: in bit; a: out bit); end not_another_prob; architecture oh_behave of not_another_prob is signal b, c, d, e, f: bit; begin L1: d <= not(in1); L2: c<= not(in2); L3: f <= (d and in2) ; L4: e <= (c and in1) ; L5: a <= not b; L6: b <= e or f; end oh_behave; • Using the labels, list the order in which the following signal assignments are evaluated if in2 changes from a '0' to a '1'. Assume in1 has been a '1' and in2 has been a '0' for a long time, and then at time t in2 changes from a '0' to a '1'.  A. Milenkovic

  41. Problem #2 • Under what conditions do the two assignments below result in the same behavior? Different behavior? Draw waveforms to support your answers. out <= reject 5 ns inertial (not a) after 20 ns; out <= transport (not a) after 20 ns;  A. Milenkovic

  42. Variables • What are they for: Local storage in processes, procedures, and functions • Declaring variables variable list_of_variable_names : type_name [ := initial value ]; • Variables must be declared within the process in which they are used and are local to the process • Note: exception to this is SHARED variables  A. Milenkovic

  43. Signals • Signals must be declared outside a process • Declaration form signal list_of_signal_names : type_name [ := initial value ]; • Declared in an architecture can be used anywhere within that architecture  A. Milenkovic

  44. Constants • Declaration form constant constant_name : type_name := constant_value; constant delay1 : time := 5 ns; • Constants declared at the start of an architecturecan be used anywhere within that architecture • Constants declared within a process are localto that process  A. Milenkovic

  45. Variables vs. Signals • Variable assignment statements • expression is evaluated and the variable is instantaneously updated (no delay, not even delta delay) variable_name := expression; • Signal assignment statement signal_name <= expression [after delay]; • expression is evaluated and the signal is scheduled to change after delay; if no delay is specified the signal is scheduled to be updated after a delta delay  A. Milenkovic

  46. Variables vs. Signals (cont’d) Process Using Variables Process Using Signals Sum = ? Sum = ?  A. Milenkovic

  47. Predefined VHDL Types • Variables, signals, and constants can have any one of the predefined VHDL types or they can have a user-defined type • Predefined Types • bit – {‘0’, ‘1’} • boolean – {TRUE, FALSE} • integer – [-231 - 1.. 231 – 1} • real – floating point number in range –1.0E38 to +1.0E38 • character – legal VHDL characters including lower- uppercase letters, digits, special characters, ... • time – an integer with units fs, ps, ns, us, ms, sec, min, or hr  A. Milenkovic

  48. User Defined Type • Common user-defined type is enumerated type state_type is (S0, S1, S2, S3, S4, S5); signal state : state_type := S1; • If no initialization, the default initialization is the leftmost element in the enumeration list (S0 in this example) • VHDL is strongly typed language =>signals and variables of different types cannot be mixed in the same assignment statement,and no automatic type conversion is performed  A. Milenkovic

  49. Arrays • Example type SHORT_WORD is array (15 downto 0) of bit; signal DATA_WORD : SHORT_WORD; variable ALT_WORD : SHORT_WORD := “0101010101010101”; constant ONE_WORD : SHORT_WORD := (others => ‘1’); • ALT_WORD(0) – rightmost bit • ALT_WORD(5 downto 0) – low order 6 bits • General form type arrayTypeName is array index_range of element_type; signal arrayName : arrayTypeName [:=InitialValues];  A. Milenkovic

  50. Arrays (cont’d) • Multidimensional arrays type matrix4x3 is array (1 to 4, 1 to 3) of integer; variable matrixA: matrix4x3 := ((1,2,3), (4,5,6), (7,8,9), (10,11,12)); • matrixA(3, 2) = ? • Unconstrained array type type intvec is array (natural range<>) of integer; type matrix is array (natural range<>,natural range<>) of integer; • range must be specified when the array object is declared signal intvec5 : intvec(1 to 5) := (3,2,6,8,1);  A. Milenkovic

More Related