




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VHDL設(shè)計(jì)方法用VHDL語(yǔ)言實(shí)現(xiàn)可編程數(shù)字系統(tǒng)設(shè)計(jì)VHDL設(shè)計(jì)方法VHDL概述VHDL的設(shè)計(jì)單元VHDL的基本語(yǔ)法結(jié)構(gòu)第一部分VHDL 概述VHDL的含義VHSIC (Very High Speed Integrated Circuit)HardwareDescriptionLanguageVHDL歷史1982年, 誕生于美國(guó)國(guó)防部贊助的VHSIC項(xiàng)目1987年底,VHDL被IEEE和美國(guó)國(guó)防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語(yǔ)言 ,即IEEE-1076(簡(jiǎn)稱87版) 1993年,IEEE對(duì)VHDL進(jìn)行了修訂,公布了新版本的VHDL,即IEEE標(biāo)準(zhǔn)的1076-1993(1164)版本 1996年,IEEE
2、-1076.3成為VHDL綜合標(biāo)準(zhǔn)VHDL特點(diǎn)與其他的硬件描述語(yǔ)言相比,VHDL具有更強(qiáng)的行為描述能力 VHDL豐富的仿真語(yǔ)句和庫(kù)函數(shù),使得在設(shè)計(jì)的早期就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時(shí)可對(duì)設(shè)計(jì)進(jìn)行仿真模擬 VHDL語(yǔ)句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能對(duì)于用VHDL完成的一個(gè)確定的設(shè)計(jì),可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動(dòng)的把VHDL描述設(shè)計(jì)轉(zhuǎn)變成門級(jí)網(wǎng)表VHDL對(duì)設(shè)計(jì)的描述具有相對(duì)獨(dú)立性,設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必管理最終設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)器件是什么,而進(jìn)行獨(dú)立的設(shè)計(jì) VHDL與其他HDL比較VHDL“告訴我你想要電路做什么,我給你提供
3、能實(shí)現(xiàn)這個(gè)功能的硬件電路”Verilog和VHDL類似ABEL、AHDL“告訴我你想要什么樣的電路,我給你提供這樣的電路”典型的綜合流程典型的仿真流程第二部分VHDL的設(shè)計(jì)單元VHDL的設(shè)計(jì)單元Entity(實(shí)體)用來(lái)說(shuō)明模型的外部輸入輸出特征Architecture(構(gòu)造體)用來(lái)定義模型的內(nèi)容和功能每一個(gè)構(gòu)造體必須有一個(gè)實(shí)體與它相對(duì)應(yīng),所以兩者一般成對(duì)出現(xiàn)實(shí)體類似一個(gè)“黑盒”,實(shí)體描述了“黑盒”的輸入輸出口黑盒rstd7:0clkq7:0co實(shí)體舉例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ù)類型實(shí)體結(jié)束Generic類屬參量一種端口界面常數(shù),用來(lái)規(guī)定端口的大小、實(shí)體中子元件的數(shù)目等與常數(shù)不同,常數(shù)只能從內(nèi)部賦值而類屬參量可以由實(shí)體外部賦值數(shù)據(jù)類型通常取Integer或Time綜合器僅支持?jǐn)?shù)據(jù)類型為整數(shù)的類屬值。PORTS端口(PORT)是實(shí)體的一部分PORT 類
5、似于器件的管腳,主要用于信號(hào)的傳輸PORT 一般有 Name, Mode, 和 Type端口說(shuō)明格式PORT(SIGNAL Name:Mode Type BUS:=表達(dá)式 , )端口類型IN:數(shù)據(jù)只能從端口流入實(shí)體OUT:數(shù)據(jù)只能從端口流出實(shí)體INOUT:數(shù)據(jù)從端口流入或流出實(shí)體BUFFER:數(shù)據(jù)從端口流出實(shí)體,同時(shí)可被內(nèi)部反饋Entity數(shù)據(jù)類型BIT :位類型,其值只能為 0或 1BIT_VECTOR :位矢量類型,包含一組位類型BOOLEAN:布爾類型,其值可為 TRUE或FALSEINTEGER:整型,范圍為-214783647到214783647(232),綜合時(shí),要對(duì)范圍加以限制。
6、常用于循環(huán)語(yǔ)句的循環(huán)次數(shù)、常量、數(shù)學(xué)函數(shù)或模式仿真Natural:自然數(shù)類型,整型的子類型,含零和正整數(shù)Positive:正整數(shù)類型,整型的子類型,含非零和非負(fù)整數(shù)REAL:浮點(diǎn)類型,范圍為:-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:子類型,一般用來(lái)對(duì)其父類型加以限制例: SUBTYPE Std_Logic IS resolved Std_UlogicTIME:時(shí)間類型,范圍和整型一樣,表達(dá)時(shí)要包括數(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強(qiáng)未知用于仿真0強(qiáng)0用于綜合與仿真1強(qiáng)1用于綜合與仿真Z高阻用于綜合與仿真W弱未知用于仿真L弱0用于綜合與仿真H弱1用于綜合與仿真_忽略用于綜合與仿真Std_Logic數(shù)據(jù)類型它是數(shù)字電路設(shè)計(jì)的工業(yè)標(biāo)準(zhǔn)邏輯類型它增加了VHDL語(yǔ)言編程、綜合和仿真的靈活性在多值邏輯系統(tǒng)中STD_LOGIC和 STD_
9、LOGIC_VECTOR 用于取代 BIT 和 BIT_VECTOR 若電路中有三態(tài)邏輯(Z) 必須用STD_LOGIC 和 STD_LOGIC _VECTOR 要使用這種類型代碼中必須申明庫(kù)和程序包說(shuō)明語(yǔ)句LIBRARY ieee;USE ieee.std_logic_1164.ALL;練習(xí)一編寫包含以下內(nèi)容的實(shí)體代碼端口 D 為12位輸入總線 端口 OE 和 CLK 都是1位輸入端口 AD 為 12位雙向總線端口 A為12位輸出總線端口 INT 是1位輸出端口 AS 是一位輸出同時(shí)被用作內(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)造體用來(lái)描述實(shí)體的內(nèi)部結(jié)構(gòu)和邏輯功能必須和
11、實(shí)體(ENTITY)相聯(lián)系一個(gè)實(shí)體(ENTITY)可以有多個(gè)構(gòu)造體構(gòu)造體的運(yùn)行是并發(fā)的構(gòu)造體描述方式包括:行為描述結(jié)構(gòu)描述混合描述實(shí)體和構(gòu)造體之間的關(guān)系Input 1Input nOutput 1Output n實(shí)體ABCDSelMUX_Out2構(gòu)造體結(jié)構(gòu)圖構(gòu)造體說(shuō)明語(yǔ)句功能描述語(yǔ)句塊語(yǔ)句進(jìn)程語(yǔ)句信號(hào)賦值語(yǔ)句子程序調(diào)用語(yǔ)句元件例化語(yǔ)句由一系列并行執(zhí)行語(yǔ)句構(gòu)成的組合體,它的功能是將結(jié)構(gòu)體中的并行語(yǔ)句組成一個(gè)或多個(gè)子模塊 定義順序語(yǔ)句模塊,用以將從外部獲得的信號(hào)值,或內(nèi)部的運(yùn)算數(shù)據(jù)向其它的信號(hào)進(jìn)行賦值。將設(shè)計(jì)實(shí)體內(nèi)的處理結(jié)果向定義的信號(hào)或界面端口進(jìn)行賦值用以調(diào)用過(guò)程或函數(shù),并將獲得的結(jié)果賦值于信號(hào)
12、對(duì)其它的設(shè)計(jì)實(shí)體作元件調(diào)用說(shuō)明,并將此元件的端口與其它的元件、信號(hào)或高層次實(shí)體的界面端口進(jìn)行連接。構(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ù)對(duì)象常數(shù)指在設(shè)計(jì)中不會(huì)變的值改善代碼可讀性,便于代碼修改必須在程序包、實(shí)體、構(gòu)造體或進(jìn)
13、程的說(shuō)明區(qū)域加以說(shuō)明一般要賦一初始值保留字CONSTANT例:CONSTANTWidth : Integer :=8數(shù)據(jù)對(duì)象信號(hào)可代表連線、內(nèi)連元件、或端口用“=”來(lái)給信號(hào)賦值SIGNALSIGNAL Count: Bit_Vector(3 downto 0);IF Rising_Edge(clk) THENCount=Count+1;END IF;信號(hào)在Package、Entity、Architecture 中聲明數(shù)據(jù)對(duì)象信號(hào)MUXREGSIGNALSIGNALSIGNALSIGNALPROCESSPROCESS信號(hào)舉例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端口信號(hào)在構(gòu)造體內(nèi)聲明的內(nèi)部連接信號(hào)信號(hào)賦值SIGNAL temp : Std_Logic_Vector (7 downto 0);整體賦值:temp = “10101010”;temp = x”AA” ; 逐位賦值:tem
15、p(7) = 1;多位賦值:temp (7 downto 4) = “1010”;多位賦值用雙引號(hào)逐位賦值用單引號(hào)賦值標(biāo)志數(shù)據(jù)對(duì)象變量?jī)H用于進(jìn)程和子程序必須在進(jìn)程和子程序的說(shuō)明性區(qū)域說(shuō)明不能表達(dá)連線和存儲(chǔ)元件保留字VARIABLEVARIABLE tmp : Bit;tmp:=1;變量賦值整體賦值:temp := “10101010”;temp := x”AA” ; 逐位賦值:temp(7) := 1;多位賦值temp (7 downto 4) := “1010”;多位賦值用雙引號(hào)逐位賦值用單引號(hào)賦值標(biāo)志信號(hào)和變量的作用范圍ARCHITECTURESIGNAL 描述label1: PROCES
16、S1VARIABLE 描述label2: PROCESS2VARIABLE 描述在進(jìn)程的外面聲明作用范圍為全局在進(jìn)程內(nèi)部說(shuō)明作用范圍為進(jìn)程內(nèi)信號(hào)和變量的區(qū)別信號(hào)變量賦值符號(hào)=:=功能電路的內(nèi)部連接內(nèi)部數(shù)據(jù)交換作用范圍全局,進(jìn)程和進(jìn)程之間的通信進(jìn)程的內(nèi)部行為延遲一定時(shí)間后才賦值立即賦值算術(shù)運(yùn)算符運(yùn)算符功能運(yùn)算符功能+加SLL邏輯左移-減SRL邏輯右移*乘SLA算術(shù)左移/除SRA算術(shù)右移*乘方ROL邏輯循環(huán)左移MOD取模ROR邏輯循環(huán)右移REM取余ABS取絕對(duì)值關(guān)系運(yùn)算符運(yùn)算符功能=等于/=不等于小于大于=小于等于=大于等于邏輯運(yùn)算符運(yùn)算符功能AND與OR或NAND與非NOR或非XOR異或XNOR
17、異或非NOT非其他運(yùn)算符運(yùn)算符功能+正-負(fù)&并置運(yùn)算優(yōu)先級(jí)*ABSNOT*/MODREM+正-負(fù)+-&SLLSLASRLSRAROLROR=ANDORNANDNORXORXNOR高低運(yùn)算重載若兩信號(hào)類型不同,不能將一個(gè)信號(hào)的值賦給另一信號(hào)數(shù)據(jù)轉(zhuǎn)換必須要用運(yùn)算重載一般可用IEEE .1164中的標(biāo)準(zhǔn)重載函數(shù)實(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并行語(yǔ)句并行語(yǔ)句1構(gòu)造體并行語(yǔ)
18、句2并行語(yǔ)句3signalsignal并行語(yǔ)句 VHDL語(yǔ)言與傳統(tǒng)軟件描述語(yǔ)言最大的不同有多種語(yǔ)句格式,包括:并行信號(hào)賦值語(yǔ)句、進(jìn)程語(yǔ)句、塊語(yǔ)句、條件信號(hào)賦值語(yǔ)句、元件例化語(yǔ)句、生成語(yǔ)句、并行過(guò)程調(diào)用語(yǔ)句各種并行語(yǔ)句在結(jié)構(gòu)體中的執(zhí)行是同步進(jìn)行的,或者說(shuō)是并行運(yùn)行的,其執(zhí)行方式與書寫的順序無(wú)關(guān)。在執(zhí)行中,并行語(yǔ)句之間可以有信息往來(lái),也可以是互為獨(dú)立、互不相關(guān)、異步運(yùn)行的(如多時(shí)鐘情況)。每一并行語(yǔ)句內(nèi)部的語(yǔ)句運(yùn)行方式可以有兩種不同的方式,即并行執(zhí)行方式(如塊語(yǔ)句)和順序執(zhí)行方式(如進(jìn)程語(yǔ)句)。布爾表達(dá)式VHDL支持所有的標(biāo)準(zhǔn)邏輯運(yù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選擇信號(hào)語(yǔ)句所有的“WHEN”子句必須是互斥的一般用 “When Others”來(lái)處理未考慮到的情況只有一個(gè)參考信號(hào)和賦值符 (=)每一子句結(jié)尾是逗號(hào),最后一句是分號(hào)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語(yǔ)句舉例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語(yǔ)句With_Select_Then語(yǔ)句舉例每個(gè)WHEN子句可以包含多個(gè)條件:WITH s SELECT x = a WHEN ”000” | “001” | “010”, b WHEN 101 | 111, c WHEN OTHERS;表示或邏輯When_Else選擇信號(hào)語(yǔ)句根據(jù)指定條件對(duì)信號(hào)賦值,條件可以為任意表達(dá)式根據(jù)條件的出現(xiàn)的先后次序隱含優(yōu)先權(quán)最后一個(gè) ELSE子句隱含了所有未列出的條件每一子句的結(jié)尾沒(méi)有標(biāo)點(diǎn),只有最后一句有分號(hào)signal_nam
22、e =value_1 WHEN condition1 ELSE value_2 WHEN condition2 ELSE . value_n WHEN conditionn ELSE value_x;When_Else語(yǔ)句舉例x = a when (s = “00”) else b when (s = “01”) else c when (s = “10”) else d ;axmuxcbds2隱含了優(yōu)先權(quán)隱含了所有未列出的條件When_Else語(yǔ)句舉例 j = w when (a = 1) else x when (b = 1) else y when (c = 1) elsez when
23、(d = 1) else0 ;允許有多個(gè)控制信號(hào)進(jìn)程語(yǔ)句VHDL中最重要的語(yǔ)句,具有并行和順序行為的雙重性進(jìn)程和進(jìn)程語(yǔ)句之間是并行關(guān)系進(jìn)程內(nèi)部是一組連續(xù)執(zhí)行的順序語(yǔ)句進(jìn)程語(yǔ)句與構(gòu)造體中的其余部分進(jìn)行信息交流是靠信號(hào)完成的基本格式:進(jìn)程標(biāo)號(hào): PROCESS (信號(hào)敏感表) IS說(shuō)明區(qū)BEGIN順序語(yǔ)句END PROCESS 進(jìn)程標(biāo)號(hào);進(jìn)程語(yǔ)句PROCESS1PROCESSnsignalsignalARCHITECTURE一個(gè)構(gòu)造體可以有多個(gè)進(jìn)程語(yǔ)句進(jìn)程和進(jìn)程之間是并行的進(jìn)程和進(jìn)程之間的數(shù)據(jù)交換通過(guò)信號(hào)完成進(jìn)程內(nèi)部是順序語(yǔ)句信號(hào)敏感表進(jìn)程賴以啟動(dòng)的敏感表。對(duì)于表中列出的任何信號(hào)的改變,都將啟動(dòng)進(jìn)
24、程,執(zhí)行進(jìn)程內(nèi)相應(yīng)順序語(yǔ)句一些VHDL綜合器,綜合后,對(duì)應(yīng)進(jìn)程的硬件系統(tǒng)對(duì)進(jìn)程中的所有輸入的信號(hào)都是敏感的,不論在源程序的進(jìn)程中是否把所有的信號(hào)都列人敏感表中為了使軟件仿真與綜合后的硬件仿真對(duì)應(yīng)起來(lái),應(yīng)當(dāng)將進(jìn)程中的所有輸人信號(hào)都列入敏感表中順序語(yǔ)句每一條順序語(yǔ)句的執(zhí)行(指仿真執(zhí)行)順序是與它們的書寫順序基本一致的順序語(yǔ)句只能出現(xiàn)在進(jìn)程(Process) 、函數(shù)(Funcation)和過(guò)程(Procedure)中順序語(yǔ)句包括:賦值語(yǔ)句、流程控制語(yǔ)句、等待語(yǔ)句、子程序調(diào)用語(yǔ)句、返回語(yǔ)句、空操作語(yǔ)句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;進(jìn)程語(yǔ)句舉例兩個(gè)進(jìn)程是并發(fā)的進(jìn)程的運(yùn)行依賴于敏感表內(nèi)參數(shù)的變化敏感表舉例latchlabel: PROCESS(oe)BEGINIF oe=1 THEN y = a; END IF;END PROCESS if_label;仿真結(jié)果錯(cuò)誤敏感表舉例latchlabel: PROCESS(oe,a)BEGINIF oe=1 THEN y = a; END IF;END PROCESS if_label;仿真結(jié)果正確順序賦值語(yǔ)句舉例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;順序賦值語(yǔ)句舉例警告順序賦值語(yǔ)句舉例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順序賦值語(yǔ)句舉例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;并行賦值語(yǔ)句DDDQQQdabclkqDQdclkqDDQQdaclkqDDQQdaclkq順序賦值語(yǔ)句舉例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變量定義在時(shí)序電路中的變量賦值變量在IF語(yǔ)句中被賦值,以用來(lái)表示隨時(shí)鐘的變化,不會(huì)產(chǎn)生觸發(fā)器變量只代表臨時(shí)存儲(chǔ),不反映實(shí)際硬件變量可用在表示一數(shù)據(jù)立即變化的表達(dá)式中,然后再將變量的值賦給信號(hào)IF_THEN_ELSE語(yǔ)句只能在進(jìn)程內(nèi)使用至少應(yīng)有一個(gè)條件句,條件句必須由布爾表達(dá)式構(gòu)成。
31、根據(jù)條件句產(chǎn)生的判斷結(jié)果TRUE或FALSE,有條件地選擇執(zhí)行其后的順序語(yǔ)句。IF 條件句 Then 順序語(yǔ)句ENDIFIF 條件句 THEN 順序語(yǔ)句ELSE 順序語(yǔ)句ENDIFIF 條件句 Then 順序語(yǔ)句 ELSIF 條件句 Then 順序語(yǔ)句 ELSE 順序語(yǔ)句ENDIFIF_THEN_ELSE語(yǔ)句 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 ;必須在進(jìn)程內(nèi)使用IF_THEN_ELSE語(yǔ)句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語(yǔ)句基本格式:LOOP標(biāo)號(hào):重復(fù)模式 LOOP順序語(yǔ)句;END LOOP LOOP標(biāo)號(hào)WHILE LOOP順序語(yǔ)句END LOOP;FOR IN LOOP順序語(yǔ)句END LOOP;LOOP標(biāo)號(hào): LOOP順序語(yǔ)句EXIT LOOP標(biāo)號(hào) ;END LOOP;NEXT LOOP標(biāo)號(hào) WHEN 語(yǔ)句LOOP語(yǔ)句示例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; 時(shí)序電路舉例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)代替沒(méi)有ELSE語(yǔ)句時(shí)序電路舉例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;異步清零時(shí)序電路舉例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ù)“+”重載時(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;信號(hào)傳遞三態(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)志一個(gè)以存在的數(shù)據(jù)對(duì)象引用別名等效于引用原始數(shù)據(jù)對(duì)象給別名賦值等效于給原始數(shù)據(jù)賦值常作為標(biāo)識(shí)一組數(shù)據(jù)類型保留字:ALIASALIAS Bank:Bit_Vector(0 to 3) IS Address(24 to 27);狀態(tài)機(jī)設(shè)計(jì)RESET(asynchronous)RED
45、TIMER1YELLOWGREENTIMER1TIMER2TIMER2Y=1G=1TIMER3TIMER3R=1二進(jìn)制狀態(tài)機(jī)編碼狀態(tài)機(jī)的每一個(gè)狀態(tài)用二進(jìn)制位來(lái)編碼例:實(shí)現(xiàn)4狀態(tài)的狀態(tài)機(jī),其二進(jìn)制編碼可為 狀態(tài)1“00” 狀態(tài)2“01”狀態(tài)3“10”狀態(tài)4“11”特點(diǎn)觸發(fā)器使用較少,速度較慢,可能產(chǎn)生兩位同時(shí)翻轉(zhuǎn)的情況。如:“01”“10”格雷碼狀態(tài)機(jī)編碼格雷碼編碼每次僅一個(gè)狀態(tài)位的值發(fā)生變化 例:實(shí)現(xiàn)4狀態(tài)的狀態(tài)機(jī),其格雷碼編碼可為 狀態(tài)1“00” 狀態(tài)2“01” 狀態(tài)3“11” 狀態(tài)4“10”特點(diǎn)觸發(fā)器使用較少,速度較慢,不會(huì)產(chǎn)生兩位同時(shí)翻轉(zhuǎn)的情況。當(dāng)狀態(tài)位的輸出被異步應(yīng)用時(shí),格雷碼編碼是特
46、別有益的ONE HOT狀態(tài)機(jī)編碼ONE HOT的編碼方案對(duì)每一個(gè)狀態(tài)采用一個(gè)觸發(fā)器,即4個(gè)狀態(tài)的狀態(tài)機(jī)需4個(gè)觸發(fā)器。同一時(shí)間僅1個(gè)狀態(tài)位處于邏輯“l(fā)”電平例:實(shí)現(xiàn)4狀態(tài)的狀態(tài)機(jī),其ONE HOT編碼可為 狀態(tài)1“0001” 狀態(tài)2“0010” 狀態(tài)3“0100” 狀態(tài)4“1000”特點(diǎn)觸發(fā)器使用較多,但邏輯簡(jiǎn)單,速度快編碼方式的選擇根據(jù)狀態(tài)機(jī)復(fù)雜程度狀態(tài)特別多的系統(tǒng)只能采用2進(jìn)制編碼或格雷碼編碼根據(jù)器件類型FPGA一般采用ONE HOT編碼,CPLD一般采用2進(jìn)制編碼或格雷碼編碼 從非法狀態(tài)中退出在選擇編碼方案時(shí),必須考慮狀態(tài)機(jī)可能進(jìn)入的潛在的非法狀態(tài)數(shù)目。如果違反了狀態(tài)位觸發(fā)器的建立或保持時(shí)
47、間,又沒(méi)有定義所有可能出現(xiàn)的狀態(tài),則你的設(shè)計(jì)會(huì)終止在非法狀態(tài)上。狀態(tài)機(jī)設(shè)計(jì)實(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)機(jī)設(shè)計(jì)方案一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)機(jī)設(shè)計(jì)方案二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)機(jī)設(shè)計(jì)方案三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è)計(jì)基本單元 COMPONENTs已設(shè)計(jì)好的一個(gè)實(shí)體可被其它模塊或高層模塊引用PACKAGEs類似于庫(kù),使實(shí)體和結(jié)構(gòu)體內(nèi)的數(shù)據(jù)類型、常量、子程序等對(duì)于其他設(shè)計(jì)單元可見,包括包體單元和說(shuō)明單元LIBRARIES存放預(yù)先編譯好的程序包和數(shù)據(jù)的集合體結(jié)構(gòu)化設(shè)計(jì)的方法比較bselmux2to1accbmux2to1aselsymbolcomponentschematicentity/architecturelibrarypackagetop level schematictop level entity/architecturertoplev
54、elqscbmux2to1aseltp層次化設(shè)計(jì)管理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 只提供這兩個(gè) IEEE 標(biāo)準(zhǔn)的子集詳細(xì)信息可參考Altera的VHDL手冊(cè)VHDL語(yǔ)言輸入單擊圖標(biāo)VHDL語(yǔ)言輸入建立VHDL源文件VHDL語(yǔ)言輸入將你的 VHDL 文件保存位 na
57、me.VHD兩個(gè)名字必須相同VHDL語(yǔ)言輸入選擇VHDL語(yǔ)言編碼標(biāo)準(zhǔn)選擇你想要的版本VHDL語(yǔ)言輸入編譯VHDL文件VHDL語(yǔ)言輸入關(guān)鍵詞用藍(lán)色顯示打開此功能VHDL語(yǔ)言輸入選擇單元選擇顏色編譯錯(cuò)誤定位定位錯(cuò)誤錯(cuò)誤位置選中錯(cuò)誤信息 VHDL模板I forgot .If-then-elsecase-end caseloop-end loop?將這些代碼修改成用戶代碼建立VHDL元件符號(hào)輸入 VHDL 代碼建立VHDL元件符號(hào)層次化設(shè)計(jì)方法進(jìn)行項(xiàng)目頂層設(shè)計(jì)Use this symbol just as you use 7400第五部分將VHDL代碼實(shí)現(xiàn)到EAB問(wèn)題設(shè)計(jì)一個(gè)狀態(tài)機(jī)用于從串行數(shù)據(jù)流中檢
58、測(cè) “011011” 序列檢測(cè)到該序列后輸出為“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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)海上光伏行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 安全文明出行課件
- 土地租地合同協(xié)議書文庫(kù)
- 天氣創(chuàng)意課件圖片
- 非遺項(xiàng)目商業(yè)計(jì)劃書范文
- 文化墻安裝合同協(xié)議書
- 安裝學(xué)徒合同協(xié)議書模板
- 戀愛(ài)合同協(xié)議書抖音
- 音樂(lè)版權(quán)代理相關(guān)行業(yè)項(xiàng)目成效實(shí)現(xiàn)方案
- 天成貴龍文化課件模板
- 山東大學(xué)《概率論與數(shù)理統(tǒng)計(jì)》期末試題及答案
- 城市軌道交通客運(yùn)組織電子教案(全)完整版課件整套教學(xué)課件
- GB∕T 33917-2017 精油 手性毛細(xì)管柱氣相色譜分析 通用法
- 高壓氧治療操作規(guī)程以及護(hù)理常規(guī)
- 新能源汽車的研究論文
- 材料科學(xué)基礎(chǔ)基礎(chǔ)知識(shí)點(diǎn)總結(jié)
- 數(shù)控銑工圖紙(60份)(共60頁(yè))
- 惠州市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(kù)(含答案)
- 加工設(shè)備工時(shí)單價(jià)表
- 高脂血癥藥物治療ppt課件
- 高層建筑等電位聯(lián)結(jié)安裝技術(shù)分析探討
評(píng)論
0/150
提交評(píng)論