1 / 38

ELEN 468 Advanced Logic Design

ELEN 468 Advanced Logic Design. Lecture 19 VHDL. Introduction. VHDL V HSIC H ardware D escription L anguage VHSIC V ery H igh S peed I ntegrated C ircuit. Example. -- eqcomp4 is a four bit equality comparator -- Entity declaration entity eqcomp4 is

blaze
Télécharger la présentation

ELEN 468 Advanced Logic Design

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. ELEN 468Advanced Logic Design Lecture 19 VHDL ELEN 468 Lecture 19

  2. Introduction • VHDL • VHSIC Hardware Description Language • VHSIC • Very High Speed Integrated Circuit ELEN 468 Lecture 19

  3. Example -- eqcomp4 is a four bit equality comparator -- Entity declaration entity eqcomp4 is port ( a, b: inbit_vector( 3 downto 0 ); equals: outbit ); -- equal is active high end eqcomp4; -- Architecture body architecture dataflow of eqcomp4 is begin equals <= ‘1’ when ( a = b ) else ‘0’; end dataflow; ELEN 468 Lecture 19

  4. Entity Declarations • Describe I/O and parameterized values • Port declaration • Name • Mode • in • out • buffer: for internal feedback • inout • Data type • Boolean, bit, bit_vector, integer, std_logic … ELEN 468 Lecture 19

  5. Example of Entity Declaration library ieee; use ieee.std_logic_1164.all; entity add4 is port ( a, b: instd_logic_vector( 3 downto 0 ); ci: instd_logic; sum: outstd_logic_vector( 3 downto 0 ); co: outstd_logic ); end add4; ELEN 468 Lecture 19

  6. Architecture Bodies • Always associated with an entity declaration • Description styles • Behavioral • Dataflow • Structural ELEN 468 Lecture 19

  7. Behavioral Descriptions library ieee; use ieee.std_logic_1164.all; entity eqcomp4 is port ( a, b: instd_logic_vector( 3 downto 0 ); equals: outstd_logic ); end eqcomp4; architecture behavioral of eqcomp4 is begin comp: process ( a, b ) -- sensitivity list begin if a = b then equals <= ‘1’; else equals <= ‘0’; -- sequential assignment endif endprocess comp; end behavioral; ELEN 468 Lecture 19

  8. Dataflow Descriptions library ieee; use ieee.std_logic_1164.all; entity eqcomp4 is port ( a, b: instd_logic_vector( 3 downto 0 ); equals: outstd_logic ); end eqcomp4; architecture dataflow of eqcomp4 is begin equals <= ‘1’ when ( a = b ) else ‘0’; end dataflow; -- No process -- Concurrent assignment ELEN 468 Lecture 19

  9. Structural Descriptions library ieee; use ieee.std_logic_1164.all; entity eqcomp4 is port ( a, b: instd_logic_vector( 3 downto 0 ); equals: out std_logic ); end eqcomp4; use work.gatespkg.all; architecture struct of eqcomp4 is signal x : std_logic_vector( 0 to 3); begin u0: xnor2 port map ( a(0), b(0), x(0) ); -- component instantiation u1: xnor2 port map ( a(1), b(1), x(1) ); u2: xnor2 port map ( a(2), b(2), x(2) ); u3: xnor2 port map ( a(3), b(3), x(3) ); u4: and4 port map ( x(0), x(1), x(2), x(3), equals ); end struct; ELEN 468 Lecture 19

  10. Identifiers • Made up of alphabetic, numeric, and/or underscore • The first character must be a letter • The last character cannot be an underscore • Two underscores in succession are not allowed • Uppercase and lowercase are equivalent ELEN 468 Lecture 19

  11. Data Objects • Constants • Signals • Similar to “wire” in Verilog • Variables • Only in processes and subprograms • Usually applied as loop or tmp variable • Files constant width: integer := 8; signal count: bit_vector( 3 downto 0); ELEN 468 Lecture 19

  12. Data Types • Scalar types • Composite types ELEN 468 Lecture 19

  13. Scalar Types • Enumeration • Integer • Floating • Physical ELEN 468 Lecture 19

  14. Enumeration Types type states is ( idle, waiting, read, write ); signal current_state: states; type bit is ( ‘0’, ‘1’ ); type std_ulogic is ( ‘U’, -- Uninitialized ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, -- Weak unknown ‘L’, -- Weak 0 ‘H’, -- Weak 1 ‘-’, -- Don’t care ); ELEN 468 Lecture 19

  15. Integer and Floating Types • VHDL supports • Integers from –(231-1) to (231-1) • Floating number from –1E38 to 1E38 variable a: integer range –255 to 255; ELEN 468 Lecture 19

  16. Physical Types type time is range –2147483647 to 2147483647 units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 ns; sec = 1000 ms; min = 60 sec; hr = 60 min; end units; -- time is a predefined type -- physical types are mostly for simulations ELEN 468 Lecture 19

  17. Composite Types • Array • Record • Has multiple elements of different types type bit_vector isarray ( natural range <> ) of bit); ELEN 468 Lecture 19

  18. Two Dimensional Array type table8x4 is array ( 0 to 7, 0 to 3 ) of bit; constant exclusive_or: table8x4 := ( “000_0”, “001_1”, “010_1”, “011_0”, “100_1”, “101_0”, “110_0”, “111_1” ); ELEN 468 Lecture 19

  19. Strongly Typed • VHDL is a strongly typed language • If aand b are integer variables, following assignment is not allowed a <= b + ‘1’; since ‘1’ is a bit, unless ‘+’ is overloaded ELEN 468 Lecture 19

  20. Concurrent Statements • Lie outside of a process • Signal assignment • Concurrent • Selective (with-select-when) • Conditional (when-else) • Generate ELEN 468 Lecture 19

  21. Concurrent Signal Assignment entity my_design is port ( mem_op, io_op: in bit; read, write: in bit; memr, memw: out bit; io_rd, io_wr: out bit ); end my_design; architecture control of my_design is begin memw <= mem_op and write; memr <= mem_op and read; io_wr <= io_op and write; io_rd <= io_op and read; end control ELEN 468 Lecture 19

  22. Selective Signal Assignment entity mux is port ( a, b, c, d: inbit_vector( 3 downto 0 ); s: inbit_vector( 1 downto 0 ); x: outbit_vector( 3 downto 0 ) ); end mux; architecture archmux of mux is begin with s select x <= a when “00”, b when “01”, c when “10”, d when others; end archmux; ELEN 468 Lecture 19

  23. Conditional Signal Assignment entity mux is port ( a, b, c, d: inbit_vector( 3 downto 0 ); s: inbit_vector( 1 downto 0 ); x: outbit_vector( 3 downto 0 ) ); end mux; architecture archmux of mux is begin x <= a when ( s = “00” ) else b when ( s = “01” ) else c when ( s = “10” ) else d; end archmux; ELEN 468 Lecture 19

  24. Component Instantiation and Generate Statement architecture RTL of SHIFT is component DFF port ( rst, clk, d: inbit; q: outbit ); end component; signal T: bit_vector( 8 downto 0 ); begin T(8) <= SI; SO <= T(0); g0: for i in 7 downto 0 generate-- variable i is implicitly declared allbit: DFF port map ( rst=>rst, clk=>clk, d=>T(i+1), q=>T(i)); end generate; end RTL; ELEN 468 Lecture 19

  25. Sequential Statements • In a process, function or procedure • if-then-else • when-else ELEN 468 Lecture 19

  26. if-then-else … if ( condition1 ) then x <= value1; elsif ( condition2 ) then x <= value2; else x <= value3; end if; ELEN 468 Lecture 19

  27. case-when … architecture design of test_case is begin process ( address ) begin case address is when “001” => decode <= X”11”; -- X indicates hexadecimal when “111” => decode <= X”42”; when “010” => decode <= X”44”; when “101” => decode <= X”88”; when others => decode <= X”00”; end case; end process; end design; ELEN 468 Lecture 19

  28. Loop … p0: process ( A ) variable sum, i : integer; begin sum := 0; loop1 : for i in 0 to 9 loop exit loop1 when A(i) > 20; next when A(i) > 10; sum := sum + A(i); end loop loop1 end process ELEN 468 Lecture 19

  29. D Flip-Flop library ieee; use ieee.std_logic_1164.all; entity dff is port ( d, clk, rst: instd_logic; q: outstd_logic ); end dff; architecture behavior of dff is begin process ( clk, rst ) begin if rst = ‘1’ then q <= ‘0’; elsif ( clk’event and clk = ‘1’ ) then q <= d; -- ‘event is an attribute end if; end process; end behavior ELEN 468 Lecture 19

  30. wait-until library ieee; use ieee.std_logic_1164.all; entity dff is port ( d, clk, rst: instd_logic; q: outstd_logic ); end dff; architecture behavior of dff is begin process ( clk, rst ) begin if rst = ‘1’ then q <= ‘0’; elsewait until ( clk = ‘1’ ) q <= d; end if; end process; end behavior ELEN 468 Lecture 19

  31. Functions function bl2bit ( a: BOOLEAN ) return BIT is begin if a then return ‘1’; elsereturn ‘0’; end if end bl2bit; ELEN 468 Lecture 19

  32. Using Functions entity full_add is port ( a, b, carry_in: inbit; sum, carry_out: outbit ); end full_add; architecture fall_add of full_add is function majority( a, b, c: bit ) return bit is begin return ( ( a and b ) or ( a and c ) or ( b and c ) ); end majority; begin sum <= a xor b xor carry_in; carry_out <= majority( a, b, carry_in ); end; ELEN 468 Lecture 19

  33. Procedures procedure dff ( signal d: bit_vector; signal clk, rst: bit; signal q: outbit_vector ) is begin if rst = ‘1’ then q <= ( others => ‘0’ ); elsif clk’event and clk = ‘1’ then q <= d; end if; end procedure; ELEN 468 Lecture 19

  34. Packages • Similar to library • A design unit whose type, component, function and other declarations can be visible to outside • Consists of • Package declaration • Package body (optional) • Made visible through “use” use library_name.package_name.item; use work.std_arith.all; • Some vendors provide a default work library ELEN 468 Lecture 19

  35. Declare Types in Package package STANDARD is type BOOLEAN is ( FALSE, TRUE ); type BIT is ( ‘0’, ‘1’ ); type INTEGER is range -2147483648 to +2147483647; … end STANDARD; ELEN 468 Lecture 19

  36. Define Procedure in Package package myflop is procedure dff ( signal d: bit_vector; signal clk, rst: bit; signal q: outbit_vector ); end myflop; package body myflop is procedure dff ( signal d: bit_vector; signal clk, rst: bit; signal q: outbit_vector ) is begin if rst = ‘1’ then q <= ( others => ‘0’ ); elsif clk’eventand clk = ‘1’ then q <= d; end if; end procedure; end myflop; ELEN 468 Lecture 19

  37. Using Procedure entity flop8 is port ( clk, rst: inbit; data_in: inbit_vector( 7 downto 0 ); data: outbit_vector( 7 downto 0 ) ); end flop8; use work.myflop.all; architecture archflop8 of flop8 is begin dff( data_in, clk, rst, data ); end archflop8; ELEN 468 Lecture 19

  38. Generics entity dff is generic ( size: integer := 2 ) port ( clk, rst: inbit; d: inbit_vector( size-1 downto 0 ); q: outbit_vector( size-1 downto 0 ) ); end dff; architecture behavior of dff is … end behavior … u1: dff generic map(8) port map( myclk, myrst, data, output ); … ELEN 468 Lecture 19

More Related