VHDL語言入門教程ppt課件_第1頁
VHDL語言入門教程ppt課件_第2頁
VHDL語言入門教程ppt課件_第3頁
VHDL語言入門教程ppt課件_第4頁
VHDL語言入門教程ppt課件_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、3 VHDL語言,VHDL: VHSIC Hardware Description Language,3.1 VHDL語言基礎(chǔ) 3.2 VHDL基本結(jié)構(gòu) 3.3 VHDL語句 3.4 狀態(tài)機(jī)在VHDL中的實(shí)現(xiàn) 3.5 常用電路VHDL程序 3.6 VHDL仿真 3.7 VHDL綜合,HDL-Hardware Description Language 一種用于描述數(shù)字電路的功能或行為的語言。目的是提為電路設(shè)計(jì)效率,縮短設(shè)計(jì)周期,減小設(shè)計(jì)成本,可在芯片制造前進(jìn)行有效的仿真和錯(cuò)誤檢測,優(yōu)點(diǎn): HDL設(shè)計(jì)的電路能獲得非常抽象級的描述。如基于RTL(Register Transfer Level)描述的

2、IC,可用于不同的工藝。 HDL設(shè)計(jì)的電路,在設(shè)計(jì)的前期,就可以完成電路的功能級的驗(yàn)證。 HDL設(shè)計(jì)的電路類似于計(jì)算機(jī)編程,常用的HDL語言:VHDL 、Verilog HDL,VHDL是美國國防部在20世紀(jì)80年代初為實(shí)現(xiàn)其高速集成電路硬件VHSIC計(jì)劃提出的描述語言; IEEE從1986年開始致力于VHDL標(biāo)準(zhǔn)化工作,融合了其它ASIC芯片制造商開發(fā)的硬件描述語言的優(yōu)點(diǎn),于93年形成了標(biāo)準(zhǔn)版本(IEEE.std_1164)。 1995年,我國國家技術(shù)監(jiān)督局推薦VHDL做為電子設(shè)計(jì)自動(dòng)化硬件描述語言的國家標(biāo)準(zhǔn),VHDL 概述,覆蓋面廣,系統(tǒng)硬件描述能力強(qiáng),是一個(gè)多層次的硬件描述語言; VHD

3、L語言具有良好的可讀性,既可以被計(jì)算機(jī)接受,也容易被人們所理解; VHDL語言可以與工藝無關(guān)編程; VHDL語言已做為一種IEEE的工業(yè)標(biāo)準(zhǔn),便于使用、交流和推廣,VHDL優(yōu)點(diǎn),設(shè)計(jì)的最終實(shí)現(xiàn)取決于針對目標(biāo)器件的編程器,工具的不同會導(dǎo)致綜合質(zhì)量不一樣,3.1.1 標(biāo)識符(Identifiers,要求: 首字符必須是字母 末字符不能為下劃線 不允許出現(xiàn)兩個(gè)連續(xù)的下劃線 不區(qū)分大小寫 VHDL定義的保留字(關(guān)鍵字),不能用作標(biāo)識符 標(biāo)識符字符最長可以是32個(gè)字符,注釋由兩個(gè)連續(xù)的虛線()引導(dǎo),3.1 VHDL語言基礎(chǔ),標(biāo)識符用來定義常數(shù)、變量、信號、端口、子程序或參數(shù)的名字, 由字母(AZ,az)

4、、數(shù)字(09)和下劃線(_)字符組成,例如:ABS, ACCESS,AFTER,ALL,AND,ARCHITECTURE,ARRAY,ATTRIBUTE,BEGIN,BODY,BUFFER,BUS,CASE ,COMPONENT,CONSTANT,DISCONNECT,DOWNTO,ELSE,ELSIF,END,ENTITY,EXIT,F(xiàn)ILE,F(xiàn)OR,F(xiàn)UNCTION,GENERIC,GROUP,IF,INPURE,IN,INOUT,IS,LABEL,LIBRARY,LINKAGE,LOOP,MAP,MOD,NAND,NEW,NEXT,NOR ,NOT,NULL,OF,ON,OPEN ,OR

5、 ,OTHERS,OUT,PACKAGE,POUT,PROCEDURE ,PROCESS,PURE,RANGE ,RECODE,REM,REPORT,RETURN,ROL,ROR,SELECT,SHARED,SIGNAL,SLA,SLL,SRA,SUBTYPE,THEN,TRANSPORT,TO,TYPE ,UNAFFECTED,UNITS,UNTIL,USE,VARIABLE,WAIT,WHEN,WHILE,WITH,XOR ,XNOR,關(guān)鍵字(保留字,關(guān)鍵字(keyword)是VHDL中具有特別含義的單詞,只能做為固定的用途,用戶不能用其做為標(biāo)識符,3.1.2 數(shù)據(jù)對象(Date Obje

6、cts,常量Constant,Constant bus_width: integer := 8; -定義總線寬度為常數(shù)8,數(shù)據(jù)對象包括常量、變量、信號和文件四種類型,常量是對某一常量名賦予一個(gè)固定的值,而且只能賦值一次。通常賦值在程序開始前進(jìn)行,該值的數(shù)據(jù)類型則在說明語句中指明,Constant 常數(shù)名:數(shù)據(jù)類型:表達(dá)式,Constant Vcc:real:=5.0; -定義Vcc的數(shù)據(jù)類型是實(shí)數(shù),賦值為5.0V,常量所賦的值應(yīng)和定義的數(shù)據(jù)類型一致,常量在程序包、實(shí)體、構(gòu)造體或進(jìn)程的說明性區(qū)域內(nèi)必須加以說明。定義在程序包內(nèi)的常量可供所含的任何實(shí)體、構(gòu)造體所引用,定義在實(shí)體說明內(nèi)的常量只能在該實(shí)

7、體內(nèi)可見,定義在進(jìn)程說明性區(qū)域中的常量只能在該進(jìn)程內(nèi)可見,Variable 變量名:數(shù)據(jù)類型 :初始值,Variable count: integer 0 to 255:=20 ; - 定義count整數(shù)變量,變化 范圍0255,初始值為20,變量Variable,變量只能在進(jìn)程語句、函數(shù)語句和過程語句結(jié)構(gòu)中使用。變量的賦值是直接的,非預(yù)設(shè)的,分配給變量的值立即成為當(dāng)前值,變量不能表達(dá)“連線”或存儲元件,不能設(shè)置傳輸延遲量,變量賦值語句: 目標(biāo)變量名 := 表達(dá)式,變量定義語句,x:=10.0; - 實(shí)數(shù)變量賦值為10.0 Y:=1.5+x; - 運(yùn)算表達(dá)式賦值,注意表達(dá)式必須與目標(biāo)變量的數(shù)據(jù)

8、類型相同 A(3 to 6):=(“1101”); -位矢量賦值,Signal 信號名: 數(shù)據(jù)類型 :初始值,Signal clock:bit :=; -定義時(shí)鐘信號類型,初始值為0,信號Signal,信號表示邏輯門的輸入或輸出,類似于連接線,也可以表達(dá)存儲元件的狀態(tài)。信號通常在構(gòu)造體、程序包和實(shí)體中說明,信號定義語句,Signal count:BIT_VECTOR(3 DOWNTO 0); -定義count為4位位矢量,信號賦值語句: 目標(biāo)信號名 = 表達(dá)式,x=9; Z=x after 5 ns; - 在5ns后將x的值賦予z,3.1.2 數(shù)據(jù)類型,布爾:(Boolean,位: ( Bit

9、 ) TYPE BIT IS (0,1); -取值為0和1,用于邏輯運(yùn)算,位矢量: ( Bit_Vector ) TYPE BIT_VECTOR IS ARRAY (Natural range) OF BIT; - 基于Bit類型的數(shù) 組,用于邏輯運(yùn)算 SIGNAL a:Bit_Vector(0 TO 7); SIGNAL a:Bit_Vector ( 7 DOWNTO 0,VHDL的預(yù)定義數(shù)據(jù)類型,在VHDL標(biāo)準(zhǔn)程序包STANDARD中定義好,實(shí)際使用過程中,已自動(dòng)包含進(jìn)VHDL源文件中,不需要通過USE語句顯式調(diào)用,TYPE BOOLEAN IS (FALSE, TRUE); - 取值為F

10、ALSE和TRUE,不是數(shù)值,不 能運(yùn)算,一般用于關(guān)系運(yùn)算符,整數(shù):(Integer) 取值范圍 -(231-1) (231-1),可用32位有符號的二進(jìn)制數(shù)表示 variable a:integer range -63 to 63 在實(shí)際應(yīng)用中,VHDL仿真器將Integer做為有符號數(shù)處理,而VHDL綜合器將Integer做為無符號數(shù)處理; 要求用RANGE子句為所定義的數(shù)限定范圍,以便根據(jù)范圍來決定表示此信號或變量的二進(jìn)制數(shù)的位數(shù),字符:(Character) TYPE CHARACTER IS (NUL, SOH,STX, , , !,); -通常用引起 來,區(qū)分大小寫,字符串:(St

11、ring) VARIABLE string_var: STRING (1 TO 7); string_var:=“A B C D” ; - 通常用“”引起來,區(qū)分大小寫,實(shí)數(shù):(Real) 取值范圍 -1.0E38 +1.0E38,僅用于仿真不可綜合 1.0 -十進(jìn)制浮點(diǎn)數(shù) 843.6e+4 -八進(jìn)制浮點(diǎn)數(shù) 43.6E-4 -十進(jìn)制浮點(diǎn)數(shù),時(shí)間:(Time) 物理量數(shù)據(jù),完整的包括整數(shù)和單位兩個(gè)部分,用至少一個(gè)空格隔開,僅用于仿真不可綜合; fs,ps,ns,us,ms,sec,min,hr,錯(cuò)誤等級(Severity Level) : 表示系統(tǒng)狀態(tài),僅用于仿真不可綜合; TYPE sever

12、ity_level IS (NOTE、WARNING、ERROR、FAILURE,IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量,標(biāo)準(zhǔn)邏輯位(Std_Logic,標(biāo)準(zhǔn)邏輯位矢量( Std_Logic_vector,基于Std_Logic類型的數(shù)組,使用Std_Logic和 Std_Logic_Vector要調(diào)用IEEE庫中的Std_Logic_1164 程序包;就綜合而言,能夠在數(shù)字器件中實(shí)現(xiàn)的是“、0、1、Z”四種狀態(tài)。 在條件語句中,必須要全面考慮Std_Logic的所有可能取值情況,否則綜合器可能會插入不希望的鎖存器,U:Uninitialized; X:Forcing Unkown; 0: Forci

13、ng 0 1: Forcing 1 Z:High Impedance W:Weak Unknown L: Weak 0 H: Weak 1 :Dont care,枚舉:type states is (idle,decision,read,write); type boolean is (false,true); type bit is (0,1,數(shù)組:type value_type is array (127 downto 0) of integer; type matrix_type is array (0 to 15, 0 to 31) of std_logic,用戶自定義,TYPE 數(shù)據(jù)

14、類型名 IS 數(shù)據(jù)類型定義 OF 基本數(shù)據(jù)類型 或 TYPE 數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義,SUBTYPE 子類型名 IS 基本數(shù)據(jù)類型定義 RANGE 約束范圍,subtype digit is integer range 0 to 9,3.1.3 數(shù)據(jù)類型轉(zhuǎn)換,VHDL為強(qiáng)定義類型語言,不同類型的數(shù)據(jù)不能進(jìn)行運(yùn)算和直接賦值,類型標(biāo)記法,Variable A: integer; Variable B: real; A= integer (B); B=real (A,函數(shù)法,Conv_interger (A);-由std_logic轉(zhuǎn)換為integer型,在std_logic_unsigne

15、d包,常數(shù)轉(zhuǎn)換法 / 常量轉(zhuǎn)換法,Type conv_table is array(std_logic) of bit; Constant table: conv_table:=(0|L=0, 1|H=1, others=0); Signal a: bit; signal b: std_logic; A=table(b); - 將std_logic型轉(zhuǎn)換為bit型,具有轉(zhuǎn)換表性質(zhì)的常數(shù),在“STD_LOGIC_1164”、“STD_LOGIC_ARITH”和 “STD_LOGIC_UNSIGNED”的程序包中提供的數(shù)據(jù)類型變換函數(shù),屬性,屬性提供的是關(guān)于信號、類型等的指定特性,event:若屬

16、性對象有事件發(fā)生,則生成布爾值“true”,常用來檢查時(shí)鐘邊沿是否有效,上升沿:Clock EVENT AND Clock=1,range:生成一個(gè)限制性數(shù)組對象的范圍,left:生成數(shù)據(jù)類型或數(shù)據(jù)子類型的左邊界值,right , high, low, length,range: “0 to n” ; reverse_range:“n downto 0,運(yùn)算符,算術(shù)運(yùn)算符:, , *, / , MOD, REM ,SLL ,SRL ,SLA, SRA ,ROL ,ROR ,*,ABS,關(guān)系運(yùn)算符:, /, ,,邏輯運(yùn)算符:AND,OR,NAND,NOR,XNOR,NOT,XOR,賦值運(yùn)算符:=

17、,:,關(guān)聯(lián)運(yùn)算符:,其他運(yùn)算符:, ,,并置操作符,SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; . a = 10d(1)1 ; - 元素與元素并置,并置后的數(shù)組長度為4 . IF a d = 101011 THEN . - 在IF條件句中可以使用并置符,運(yùn)算符優(yōu)先級別,邏輯、算術(shù)運(yùn)算符( NOT, *,ABS,乘法運(yùn)算符(/ , MOD, REM, *,正負(fù)運(yùn)算符:,,加減、并置運(yùn)算符:, , ,關(guān)系運(yùn)算符:, /, ,,邏輯運(yùn)算符:AND,OR,NAND,NOR,X

18、NOR,NOT,XOR,移位運(yùn)算符的左邊為一維數(shù)組,其類型必須是BIT或BOOLEAN,右邊必須是整數(shù)移位次數(shù)為整數(shù)的絕對值,移位運(yùn)算符操作示意圖,1100”SLL1 =“1000” “1100”SRL1 =“0110” “1100”SLA1 =“1000” “1100”SRA1 =“1110” “1100”ROL1 =“1001” “1100”ROR1 =“0110,SLL:將位向量左移,右邊移空位補(bǔ)零; SRL:將位向量右移,左邊移空位補(bǔ)零; SLA:將位向量左移,右邊第一位的數(shù)值保持原值不變; SRA:將位向量右移,左邊第一位的數(shù)值保持原值不變; ROL和ROR:自循環(huán)左右移位,取余運(yùn)算

19、(a REM b)的符號與a相同,其絕對值小于b的絕對值。 例如:(-5)REM 2=(-1) 5 REM 2=(1,取模運(yùn)算(a MOD b)的符號與b相同,其絕對值小于b的絕對值。 例如:(-5)MOD 2=1 5 MOD (- 2)=(-1,3.2 VHDL基本結(jié)構(gòu),實(shí)體(Entity):描述所設(shè)計(jì)的系統(tǒng)的外部接口信號,定義電路設(shè)計(jì)中所有的輸入和輸出端口; 結(jié)構(gòu)體 (Architecture):描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為; 包集合 (Package):存放各設(shè)計(jì)模塊能共享的數(shù)據(jù)類型、常數(shù)和子程序等; 配置 (Configuration):指定實(shí)體所對應(yīng)的結(jié)構(gòu)體; 庫 (Library):存

20、放已經(jīng)編譯的實(shí)體、結(jié)構(gòu)體、包集合和配置,LIBRARY IEEE; - 庫、程序包的說明調(diào)用 USE IEEE.Std_Logic_1164.ALL; ENTITY FreDevider IS - 實(shí)體聲明 PORT (Clock: IN Std_logic; Clkout: OUT Std_logic ); END; ARCHITECTURE Behavior OF FreDevider IS - 結(jié)構(gòu)體定義 SIGNAL Clk:Std_Logic; BEGIN PROCESS(Clock) BEGIN IF rising_edge(Clock) THEN Clk=NOT Clk; END

21、 IF; END PROCESS; Clkout=Clk; END,VHDL的基本設(shè)計(jì)單元結(jié)構(gòu):程序包說明、實(shí)體說明和結(jié)構(gòu)體說明三部分,3.2.1 實(shí)體(Entity,ENTITY 實(shí)體名 IS GENERIC(常數(shù)名:數(shù)據(jù)類型:設(shè)定值) PORT ( 端口名1:端口方向 端口類型; 端口名2:端口方向 端口類型; . . 端口名n:端口方向 端口類型 ); END 實(shí)體名,實(shí)體描述了設(shè)計(jì)單元的輸入輸出接口信號或引腳,是設(shè)計(jì)實(shí)體經(jīng)封裝后對外的一個(gè)通信界面,ENTITY FreDevider IS PORT (Clock: IN Std_logic; Clokout: OUT Std_logic

22、 ); END,實(shí)體名,最后一條端口聲明語句無分號,端口方向,端口類型,端口名,實(shí)體名由設(shè)計(jì)者自由命名,用來表示被設(shè)計(jì)電路芯片的名稱,但是必須與VHDL程序的文件名稱相同。要與文件名一致,例如: GENERIC(wide:integer:=32); -說明寬度為32 GENERIC(tmp:integer:=1ns); -說明延時(shí)1 ns,類屬說明,類屬為設(shè)計(jì)實(shí)體與外界通信的靜態(tài)信息提供通道,用來規(guī)定端口的大小、實(shí)體中子元件的數(shù)目和實(shí)體的定時(shí)特性等,格式: GENERIC(常數(shù)名:數(shù)據(jù)類型:設(shè)定值; 常數(shù)名:數(shù)據(jù)類型:設(shè)定值,端口方向:IN, OUT,INOUT,BUFFER,OUT”和“BU

23、FFER”都可定義輸出端口,若實(shí)體內(nèi)部需要反饋輸出信號,則輸出端口必須被設(shè)置為“BUFFER”,而不能為“OUT,同方向、同類型的端口可放在同一個(gè)說明語句中,ENTITY Full_adder IS PORT( a, b, c: IN BIT; sum, carry: OUT BIT ); END Full_adder,3.2.2 結(jié)構(gòu)體 (Architecture,ARCHITECTURE 結(jié)構(gòu)體名 OF 實(shí)體名 IS 聲明語句 BEGIN 功能描述語句 END 結(jié)構(gòu)體名,用于聲明該結(jié)構(gòu)體將用到的信號、數(shù)據(jù)類型、常數(shù)、子程序和元件等。聲明的內(nèi)容是局部的,具體描述結(jié)構(gòu)體的功能和行為,結(jié)構(gòu)體定義

24、了設(shè)計(jì)單元具體的功能,描述了該基本設(shè)計(jì)單元的行為、元件和內(nèi)部的連接關(guān)系,一個(gè)實(shí)體可對應(yīng)多個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體代表該實(shí)體功能的不同實(shí)現(xiàn)方案或不同實(shí)現(xiàn)方式。同一時(shí)刻只有一個(gè)結(jié)構(gòu)體起作用,通過CONFIGURATION決定用哪個(gè)結(jié)構(gòu)體進(jìn)行仿真或綜合。 在結(jié)構(gòu)體描述中,具體給出了輸入、輸出信號之間的邏輯關(guān)系,ARCHITECTURE Behavior OF FreDevider IS - 結(jié)構(gòu)體定義 SIGNAL Clk:Std_Logic; -信號聲明 BEGIN PROCESS(Clock) BEGIN IF rising_edge(Clock) THEN Clk=NOT Clk; END IF;

25、 END PROCESS; Clkout=Clk; END,3.2.3 庫、程序包的調(diào)用,LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL,LIBRARY 庫名,USE 庫名.程序包名.項(xiàng)目名,調(diào)用此程序包中所有的資源,LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL; USE IEEE.Std_Logic_Arith.ALL; USE IEEE.Std_Logic_Unsigned.ALL,3.3 VHDL語句,3.3.1 并行語句,在結(jié)構(gòu)體中的執(zhí)行是同時(shí)進(jìn)行,執(zhí)行順序與書寫順序無關(guān),并行信號賦值語句,簡單賦值語句,目標(biāo)信號

26、名 = 表達(dá)式,目標(biāo)信號的數(shù)據(jù)類型與右邊表達(dá)式一致,ARCHITECTURE Behavior OF FreDevider IS SIGNAL Clk:Std_Logic; BEGIN PROCESS(Clock) BEGIN IF rising_edge(Clock) THEN Clk=NOT Clk; END IF; END PROCESS; Clkout=Clk,選擇信號賦值語句,WITH 選擇表達(dá)式 SELECT 賦值目標(biāo)信號 = 表達(dá)式1 WHEN 選擇值1, 表達(dá)式2 WHEN 選擇值1, 表達(dá)式n WHEN OTHERS,選擇值要覆蓋所有可能情況,若不能一一指定,用OTHERS為

27、其他情況找個(gè)出口; 選擇值必須互斥,不能出現(xiàn)條件重復(fù)或重疊的情況,LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL; ENTITY MUX IS PORT ( Data0,Data1,Data2,Data3:IN Std_Logic_VECTOR(7 DOWNTO 0); Sel:IN Std_Logic_Vector(1 DOWNTO 0); DOUT:OUT Std_Logic_Vector(7 DOWNTO 0) ); END; ARCHITECTURE DataFlow OF MUX IS BEGIN WITH Sel SELECT DOUT= Dat

28、a0 WHEN “00”, Data1 WHEN “01”, Data2 WHEN “10”, Data3 WHEN “11”, “00000000” WHEN OTHERS; END,4X1多路選擇器,條件信號賦值語句,賦值目標(biāo)信號 = 表達(dá)式1 WHEN 賦值條件1 ELSE 表達(dá)式2 WHEN 賦值條件2 ELSE 表達(dá)式n WHEN 賦值條件n ELSE 表達(dá)式,各賦值語句有優(yōu)先級的差別,按書寫順序從高到低排列,各賦值條件可以重疊,LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL; ENTITY Priority_Encoder IS PORT ( I

29、:IN Std_Logic_VECTOR(7 DOWNTO 0); A:OUT Std_Logic_Vector(2 DOWNTO 0) ); END; ARCHITECTURE DataFlow OF Priority_Encoder IS BEGIN A=“111” WHEN I(7)=1 ELSE “110” WHEN I(6)=1 ELSE “101” WHEN I(5)=1 ELSE “100” WHEN I(4)=1 ELSE “011” WHEN I(3)=1 ELSE “010” WHEN I(2)=1 ELSE “001” WHEN I(1)=1 ELSE “000” WHE

30、N I(0)=1 ELSE “111”; END,進(jìn)程語句,進(jìn)程本身是并行語句,但內(nèi)部是順序語句; 進(jìn)程只有在特定的時(shí)刻(敏感信號發(fā)生變化)才會被激活,進(jìn)程標(biāo)號: PROCESS (敏感信號參數(shù)表) 聲明區(qū); BEGIN 順序語句 END PROCESS 進(jìn)程標(biāo)號,在進(jìn)程中起作用的局部變量,一個(gè)進(jìn)程可以有多個(gè)敏感信號,任一敏感信號發(fā)生變化都會激活進(jìn)程,進(jìn)程語句定義順序語句模塊,用于將從外部獲得的信號值,或內(nèi)部的運(yùn)算數(shù)據(jù)向其他的信號進(jìn)行賦值,進(jìn)程的工作原理,當(dāng)某個(gè)敏感信號的值發(fā)生變化時(shí),每個(gè)進(jìn)程語句立即完成進(jìn)程內(nèi)順序語句所定義的功能行為,執(zhí)行過程終止,順序語句所定義的功能行為的結(jié)果可以賦值給信號

31、,并通過信號被其他的進(jìn)程讀取或賦值,進(jìn)程與時(shí)鐘,在每個(gè)上升沿啟動(dòng)一次進(jìn)程(執(zhí)行進(jìn)程內(nèi)所有的語句,上升沿描述:Clock EVENT AND Clock=1 下降沿描述:Clock EVENT AND Clock=0,上升沿描述: rising_edge (Clock) 下降沿描述: falling_edge (Clock,LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL; ENTITY FreDevider IS PORT ( Clock: IN Std_logic; Clkout: OUT Std_logic); END; ARCHITECTURE Beha

32、vior OF FreDevider IS SIGNAL Clk: Std_Logic; BEGIN PROCESS (Clock) 將時(shí)鐘作為進(jìn)程的敏感信號 BEGIN IF rising_edge (Clock) THEN Clk=NOT Clk; 在時(shí)鐘上升沿執(zhí)行Clk=NOT Clk END IF; END PROCESS; Clkout=Clk; END,LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL; ENTITY Counter IS PORT ( RESET:IN Std_Logic; 異步復(fù)位信號 Clock: IN Std_logic;

33、時(shí)鐘信號 NUM: BUFFER Integer RANGE 0 TO 3); 計(jì)數(shù)器輸出值 END; ARCHITECTURE Behavior OF Counter IS BEGIN PROCESS (RESET, Clock) 將復(fù)位、時(shí)鐘作為進(jìn)程的敏感信號 BEGIN IF RESET=1 THEN Num=0; 復(fù)位時(shí)Num清0 ELSIF rising_edge (Clock) THEN IF Num=3 THEN Num=0; 如果Num3就清0 ELSE Num=Num+1; 否則自加1 END IF; END IF; END PROCESS; END,仿真波形,LIBRARY

34、 IEEE; USE IEEE.Std_Logic_1164.ALL; USE IEEE.Std_Logic_unsigned.ALL; ENTITY Counter IS PORT ( clr :IN Std_Logic; inl: in std_logic_vector(3 downto 0); outl: out std_logic_vector(3 downto 0) 計(jì)數(shù)器輸出值 ); END; ARCHITECTURE Behavior OF Counter IS BEGIN PROCESS (clr, inl) 進(jìn)程的敏感信號 BEGIN IF (clr=1 or inl=“10

35、01”) THEN outl=“0000”; ELSE outl=inl+1; END IF; END PROCESS; END,重載符號,在庫IEEE.Std_Logic_unsigned中預(yù)先聲明,LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL; USE IEEE.Std_Logic_unsigned.ALL; ENTITY Counter IS PORT ( clr,clk:IN Std_Logic; cnt: buffer std_logic_vector(3 downto 0) 計(jì)數(shù)器輸出值 ); END; ARCHITECTURE Behavio

36、r OF Counter IS BEGIN PROCESS BEGIN Wait until clkevent and clk=1; IF (clr=1 or cnt=9) THEN cnt=“0000”; ELSE cnt=cnt+1; END IF; END PROCESS; END,Wait語句,信號賦值有寄存功能,引入時(shí)序器件,進(jìn)程的啟動(dòng),當(dāng)process的敏感信號參數(shù)表重沒有列出任何敏感信號時(shí),進(jìn)程通過wait語句啟動(dòng),ARCHITECTURE Behavior OF state IS BEGIN PROCESS 敏感信號列表為空 BEGIN wait until Clock; 等待

37、clock激活進(jìn)程 IF ( drive=1) THEN CASE output IS WHEN s1 = output output output output = s1; END CASE; END IF; END PROCESS; END,進(jìn)程注意事項(xiàng),進(jìn)程本身是并行語句,但內(nèi)部為順序語句; 進(jìn)程在敏感信號發(fā)生變化時(shí)被激活,在使用了敏感表的進(jìn)程中不能含wait語句; 在同一進(jìn)程中對同一信號多次賦值,只有最后一次生效; 在不同進(jìn)程中,不可對同一信號進(jìn)行賦值; 一個(gè)進(jìn)程不可同時(shí)對時(shí)鐘上、下沿敏感。 進(jìn)程中的信號賦值是在進(jìn)程掛起時(shí)生效的,而變量賦值是即時(shí)生效。 相對于結(jié)構(gòu)體而言,信號具有全局性

38、,是進(jìn)程間進(jìn)行并行聯(lián)系的重要途徑。 進(jìn)程為綜合器支持,且其建模方式直接影響仿真和綜合結(jié)果,綜合后對應(yīng)于進(jìn)程的硬件結(jié)構(gòu)對進(jìn)程中所有可讀入信號都是敏感的,SIGNAL A,B: Integer RANGE 0 TO 7; : PROCESS (Clock) BEGIN IF rising_edge (Clock) THEN : B=A+1; B=B+1; : END IF; END PROCESS,PROCESS (Clock) BEGIN IF rising_edge (Clock) THEN : ELSIF falling_edge (Clock) THEN; : END IF; END PR

39、OCESS,元件例化語句,元件例化引入一種連接關(guān)系,將預(yù)先設(shè)計(jì)好的實(shí)體定義為元件,并將此元件與當(dāng)前設(shè)計(jì)實(shí)體中的端口相連接,從而為當(dāng)前設(shè)計(jì)實(shí)體引入一個(gè)新的低一級的設(shè)計(jì)層次,Component 元件名 port (端口名表); End component 元件名; 例化名:元件名 port map ( 元件端口名連接端口名 ,要插在電路系統(tǒng)板上的芯片,較大的電路系統(tǒng),電路板上準(zhǔn)備接受芯片的插座,元件例化語句,列出對外通信的各端口名,當(dāng)前系統(tǒng)與準(zhǔn)備接入的元件對應(yīng)端口相連的通信端口,名字關(guān)聯(lián)方式:port map語句中位置可以任意; 位置關(guān)聯(lián)方式:端口名和關(guān)聯(lián)連接符號可省去,連接端口名的排列方式與所需

40、例化的元件端口定義中的端口名相對應(yīng),1位二進(jìn)制全加器,內(nèi)部端口,外部端口,外部端口,內(nèi)部端口,端口連線,3.3.2 順序語句,順序語句僅出現(xiàn)在進(jìn)程和子程序中。 順序語句綜合后,映射為實(shí)際的門電路,系統(tǒng)一上電,門電路開始工作。電路可實(shí)現(xiàn)邏輯上的順序執(zhí)行,實(shí)際上所有門電路是并行工作的,賦值語句 流程控制語句 空操作語句 等待語句 子程序調(diào)用語句 返回語句,賦值語句,ENTITY TEST_Signal IS PORT ( Reset, Clock: IN Std_logic; NumA, NumB: OUT Integer RANGE 0 TO 255 ); END; ARCHITECTURE T

41、EST OF TEST_Signal IS SIGNAL A, B: Integer RANGE 0 TO 255; BEGIN PROCESS (RESET,Clock) VARIABLE C: Integer RANGE 0 TO 255,BEGIN IF RESET=1 THEN A=0; B=2;C:=0; ELSEIF rising_edge(Clock) THEN C:=C+1;A=C+1;B=A+2; END IF; END PROCESS; Num A=A; NumB=B; END,流程控制語句,IF語句,IF 條件式 THEN 順序語句 END IF,IF 條件式 THEN

42、順序語句 ELSE 順序語句 END IF,有優(yōu)先級,用IF語句描述組合邏輯電路時(shí),務(wù)必涵蓋所有的情況,否則綜合后將引入鎖存器,ENTITY Encoder IS PORT ( En: IN Std_logic; I: IN Std_logic_Vetor(7 DOWNTO 0); A: OUT Std_logic_Vetor(2 DOWNTO 0); Idle: OUT Std_logic ); END; ARCHITECTURE Behavior OF Encoder IS BEGIN PROCESS (En, I) BEGIN IF En=1 THEN IF I(7)=1 THEN A=

43、“111”; Idle=0; ELSIF IF I(6)=1 THEN A=“110”; Idle=0; ELSIF IF I(5)=1 THEN A=“101”; Idle=0,ELSIF IF I(4)=1 THEN A=“100”; Idle=0; ELSIF IF I(3)=1 THEN A=“011”; Idle=0; ELSIF IF I(2)=1 THEN A=“010”; Idle=0; ELSIF IF I(1)=1 THEN A=“001”; Idle=0; ELSIF IF I(0)=1 THEN A=“000”; Idle=0; ELSE A=“000”; Idle=1

44、; END IF; END PROCESS; END,引入ELSE,否則綜合器將引入鎖存器,ENTITY COMP_BAD IS PORT( a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 = 0 ; - 未提及當(dāng)a1=b1時(shí),q1作何操作 END IF; END PROCESS ; END,不完整條件語句與時(shí)序電路,綜合結(jié)果,ENTITY C

45、OMP_GOOD IS PORT(a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_GOOD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; END PROCESS ; END,完整條件語句,CASE語句,選擇值不可重復(fù)或重疊; 當(dāng)CASE語句的選擇值無法覆蓋所有的情況時(shí),要用OTHERS指定未能列出的其他所有情況的輸出值,LIBRARY IEEE; USE IEEE.Std_Logic_1164

46、.ALL; ENTITY MUX IS PORT ( Data0,Data1,Data2,Data3:IN Std_Logic_VECTOR(7 DOWNTO 0); Sel:IN Std_Logic_Vector(1 DOWNTO 0); DOUT:OUT Std_Logic_Vector(7 DOWNTO 0) ); END; ARCHITECTURE DataFlow OF MUX IS BEGIN CASE Sel IS WHEN “00”= DOUT DOUT DOUT DOUT DOUT=“00000000” ; END CASE; END PROCESS; END,LOOP語句,

47、LOOP 標(biāo)號: FOR 循環(huán)變量 IN 循環(huán)次數(shù)范圍 LOOP 順序語句 END LOOP LOOP 標(biāo)號,臨時(shí)變量,僅在此LOOP中有效,無需事先定義,TO. .DOWNTO. 從初值開始,每執(zhí)行完一次后遞增(遞減),直到終值為止,Sum:=0; FOR i IN 0 TO 9 LOOP Sum:=Sum+i; END LOOP,循環(huán)次數(shù)只能用具體數(shù)值表達(dá),否則不可綜合,NEXT語句,NEXT語句主要用在LOOP語句執(zhí)行中有條件或無條件轉(zhuǎn)向控制,跳向LOOP語句的起點(diǎn),NEXT 循環(huán)標(biāo)號 WHEN 條件,NEXT ;無條件終止當(dāng)前循環(huán),跳回到本次循環(huán)LOOP語句處,開始下一次循環(huán),NEXT

48、 LOOP 標(biāo)號;當(dāng)有多重LOOP語句嵌套時(shí),跳轉(zhuǎn)到指定標(biāo)號LOOP語句處,重新開始執(zhí)行循環(huán)操作,NEXT LOOP 標(biāo)號 WHEN 條件表達(dá)式;條件表達(dá)式為TRUE,執(zhí)行NEXT語句,進(jìn)入跳轉(zhuǎn)操作,否則向下執(zhí)行,EXIT語句,EXIT語句主要用在LOOP語句執(zhí)行中有條件或無條件內(nèi)部轉(zhuǎn)向控制,跳向LOOP語句的終點(diǎn),用于退出循環(huán)。當(dāng)程序需要處理保護(hù)、出錯(cuò)和警告狀態(tài)時(shí),語句能提供一個(gè)快捷、簡便的方法,EXIT 循環(huán)標(biāo)號 WHEN 條件,EXIT ;無條件從當(dāng)前循環(huán)中退出,EXIT LOOP 標(biāo)號;程序執(zhí)行退出動(dòng)作無條件從循環(huán)標(biāo)號所標(biāo)明的循環(huán)中退出,EXIT LOOP 標(biāo)號 WHEN 條件表達(dá)式;

49、條件表達(dá)式為TRUE,程序從當(dāng)前循環(huán)中退出,NULL語句,NULL為空操作語句,一般用于CASE中,表示在某些情況下對輸出不作任何改變,隱含鎖存信號。不能用于純組合邏輯電路,WAIT語句,在進(jìn)程或過程中執(zhí)行到WAIT語句時(shí),程序?qū)⒈粧炱穑⒃O(shè)置好再次執(zhí)行的條件,WAIT ON 信號表UNTIL 條件表達(dá)式FOR 時(shí)間表達(dá)式,WAIT ;未設(shè)置停止掛起的條件,表示永遠(yuǎn)掛起,WAIT ON 信號表;敏感信號等待語句,敏感信號的變化將結(jié)束掛起,再次啟動(dòng)進(jìn)程,WAIT UNTIL 條件表達(dá)式;條件表達(dá)式為中所含的信號發(fā)生變化,且滿足WAIT語句所設(shè)條件,則結(jié)束掛起,再次啟動(dòng)進(jìn)程,WAIT FOR 時(shí)間

50、表達(dá)式;超時(shí)等待語句,從執(zhí)行當(dāng)前的WAIT語句開始,在此時(shí)間段內(nèi),進(jìn)程處于掛起狀態(tài),超過這一時(shí)間段后,程序自動(dòng)恢復(fù)執(zhí)行,Configuration 配置名 of 實(shí)體名 is 配置說明 End 配置名,3.3.3 配置語句,配置主要為頂層設(shè)計(jì)實(shí)體指定結(jié)構(gòu)體,或?yàn)閰⑴c例化的元件實(shí)體指定所希望的結(jié)構(gòu)體 ,以層次方式來對元件例化做結(jié)構(gòu)配置,Configuration 配置名 of 實(shí)體名 is 配置說明 End 配置名,為頂層設(shè)計(jì)實(shí)體指定結(jié)構(gòu)體,Entity nand is port ( a, b: in std_logic; c: out std_logic ); End entity nand;

51、 Architecture one of nand is begin c=not (a and b); End architecture one,Architecture two of nand is begin c=1 when (a=0) and (b=0) else 1 when (a=0) and (b=1) else 1 when (a=1) and (b=0) else 0 when (a=1) and (b=1) else 0; End architecture two,Configuration second of nand is for two end for; End se

52、cond; Configuration first of nand is for one end for; End first,用實(shí)體nand構(gòu)成更高層次設(shè)計(jì)實(shí)體中的元件,由配置語句指定元件實(shí)體nand使用哪個(gè)結(jié)構(gòu)體,LIBRARY IEEE; USE IEEE.Std_Logic_1164.ALL; Entity rs is port ( r, s: in std_logic; q,qf: out std_logic ); End entity rs; Architecture rsf of rs is Component nand PORT( a, b: IN Std_Logic; c:

53、out std_logic); End Component; BEGIN u1:nand PORT MAP (a=s, b=qf, c=q); u2:nand PORT MAP ( a=q, b=r, c=qf); END rsf,Configuration sel of rs is for rsf for u1,u2:nand use entity work.nand (two); end for; end for; End sel,為參與例化的元件實(shí)體指定所希望的結(jié)構(gòu)體 ,以層次方式來對元件例化做結(jié)構(gòu)配置,3.4 狀態(tài)機(jī)在VHDL中的實(shí)現(xiàn),3.4.1 Moore 狀態(tài)機(jī)的VHDL描述,輸出

54、僅取決于其所處的狀態(tài),LIBRARY IEEE; USE IEEE.Std_ Logic_1164.ALL; ENTITY Moore IS PORT ( Reset, Clock, DIN :IN Std_Logic; DOUT:OUT Std_Logic_Vetor(2 DOWNTO 0); END; ARCHITECTURE Mooremachine OF Moore IS TYPE State_type IS (S0,S1,S2,S3); 定義State_type為枚舉型數(shù)據(jù)類型 SIGNAL State:State_type; BEGIN Change_State: PROCESS

55、(Reset, Clock) 時(shí)序邏輯進(jìn)程 BEGIN IF Reset=1 THEN State=S0,ELSEIF rising_edge(Clock) THEN CASE State IS WHEN S0=IF DIN=1 THEN StateDOUT DOUT DOUT DOUT =“111”; END CASE; END PROCESS; END,仿真波形圖,時(shí)鐘同步Moore狀態(tài)機(jī)結(jié)構(gòu)圖,LIBRARY IEEE; USE IEEE.Std_ Logic_1164.ALL; ENTITY Moore IS PORT ( Reset,Clock, DIN :in Std_Logic;

56、 DOUT:out Std_Logic_Vetor(2 DOWNTO 0) ); END; ARCHITECTURE Mooremachine OF Moore IS TYPE State_type IS (S0,S1,S2,S3); SIGNAL PresentState, NextState :State_type; 定義狀態(tài)轉(zhuǎn)換信號 BEGIN State_Reg: PROCESS (Reset, Clock) 狀態(tài)寄存器 BEGIN IF Reset=1 THEN 異步復(fù)位 PresentState=S0; ELSEIF rising_edge(Clock) THEN PresentS

57、tate=NextState; 時(shí)鐘上升沿,轉(zhuǎn)換至下一狀態(tài) END IF; END PROCESS,Change_State:PROCESS (PresentState,DIN) 組合邏輯進(jìn)程 BEGIN CASE Present State IS WHEN S0=if DIN=1 then NextState=S1; else NextState=S0; end if; DOUT =“001”; WHEN S1=if DIN=1 then NextState=S2; else NextState=S1; end if ; DOUT =“011”; WHEN S2=if DIN=1 then

58、NextState=S3; else NextState=S2; end if ; DOUT =“101”; WHEN S3=if DIN=1 then NextState=S0; else NextState=S1; end if ; DOUT =“111”; END CASE; END PROCESS; END,仿真波形圖,3.4.2 Mealy 狀態(tài)機(jī)的VHDL描述: 輸出由當(dāng)前狀態(tài)與輸入共同決定,LIBRARY IEEE; USE IEEE.Std_ Logic_1164.ALL; ENTITY MealyMachine IS PORT ( Reset ,Clock,DIN:IN St

59、d_Logic; DOUT:OUT Std_Logic_Vetor(2 DOWNTO 0); END; ARCHITECTURE Statemachine OF MealyMachine IS TYPE State_type IS (S0,S1,S2,S3); SIGNAL State:State_type; BEGIN Change_State: PROCESS (Reset,Clock) BEGIN IF Reset=1 THEN State=S0,ELSIF rising_edge(Clock) THEN CASE State IS WHEN S0=IF DIN=1 THEN StateIF DIN=0 THEN DOUT IF DIN=0 THEN DOUT IF DIN=0 THEN DOUT IF DIN=0 THEN DOUT =“110”; ELSE DOUT=“111”;END IF; END CASE; END PROCESS; END,3.4.3 狀態(tài)機(jī)的容錯(cuò)設(shè)計(jì),主要針對未定義狀態(tài)(剩余狀態(tài),單獨(dú)設(shè)計(jì)一個(gè)狀態(tài)(ERROR),用以處理狀態(tài)機(jī)出錯(cuò)的情況, 用 WHEN OTHERS=State=E

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論