數(shù)字系統(tǒng)設(shè)計(jì):第二章 VHDL語言基礎(chǔ)_第1頁
數(shù)字系統(tǒng)設(shè)計(jì):第二章 VHDL語言基礎(chǔ)_第2頁
數(shù)字系統(tǒng)設(shè)計(jì):第二章 VHDL語言基礎(chǔ)_第3頁
數(shù)字系統(tǒng)設(shè)計(jì):第二章 VHDL語言基礎(chǔ)_第4頁
數(shù)字系統(tǒng)設(shè)計(jì):第二章 VHDL語言基礎(chǔ)_第5頁
已閱讀5頁,還剩100頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第二章 VHDL語言基礎(chǔ)本章目錄VHDL概述VHDL程序的基本結(jié)構(gòu)VHDL程序的主要構(gòu)件VHDL數(shù)據(jù)類型及運(yùn)算符VHDL數(shù)據(jù)對象VHDL基本語句測試基準(zhǔn)VHDL程序的其他組件VHDL程序常見語法問題討論VHDL 概述VHDL概述什么是VHDLVHDLVery-High-Speed Integrated circuit Hardware Description LanguageVHDL的起源及發(fā)展80年代初,由美國國防部在實(shí)施超高速集成電路(VHSIC)項(xiàng)目時開發(fā)的1987年,IEEE協(xié)會批準(zhǔn)為IEEE工業(yè)標(biāo)準(zhǔn),稱為IEEE1076-19871993年,被更新為93標(biāo)準(zhǔn),IEEE1076.931

2、996年,IEEE1076.3稱為綜合標(biāo)準(zhǔn)VHDL概述VHDL的用途主要用于描述字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口使用VHDL的目的把電子電路的設(shè)計(jì)意義以文字或文件的方式保存起來,以便其它人能輕易地了解電路的設(shè)計(jì)意義VHDL與verilog HDL的比較相同點(diǎn): 都是最主要的硬件描述語言 都能以文本形式抽象表示電路的行為和結(jié)構(gòu) 都可以從系統(tǒng)行為級,寄存器傳輸級和門級描 進(jìn)行電路描述不同點(diǎn) 語法差異,verilog是類C語言,簡單易用, 而VHDL語句較為晦澀,使用難度大 VHDL側(cè)重于系統(tǒng)描述,更適合系統(tǒng)級設(shè)計(jì) Verilog 側(cè)重于電路級描述,更適合電路設(shè) 計(jì)VHDL特點(diǎn)系統(tǒng)硬件描述能力強(qiáng)與器件

3、無關(guān),與工藝無關(guān)IEEE工業(yè)標(biāo)準(zhǔn)方法靈活,技術(shù)齊全可讀性好VHDL具有硬件特征,而且是并行執(zhí)行方式。VHDL概述舉例:二路選擇器描述的變化二路選擇器模塊:sel=0時,q=d0;sel=1時,q=d1傳統(tǒng)的描述方式:用與門、非門、或門等具體底層器件來組成,使用圖形輸入法。缺點(diǎn):硬件電路設(shè)計(jì)復(fù)雜,需要先寫出邏輯表達(dá)式或真值表,并進(jìn)行化簡。VHDL概述舉例:二路選擇器描述的變化VHDL描述方式:使用文本輸入的方法。設(shè)計(jì)電路優(yōu)點(diǎn):可讀性好,設(shè)計(jì)簡單,具體電路由軟件優(yōu)化。LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY MUX2 IS PORT (d0,d

4、1:IN std_logic; sel:IN std_logic; q:OUT std_logic);END ENTITY;ARCHITECTURE behav OF MUX2 ISBEGIN PROCESS (d0,d1,sel) BEGIN IF sel=0 THEN q=d0; ELSIF sel=1 THEN q=d1; ELSE q=Z; END IF; END PROCESS;END behav;VHDL程序的基本結(jié)構(gòu)VHDL程序的基本結(jié)構(gòu)一個完整的VHDL程序包括庫的調(diào)用,程序包的調(diào)用,實(shí)體說明和結(jié)構(gòu)體4個部分。庫的調(diào)用程序包的調(diào)用實(shí)體描述結(jié)構(gòu)體描述用于說明設(shè)計(jì)系統(tǒng)的外部接口信息

5、,具有唯一性相當(dāng)于操作系統(tǒng)中的目錄描述實(shí)體的行為、功能或電路結(jié)構(gòu)類似于高級語言的include語句VHDL的基本結(jié)構(gòu)Example庫的調(diào)用程序包的調(diào)用實(shí)體描述結(jié)構(gòu)體描述VHDL的基本結(jié)構(gòu)LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY MUX2 IS PORT (d0,d1:IN std_logic; sel:IN std_logic; q:OUT std_logic);END ENTITY;ARCHITECTURE behav OF MUX2 ISBEGIN PROCESS (d0,d1,sel) BEGIN IF sel=0 THEN q=d0

6、; ELSIF sel=1 THEN q=d1; ELSE q=Z; END IF; END PROCESS;END behav;二路選擇器的VHDLVHDL的主要構(gòu)件VHDL程序的主要構(gòu)件VHDL程序的基本構(gòu)件包括庫、包,配置,實(shí)體,結(jié)構(gòu)體、塊、子程序(函數(shù)和過程)必需構(gòu)件實(shí)體、結(jié)構(gòu)體、庫、程序包是一個完整的VHDL程序所必需的構(gòu)件VHDL的主要構(gòu)件1.庫庫(Library)是編譯后數(shù)據(jù)的集合,是存放預(yù)先完成的程序包和數(shù)據(jù)集合體的倉庫。LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;Exampl

7、e:常用的庫:STD庫(默認(rèn)庫) IEEE庫,WORK庫(默認(rèn)庫),面向ASIC的庫,用戶自定義庫使用格式:LIBRARY 庫名VHDL的主要構(gòu)件:庫STD庫(默認(rèn)庫)庫中的程序包為:standardSTD庫符合VHDL語言標(biāo)準(zhǔn),是默認(rèn)庫,在應(yīng)用中不必像IEEE庫那樣顯式使用STD庫內(nèi)定義了最基本的數(shù)據(jù)類型:Bit、bit_wector、 Boolean、Integer、Real、Time并支持這些數(shù)據(jù)類型的所有運(yùn)算符函數(shù)IEEE庫IEEE庫是VHDL設(shè)計(jì)中最常見的庫,由于該庫中的程序包并非符合VHDL語言標(biāo)準(zhǔn),因此在使用時必須顯示表達(dá)IEEE庫內(nèi)定義了四個常用的程序包:std_logic_1

8、164(std_logic types & related functionsStd_logic_arith(arithmetic functions)Std_logic_signed(signed arithmetic functions)Std_logic_unsigned(unsigned arithmetic functions)VHDL的主要構(gòu)件:庫LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;Example:IEEE庫四個常用的程序包:std_logic_1164包含了一些標(biāo)準(zhǔn)邏輯電

9、平所需數(shù)據(jù)類型和函數(shù)的定義。 常用的兩個數(shù)據(jù)類型:STD_LOGIC和STD_LOGIC_VECTORStd_logic_arith擴(kuò)展了三個數(shù)據(jù)類型UNSIGNED,SIGNED和SMALL_INT,并為其定義了相關(guān)的算術(shù)運(yùn)算符和轉(zhuǎn)換函數(shù)Std_logic_signed和Std_logic_unsigned重載了可用于INTEGER型和STD_LOGIC及STD_LOGIC_VECTOR型混合運(yùn)算的運(yùn)算符,并定義了 不同數(shù)據(jù)類型間的轉(zhuǎn)換函數(shù)VHDL的主要構(gòu)件:庫WORK庫(默認(rèn)庫)WORK是用戶現(xiàn)行設(shè)計(jì)的工作庫,用于存放用戶設(shè)計(jì)和定義的一些設(shè)計(jì)單元和程序包。該庫滿足VHDL語言標(biāo)準(zhǔn),在實(shí)際調(diào)

10、用中不需要顯示調(diào)用VHDL的主要構(gòu)件:庫包集合包集合說明就像C語言中的include語句一樣,用來單純地羅列VHDL語言中所要用到的信號定義、常數(shù)定義、數(shù)據(jù)類型、元件語句、函數(shù)定義和過程定義等VHDL的主要構(gòu)件:包Example:USE IEEE.STD_LOGIC_1164.ALL該語句表示在程序中要使用名為STD_LOGIC_1164的包集合中的所有定義或說明項(xiàng)VHDL的主要構(gòu)件:包在VHDL中,同樣的語句,使用不同的庫或不同的包,所生成的電路,可能會邏輯相同,電路不同LIBRARY STD;USE STD.STD_LOGIC.ALL;USE STD.STD_ttl.ALL;ENTITY

11、nand2 IS . . .END nand2;LIBRARY STD;USE STD.STD_LOGIC.ALL;USE STD.STD_ttloc.ALL;ENTITY nand2 IS . . .END nand2;生成一般的與非門生成集電極開路的與非門VHDL的主要構(gòu)件:實(shí)體實(shí)體(ENTITY)包括實(shí)體名,類屬參數(shù)說明,端口說明三部分,由保留字“ENTITY”引導(dǎo)ENTITY 實(shí)體名 IS類屬參數(shù)說明;端口說明;ENDENTITY 實(shí)體名;使用格式:注意:實(shí)體名不能以數(shù)字開頭,不能與保留字相同實(shí)體名應(yīng)盡可能表達(dá)功能上含義實(shí)體結(jié)束以“END ENTITY”或“END 實(shí)體名”結(jié)束VHDL

12、的主要構(gòu)件:實(shí)體ENTITY 實(shí)體名 IS類屬參數(shù)說明;端口說明;ENDENTITY 實(shí)體名;類屬參數(shù)說明常用于說明靜態(tài)信息,如器件延遲由保留字GENERIC引導(dǎo)。格式如下:GENERIC(常數(shù)名:數(shù)據(jù)類型:=設(shè)定值); 例如:GENERIC(m:time:=1ns);端口說明端口說明是一個設(shè)計(jì)實(shí)體界面的描述,提供外部接口信息。由保留字PORT引導(dǎo)格式如下:PORT(端口名:端口方向 數(shù)據(jù)類型) 例如:PORT (d0:IN std_logic;);VHDL的主要構(gòu)件:實(shí)體Example:寫出如下器件的實(shí)體描述ENTITY my_design ISPORT(d:IN std_logic_vec

13、tor(15 DOWNTO 0); clk,reset,oe:IN std_logic; q:OUT std_logic_vector(15 DOWNTO 0); ad:INOUT std_logic_vector(15 DOWNTO 0); int:BUFFER std_logic; as:OUT std_logic);END my_design;VHDL的主要構(gòu)件:結(jié)構(gòu)體注意:結(jié)構(gòu)體名應(yīng)有明確的意義定義語句只對本結(jié)構(gòu)體有效結(jié)構(gòu)體里面的語句是并行的結(jié)構(gòu)體(ARCHITECTURE)是設(shè)計(jì)實(shí)體的具體描述,指明設(shè)計(jì)實(shí)體的具體行為、所用元件及連接關(guān)系。由定義說明和具體功能描述兩部分組成。使用格式:

14、ARCHITECTURE 結(jié)構(gòu)體名 OF 實(shí)體號名 IS定義語句 信號(signal); 常數(shù)(constant); 數(shù)據(jù)類型(type); 函數(shù)(function); 元件(component)等;BEGIN 并行處理語句;END 結(jié)構(gòu)體名;VHDL的主要構(gòu)件:結(jié)構(gòu)體Example:半加器半加器電路是指對兩個輸入數(shù)據(jù)位進(jìn)行加法,輸出一個結(jié)果和進(jìn)位。VHDL的主要構(gòu)件:結(jié)構(gòu)體Example:半加器半加器電路是指對兩個輸入數(shù)據(jù)位進(jìn)行加法,輸出一個結(jié)果和進(jìn)位。Library IEEE;Use ieee.std_logic_1164.all;Entity half_adder is port (X,

15、Y: in bit; sum, carry: out bit);end half_adder;Architecture dataflow of half_adder isbegin -并行處理語句 sum = X xor Y after 10ns; carry =X and Y after 10ns;End dataflow;實(shí)現(xiàn)程序VHDL的主要構(gòu)件:結(jié)構(gòu)體Example:半加器半加器電路是指對兩個輸入數(shù)據(jù)位進(jìn)行加法,輸出一個結(jié)果和進(jìn)位。注意:仿真結(jié)果某一時刻的輸出并非我們期待中的結(jié)果,這是因?yàn)槲覀兪褂玫氖菚r序仿真,考慮了器件的延時,后面的章節(jié)將會介紹功能仿真和時序仿真仿真結(jié)果VHDL的主要

16、構(gòu)件:結(jié)構(gòu)體行為描述:描述輸入與輸出之間的轉(zhuǎn)換行為,不包含內(nèi)部的電路元件、電路的結(jié)構(gòu)信息,一般將結(jié)構(gòu)體命名為“behav”數(shù)據(jù)流描述既表示行為,又隱含著結(jié)構(gòu);體現(xiàn)數(shù)據(jù)的流動路徑和方向,一般將結(jié)構(gòu)體命名為“dataflow”結(jié)構(gòu)描述法描述電路元件與它們之間的連接關(guān)系,一般將結(jié)構(gòu)體命名為“stru數(shù)據(jù)類型結(jié)構(gòu)體的描述方法VHDL的主要構(gòu)件:結(jié)構(gòu)體結(jié)構(gòu)體的描述方法全加器的行為描述architecture behav of FA isbegin process ( x, y, ci) variable n: integer; constant sum_vector : std_logic_vector

17、 (0 to 3):=“0101”; constant carry_vector : std_logic_vector(0 to 3):=“0011”; begin n:=0; if x= 1 then n:=n+1; end if; if y= 1 then n:=n+1; end if; if ci= 1 then n:=n+1; end if; s = sum_vector (n); co = carry_vector (n); end process; end behav;library ieee;use ieee.std_logic_1164.all;entity FA is por

18、t (x, y, ci : in std_logic; s, co : out std_logic);end FA;VHDL的主要構(gòu)件:結(jié)構(gòu)體結(jié)構(gòu)體的描述方法全加器的RTL方式library ieee;use ieee.std_logic_1164.all;entity FA is port (x, y, ci : in std_logic; s, co : out std_logic);end FA;architecture dataflow of FA isbegin s = x XOR y XOR ci; co A, Y=B, sum=temp_sum, carry=temp_carry

19、1); U1 : half_adder Port map (X=temp_sum, Y=carry_in, sum=AB, carry=temp_carry2);U2 : or_gate Port map (in1=temp_carry1, in2=temp_carry2, out1=carry_out);End structure;Library IEEE;Use std_logic_1164.all;Entity full_adder is Port ( A,B, carry_in : in bit; AB, carry_out : out bit);End full_adder;VHDL

20、數(shù)據(jù)類型及運(yùn)算符VHDL數(shù)據(jù)類型及運(yùn)算符VHDL中定義的10種標(biāo)準(zhǔn)數(shù)據(jù)類型數(shù)據(jù)類型含義整數(shù)整數(shù)占4B,范圍為-2,147,483,6472,147,483,647實(shí)數(shù)浮點(diǎn)數(shù),范圍位-1.0E+381.0E+38自然數(shù),正整數(shù)整數(shù)的子集(自然數(shù):大于等于0的整數(shù),正整數(shù):大于0的整數(shù))位邏輯“0”或“1”位串多個位串在一起(也稱位矢量)字符ASCII碼字符字符串字符數(shù)組(也稱字符矢量)布爾量邏輯“真”或邏輯“假”時間時間單位,如fs、ps、ns、s、ms、sec、min、hr等錯誤等級NOTE,WARNING,ERROR,F(xiàn)AILUREVHDL數(shù)據(jù)類型及運(yùn)算符VHDL中定義的10種標(biāo)準(zhǔn)數(shù)據(jù)類型數(shù)

21、據(jù)類型用途整數(shù)不能按位操作,不能進(jìn)行邏輯運(yùn)算常用于表示系統(tǒng)總線寬度實(shí)數(shù)用于表現(xiàn)電源供電電壓 或算法研究自然數(shù),正整數(shù)一般在定義時需要區(qū)間約束位表示一個信號的值,用單引號括起來位串可以看作位的數(shù)組,用雙引號括起來字符與語句不區(qū)分大小寫不同,字符區(qū)分大小寫字符串常用于程序仿真的提示或結(jié)果的說明等場合布爾量常用于信號的狀態(tài),總顯得控制權(quán)仲裁情況時間用于定義信號延時等,一般用于仿真錯誤等級在仿真中,提示程序的狀態(tài)VHDL數(shù)據(jù)類型及運(yùn)算符VHDL中定義的10種標(biāo)準(zhǔn)數(shù)據(jù)類型約束區(qū)間說明: INTEGER RANGE 100 DOWNTO 1 BIT_VECTOR (3 DOWNTO 0) REAL RAN

22、GE 2.0 TO 30.0注意:字符要區(qū)分大小寫,比如高阻狀態(tài)是Z,而不是z。VHDL數(shù)據(jù)類型及運(yùn)算符用戶自定義數(shù)據(jù)類型:根據(jù)電路設(shè)計(jì)需求,用戶自定義合適的數(shù)據(jù)類型使用格式TYPE 數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義 OF 基本數(shù)據(jù)類型或 TYPE 數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義常用的用戶自定義類型:枚舉類型、子類型、整數(shù)類型和實(shí)數(shù)類型、數(shù)據(jù)類型和記錄類型VHDL數(shù)據(jù)類型及運(yùn)算符(1)枚舉類型:把類型中的各個元素都羅列出來,如在狀態(tài)機(jī)中的狀態(tài)一般就采用枚舉類型定義Example:TYPE week IS (sum, mon, tue, wed, thu, tri, sat);(3)整數(shù)類型和實(shí)數(shù)

23、類型:由于范圍太大,綜合器無法綜合,所以給它們定義一個范圍Example:SUBTYPE natural IS integer range 0 to integerhigh(2)子類型SUBTYPE:由TYPE所定義的原數(shù)據(jù)類型的子集Example:TYPE percent IS INTEGER RANGE -100 TO 100 VHDL數(shù)據(jù)類型及運(yùn)算符(4)數(shù)組類型:將相同數(shù)據(jù)類型的數(shù)據(jù)集合在一起形成一個新的數(shù)據(jù)類型。(5)記錄類型:將不同數(shù)據(jù)類型的數(shù)據(jù)和數(shù)據(jù)名組合在一起而形成新客體Example:TYPE 數(shù)組名 IS ARRAY(數(shù)組范圍) OF 數(shù)組類型; TYPE 記錄類型名 IS

24、 RECORD元素名:元素數(shù)據(jù)類型;元素名:元素數(shù)據(jù)類型;END RECORD;ExampleVHDL數(shù)據(jù)類型及運(yùn)算符數(shù)據(jù)類型轉(zhuǎn)換:VHDL中的數(shù)據(jù)類型可以通過IEEE庫中的類型轉(zhuǎn)換函數(shù)進(jìn)行強(qiáng)制性轉(zhuǎn)換。程序包函數(shù)名功能STD_LOGIC_1164TO_STDLOGICVECTOR(A)由BIT_VECTOR轉(zhuǎn)換為STD_LOGIC_VECTORTO_BITVECTOR(A)由STD_LOGIC_VECTOR轉(zhuǎn)換為BIT_VECTORTO_STDLOGIC(A)由STD_LOGIC轉(zhuǎn)換STD_LOGICTO_BIT(A)由STD_LOGIC轉(zhuǎn)換BITSTD_LOGIC_ARITHCONV_STD

25、_LOGIC_VECTOR(A,n) (n為位長)由INTEGER,UNSIGNED,SIGNED轉(zhuǎn)換STD_LOGIC_VECTORCONV_INTEGER(A)由UNSIGNED,SIGNED轉(zhuǎn)換為INTEGERSTD_LOGIC_UNSIGNEDCONV_INTEGER(A)由STD_LOGIC_VECTOR轉(zhuǎn)換為INTEGERVHDL數(shù)據(jù)類型及運(yùn)算符VHDL中的運(yùn)算符主要分為算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符和其他運(yùn)算符等四類。運(yùn)算符:與其他計(jì)算機(jī)高級語言一樣要注意各運(yùn)算符的優(yōu)先級VHDL數(shù)據(jù)類型及運(yùn)算符運(yùn)算符:VHDL中的運(yùn)算符主要分為算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符和其他運(yùn)算符等

26、四類。與其他計(jì)算機(jī)高級語言一樣要注意各運(yùn)算符的優(yōu)先級VHDL的數(shù)據(jù)對象VHDL的數(shù)據(jù)對象數(shù)據(jù)對象:在VHDL語言中,可以賦值的客體稱為對象。包括常量、變量和信號。數(shù)據(jù)對象常量:定義在設(shè)計(jì)中不變化的值變量:定義在進(jìn)程或子程序中的變化量信號:對應(yīng)硬件內(nèi)部實(shí)實(shí)在在的連線VHDL的數(shù)據(jù)對象常量:指定義在設(shè)計(jì)描述中不變化的值,是一個全局量。使用格式用途:在實(shí)體、結(jié)構(gòu)體、程序包、函數(shù)、過程、進(jìn)程中保持靜態(tài)數(shù)據(jù),以改善程序的可讀性,使修改程序變得更容易。ExampleCONSTANT VCC:real:=5.0 -指定電源電壓CONSTANT delay:time:=10ns -某信號的延遲CONSTANT

27、 fbus:bit_vector:=“0101” -總線上的數(shù)據(jù)向量CONSTANT 常數(shù)名:數(shù)據(jù)類型:=表達(dá)式VHDL的數(shù)據(jù)對象變量:變量是定義進(jìn)程或子程序(包括函數(shù)和過程)中的變化量。VARIABLE 變量名:數(shù)據(jù)類型:=初始值使用格式用途:用于計(jì)算或暫存中間數(shù)據(jù),是一個局部量VARIABLE time::integer RANGE 0 TO 6 -進(jìn)程中代表次數(shù)的變量Example注意:變量的賦值是立即生效的。VHDL的數(shù)據(jù)對象信號:信號對應(yīng)著硬件內(nèi)部實(shí)實(shí)在在的連線使用格式用途:在元件間起著互聯(lián)作用,或作為一種數(shù)據(jù)容器,以保留歷史值和當(dāng)前值SIGNAL 信號名:數(shù)據(jù)類型:=表達(dá)式“:=”

28、表示對信號的賦初值,一般不產(chǎn)生延時。“=”表示信號的代入賦值,有延時。注意:VHDL的數(shù)據(jù)對象使用變量和信號的比較信號是實(shí)體間動態(tài)交換數(shù)據(jù)的手段,用信號對象把實(shí)體連接在一起形成模塊;實(shí)體說明,結(jié)構(gòu)體說明都能說明信號。 變量用于進(jìn)程語句和子程序中中間的數(shù)據(jù)存儲。信號賦值有延遲;而變量賦值沒有延遲。 信號除當(dāng)前值外有許多信息(歷史信息,波形值);而變量只有當(dāng)前值。進(jìn)程對信號敏感,對變量不敏感。信號可以是多個進(jìn)程的全局信號;而變量只在定義它的進(jìn)程中可見。信號是硬件中連線的抽象描述,功能是保存變化的數(shù)據(jù)值和連接子元件,信號在原件的端口連接元件;變量在硬件中沒有對應(yīng)關(guān)系,而是用于硬件特性的高層次建模所需

29、要的計(jì)算中。在描述中,信號的賦值不會立即生效,而是要等待一個delta延遲后才會變化,否則該信號的值在delta延遲之前仍是原來的值。VHDL的數(shù)據(jù)對象使用變量和信號的比較六分頻器library ieee;use ieee.std_logic_1164.all;entity frequencies isport(clk:in std_logic;q:out std_logic);end frequencies;architecture behav of frequencies isbegin process (clk) variable time:integer range 0 to 6;be

30、gin if rising_edge(clk) then time:=time+1; if time=6 thenq=1;time:=0; elseq=0; end if; end if;end process;end behav;此例為6分頻器,其中time為變量。由于變量賦值是馬上生效的,因此從例子中可以看出time置零是在time為6時發(fā)生的。VHDL的數(shù)據(jù)對象使用變量和信號的比較六分頻器此例也為6分頻器。其中time為信號。由于信號賦值是具有一定的延時性,因此從例子中比較time和5的大小時,語句time=time+1還未生效,time的值是上次進(jìn)程結(jié)束時的結(jié)果。library iee

31、e;use ieee.std_logic_1164.all;entity frequencies isport(clk:in std_logic;q:out std_logic);end frequencies;architecture behav of frequencies is signal time:integer range 0 to 5;begin process (clk)begin if rising_edge(clk) then time=time+1; if time=5 thenq=1;time=0; elseq=0; end if; end if;end process

32、;end behav;VHDL的數(shù)據(jù)對象使用變量和信號的比較六分頻器的仿真time 為變量:time為信號可以看出兩種方法是等價的。VHDL的數(shù)據(jù)對象小結(jié)變量常定義在進(jìn)程與子程序中,用于保存運(yùn)算的中間臨時數(shù) 據(jù),或作為循環(huán)語句中的循環(huán)變量,其賦值立即發(fā)生。(:=)常量用于保存靜態(tài)的數(shù)據(jù)(:=)。信號有明顯的連線或容器的對應(yīng)關(guān)系,具有輸出波形,對其 賦值需要延遲時間(=), 在進(jìn)程間或子程序間具有信息傳遞功 能。注意對象定義的所在位置及適用區(qū)域的對應(yīng)關(guān)系VHDL基本語句VHDL基本語句VHDL語言與高級程序語言最大的不同就是VHDL語言是并發(fā)執(zhí)行的,但是VHDL的基本語句包括順序語句和并行語句。

33、順序語句不能直接用在結(jié)構(gòu)體中,需要用process進(jìn)行“封裝”VHDL中,不區(qū)分大小寫,使用“-”表示注釋VHDL基本語句-并行語句并行語句:并行執(zhí)行,其執(zhí)行方式與書寫順序無關(guān)并行語句常包括以下七種:賦值語句、條件賦值語句、選擇信號賦值語句、進(jìn)程語句、元件例化語句、生成語句、子程序調(diào)用語句串行執(zhí)行結(jié)果:a=2,b=3并行執(zhí)行結(jié)果:a=2,b=2a=b+1;b=a+1;假設(shè)信號原始值為a=1;b=1;對于以下兩種書寫格式,執(zhí)行結(jié)果如下:b=a+1;a=b+1;串行執(zhí)行結(jié)果:a=3,b=2并行執(zhí)行結(jié)果:a=2,b=2VHDL基本語句-并行語句賦值語句:將一個值或一個表達(dá)式的運(yùn)算結(jié)果傳遞給某一數(shù)據(jù)對

34、象使用格式:賦值目標(biāo) 賦值符號 賦值源Example: q=“0010000”;注意:信號賦值符號為“=”;變量和常量的賦值符號為“:=”VHDL基本語句-并行語句條件賦值語句:根據(jù)執(zhí)行條件,將一個值或表達(dá)式的的運(yùn)算結(jié)果賦給賦值目標(biāo)使用格式:注意:每一個子句結(jié)尾沒有任何標(biāo)點(diǎn),只有最后一句有分號賦值目標(biāo)= 表達(dá)式 WHEN 賦值條件 ELSE 表達(dá)式 WHEN 賦值條件 ELSE 表達(dá)式;Example: z=a WHEN p1=1 ELSE b WHEN p2=1 ELSE c;VHDL基本語句-并行語句選擇信號賦值語句:根據(jù)選擇值的匹配,將一個值或表達(dá)式的的運(yùn)算結(jié)果賦給賦值目標(biāo)使用格式:注意

35、:選擇信號賦值語句的每一個子句結(jié)尾是逗號,最后一句是分號。WITH 選擇表達(dá)式 SELECT賦值目標(biāo)= 表達(dá)式 WHEN 選擇值, 表達(dá)式 WHEN 選擇值;Example: WITH instruction SELECT data=data1 AND data2 WHEN “000”, data1 OR data2 WHEN “001”, Z WHEN OTHERS ; VHDL基本語句-并行語句進(jìn)程語句:本身是一個并行語句,內(nèi)部是由順序語句組成使用格式:注意:進(jìn)程啟動有兩種方式:敏感列表和wait語句標(biāo)號PROCESS 內(nèi)部變量的說明;BEGIN 順序語句;END PROCESS;VHDL

36、基本語句-并行語句進(jìn)程語句Example:D觸發(fā)器:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY D_FF IS PORT (reset,clk,d:IN std_logic; q:OUT std_logic);END D_FF;ARCHITECTURE behav OF sample ISBEGIN PROCESS(reset,clk,d) BEGIN IF reset=1 THEN q=0; ELSIF clkevent and clk=1 THEN q=d; END IF; END PROCESS;END behav;在此例中,PROCE

37、SS由敏感參數(shù)表中的reset、clk或d啟動。當(dāng)敏感信號發(fā)生變化時,進(jìn)程執(zhí)行VHDL基本語句-并行語句進(jìn)程語句中用wait語句啟動在此例中,PROCESS由wait on語句啟動,當(dāng)?shù)却絠n1,in2信號發(fā)生變化時,進(jìn)程再次執(zhí)行。LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY sample IS PORT (in1,in2:IN std_logic; output:OUT std_logic);END sample;ARCHITECTURE behav OF sample ISBEGIN PROCESS BEGIN output)連接端口名,

38、);VHDL基本語句-并行語句元件例化語句Example:4輸入與門LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY and4 IS PORT (ina,inb,inc,ind:IN bit; q:OUT bit);END and4;ARCHITECTURE stru OF and4 ISCOMPONENT and2 IS -定義已經(jīng)設(shè)計(jì)好的元件PORT(a,b:IN bit; c:OUT bit);END COMPONENT;SIGNAL U0_C,U1_C:bit;BEGINU0:and2 PORT MAP(ina,inb,U0_C);U1:a

39、nd2 PORT MAP(inc,ind,U1_C);U2:and2 PORT MAP(U0_C,U1_C,q)END stru;VHDL基本語句-并行語句生成語句:根據(jù)某些條件,復(fù)制一組完全相同的并行元件或設(shè)計(jì)單元電路結(jié)構(gòu)使用格式:標(biāo)號:FOR 循環(huán)變量 IN 取值范圍 GENEATE 說明部分; BEGIN 并行語句; END GENERATE標(biāo)號;標(biāo)號:IF 條件 GENERATE 說明部分;BEGIN 并行語句;END GENERATE標(biāo)號;VHDL基本語句-并行語句子程序調(diào)用語句:調(diào)用其它程序,在執(zhí)行完程序后返回需要的數(shù)據(jù)使用格式:注意:子程序的調(diào)用語句包括了過程調(diào)用語句和函數(shù)調(diào)用語

40、句格式:過程名(形參名=實(shí)參表達(dá)式,);Example:ARCHITECTURE behav OF example IS PROCEDURE adder (SIGNAL a,b:IN std_logic;SIGNAL sum:OUT std_logic); END PROCEDURE;BEGIN adder(a1,b1,sum1); END behav;VHDL基本語句-順序語句順序語句:順序語句是指執(zhí)行(指仿真執(zhí)行)順序和書寫順序一致的語句。順序語句只能出現(xiàn)在進(jìn)程和子程序中。注意:順序僅僅指語句執(zhí)行的順序性,并不意味著順序語句對應(yīng)的硬件邏輯行為也具有相同的順序性。VHDL基本語句-順序語句I

41、F語句:IF語句是一種流程控制語句,判斷條件有先后次序 ,而且允許條件涵蓋不完整IF 條件 THEN 順序語句 ;END IF;IF 條件 THEN 順序語句;ELSE 順序語句; END IF;IF 條件 THEN 順序語句; ELSIF 條件 THEN 順序語句; ELSE 順序語句; END IF;使用格式VHDL基本語句-順序語句IF語句Example:注意:IF語句與并行語句中的whenelse條件賦值語句具有類似功能,可互換IF en=1 THEN C=B; END IF;IF sel=1 THEN C=A; ELSE C=B; END IF; IF reset=0 THEN q=

42、0; ELSIF clkevent AND clk=1 THEN q=d; END IF;IF sel=1 THEN C=A;ELSE C=B;END IF;C 處理語句;END CASE;注意:CASE語句的選擇值必須在表達(dá)式的取值范圍內(nèi)CASE語句的所有選擇條件具有相同的優(yōu)先權(quán),不能有相同選擇值的條件句出現(xiàn)。未能完全覆蓋表達(dá)式的取值,則最末的選擇值必須用“OTHERS”不想執(zhí)行任何操作,可用保留字“NULL”描述VHDL基本語句-順序語句CASE語句Example:注意:CASE語句與并行語句中的WHENSELECT語句具有類似的功能,可互換。CASE sel IS WHEN 0= y y

43、=d1; WHEN OTHERS=NULL;END CASE;WITH sel SELECTy=d0 WHEN 0, d1 WHEN 1, UNAFFECTED WHEN OTHERS,END CASE;VHDL基本語句-順序語句LOOP語句:重復(fù)執(zhí)行語句若干次或指導(dǎo)滿足退出循環(huán)的條件為止使用格式標(biāo)號:LOOP 順序處理語句;END LOOP標(biāo)號;標(biāo)號:FOR 循環(huán)標(biāo)量 IN 離散范圍 LOOP 順序處理語句;END LOOP標(biāo)號;標(biāo)號:WHILE 條件 LOOP 順序處理語句;END LOOP標(biāo)號;注意:與高級程序語言不同,里面的循環(huán)變量是不用定義說明的。VHDL基本語句-順序語句EXIT語

44、句和NEXT語句:EXIT語句和NEXT語句都是LOOP語句的內(nèi)部循環(huán)控制語句執(zhí)行EXIT后,跳到循環(huán)體結(jié)束處,立即退出循環(huán)執(zhí)行NEXT語句后,跳到循環(huán)體開始處,有條件或無條件終止當(dāng)前循環(huán)迭代并開始下一循環(huán)VHDL基本語句-順序語句其它順序語句:等待語句WAIT:返回語句RETURN返回語句只能用于子程序。執(zhí)行后無條件結(jié)束子程序的執(zhí)行??詹僮髡Z句NULL常用于CASE語句中,利用NULL來排除一些不用的條件。WAIT;WAIT ON 信號表;WAIT UNTIL 條件表達(dá)式;WAIT FOR 時間表達(dá)式;VHDL基本語句-屬性描述語句VHDL中具有屬性的項(xiàng)目包括:類型、子類型、過程、函數(shù)、信號

45、、變量、常量、實(shí)體、結(jié)構(gòu)體、配置、程序包、元件和語句標(biāo)號等,屬性就是這些項(xiàng)目的特性。常用綜合器支持的屬性有:LEFT、RIGHT、HIGH、LOW、RANGE、REVERSE_RANGE、LENGTH、EVENT、STABLE。預(yù)定義描述語句格式:屬性對象屬性名VHDL基本語句-屬性描述語句上述屬性可以分為以下5類:1、信號類屬性2、數(shù)組區(qū)間類屬性3、數(shù)值類屬性4、函數(shù)類屬性5、數(shù)據(jù)類型類屬性除此之外,用戶還可以自定義屬性!VHDL基本語句-屬性描述語句1.信號類屬性:Delayed(time):產(chǎn)生一個延時的信號,這個新信號與原來的信號具有相同的數(shù)據(jù)類型。等效于(Transport afte

46、r)傳輸延時的描述。 例:b= transport a after 5ns; -常用于仿真延時模型 b=adelayed(5ns);信號類屬于用于產(chǎn)生一種新的信號。常用的屬性包括:Stable(time):檢測所加屬性的信號在time時間內(nèi)是否保持不變,屬性返回的值是布爾量。 例:b=astable(10ns); b=astable; -當(dāng)a發(fā)生改變,b將在對應(yīng)時刻產(chǎn)生一個低電平的脈沖VHDL基本語句-屬性描述語句1.信號類屬性:Quiet(time):這個屬性可建立一個布爾信號,若所加屬性的信號在time時間內(nèi)沒有發(fā)生轉(zhuǎn)換,則返回真。類似屬性Stable,常用于描述較復(fù)雜的信號值的變化。信號

47、類屬于用于產(chǎn)生一種新的信號。常用的屬性包括:Transaction:該屬性將建立一個數(shù)據(jù)類型為bit的新信號,當(dāng)屬性所加信號發(fā)生跳變時,就觸發(fā)新bit信號翻轉(zhuǎn)。 VHDL基本語句-屬性描述語句2.數(shù)組區(qū)間類屬性:對屬性項(xiàng)目取值區(qū)間進(jìn)行測試,返回內(nèi)容是一個區(qū)間。如RANGE和REVERSE_RANGESIGNAL vector :std_logic_vector(0 TO 7);FOR I IN vectorRANGE LOOP-等同于 FOR I IN 0 TO 7 LOOPFOR I IN vectorREVERSE_RANGE LOOP-等同于 FOR I IN 7 DOWNTO 0 LO

48、OPVHDL基本語句-屬性描述語句3.數(shù)值類屬性:LEFT、RIGHT、HIGH及LOW這些屬性函數(shù)主要用于對屬性測試目標(biāo)的數(shù)值特性進(jìn)行測試?yán)篠UBTYPE ex IS INTEGER Range 0 to 127;exleft - 0exright - 127exlow - 0exhigh - 127例:TYPE ex2 IS (S0,S1,S2,S3,S4);ex2left - S0ex2right - S4ex2low - S0ex2high - S4VHDL基本語句-屬性描述語句 數(shù)組的數(shù)值屬性只有一個:LENGTH這個函數(shù)用于對數(shù)組寬度或元素個數(shù)進(jìn)行測定TYPE array1 AR

49、RAY(0 TO 7) OF bit;SIGNAL wth:Integer;wth=array1Length; -wth=8;VHDL基本語句-屬性描述語句4.函數(shù)類屬性:函數(shù)類屬性是指屬性以函數(shù)的形式,給出有關(guān)數(shù)據(jù)類型、數(shù)組、信號的某些信息。數(shù)據(jù)類型屬性函數(shù) pos(x)- 返回x值的位置序號 val(x)- 返回位置序號x的值 succ(x)- 返回輸入值x的下一個值 pred(x)- 返回輸入值x的前一個值 leftof(x)- 返回鄰接x值左邊的值 rightof(x)- 返回鄰接x值右邊的值VHDL基本語句-屬性描述語句4.函數(shù)類屬性:函數(shù)類屬性是指屬性以函數(shù)的形式,給出有關(guān)數(shù)據(jù)類型

50、、數(shù)組、信號的某些信息。數(shù)組屬性函數(shù)(多維數(shù)組) right(n)返回n維區(qū)間的右端邊界號 left(n)-返回n維區(qū)間的左端邊界號 low(n)-返回n維區(qū)間的低端邊界號 high(n)-返回n維區(qū)間的高端邊界號例:type m is array(0 to 7, 3 downto 0)of bit;mleft(1) - 0mleft(2) - 3mright(1) - 7mhigh(2) - 3mlow(1) - 0VHDL基本語句-屬性描述語句4.函數(shù)類屬性:函數(shù)類屬性是指屬性以函數(shù)的形式,給出有關(guān)數(shù)據(jù)類型、數(shù)組、信號的某些信息。信號類屬性函數(shù) event當(dāng)信號在很短的時間內(nèi)發(fā)生了變化,返

51、回真 last_value-返回信號最后一次改變以前的值例:時鐘上升沿的檢測表達(dá)IF clkevent and clk=1 THEN 更嚴(yán)謹(jǐn)?shù)谋磉_(dá):IF clkevent and clklast_value=0and clk=1THEN VHDL基本語句-屬性描述語句5.數(shù)據(jù)類型屬性:base 該屬性可以得到一個數(shù)據(jù)類型的基本類型例:TYPE week IS(S0,S1,S2,S3,S4,S5,S6,S7);SUBTYPE wk IS week RANGE S0 TO S3;Variable x:week;x:=wkbaseright; -S7VHDL基本語句-屬性描述語句6.用戶自定義屬性:

52、屬性與屬性值的定義格式如下:ATTRIBUTE 屬性名:數(shù)據(jù)類型;ATTRIBUTE 屬性名 OF 對象名:對象類型 IS 值;例:枚舉類型編碼TYPE state IS (S0,S1,S2,S3);默認(rèn)的編碼方式: S0=“00”,S1=“01”,S2=“10”,S3=“11”ATTRIBUTE encoding OF state is : TYPE is “11 10 00 01”;VHDL測試基準(zhǔn)測試基準(zhǔn):一旦設(shè)計(jì)者描述了一個設(shè)計(jì),必須對其進(jìn)行驗(yàn)證,一檢查是否符合設(shè)計(jì)規(guī)范。最常用的方法是在模擬時施加輸入激勵信號。另外一種方法是用VHDL寫一個測試模型發(fā)生器和要檢查的輸出,即測試基準(zhǔn)(Te

53、st Bench)測試基準(zhǔn)的用法將在仿真一節(jié)詳細(xì)介紹VHDL程序的其它構(gòu)件VHDL程序的其它構(gòu)件塊塊(BLOCK)是VHDL中的一種劃分機(jī)制,它允許設(shè)計(jì)者將一個模塊劃分成數(shù)個區(qū)域注意:BLOCK方式的劃分結(jié)構(gòu)只是形式上的,在綜合后硬件結(jié)構(gòu)的邏輯層次不會增加,跟元件例化是不同的塊標(biāo)號:BLOCK (防護(hù)表達(dá)式)接口說明類屬說明;BEGINEND BLOCK塊標(biāo)號;VHDL程序的其它構(gòu)件塊塊examplelibrary ieee;use ieee.std_logic_1164.all;entity example3 is port ( d , clk : in bit ; q, qb: out b

54、it);end example3;architecture latch_bus of example3 is begin b1: block ( clk =1) -()是防護(hù)表達(dá)式為布爾型 begin q = guarded d after 5 ns; -由guarded引導(dǎo)防護(hù)語句 qb = not (d) after 7 ns; end block b1;end latch_bus;VHDL程序的其它構(gòu)件塊塊example仿真分析:防護(hù)條件為真時,防護(hù)表達(dá)式才起作用,而對非防護(hù)表達(dá)式不起作用VHDL程序的其它構(gòu)件函數(shù)在VHDL中有多種函數(shù)形式,包括用戶自定義的函數(shù)和庫中現(xiàn)成的具有專用功能的預(yù)定義函數(shù)注意:參數(shù)表可以是信號或常數(shù),參數(shù)表需要放在關(guān)鍵字CONSTANT或SIGNAL之后如果沒有特別說明,默認(rèn)為常數(shù)FUNCTION 函數(shù)名(參數(shù)表)RETURN 數(shù)據(jù)類型;FUNCTION

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論