第三章 硬件描述语言 vhdl

Click here to load reader

Upload: waylon

Post on 26-Jan-2016

160 views

Category:

Documents


2 download

DESCRIPTION

第三章 硬件描述语言 VHDL. 3.1 概述 3.2 VHDL 语言设计单元的基本结构 3.3 VHDL 语言的语言要素 3.4 VHDL 语言的描述语句 3.5 VHDL 语言的库、程序包及配置 3.6 有限状态机设计技术. 3.1 硬件描述语言与 VHDL. HDL: Hardware Description Language VHDL── VHSIC Hardware Description Language ┖─Very High Speed Integrated Circuit - PowerPoint PPT Presentation

TRANSCRIPT

  • VHDL3.1 3.2 VHDL 3.3 VHDL3.4 VHDL3.5 VHDL3.6

  • 3.1 VHDLHDL: Hardware Description LanguageVHDL VHSIC Hardware Description Language Very High Speed Integrated CircuitIEEEIEEE std 1076-1987, 1076-1993, 2 VHDL-AMS ( AMS -- Analog and Mixed Signal )

  • VHDL: C CSystemC, SpecC RTL: AHPL, DDL, CDL LDL: GFHL, ndl, : Splice: Spice: CIF, LEF, DEFVHDLVERILOGEDIFVHDL-AMS

  • 3.2 VHDL 3.2.1 1+ Entity; Architecture 2 1 1 EntityArchitectures

  • 3.1 1. entity)entity Half_Adder is port ( X: in bit ; Y: in Bit ; Sum : out bit ; Carry : Out bit) ; end Half_adder;

  • Architecture A1 of Half_Adder isBeginProcess(x,y) begin if x=0 and y=0 then sum
  • 3. A2Architecture A2 of Half_Adder is component XOR2 port ( I1, I2: in BIT; Out1: out BIT); end component; component AND2 port ( I1, I2: BIT; Out1: out BIT); end component;begin A: XOR2 port map (X, Y, Sum); B: AND2 port map (X, Y, Carry);end A2;

  • 4. A3Architecture A3 of Half_Adder is begin Sum
  • 1. VHDL Entity Architecture Configuration LibraryPackage 3.2.2 VHDL

  • 2. VHDL

  • 3. 3.2VHDL D3 D2 D1 D0 Y S1 S0

  • VHDL LIBRARY IEEE IEEE USE IEEE.STD_LOGIC_1164.ALL -- USE IEEE.STD_LOGIC_ARITH.ALL USE IEEE.STD_LOGIC_UNSIGNED.ALL ENTITY mux41 IS -- PORT ( S1, S0: IN STD_LOGIC -- D3, D2, D1, D0: IN STD_LOGIC Y: OUT STD_LOGIC -- ) END mux41 ARCHITECTURE behaveior OF mux41 IS -- BEGIN -- Y
  • 4. VHDL VHDL VHDL ENTITYEND ARCHITECTUREEND

  • 3.2.3 entity is [] [] end 1.

  • 2. VHDL

  • Port ({} {} )generic (=

  • IN OUTINOUTBUFFER

  • (generic)

  • entity mux is port(in1,in2,sel: in bit ; output : out bit ); generic (delay : time:=5 ns); end mux ;

  • 3.2.4 VHDL VHDL

  • 3.2.4 VHDL

  • 3.2.4 VHDL

  • 1. ARCHITECTURE OF IS [] BEGIN [] END [ARCHITECTURE] [] 3.2.4 VHDL

  • 2. SIGNAL TYPE CONSTANT COMPONENT FUNCTION PROCEDURE 3.2.4 VHDL

  • 3. 3.2.4 VHDL

  • 3. BLOCK PROCESS SIGNAL 3.2.4 VHDL

  • 3. PROCEDUREFUNCTION COMPONENT 3.2.4 VHDL

  • architecture behaviour of mux is begin if sel=1then output
  • 3.3 VHDL3.3.1 VHDL3.3.2 VHDL3.3.3

  • type is

    type byte is range 127 to 127;type num is integer range 0 to 9;type resistance is range 1 to 10e8 units ohm; kohm=1000 ohm; end units3.3.1 VHDL

  • 210E6 , 16#D2# 357.6, 8#43.2#e+5 a sd89 B110111 , O712 , X8BD 1 kohm , 5 ns

  • type is (......;

    type boolean is (false,true); type two_level_logic is (0,1);

  • type is record ........ end record;type pctbus is record adder : std_logic_vector(31 downto 0); data : std_logic_vector (0 to 31); end record;

  • type is array of type word is array (15 downto 1) of bit

    type is array rangeof type bit_vector is array (natural range) of bit; type string is array (positive range) of character;

  • subtype is subtype lower_letter is character range a to z; subtype register is bit_vector (0 to 7); subtype ascii is character;

  • STANDARDVHDL() 2. VHDL

  • 1BOOLEAN FALSETRUE IF A>BA>BTRUEFALSE TYPE BOOLEAN IS FALSETRUE 2. VHDL

  • 2BIT 01 TYPE BIT IS 01 2. VHDL

  • 3BIT_VECTOR TYPE BIT VECTOR IS ARRAY (NATURAL RANGE < >) OF BIT 1011X00EA SIGNAL b: BIT VECTOR0 TO 7 bb(0)~b(7)b(0)b(7) 2. VHDL

  • 4CHARACTER TYPE CHARACTER ISASCII ASCIIXy63 ASCII 2. VHDL

  • 5STRING TYPE STRING IS ARRAY(POSITIVE RANGE < >) OF CHARACTER A BOY.10101011 2. VHDL

  • 6INTEGER TYPE INTEGER IS RANGE -2147483647 TO +2147483647 32-(231-1)~+(231-1) -2147483647 ~ +2147483647 1510E316#D5#2#11011010#8#653# 2. VHDL

  • 7POSITIVE SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGERHIGH 0 321~(231-1) 1~2147483647 INTEGERHIGH, 231-1 2. VHDL

  • 8NATURAL SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGERHIGH 0 2. VHDL

  • 9REAL TYPE REAL IS RANGE -1.0E38 TO +1.0E38 -1.0E+38 ~ +1.0E+38 -2.5-1.0E8 2. VHDL

  • 10TIME TYPE TIME IS RANGE 2147483647 TO 2147483647 55 ms20 ns 2. VHDL

  • 10TIME units fs --10-15S ps=1000fs --ns=1000ps --us=1000ns --ms=1000us --sec=1000ms--min=60sec --hr=60min -- END units 2. VHDL

  • 11SEVERITY_LEVEL TYPE severity_level ISnotewarningerrorfailure NOTEWARNING ERRORFAILURE 4 2. VHDL

  • 3. IEEE IEEESTD_LOGIC_1164 STD_LOGIC STD_LOGIC_VECTOR IEEESTD_LOGIC_1164 LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL

  • 1STD_LOGIC IEEE11649BIT STD_LOGIC9 U--X-- 0--0 1--1 Z-- W-- L--0 H--1 --- TYPE STD LOGIC ISUX01Z WLH- 3. IEEE

  • 2STD_LOGIC_VECTOR STD_LOGIC STD_LOGIC TYPE STD LOGIC VECTOR IS ARRAYNATURAL RANGE< >OF STD LOGIC 3. IEEE

  • 4. IEEESTD_LOGIC_ARITHIEEE UNSIGNED SIGNED IEEESTD_LOGIC_ARITH LIBRARY IEEE USE IEEE.STD_LOGIC_ARITH.ALL TYPE UNSIGNED IS ARRAYNATURAL RANGE< >OF STD LOGIC TYPE SIGNED IS ARRAYNATURAL RANGE< >OF STD LOGIC

  • STD_LOGIC SIGNEDINTEGER SIGNAL DATA: UNSIGNED( 3 DOWNTO 0) DATA
  • VARIABLE DATA1,DATA2: SIGNED (3 DOWNTO 0) DATA1
  • 3.3.2 VHDL VHDL VHDL

  • 1. ()

  • 1. BITBOOLEANSTD_LOGICBIT_VECTORSTD_LOGIC_VECTOR

    ANDORXOR NOT Y1

  • 2.

  • 3. BOOLEANTRUEFALSE

  • 4. +- (+) (-)

    + -

  • 5. VHDL93VHDL87

  • 5. BIT_VECTORSTD_LOGIC_VECTORBITBOOLEAN X
  • : SLLSLLA2A1A00 SRL SRL0A3A2A1 5.

  • : SLASLAA2A1A0A0 SRASRAA3A3A2A1 5.

  • : ROLROLA2A1A0A3 ROR RORA0A3A2A1 5.

  • 6.

  • 3.3.3 VHDL VHDL

    VHDL

  • 3.3.3 VHDL

  • EVENTTRUEFALSE 1. CLK CLKEVENTCLK CLKEVENT AND CLK=1CLK CLKEVENT AND CLK=0CLK

  • IEEESTD_LOGIC_1164 1. RISING_EDGE(CLK) CLKEVENT AND CLK=1 FALLING_EDGE(CLK) CLKEVENT AND CLK=0

  • () LEFT()RIGHT()HIGH()LOW() 2. num190-- H1 = 9-- H2 = 0-- H3 = 9-- H4 = 0 TYPE num1 IS INTEGER RANGE 9 DOWNTO 0 VARIABLE H1, H2, H3, H4: INTEGER H1: = num1LEFT H2: = num1RIGTH H3: = num1HIGH H4: = num1LOW

  • 3. -- WTH = 16 TYPE num2 IS ARRAY0 TO 15 OF BIT VARIABLE WTH: INTEGER WTH: = num2LENGTH

  • 4. RANGEREVERSE_RANGE data_bus SIGNAL data_bus: STD_LOGIC_VECTOR15 DOWNTO 0 data_busdata_busRANGE=15 DOWNTO 0

  • 4. VARIABLE byte: BIT_VECTOR7 DOWNTO 0 bity byteLEFT=7byteRIGHT=0 byteHIGH=7byteLOW=0 byteLENGTH=8 byteRANGE=7 DOWNTO 0 byteREVERSE_RANGE=0 TO 7

  • 3.3.3 VHDL constant =

    constant vcc:real:=5.0; constant delay:time:=100 ns; constant fbus:bit_vector:=0101;

  • variable =variable x,y :integer ; variable count:integer range 0 to 255:=10 ; tmp3:=tmp1 after 5 ns

  • signal =: signal sys_clk:bit=0; signal ground:bit:=0;

  • =, ( ) =

  • 4.5.2 LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL USE IEEE.STD_LOGIC_UNSIGNED.ALL ENTITY adder8 IS PORT ( ci: IN STD_LOGIC a, b: IN STD_LOGIC_VECTOR( 7 DOWNTO 0 ) s: OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 ) co: OUT STD_LOGIC ) END adder8 abcisco

  • ARCHITECTURE behavior OF adder8 IS SIGNAL ss: STD_LOGIC_VECTOR ( 8 DOWNTO 0 ) SIGNAL aa, bb: STD_LOGIC_VECTOR ( 8 DOWNTO 0 ) BEGIN aa
  • 3.4 VHDL() ()

  • []process [] begin [] end process;

  • . = < =

  • variable a ,b :std_logic ;signal c :std_logic_vector(1 to 4);a := 1;b := 0;c
  • signal a,b :std_logic_vector(0 to 3);signal i : integer range 0 to 3;Signal y : std_logic ;a
  • variable a,b;std_logic_vector(1 to 4);a(1to 2) :=10;a( 1 to 4):=0101;

    signal a,b,c,d: std_logic;signal s : std_logic_vector(1 to 4);s c,2=>b,1=>d)

  • . ifcaseloopnextexit

  • 1. if

    if then elsif then . elsif then else end if ;

  • .

  • IF d1d0sy ARCHITECTURE example1 OF mux2 IS BEGIN PROCESSd1, d0, s BEGIN IF ( s =0) THEN y
  • .

  • CASE (2) CASE CASE IS WHEN => WHEN => WHEN OTHERS => END CASE =>THEN

  • CASE 5 1 TO 3) 4 | 646

  • CASE CASEWHEN WHEN CASEOTHERS ,OTHERS; =>THEN CASE

  • CASE ARCHITECTURE example3 OF mux4 IS SIGNAL s: STD_LOGIC_VECTOR1 DOWNTO 0 BEGIN syyyyy
  • LOOP3 VHDL 3LOOP LOOP FOR_LOOP WHILE_LOOP LOOP

  • FOR_LOOP 3 VHDL FOR_LOOP [:] FOR IN TO LOOP END LOOP [] [:] FOR IN DOWNTO LOOP END LOOP []

  • 13 VHDL FOR_LOOP = |-|+1

  • FOR_LOOP 3 VHDL X8X1Y=1Y=0 FOR_LOOPX n 07

  • 3 VHDL LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL ENTITY loop1 IS PORTX: IN STD_LOGIC_VECTOR7 DOWNTO 0 Y: OUT STD_LOGIC END loop1 ARCHITECTURE example4 OF loop1 IS BEGIN PROCESS ( X ) VARIABLE temp: STD_LOGIC BEGIN temp :=0 FOR n IN 7 DOWNTO 0 LOOP temp := temp XOR X( n ) END LOOP Y
  • WHILE_LOOP 3 VHDL WHILE_LOOP [:] WHILE LOOP END LOOP [] ,

  • WHILE_LOOP 3 VHDL ARCHITECTURE example5 OF loop2 IS BEGIN PROCESS ( X ) VARIABLE temp: STD_LOGIC VARIABLE n: INTEGER BEGIN temp :=0 n := 0 WHILE n < 8 LOOP temp := temp XOR X( n ) n := n+1 END LOOP Y
  • LOOPNEXTEXIT 3 VHDL LOOP [ : ] LOOP END LOOP [] LOOP L2: LOOP A := A+1 EXIT L2 WHEN A>10 END LOOP L2-- A 10

  • NEXTLOOP 3 VHDL 4NEXT NEXT [ ] [ WHEN ]

  • NEXT 3 VHDL 4NEXT 1 NEXT 2 NEXT 3 NEXT WHEN

  • NEXT_WHEN 3 VHDL ARCHITECTURE example6 OF NEXT_WHEN1 IS BEGIN PROCESS ( s ) VARIABLE i: INTEGER BEGIN L1: FOR i IN 7 DOWNTO 0 LOOP y( i )
  • 3 VHDL LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL ENTITY NEXT_WHEN2 IS PORT ( d: IN STD_LOGIC_VECTOR ( 0 TO 31) y: OUT STD_LOGIC_VECTOR ( 0 TO 3 ) ) END NEXT_WHEN2 ARCHITECTURE example7 OF NEXT_WHEN2 IS BEGIN PROCESS ( d ) VARIABLE i,k,j: INTEGER VARIABLE tmp: STD_LOGIC d[0..31]y[0..3]1y[i]=1y[i]=0

  • 3 VHDL BEGIN k: = 0L1: FOR i IN 0 TO 3 LOOP y( i )
  • EXITNEXTLOOP3 VHDL 5EXIT EXIT [ ] [ WHEN ]

  • EXIT 3 VHDL 5EXIT 1 EXIT ,END LOOP 2 EXIT 3 EXIT WHEN

  • EXIT 3 VHDL PROCESS ( X, Y ) BEGIN Z
  • EXIT_WHEN 3 VHDL PROCESS ( X, Y ) BEGIN Z
  • WAIT 3 VHDL 3. WAIT [ON ] [UNTIL ] [FOR ] WAIT

  • WAIT 3 VHDL 1 WAIT 2 WAIT ON SIGNAL ab STD LOGIC PROCESS WAIT ON ab END PROCESS-- ab 3.

  • 3 VHDL 3 WAIT UNTIL WAIT UNTIL clk =1AND clkEVENT z
  • 3 VHDL 4 WAIT FOR WAIT WAIT FOR 25ns z
  • NULLNOP 3 VHDL 4. NULL CASE sel IS WHEN 00 => y y y NULL END CASE --

  • 3.4.2 VHDL VHDL VHDL

  • 3.4.2 VHDL VHDL VHDL

  • PROCESS VHDL 1.

  • VHDL 1 [:] PROCESS [()] [IS][] BEGIN END PROCESS []

  • VHDL 2

  • VHDL 2

  • VHDL 2 PROCESSWAIT IFCASELOOPNULL NEXTEXIT

  • VHDL clkclr=0Q=0clr=1 PROCESS ( clk, clr ) BEGIN IF clr =0 THEN Q
  • VHDL clr PROCESS ( clk) BEGIN IF ( clk =1AND clkEVENT ) THEN IF clr =0 THEN Q
  • , VHDL 2.

  • VHDL VHDL 1
  • IF VHDL 2
  • VHDL ARCHITECTURE example5 OF mux41 IS SIGNAL s: STD_LOGIC_VECTOR( 1 DOWNTO 0 ) BEGIN s
  • CASE VHDL 3 WITH SELECT
  • VHDL ARCHITECTURE example6 OF mux41 IS SIGNAL s: STD_LOGIC_VECTOR( 1 DOWNTO 0 ) BEGIN s
  • BLOCK VHDL 3.

  • VHDL 1 BLOCK BEGIN END BLOCK

  • VHDL 2

  • ABSUMSUBCOBO VHDL LIBRARY IEEE USE IEEE.STD LOGIC 1164.ALL USE IEEE.STD_LOGIC_UNSIGNED.ALL ENTITY add_sub IS PORTA, B: IN STD LOGIC_VECTOR7 DOWNTO 0 SUM, SUB: OUT STD LOGIC_VECTOR7 DOWNTO 0 CO, BO: OUT STD LOGIC END add_sub

  • VHDL ARCHITECTURE example12 OF add_sub IS SIGNAL AA,BB,SM,SB: STD_LOGIC_VECTOR(1 DOWNTO 0) BEGIN AA
  • VHDL SUBTRACTER BLOCK BEGIN SB
  • VHDL 4. COMPONENT IS GENERIC PORT END COMPONENT PORT MAP

  • GENERICPORT VHDL 4. PORT MAP

  • VHDL YD0 D1D2 D3S1S0AB

  • VHDL LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL ENTITY mux4 IS PORT ( D0, D1, D2, D3: IN STD_LOGIC S0, S1: IN STD_LOGIC Y: OUT STD_LOGIC ) END mux4 ARCHITECTURE example13 OF mux4 IS COMPONENT mux2 PORT ( a, b, s: IN STD_LOGIC y: OUT STD_LOGIC ) END COMPONENT SIGNAL A, B: STD_LOGIC BEGIN U1: mux2 PORT MAP ( D0, D1, S0, A ) U2: mux2 PORT MAP ( a => D2, b => D3, s => S0, y => B ) U3: mux2 PORT MAP ( A, B, S1, y => Y ) END exmple13-- ---- -- --

  • VHDL LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL ENTITY mux2 IS PORT ( a, b, s: IN STD_LOGIC y: OUT STD_LOGIC) END mux2 ARCHITECTURE example13 OF mux2 IS BEGIN y
  • VHDL 4. PORT MAP ( )COMPONENTPORT U1: mux2 PORT MAP (D0, D1, S0, A ) D0D1S0Aabsy =>PORT MAP ( ) U2: mux2 PORT MAP (a=>D2,b=>D3,s=>S0,y=>B) PORT MAP( ) U3: mux2 PORT MAP (A,B,S1,y=>Y)

  • : xycincoutsumxycincoutsumEntity full _adder is port (x ,y, cin :in bit; sum ,cout : out bit);End full _adder;u1u2c1s1c2

  • GENERATE VHDL 5.

  • VHDL 5. 1 [:] FOR IN GENERATE BEGIN END GENERATE []

  • VHDL 5. 2 [:] IF GENERATE BEGIN END GENERATE []

  • FORIF VHDL 5.

  • D VHDL 1D LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL ENTITY ff_d IS PORT ( d, cp: IN STD_LOGIC q: OUT STD_LOGIC ) END ff_d ARCHITECTURE example14 OF ff_d IS BEGIN PROCESScp BEGIN IF cp =1'AND cpEVENT THEN q
  • VHDL 1D LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL ENTITY shift_reg_8 IS PORT ( Din, CLK: IN STD_LOGIC Dout: OUT STD_LOGIC ) Q: BUFFER STD_LOGIC_VECTOR ( 7 DOWNTO 0 )) END shift_reg_8 ARCHITECTURE example14 OF shift_reg_8 IS COMPONENT ff_d PORT ( d, cp: IN STD_LOGIC q: IN STD_LOGIC ) END COMPONENT SIGNAL d: STD_LOGIC_VECTOR ( 0 TO 8 ) --

  • VHDL 1D BEGIN d(0)
  • ASSERTVHDL VHDL 6. ASSERT [REPORT ] [SEVERITY ]

  • NOTEWARNINGERRORFAILURE VHDL 6. RSRS1 ASSERT S =1 AND R =1 REPORT S =1and R = 1 SEVERITY ERROR

  • 3.4.3 VHDL VHDL VHDL PROCEDURE FUNCTION

  • VHDL 1. 1

  • VHDL 1 ,INOUTINOUT PROCEDURE PROCEDURE IS [] BEGIN END PROCEDURE

  • VHDL 2 => =>

  • VHDL 2

  • VHDL LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL USE IEEE.STD_LOGIC_ARITH.ALL USE IEEE.STD_LOGIC_UNSIGNED.ALL ENTITY add IS PORT ( A, B, C: IN STD_LOGIC_VECTOR( 3 DOWNTO 0 ) CLK, SET: IN STD_LOGIC S: OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 )) END add ARCHITECTURE example15 OF add IS PROCEDURE add_1 ( VARIABLE data1,data2,data3: IN STD_LOGIC_VECTOR VARIABLE dataout: OUT STD_LOGIC_VECTOR IS BEGIN dataout:= data1 + data2 + data3 END add_1 --

  • VHDL BEGIN PROCESSCLK VARIABLE tmp: STD_LOGIC_VECTOR( 3 DOWNTO 0 ) BEGIN IF CLK =1AND CLKEVENT THEN IF SET =1 THEN tmp:=0000 ELSE add_1A, B, C, tmp END IF END IF S
  • VHDL 2. 1 FUNCTION RETURN

  • VHDL 2 FUNCTION RETURN IS [] BEGIN RETURN [] END FUNCTION []

  • VHDL 3 => =>

  • VHDL FUNCTION LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL ENTITY min IS PORT ( A, B: IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) Y: OUT STD_LOGIC_VECTOR ( 7 DOWNTO 0 )) END min

  • VHDL FUNCTION ARCHITECTURE example16 OF min IS FUNCTION min ( a, b: IN STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR FUNCTION min ( a, b: IN STD_LOGIC_VECTOR RETURN STD_LOGIC_VECTOR IS BEGIN IF ( a < b) THEN RETURN a ELSE RETURN b END IF END min BEGIN Y
  • VHDL 3. 1 RETURN 2 RETURN

  • 3.5

    IEEESTD, ASIC,WORK, IEEE STD_LOGIC_1164 STD_LOGIC_arith STD_LOGIC_unsigned STD_LOGIC_signed

  • STD standard : textio : /

    ASIC ASIC

    Work

  • library use .. use .. all library ieee ; use ieee.std_logic_1164.all

  • VHDL

  • PACKAGE IS END PACKAGE BODY IS END

  • PACKAGE logic ISTYPE three_level_logic IS (0,1,z);CONSTANT unkown_value : three_level_logic :=0;FUNCTION invert ( input : three_level_logic ) RETURN three_level_logic ;END logic;PACKAGE BODY logic ISFUNCTION invert (input : three_level_logic )RETURN three_level_logic ISBEGIN CASE input IS WHEN 0=> RETURN1; WHEN 1=> RETURN 0 ; WHENz=> RETURN zEND CASE ;END invert ;END logic ;

  • LIBRARY IEEE; USE IEEE STD-LOGIC-1164.ALL; PACKAGE UPAC IS CONSTANT K:=INTEGER:=4; SUBTYPE CPU-BUS IS STD-LOGIC-VECTOR(K-1 DOWNTO 0); END UPAC;

  • USE logic. Three _ level_ logic USE logic. invert USE logic.all ;logic+

  • :

    ::,:

  • : xycincoutsumxycincoutsumEntity full _adder is port (x ,y, cin :in bit; sum ,cout : out bit);End full _adder;u1u2c1s1c2

  • Architecture describ1 of full_adder is component half_adder generic (tpd:time:=2 ns); port(a,b: in bit; s,c: out bit); end component; component or_gate port(o1,o2: in bit; o3: out bit); end component; signal c1,s1,c2:bit; for u1: half_adder use entity half_adder(a1); for u2: half_adder use entity half_adder(a2); begin u1: half_adder generic map (4 ns) port map (x,y,s1,c1); u2: half_adder generic map (4 ns) port map (s1,cin,sum,c2); u3: or_gate port map (c1,c2,cout) ;End describ1;u1,u2,u3

  • Configuration config1 of full_adder is for describ2 for u1: half_adder use entity half_adder(a1); end for; for u2: half_adder use entity half_adder(a2); end for; end forend config1: configuration of is for []; end for; end ;

  • Architecture describ3 of full_adder issignal c1,s1,c2:bit;begin u1: entity half_adder(a1) generic map (4 ns) port map (x,y,s1,c1); u2: entity half_adder(a2) generic map (4 ns) port map (s1,cin,sum,c2); u3: entity or_gate port map (c1,c2,cout) ;End describ3;

    ::entity [.][()] [generic map()] port map();

  • VHDL

  • VHDL

  • Block

    block [] begin [] end block

  • blockENTITY latch ISPORT(d,clk : IN BIT; q,qb : OUT BIT ) ;END latch ;ARCHITECTURE latch_guard OF latch ISBEGIN g1: BLOCK(clk=1) BEGIN q
  • []process12. [] begin [] end process;

  • ENTITY mux IS PORT(d0,d1,sel:IN BIT ; q:OUT BIT);ENDARCHITECTURE connect OF mux ISBEGIN cale:PROCESS(d0,d1,sel) VARIABLE tmp1,tmp2,tmp3 : BIT; BEGIN tmp1:= d0 and sel; tmp2:= d1 and (not sel); tmp3:= tmp1 or tmp2; q
  • procedure 12.....is [] begin [] end

  • LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;ENTITY procedure1 ISPORT(din1, din2 : IN INTEGER RANGE 0 TO 31; dout : OUT INTEGER RANGE 0 TO 31);END;ARCHITECTURE a OF procedure1 IS PROCEDURE jfq (d1,d2 : IN INTEGER RANGE 0 TO 31; VARIABLE fout : OUT INTEGER RANGE 0 TO 31 ) IS BEGIN fout : = d1 + d2 ; END;BEGIN PROCESS VARIABLE fo : INTEGER RANGE 0 TO 31 ; BEGIN jfq(din1,din2,fo); dout
  • function 12 return is [] begin [] Return []; End []

  • LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY function1 IS PORT(din1, din2 : IN STD_LOGIC_ VECTOR (0 TO 3); dout : OUT STD_LOGIC_ VECTOR (0 TO 3));END;ARCHITECTURE a OF function1 IS FUNCTION ls_xj (d1,d2 : STD_LOGIC_ VECTOR (0 TO 3)) RETURN STD_LOGIC_ VECTOR IS VARIABLE temp : STD_LOGIC_ VECTOR (0 TO 3) ; BEGIN temp : = d1 + d2 ; RETURN temp; END;BEGIN dout
  • inin,out,inoutininout,inout

  • 3.6 TYPETYPETYPE IS OF ;TYPE IS ;

    TYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_LOGIC ;TYPE week IS (sunmontuewedthufrisat) ;

  • TYPE m_state IS ( st0st1st2st3st4st5 ) ; SIGNAL present_statenext_state : m_state ;

    TYPE BOOLEAN IS FALSETRUE TYPE my_logic IS ( '1' 'Z' 'U' '0' ) ; SIGNAL s1 : my_logic ; s1

  • SUBTYPE

    SUBTYPE IS RANGE ;

    SUBTYPE digits IS INTEGER RANGE 0 to 9 ;

  • VHDL

  • 1. 2. ARCHITECTURE ...IS TYPE FSM_ST IS (s0s1s2s3); SIGNAL current_state, next_state; FSM_ST; ...

  • 3. next_statenext_state

  • LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS PORT ( clk,reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs : OUT INTEGER RANGE 0 TO 15 );END s_machine;ARCHITECTURE behv OF s_machine IS TYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_state, next_state: FSM_ST;BEGIN REG: PROCESS (reset,clk) BEGIN IF reset = '1' THEN current_state
  • BEGIN CASE current_state IS WHEN s0 => comb_outputs
  • MooreMoore MealyMealy

  • ClockNo Clock

  • 3.6.2 Moore ADC0809ADC0809+FPGA

  • ADC0809

  • ADC0809

  • LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADCINT IS PORT(D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --08098CLK : IN STD_LOGIC; --EOC : IN STD_LOGIC; --ALE : OUT STD_LOGIC; --8START : OUT STD_LOGIC; --OE : OUT STD_LOGIC; --3ADDA : OUT STD_LOGIC; --LOCK0 : OUT STD_LOGIC; --Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8END ADCINT;ARCHITECTURE behav OF ADCINT ISTYPE states IS (st0, st1, st2, st3,st4) ; -- SIGNAL current_state, next_state: states :=st0 ; SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LOCK : STD_LOGIC; --

  • BEGINADDA
  • END PROCESS COM ; REG: PROCESS (CLK) BEGIN IF (CLK'EVENT AND CLK='1') THEN current_state
  • ADC0809

  • COMCOM1COM2 COM1: PROCESS(current_state,EOC) BEGIN CASE current_state IS WHEN st0=> next_state next_state IF (EOC='1') THEN next_state
  • WHEN st3=>ALE
  • MooreLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 IS PORT (DATAIN :IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK,RST : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END MOORE1;ARCHITECTURE behav OF MOORE1 IS TYPE ST_TYPE IS (ST0, ST1, ST2, ST3,ST4); SIGNAL C_ST : ST_TYPE ; BEGIN PROCESS(CLK,RST) BEGIN IF RST ='1' THEN C_ST
  • CASE C_ST IS WHEN ST0 => IF DATAIN ="10" THEN C_ST
  • RTLSynplify

  • 1.0s

    2.0s

    3.0s

    4.0s

    5.0s

    6.0s

    7.0s

    8.0s

  • 3.6.3 Mealy LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 ISPORT ( CLK ,DATAIN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0));END MEALY1;ARCHITECTURE behav OF MEALY1 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNAL STX : states ; BEGIN COMREG : PROCESS(CLK,RESET) BEGIN -- IF RESET ='1' THEN STX
  • CASE STX IS WHEN st0 => IF DATAIN = '1' THEN STX IF DATAIN = '0' THEN STX IF DATAIN = '1' THEN STX IF DATAIN = '0' THEN STX IF DATAIN = '1' THEN STX STX IF DATAIN = '1' THEN Q
  • WHEN st4=> IF DATAIN = '1' THEN Q
  • MEALY2 LIBRARY IEEE; --MEALY FSMUSE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY2 IS PORT ( CLK ,DATAIN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0));END MEALY2;ARCHITECTURE behav OF MEALY2 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNAL STX : states ; SIGNAL Q1 : STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN COMREG : PROCESS(CLK,RESET) -- BEGIN IF RESET ='1' THEN STX

  • END IF; END PROCESS COMREG ;COM1: PROCESS(STX,DATAIN,CLK) -- VARIABLE Q2 : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGIN CASE STX IS WHEN st0 => IF DATAIN = '1' THEN Q2 := "10000" ; ELSE Q2 := "01010" ; END IF ; WHEN st1 => IF DATAIN = '0' THEN Q2 := "10111" ; ELSE Q2:="10100" ; END IF ; WHEN st2 => IF DATAIN = '1' THEN Q2 := "10101" ; ELSE Q2:="10011" ; END IF ; WHEN st3=> IF DATAIN = '0' THEN Q2 := "11011" ; ELSE Q2:="01001" ; END IF ; WHEN st4=> IF DATAIN = '1' THEN Q2 := "11101" ; ELSE Q2:="01101" ; END IF ; WHEN OTHERS => Q2:="00000" ; END CASE ;

  • IF CLK'EVENT AND CLK = '1' THEN Q1
  • 3.6.4 START = current_state4 ALE = current_state3 OE = current_state2 LOCK = current_state1

  • LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD574A IS PORT ( D : IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK ,STATUS : IN STD_LOGIC; OUT4 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0) );END AD574A;ARCHITECTURE behav OF AD574A ISSIGNAL current_state, next_state: STD_LOGIC_VECTOR(4 DOWNTO 0 ); CONSTANT st0 : STD_LOGIC_VECTOR(4 DOWNTO 0) := "11100" ; CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00001" ; CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00000" ; CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00100" ; CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00110" ; SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL LK : STD_LOGIC; BEGIN COM1: PROCESS(current_state,STATUS) --

  • BEGIN CASE current_state IS WHEN st0 => next_state next_state IF (STATUS='1') THEN next_state

  • END IF; END PROCESS ; Q
  • ...SIGNAL CRURRENT_STATE,NEXT_STATE: STD_LOGIC_VECTOR(2 DOWNTO 0 );CONSTANT ST0 : STD_LOGIC_VECTOR(2 DOWNTO 0) := "000" ;CONSTANT ST1 : STD_LOGIC_VECTOR(2 DOWNTO 0) := "001" ;CONSTANT ST2 : STD_LOGIC_VECTOR(2 DOWNTO 0) := "010" ;CONSTANT ST3 : STD_LOGIC_VECTOR(2 DOWNTO 0) := "011" ;CONSTANT ST4 : STD_LOGIC_VECTOR(2 DOWNTO 0) := "100" ;

    STATE0

    000

    100000

    STATE1

    001

    010000

    STATE2

    010

    001000

    STATE3

    011

    000100

    STATE4

    100

    000010

    STATE5

    101

    000001

  • One-hot encoding

  • 3.6.5

    st0

    000

    st1

    001

    st2

    010

    st3

    011

    st4

    100

    st_ilg1

    101

    st_ilg2

    110

    st_ilg3

    111

  • ...TYPE states IS (st0, st1,st2,st3st4st_ilg1st_ilg2st_ilg3); SIGNAL current_state, next_state: states;...COMPROCESS(current_state, state_Inputs) -- BEGIN CASE current_state IS -- ... WHEN OTHERS => next_state
  • One hot Gray Binary

  • 4 : state0, state1, state2, state3 :(2 bits : 00 01 10 11 (Binary)(4 bits : 1000 0100 0010 0001 (One Hot)(2 bits : 00 01 11 10 (Grey Code

  • FPGACycloneSpantan-3ECPLDMAX3000AXC9500XLCPLD

  • Sample State Machinelibrary ieee;use ieee.std_logic_1164.all;package your_own_type istype t_state is (idle,state0,state01,state011, state0110,state01101, state011011, dummy0, dummy1, dummy2, dummy3, dummy4, dummy5, dummy6, dummy7, dummy8, dummy9, dummy10);end your_own_type;library ieee;use ieee.std_logic_1164.all;use work.your_own_type.all;Entity stmh isport (clk, serial_in, reset : in std_logic; match : out std_logic);end stmh;architecture body_stmh of stmh is

  • signal present_state : t_state;beginprocess(clk,serial_in, present_state)beginif (reset = '1') thenpresent_state
  • when state011 => if (serial_in = '0') then present_state

  • when dummy6 => present_state present_state present_state present_state present_state present_state
  • Quartus IISynplify

    ```````````````````````````````````````````````````````````````````````````````````````````````````````````VHDL