第三章 硬件描述语言 VHDL

Click here to load reader

download 第三章  硬件描述语言 VHDL

of 248

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 of 第三章 硬件描述语言 VHDL

  • 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