版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、VHDL設(shè)計方法用VHDL語言實現(xiàn)可編程數(shù)字系統(tǒng)設(shè)計VHDL設(shè)計方法VHDL概述VHDL的設(shè)計單元VHDL的基本語法結(jié)構(gòu)第一部分VHDL 概述VHDL的含義VHSIC (Very High Speed Integrated Circuit)HardwareDescriptionLanguageVHDL歷史1982年, 誕生于美國國防部贊助的VHSIC項目1987年底,VHDL被IEEE和美國國防部確認為標(biāo)準(zhǔn)硬件描述語言 ,即IEEE-1076(簡稱87版) 1993年,IEEE對VHDL進行了修訂,公布了新版本的VHDL,即IEEE標(biāo)準(zhǔn)的1076-1993(1164)版本 1996年,IEEE
2、-1076.3成為VHDL綜合標(biāo)準(zhǔn)VHDL特點與其他的硬件描述語言相比,VHDL具有更強的行為描述能力 VHDL豐富的仿真語句和庫函數(shù),使得在設(shè)計的早期就能查驗設(shè)計系統(tǒng)的功能可行性,隨時可對設(shè)計進行仿真模擬 VHDL語句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計的分解和已有設(shè)計的再利用功能對于用VHDL完成的一個確定的設(shè)計,可以利用EDA工具進行邏輯綜合和優(yōu)化,并自動的把VHDL描述設(shè)計轉(zhuǎn)變成門級網(wǎng)表VHDL對設(shè)計的描述具有相對獨立性,設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必管理最終設(shè)計實現(xiàn)的目標(biāo)器件是什么,而進行獨立的設(shè)計 VHDL與其他HDL比較VHDL“告訴我你想要電路做什么,我給你提供
3、能實現(xiàn)這個功能的硬件電路”Verilog和VHDL類似ABEL、AHDL“告訴我你想要什么樣的電路,我給你提供這樣的電路”典型的綜合流程典型的仿真流程第二部分VHDL的設(shè)計單元VHDL的設(shè)計單元Entity(實體)用來說明模型的外部輸入輸出特征Architecture(構(gòu)造體)用來定義模型的內(nèi)容和功能每一個構(gòu)造體必須有一個實體與它相對應(yīng),所以兩者一般成對出現(xiàn)實體類似一個“黑盒”,實體描述了“黑盒”的輸入輸出口黑盒rstd7:0clkq7:0co實體舉例ENTITY black_box IS Generic ( constant width : integer := 7;);PORT (clk,
4、 rst:INstd_logic;d:IN std_logic_vector(width DOWNTO 0);q:OUTstd_logic_vector(width DOWNTO 0);co:OUT std_logic);END black_box;黑盒rstd7:0clkq7:0co關(guān)鍵字類屬參量端口定義端口模式端口數(shù)據(jù)類型實體結(jié)束Generic類屬參量一種端口界面常數(shù),用來規(guī)定端口的大小、實體中子元件的數(shù)目等與常數(shù)不同,常數(shù)只能從內(nèi)部賦值而類屬參量可以由實體外部賦值數(shù)據(jù)類型通常取Integer或Time綜合器僅支持數(shù)據(jù)類型為整數(shù)的類屬值。PORTS端口(PORT)是實體的一部分PORT 類
5、似于器件的管腳,主要用于信號的傳輸PORT 一般有 Name, Mode, 和 Type端口說明格式PORT(SIGNAL Name:Mode Type BUS:=表達式 , )端口類型IN:數(shù)據(jù)只能從端口流入實體OUT:數(shù)據(jù)只能從端口流出實體INOUT:數(shù)據(jù)從端口流入或流出實體BUFFER:數(shù)據(jù)從端口流出實體,同時可被內(nèi)部反饋Entity數(shù)據(jù)類型BIT :位類型,其值只能為 0或 1BIT_VECTOR :位矢量類型,包含一組位類型BOOLEAN:布爾類型,其值可為 TRUE或FALSEINTEGER:整型,范圍為-214783647到214783647(232),綜合時,要對范圍加以限制。
6、常用于循環(huán)語句的循環(huán)次數(shù)、常量、數(shù)學(xué)函數(shù)或模式仿真Natural:自然數(shù)類型,整型的子類型,含零和正整數(shù)Positive:正整數(shù)類型,整型的子類型,含非零和非負整數(shù)REAL:浮點類型,范圍為:-1.0E38到1.0E38很多綜合器不支持該類型數(shù)據(jù)類型枚舉類型:用戶定義的數(shù)據(jù)類型例:TYPE traffic_light IS (red, yellow,green )TYPE int IS RANGE 0 TO 100數(shù)組類型:分一維數(shù)組和二維數(shù)組,限定性和非限定性數(shù)組例:TYPE Bit_Vector IS ARRAY (Natural RANGE) OF Bit;TYPE Word IS AR
7、RARY (31 downto 0) OF Bit;SUBTYPE:子類型,一般用來對其父類型加以限制例: SUBTYPE Std_Logic IS resolved Std_UlogicTIME:時間類型,范圍和整型一樣,表達時要包括數(shù)值和單位兩部分。單位包括:fs、ps、ns、us、ms、sec、min、hr。一般用于仿真數(shù)據(jù)類型記錄類型TYPE Month_Name IS (Jan,Fab,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);TYPE date IS RECORDday : Integer RANGE 1 TO 31;month : Mont
8、h_Name;year : Integer RANGE 0 to 3000;END RECORD;VARIABLE today : date;today : =(15, may, 1995);Std_Logic數(shù)據(jù)類型IEEE 1164中定義的一種數(shù)據(jù)類型,它包含9種取值分別為:U未初始化用于仿真X強未知用于仿真0強0用于綜合與仿真1強1用于綜合與仿真Z高阻用于綜合與仿真W弱未知用于仿真L弱0用于綜合與仿真H弱1用于綜合與仿真_忽略用于綜合與仿真Std_Logic數(shù)據(jù)類型它是數(shù)字電路設(shè)計的工業(yè)標(biāo)準(zhǔn)邏輯類型它增加了VHDL語言編程、綜合和仿真的靈活性在多值邏輯系統(tǒng)中STD_LOGIC和 STD_
9、LOGIC_VECTOR 用于取代 BIT 和 BIT_VECTOR 若電路中有三態(tài)邏輯(Z) 必須用STD_LOGIC 和 STD_LOGIC _VECTOR 要使用這種類型代碼中必須申明庫和程序包說明語句LIBRARY ieee;USE ieee.std_logic_1164.ALL;練習(xí)一編寫包含以下內(nèi)容的實體代碼端口 D 為12位輸入總線 端口 OE 和 CLK 都是1位輸入端口 AD 為 12位雙向總線端口 A為12位輸出總線端口 INT 是1位輸出端口 AS 是一位輸出同時被用作內(nèi)部反饋my_designd11:0oeclkad11:0a11:0intas練習(xí)一答案LIBRARY
10、ieee;USE ieee.std_logic_1164.ALL;ENTITY my_design IS PORT (d:IN std_logic_vector(11 DOWNTO 0);oe, clk:IN std_logic;ad:INOUT std_logic_vector(11 DOWNTO 0);a:OUT std_logic_vector(11 DOWNTO 0);int:OUT std_logic;as:BUFFER std_logic);END my_design;my_designd11:0oeclkad11:0a11:0intas構(gòu)造體用來描述實體的內(nèi)部結(jié)構(gòu)和邏輯功能必須和
11、實體(ENTITY)相聯(lián)系一個實體(ENTITY)可以有多個構(gòu)造體構(gòu)造體的運行是并發(fā)的構(gòu)造體描述方式包括:行為描述結(jié)構(gòu)描述混合描述實體和構(gòu)造體之間的關(guān)系Input 1Input nOutput 1Output n實體ABCDSelMUX_Out2構(gòu)造體結(jié)構(gòu)圖構(gòu)造體說明語句功能描述語句塊語句進程語句信號賦值語句子程序調(diào)用語句元件例化語句由一系列并行執(zhí)行語句構(gòu)成的組合體,它的功能是將結(jié)構(gòu)體中的并行語句組成一個或多個子模塊 定義順序語句模塊,用以將從外部獲得的信號值,或內(nèi)部的運算數(shù)據(jù)向其它的信號進行賦值。將設(shè)計實體內(nèi)的處理結(jié)果向定義的信號或界面端口進行賦值用以調(diào)用過程或函數(shù),并將獲得的結(jié)果賦值于信號
12、對其它的設(shè)計實體作元件調(diào)用說明,并將此元件的端口與其它的元件、信號或高層次實體的界面端口進行連接。構(gòu)造體行為描述舉例2 X 8 Input AND gate:ENTITY black_box IS PORT (a, b:INstd_logic_vector(7 DOWNTO 0);y:OUTstd_logic_vector(7 DOWNTO 0);END black_box;ARCHITECTURE example OF black_box ISBEGIN y = a AND b;END example;數(shù)據(jù)對象常數(shù)指在設(shè)計中不會變的值改善代碼可讀性,便于代碼修改必須在程序包、實體、構(gòu)造體或進
13、程的說明區(qū)域加以說明一般要賦一初始值保留字CONSTANT例:CONSTANTWidth : Integer :=8數(shù)據(jù)對象信號可代表連線、內(nèi)連元件、或端口用“=”來給信號賦值SIGNALSIGNAL Count: Bit_Vector(3 downto 0);IF Rising_Edge(clk) THENCount=Count+1;END IF;信號在Package、Entity、Architecture 中聲明數(shù)據(jù)對象信號MUXREGSIGNALSIGNALSIGNALSIGNALPROCESSPROCESS信號舉例LIBRARY ieee;USE ieee.std_logic_1164
14、.all;ENTITY simp ISPORT(a, b, c, d : IN Std_Logic;g : OUT Std_Logic);END simp;ARCHITECTURE logic OF simp ISSIGNAL e,f : Std_Logic;BEGINe = a or b;f=not(c or d);g =e and f;END logic;abcdgef端口信號在構(gòu)造體內(nèi)聲明的內(nèi)部連接信號信號賦值SIGNAL temp : Std_Logic_Vector (7 downto 0);整體賦值:temp = “10101010”;temp = x”AA” ; 逐位賦值:tem
15、p(7) = 1;多位賦值:temp (7 downto 4) = “1010”;多位賦值用雙引號逐位賦值用單引號賦值標(biāo)志數(shù)據(jù)對象變量僅用于進程和子程序必須在進程和子程序的說明性區(qū)域說明不能表達連線和存儲元件保留字VARIABLEVARIABLE tmp : Bit;tmp:=1;變量賦值整體賦值:temp := “10101010”;temp := x”AA” ; 逐位賦值:temp(7) := 1;多位賦值temp (7 downto 4) := “1010”;多位賦值用雙引號逐位賦值用單引號賦值標(biāo)志信號和變量的作用范圍ARCHITECTURESIGNAL 描述label1: PROCES
16、S1VARIABLE 描述label2: PROCESS2VARIABLE 描述在進程的外面聲明作用范圍為全局在進程內(nèi)部說明作用范圍為進程內(nèi)信號和變量的區(qū)別信號變量賦值符號=:=功能電路的內(nèi)部連接內(nèi)部數(shù)據(jù)交換作用范圍全局,進程和進程之間的通信進程的內(nèi)部行為延遲一定時間后才賦值立即賦值算術(shù)運算符運算符功能運算符功能+加SLL邏輯左移-減SRL邏輯右移*乘SLA算術(shù)左移/除SRA算術(shù)右移*乘方ROL邏輯循環(huán)左移MOD取模ROR邏輯循環(huán)右移REM取余ABS取絕對值關(guān)系運算符運算符功能=等于/=不等于小于大于=小于等于=大于等于邏輯運算符運算符功能AND與OR或NAND與非NOR或非XOR異或XNOR
17、異或非NOT非其他運算符運算符功能+正-負&并置運算優(yōu)先級*ABSNOT*/MODREM+正-負+-&SLLSLASRLSRAROLROR=ANDORNANDNORXORXNOR高低運算重載若兩信號類型不同,不能將一個信號的值賦給另一信號數(shù)據(jù)轉(zhuǎn)換必須要用運算重載一般可用IEEE .1164中的標(biāo)準(zhǔn)重載函數(shù)實現(xiàn)LIBRARY IEEE;USE IEEE_Std_Logic_1164.all;USE IEEE_Std_Logic_Arith.all;USE IEEE_Std_Logic_unsigned.allUSE IEEE_Std_Logic_signed.all并行語句并行語句1構(gòu)造體并行語
18、句2并行語句3signalsignal并行語句 VHDL語言與傳統(tǒng)軟件描述語言最大的不同有多種語句格式,包括:并行信號賦值語句、進程語句、塊語句、條件信號賦值語句、元件例化語句、生成語句、并行過程調(diào)用語句各種并行語句在結(jié)構(gòu)體中的執(zhí)行是同步進行的,或者說是并行運行的,其執(zhí)行方式與書寫的順序無關(guān)。在執(zhí)行中,并行語句之間可以有信息往來,也可以是互為獨立、互不相關(guān)、異步運行的(如多時鐘情況)。每一并行語句內(nèi)部的語句運行方式可以有兩種不同的方式,即并行執(zhí)行方式(如塊語句)和順序執(zhí)行方式(如進程語句)。布爾表達式VHDL支持所有的標(biāo)準(zhǔn)邏輯運算符AND, OR, NOT, XOR, XNOR, NAND例:
19、 x =(a AND NOT(s(1) AND NOT(s(0) OR(b AND NOT(s(1) AND s(0) OR(c AND s(1) AND NOT(s(0) OR (d AND s(1) AND s(0) ;y = a OR b OR c;axmuxcbds2With_Select_Then選擇信號語句所有的“WHEN”子句必須是互斥的一般用 “When Others”來處理未考慮到的情況只有一個參考信號和賦值符 (=)每一子句結(jié)尾是逗號,最后一句是分號WITH selection_signal SELECTsignal_name = value_1 WHEN value_a,
20、 value_2 WHEN value_b, . value_n WHEN value_n, value_x WHEN OTHERS;With_Select_Then語句舉例LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY cmpl_sig ISPORT ( a, b,c,d,s : IN STD_LOGIC;x : OUT STD_LOGIC);END cmpl_sig;ARCHITECTURE logic OF cmpl_sig ISBEGIN WITH s SELECT x =a WHEN “00”, b WHEN “01”, c WHEN
21、“10”, d WHEN OTHERS;axmuxcbds2 s 是 Std_Logic數(shù)據(jù)類型。 其值包括0,1,X,Z等加Others語句With_Select_Then語句舉例每個WHEN子句可以包含多個條件:WITH s SELECT x = a WHEN ”000” | “001” | “010”, b WHEN 101 | 111, c WHEN OTHERS;表示或邏輯When_Else選擇信號語句根據(jù)指定條件對信號賦值,條件可以為任意表達式根據(jù)條件的出現(xiàn)的先后次序隱含優(yōu)先權(quán)最后一個 ELSE子句隱含了所有未列出的條件每一子句的結(jié)尾沒有標(biāo)點,只有最后一句有分號signal_nam
22、e =value_1 WHEN condition1 ELSE value_2 WHEN condition2 ELSE . value_n WHEN conditionn ELSE value_x;When_Else語句舉例x = a when (s = “00”) else b when (s = “01”) else c when (s = “10”) else d ;axmuxcbds2隱含了優(yōu)先權(quán)隱含了所有未列出的條件When_Else語句舉例 j = w when (a = 1) else x when (b = 1) else y when (c = 1) elsez when
23、(d = 1) else0 ;允許有多個控制信號進程語句VHDL中最重要的語句,具有并行和順序行為的雙重性進程和進程語句之間是并行關(guān)系進程內(nèi)部是一組連續(xù)執(zhí)行的順序語句進程語句與構(gòu)造體中的其余部分進行信息交流是靠信號完成的基本格式:進程標(biāo)號: PROCESS (信號敏感表) IS說明區(qū)BEGIN順序語句END PROCESS 進程標(biāo)號;進程語句PROCESS1PROCESSnsignalsignalARCHITECTURE一個構(gòu)造體可以有多個進程語句進程和進程之間是并行的進程和進程之間的數(shù)據(jù)交換通過信號完成進程內(nèi)部是順序語句信號敏感表進程賴以啟動的敏感表。對于表中列出的任何信號的改變,都將啟動進
24、程,執(zhí)行進程內(nèi)相應(yīng)順序語句一些VHDL綜合器,綜合后,對應(yīng)進程的硬件系統(tǒng)對進程中的所有輸入的信號都是敏感的,不論在源程序的進程中是否把所有的信號都列人敏感表中為了使軟件仿真與綜合后的硬件仿真對應(yīng)起來,應(yīng)當(dāng)將進程中的所有輸人信號都列入敏感表中順序語句每一條順序語句的執(zhí)行(指仿真執(zhí)行)順序是與它們的書寫順序基本一致的順序語句只能出現(xiàn)在進程(Process) 、函數(shù)(Funcation)和過程(Procedure)中順序語句包括:賦值語句、流程控制語句、等待語句、子程序調(diào)用語句、返回語句、空操作語句LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY if_
25、case IS PORT ( a, b, c, d : IN Std_Logic; sel : IN Std_Logic_Vector(1 downto 0); y, z : OUT Std_Logic);END if_case;ARCHITECTURE logic OF if_case ISBEGINif_label: PROCESS(a, b, c, d, sel)BEGINIF sel=00 THEN y = a;ELSIF sel=01 THEN y = b;ELSIF sel=10 THEN y = c;ELSE y z z z z z = 0;END CASE;END PROCES
26、S case_label;END logic;進程語句舉例兩個進程是并發(fā)的進程的運行依賴于敏感表內(nèi)參數(shù)的變化敏感表舉例latchlabel: PROCESS(oe)BEGINIF oe=1 THEN y = a; END IF;END PROCESS if_label;仿真結(jié)果錯誤敏感表舉例latchlabel: PROCESS(oe,a)BEGINIF oe=1 THEN y = a; END IF;END PROCESS if_label;仿真結(jié)果正確順序賦值語句舉例LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY ttt1 IS PORT (
27、en: in std_logic; y: OUT Std_Logic_vector(0 to 7);END ttt1;ARCHITECTURE logic OF ttt1 ISSIGNAL s1,s2:Std_logic;SIGNAL t:Std_Logic_vector (0 to 7);BEGINPROCESS(s1,s2,en)Variable v1,v2:Std_logic;Beginif en=1 thenV1:=1;V2:=1;s1=1;s2=1;t(0)=v1;t(1)=v2;t(2)=s1;t(3)=s2;v1:=0;v2:=0;s2=0;t(4)=v1;t(5)=v2;t(6
28、)=s1;t(7)=s2;end if;End process;y=t;end;順序賦值語句舉例警告順序賦值語句舉例ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : BIT;BEGINPROCESS (clk)BEGINIF rising_edge(clk) THENa = d;b = a;q = b;END IF;END PROCESS;END reg1;DDDQQQdabclkqDQdclkqDDQQdaclkqDDDQQQdabclkq順序賦值語句舉例ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q :
29、out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : BIT;BEGINPROCESS (clk)BEGINIF rising_edge(clk) THENa = d;b = a;END IF;END PROCESS;q = b;END reg1;并行賦值語句DDDQQQdabclkqDQdclkqDDQQdaclkqDDQQdaclkq順序賦值語句舉例ENTITY reg1 IS PORT ( d : in BIT; clk : in BIT; q : out BIT);END reg1;ARCHITECTURE reg1 O
30、F reg1 ISVARIABLE a, b : BIT;BEGINPROCESS (clk)BEGINIF rising_edge(clk) THENa = d;b = a;q = b;END IF;END PROCESS;END reg1;DDDQQQdabclkqDQdclkqDDQQdaclkqDQdclkq變量定義在時序電路中的變量賦值變量在IF語句中被賦值,以用來表示隨時鐘的變化,不會產(chǎn)生觸發(fā)器變量只代表臨時存儲,不反映實際硬件變量可用在表示一數(shù)據(jù)立即變化的表達式中,然后再將變量的值賦給信號IF_THEN_ELSE語句只能在進程內(nèi)使用至少應(yīng)有一個條件句,條件句必須由布爾表達式構(gòu)成。
31、根據(jù)條件句產(chǎn)生的判斷結(jié)果TRUE或FALSE,有條件地選擇執(zhí)行其后的順序語句。IF 條件句 Then 順序語句ENDIFIF 條件句 THEN 順序語句ELSE 順序語句ENDIFIF 條件句 Then 順序語句 ELSIF 條件句 Then 順序語句 ELSE 順序語句ENDIFIF_THEN_ELSE語句 mux4_1: PROCESS (a, b, c, d, s)BEGIN IF s = “00” THEN x = a ;ELSIF s = “01” THEN x = b ;ELSIF s = “10” THEN x = c ;ELSE x = d ;END IF;END PROCES
32、S mux4_1 ;必須在進程內(nèi)使用IF_THEN_ELSE語句ex1: PROCESS (a, b)BEGIN IF a=1 THEN c=0; - if a and b are END IF;- both 1 then IF b=1 THEN c=1; - b has priority END IF;- so c = 1;END PROCESS ex1;ex2: PROCESS (a, b)BEGIN IF b=1 THEN c=1; - if a and b are END IF; - both 1 then IF a=1 THEN c=0; - a has priority END I
33、F; - so c x x x x = d;END CASE;END PROCESS mux4_1;LOOP語句基本格式:LOOP標(biāo)號:重復(fù)模式 LOOP順序語句;END LOOP LOOP標(biāo)號WHILE LOOP順序語句END LOOP;FOR IN LOOP順序語句END LOOP;LOOP標(biāo)號: LOOP順序語句EXIT LOOP標(biāo)號 ;END LOOP;NEXT LOOP標(biāo)號 WHEN 語句LOOP語句示例LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;ENTITY shift4 ISPO
34、RT ( shft_lft : in std_logic;d_in : in std_logic_vector(3 downto 0);q_out: out std_logic_vector(7 downto 0);END shift4;ARCHITECTURE logic OF shift4 ISBEGINPROCESS(d_in, shft_lft)VARIABLE shft_var : std_logic_vector(7 DOWNTO 0);BEGINshft_var(7 downto 4) := 0000;shft_var(3 downto 0) := d_in;IF shft_lf
35、t = 1 THENFOR i IN 7 DOWNTO 4 LOOPshft_var(i) := shft_var(i-4);END LOOP;shft_var(3 downto 0) := “0000”;ELSE shft_var := shft_var;END IF;q_out = shft_var;END PROCESS;END logic;組合電路舉例LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY compare IS PORT (a, b: IN std_logic_vector(0 TO 3);aeqb: OUT std_logic)
36、;END compare;ARCHITECTURE archcompare OF compare ISBEGINaeqb = 1 WHEN a = b ELSE 0;END archcompare; aeqba(0 TO 3)b(0 TO 3)組合電路舉例LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY compare IS PORT (a, b: IN std_logic_vector(0 TO 3);aeqb: OUT std_logic);END compare;ARCHITECTURE archcompare OF compare ISBE
37、GINaeqb = NOT( (a(0) XOR b(0) OR (a(1) XOR b(1) OR (a(2) XOR b(2) OR (a(3) XOR b(3);END archcompare;組合電路舉例ARCHITECTURE archcompare OF compare ISBEGINcomp: PROCESS (a, b)BEGINIF a = b THENaeqb = 1;ELSEaeqb = 0;END IF;END PROCESS comp;END archcompare;組合電路舉例ARCHITECTURE archincomplete OF incomplete IS
38、BEGINim_mem: PROCESS (a,b)BEGINIF a = 1 THEN c = b;END IF;END PROCESS im_mem;END archincomplete;acb引入鎖存效應(yīng)組合電路舉例ARCHITECTURE archcomplete OF complete IS BEGINno_mem: PROCESS (a, b)BEGINIF a = 1 THEN c = b;ELSE c key key key key = none;END CASE; 時序電路舉例LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY df
39、f_a IS PORT ( d : in std_logic; clk : in std_logic; q : out std_logic);END dff_a;ARCHITECTURE behavior OF dff_a ISBEGINPROCESS (clk)BEGINIF clkevent and clk = 1 THEN q = d;END IF;END PROCESS;END behavior;CLK置于敏感表內(nèi)可用Rising_edge(CLK)代替沒有ELSE語句時序電路舉例ARCHITECTURE behavior OF dff_clr ISBEGINPROCESS(clk,
40、clr)BEGINIF clr = 0 THEN q = 0;ELSIF rising_edge(clk) THEN q = d;END IF;END PROCESS;END behavior;異步清零時序電路舉例LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all; upcount: PROCESS (clk, rst)BEGINIF rst = 1 THEN count = x0 ;ELSIF rising_edge(clk) THENIF load = 1 THEN count = data;EL
41、SE count = count + 1;END IF;END IF;END PROCESS upcount;同步置數(shù)“+”重載時序電路舉例ARCHITECTURE logic OF count_a ISBEGINPROCESS(rst, clk)VARIABLE tmp_q : std_logic_vector(15 downto 0);BEGINIF rst = 0 THEN q = 0;ELSIF rising_edge(clk) THENIF updn = 1 THEN tmp_q := tmp_q + 1;ELSE tmp_q := tmp_q - 1;END IF;q = tmp_
42、q;END IF;END PROCESS;END logic;信號傳遞三態(tài)電路舉例ENTITY test_three IS PORT(oe :IN std_logic;data :OUT std_logic_vector(0 to 7);END test_three;ARCHITECTURE archtest_three OF test_three ISBEGINPROCESS (oe)BEGINIF (oe=1) THENdata = 01100100;ELSEdata = ZZZZZZZZ; END IF; END PROCESS;END archtest_three;雙向口舉例ENTIT
43、Y ldcnt IS PORT (clk, ld, oe: IN std_logic;count: INOUT std_logic_vector(7 DOWNTO 0);END ldcnt; ARCHITECTURE archldcnt OF ldcnt ISSIGNAL int_count: std_logic_vector(7 DOWNTO 0); BEGINcnt: PROCESS (clk)BEGINIF rising_edge(clk) THENIF ld=1 THEN int_count = count; ELSE int_count = int_count + 1;END IF;
44、END IF;END PROCESS cnt ;雙向口舉例outen: PROCESS (oe, int_count) BEGINIF oe = 1 THEN count = int_count ; ELSE count Z) ; END IF ;END PROCESS outen;END archldcnt; 別 名標(biāo)志一個以存在的數(shù)據(jù)對象引用別名等效于引用原始數(shù)據(jù)對象給別名賦值等效于給原始數(shù)據(jù)賦值常作為標(biāo)識一組數(shù)據(jù)類型保留字:ALIASALIAS Bank:Bit_Vector(0 to 3) IS Address(24 to 27);狀態(tài)機設(shè)計RESET(asynchronous)RED
45、TIMER1YELLOWGREENTIMER1TIMER2TIMER2Y=1G=1TIMER3TIMER3R=1二進制狀態(tài)機編碼狀態(tài)機的每一個狀態(tài)用二進制位來編碼例:實現(xiàn)4狀態(tài)的狀態(tài)機,其二進制編碼可為 狀態(tài)1“00” 狀態(tài)2“01”狀態(tài)3“10”狀態(tài)4“11”特點觸發(fā)器使用較少,速度較慢,可能產(chǎn)生兩位同時翻轉(zhuǎn)的情況。如:“01”“10”格雷碼狀態(tài)機編碼格雷碼編碼每次僅一個狀態(tài)位的值發(fā)生變化 例:實現(xiàn)4狀態(tài)的狀態(tài)機,其格雷碼編碼可為 狀態(tài)1“00” 狀態(tài)2“01” 狀態(tài)3“11” 狀態(tài)4“10”特點觸發(fā)器使用較少,速度較慢,不會產(chǎn)生兩位同時翻轉(zhuǎn)的情況。當(dāng)狀態(tài)位的輸出被異步應(yīng)用時,格雷碼編碼是特
46、別有益的ONE HOT狀態(tài)機編碼ONE HOT的編碼方案對每一個狀態(tài)采用一個觸發(fā)器,即4個狀態(tài)的狀態(tài)機需4個觸發(fā)器。同一時間僅1個狀態(tài)位處于邏輯“l(fā)”電平例:實現(xiàn)4狀態(tài)的狀態(tài)機,其ONE HOT編碼可為 狀態(tài)1“0001” 狀態(tài)2“0010” 狀態(tài)3“0100” 狀態(tài)4“1000”特點觸發(fā)器使用較多,但邏輯簡單,速度快編碼方式的選擇根據(jù)狀態(tài)機復(fù)雜程度狀態(tài)特別多的系統(tǒng)只能采用2進制編碼或格雷碼編碼根據(jù)器件類型FPGA一般采用ONE HOT編碼,CPLD一般采用2進制編碼或格雷碼編碼 從非法狀態(tài)中退出在選擇編碼方案時,必須考慮狀態(tài)機可能進入的潛在的非法狀態(tài)數(shù)目。如果違反了狀態(tài)位觸發(fā)器的建立或保持時
47、間,又沒有定義所有可能出現(xiàn)的狀態(tài),則你的設(shè)計會終止在非法狀態(tài)上。狀態(tài)機設(shè)計實體描述LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY state_machine IS PORT (clock, reset: IN std_logic;timer1, timer2, timer3: IN std_logic;r, y, g:OUT std_logic);END state_machine;狀態(tài)機設(shè)計方案一ARCHITECTURE arch_1 OF state_machine ISTYPE traffic_states IS (red, yellow,
48、 green); SIGNAL sm: traffic_states;BEGINfsm: PROCESS (clock, reset)BEGIN IF reset = 1 THEN sm IF timer1=1 THEN sm IF timer2=1 THEN sm IF timer3=1 THEN sm sm = red;END CASE;END IF; END PROCESS fsm;r = 1 WHEN (sm = red) ELSE 0;g = 1 WHEN (sm = green) ELSE 0;y = 1 WHEN (sm = yellow) ELSE 0;END arch_1;方
49、案分析InputsNextStateLogicStateRegistersOutputLogicOutputsPresent StateNext Statetco狀態(tài)機設(shè)計方案二ARCHITECTURE arch_2 OF state_machine ISTYPE traffic_states IS (red, yellow, green);SIGNAL sm: traffic_states;BEGINfsm: PROCESS (clock, reset) BEGIN IF reset = 1 THEN sm = red; r=1; g=0; y IF timer1=1 THEN sm = g
50、reen; r=0; g=1; y=0; ELSE sm = red;r=1; g IF timer2=1 THEN sm = yellow; r=0; g=0; y=1; ELSE sm = green; r=0; g=1; y IF timer3=1 THEN sm = red; r=1; g=0; y=0;ELSE sm = yellow; r=0; g=0; y sm = red;END CASE;END IF;END PROCESS fsm;END arch_2;方案二分析OutputsStateRegistersOutputLogicOutputRegistersInputsNex
51、tStateLogicPresent Statetco狀態(tài)機設(shè)計方案三ARCHITECTURE arch_3 OF state_machine ISSIGNAL sm: std_logic_vector(2 DownTo 0) ;Constant red:std_logic_vector(2 DownTo 0) := ”100 ;Constant green: std_logic_vector(2 DownTo 0) := 010 ;Constant yellow: std_logic_vector(2 DownTo 0) := 001 ;BEGIN fsm: PROCESS (clock,
52、reset)BEGIN IF reset = 1 THEN sm IF timer1=1 THEN sm = green; ELSE sm IF timer2=1 THEN sm = yellow; ELSE sm IF timer3=1 THEN sm = red; ELSE sm sm = red; END CASE; END IF; END PROCESS fsm; r = sm(2); g = sm(1); y = sm(0);END arch_3;方案三分析StateRegistersOutputsInputsLogicStateredgreenyellowr100g010State
53、 Encoding100010001y001VHDL 結(jié)構(gòu)化設(shè)計基本單元 COMPONENTs已設(shè)計好的一個實體可被其它模塊或高層模塊引用PACKAGEs類似于庫,使實體和結(jié)構(gòu)體內(nèi)的數(shù)據(jù)類型、常量、子程序等對于其他設(shè)計單元可見,包括包體單元和說明單元LIBRARIES存放預(yù)先編譯好的程序包和數(shù)據(jù)的集合體結(jié)構(gòu)化設(shè)計的方法比較bselmux2to1accbmux2to1aselsymbolcomponentschematicentity/architecturelibrarypackagetop level schematictop level entity/architecturertoplev
54、elqscbmux2to1aseltp層次化設(shè)計管理Your Design (VHDL)LIBRARY ieee;USE ieee.std_logic_1164.USE cypress.std_arith.allLibrary (Compiled)ieeeLibrary (Compiled)AlteraPackages (VHDL)Others (VHDL)std_logictypedefinitionsOthers (VHDL)overloadedoperatorsPackages (VHDL)std_logic_1164std_arithPackage 和Component 舉例LIBRA
55、RY ieee; USE ieee.std_logic_1164.ALL; PACKAGE mymuxpkg ISCOMPONENT mux2to1 PORT (a, b, sel: IN std_logic; c: OUT std_logic); END COMPONENT;END mymuxpkg;LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY mux2to1 IS PORT (a, b, sel: IN std_logic; c: OUT std_logic);END mux2to1;ARCHITECTURE archmux2to1 OF
56、mux2to1 ISBEGIN c i(2), b=r(0), sel=s, c=t(0);m1: mux2to1 PortMap (c=t(1), b=r(1), a=i(1), sel=s);i = p AND NOT q;END archtoplevel;第四部分在MAXPLUS II中使用VHDL輸入方式Altera VHDLMax+Plus II 支持 VHDL87 和VHDL93Max+Plus II 只提供這兩個 IEEE 標(biāo)準(zhǔn)的子集詳細信息可參考Altera的VHDL手冊VHDL語言輸入單擊圖標(biāo)VHDL語言輸入建立VHDL源文件VHDL語言輸入將你的 VHDL 文件保存位 na
57、me.VHD兩個名字必須相同VHDL語言輸入選擇VHDL語言編碼標(biāo)準(zhǔn)選擇你想要的版本VHDL語言輸入編譯VHDL文件VHDL語言輸入關(guān)鍵詞用藍色顯示打開此功能VHDL語言輸入選擇單元選擇顏色編譯錯誤定位定位錯誤錯誤位置選中錯誤信息 VHDL模板I forgot .If-then-elsecase-end caseloop-end loop?將這些代碼修改成用戶代碼建立VHDL元件符號輸入 VHDL 代碼建立VHDL元件符號層次化設(shè)計方法進行項目頂層設(shè)計Use this symbol just as you use 7400第五部分將VHDL代碼實現(xiàn)到EAB問題設(shè)計一個狀態(tài)機用于從串行數(shù)據(jù)流中檢
58、測 “011011” 序列檢測到該序列后輸出為“1”MatchSerial_inclkVHDL State MachineVHDL代碼library ieee;use ieee.std_logic_1164.all;package your_own_type istype t_state is (idle,state0,state01,state011, state0110,state01101, state011011);end your_own_type;library ieee;use ieee.std_logic_1164.all;use work.your_own_type.all;
59、Entity stmh isport (clk, serial_in, reset : in std_logic; match : out std_logic);end stmh;architecture body_stmh of stmh issignal present_state : t_state;beginprocess(clk,serial_in, present_state)beginif (reset = 1) thenpresent_state if (serial_in = 1) then present_state = state011011; else present_
60、state present_state present_state = idle;end case;end if;end if;end process;process(present_state)beginif (present_state = state011011) thenmatch = 1;elsematch if (serial_in = 0) then present_state = state0; else present_state if (serial_in = 1) then present_state = state01; else present_state if (s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 媒體變革與未來
- 外交學(xué)院勞動合同(2篇)
- 墓地出售合同(2篇)
- 2024年采購方廉潔合作合同3篇
- 場地土地租賃合同
- 高端制造產(chǎn)業(yè)供應(yīng)鏈合作協(xié)議
- 有關(guān)維修合同范文
- 可再生能源消納保障合同
- 專業(yè)汽車租賃協(xié)議模板2024年完整篇一
- 業(yè)主與物業(yè)公司服務(wù)協(xié)議細項協(xié)定版A版
- 《直升機教材簡體》課件
- 2025年廣東汕頭市人大常委會辦公室招聘聘用人員3人歷年高頻重點提升(共500題)附帶答案詳解
- 2024江蘇泗陽縣交通產(chǎn)業(yè)集團招聘第一線操作人員招聘39人易考易錯模擬試題(共500題)試卷后附參考答案
- GB 19272-2024室外健身器材的安全通用要求
- 北師大版五年級數(shù)學(xué)下冊第3單元第3課時分數(shù)乘法(三)課件
- 2025新外研社版英語七年級下單詞默寫表
- 軟件需求分析報告模板(完整版)
- 金融軟件開發(fā)及維護合同
- 2024年演出經(jīng)紀人資格《思想政治與法律基礎(chǔ)》考前必刷必練題庫500題(含真題、必會題)
- 麻醉與舒適醫(yī)療
- RFID涉密載體管控系統(tǒng)技術(shù)方案-V1.0-20120326
評論
0/150
提交評論