![VHDL語(yǔ)言設(shè)計(jì)入門_第1頁(yè)](http://file4.renrendoc.com/view12/M06/29/32/wKhkGWX_aM6AOm8yAAOItXAykmY024.jpg)
![VHDL語(yǔ)言設(shè)計(jì)入門_第2頁(yè)](http://file4.renrendoc.com/view12/M06/29/32/wKhkGWX_aM6AOm8yAAOItXAykmY0242.jpg)
![VHDL語(yǔ)言設(shè)計(jì)入門_第3頁(yè)](http://file4.renrendoc.com/view12/M06/29/32/wKhkGWX_aM6AOm8yAAOItXAykmY0243.jpg)
![VHDL語(yǔ)言設(shè)計(jì)入門_第4頁(yè)](http://file4.renrendoc.com/view12/M06/29/32/wKhkGWX_aM6AOm8yAAOItXAykmY0244.jpg)
![VHDL語(yǔ)言設(shè)計(jì)入門_第5頁(yè)](http://file4.renrendoc.com/view12/M06/29/32/wKhkGWX_aM6AOm8yAAOItXAykmY0245.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
VHDL入門需掌握的根本知識(shí)一、信號(hào)〔signal〕的含義和信號(hào)的2種最常 用類型:std_logic和td_logic_vector二、四種常用語(yǔ)句的根本用法 賦值語(yǔ)句、if語(yǔ)句、case語(yǔ)句和process語(yǔ)句三、實(shí)體〔entity〕、結(jié)構(gòu)體〔architecture)和一個(gè)實(shí) 體和一個(gè)結(jié)構(gòu)體組成的設(shè)計(jì)實(shí)體。四、層次結(jié)構(gòu)的設(shè)計(jì)掌握元件〔component〕語(yǔ)句和端口映射〔portmap〕語(yǔ)句。五、庫(kù)〔library〕和程序包〔pachage〕的根本使用。有了上述的入門知識(shí),一般的設(shè)計(jì)沒(méi)有什么問(wèn)題。
信號(hào)和變量信號(hào)〔signal)是硬件中連線的抽象描述,信號(hào)在元件的端口連接元件。變量(varable)在硬件中沒(méi)有類似的對(duì)應(yīng)關(guān)系,它們主要用于硬件特性的高層次建模所需的計(jì)算中。信號(hào)在邏輯電路
設(shè)計(jì)中最常用的數(shù)據(jù)類型在VHDL語(yǔ)言中有10種數(shù)據(jù)類型,但是在邏輯電路設(shè)計(jì)中最常用的是std_logic和std_logic-vector提供的數(shù)據(jù)類型。Std_logic類型分為布爾〔boolean〕型、位〔bit〕型、位矢量(bit_vector)型。信號(hào)在邏輯電路
設(shè)計(jì)中最常用的數(shù)據(jù)類型Std_logic有9種狀態(tài),常用的是三種狀態(tài):‘0’高電平‘1’低電平‘z’ 高阻
高阻狀態(tài)是為了雙向總線的描述信號(hào)的說(shuō)明
一個(gè)信號(hào)只有說(shuō)明語(yǔ)句說(shuō)明后才能使用。用VHDL語(yǔ)言進(jìn)行設(shè)計(jì)就是寫一系列語(yǔ)句。一個(gè)語(yǔ)句用分號(hào)結(jié)束。設(shè)計(jì)說(shuō)明形式如下:Signalclock,T1,T2:std_logic;Signalr0,r1,r2,r3:std_logic_vector(15downto0);Signalr0,r1,r2,r3:std_logic_vector(0upto15);信號(hào)的說(shuō)明整數(shù)不能看作矢量,不能按位運(yùn)算。整數(shù)不能進(jìn)行邏輯運(yùn)算,只能進(jìn)行算術(shù)運(yùn)算。從信號(hào)說(shuō)明看不出一個(gè)信號(hào)是組合邏輯還是時(shí)序邏輯〔例如存放器〕,這與ABEL語(yǔ)言是不同的。邏輯運(yùn)算符有6種邏輯運(yùn)算符:NOT、OR、AND、NAND、NOR、XOR。常用的為前三種。
signala,b:std_logic;signalc,d:std_logic_vector(7downto0);aandb aorb nota正確
canddcxord notc
正確
aandc錯(cuò)誤
2個(gè)進(jìn)行邏輯運(yùn)算的信號(hào),類型必須相同。這些邏輯運(yùn)算符優(yōu)先級(jí)相同。
算術(shù)運(yùn)算符常用的算術(shù)運(yùn)算符有:+
-
Signala,b:std_logic_vector(15downto0);a+ba+‘1’A+“01”并置運(yùn)算符
&并置運(yùn)算符用于位的連接,形成矢量。也可連接矢量形成更大的矢量。Signala,b:std_logic_vector(3downto0);Signalc,d:a,b:std_logic_vector(2downto0);aand(‘1’&c)c&a
關(guān)系運(yùn)算符關(guān)系運(yùn)算符有以下幾種:=等于 /=不等于<小于 >大于<=小于等于 >=大于等于等于、不等于運(yùn)算符適用于所有的數(shù)據(jù)類型,其他的運(yùn)算符適用于整數(shù)、位及矢量等。在進(jìn)行關(guān)系運(yùn)算時(shí),兩邊的數(shù)據(jù)類型必須相同,但位長(zhǎng)度可以不同。關(guān)系運(yùn)算的結(jié)果為“真”或者“假”。
常用的4種語(yǔ)句VHDL有許多類型的語(yǔ)句,我們這里講4種。一、賦值語(yǔ)句
signala,b,c:std_logic;signald,e,q:std_logic_vector;c<=not(aandb);q<=dorq;常用的4種語(yǔ)句二、if語(yǔ)句1、if語(yǔ)句的三種形式?if條件then假設(shè)干語(yǔ)句endif;?if條件then假設(shè)干語(yǔ)句else假設(shè)干語(yǔ)句endif;常用的4種語(yǔ)句二、if語(yǔ)句1、if語(yǔ)句的三種形式?if條件1then假設(shè)干語(yǔ)句elsif條件2then假設(shè)干語(yǔ)句┆
else條件nthen假設(shè)干語(yǔ)句endif;
常用的4種語(yǔ)句二、if語(yǔ)句2、例子1—16位存放器--Signalreset,clk,wen:std_logic;--Signald,q:std_logic_vector(15downto0);Ifreset=‘0’thenq<=x”0000”;Elsifclock’eventandclock=‘1’thenifwen=‘1’thenq<=d;else q<=q;endif;Endif;說(shuō)明:--是注釋開(kāi)始的標(biāo)志,signal語(yǔ)句的存在只是為了說(shuō)明這些信號(hào)的類型,供閱讀方便使用。
常用的4種語(yǔ)句二、if語(yǔ)句3、例子2—16位存放器的另一種形式--Signalreset,clk,wen:std_logic;--Signald,q:std_logic_vector(15downto--0);Ifreset=‘0’thenq<=x”0000”;Elsifclock’eventandclock=‘1’thenifwen=‘1’thenq<=d; endif;Endif;常用的4種語(yǔ)句二、if語(yǔ)句4、例子3—16位存放器的第三種形式--Signalreset,clk,wen:std_logic;--Signald,q:std_logic_vector(15downto--0);Ifreset=‘0’thenq<=”0000000000000000”;Elsifclock’eventandclock=‘1’thenifwen=‘1’thenq<=d;endif;Endif;常用的4種語(yǔ)句二、if語(yǔ)句5、信號(hào)沿的幾種表示方法clock’eventandclock=‘1’上升沿clock’eventandclock=‘0’下降沿rising_edge〔clock〕上升沿falling_edge(clock)下降沿
常用的4種語(yǔ)句二、if語(yǔ)句6、例子4—時(shí)鐘下降沿觸發(fā)的16位存放器--Signalreset,clk,wen:std_logic;--Signald,q:std_logic_vector(15downto--0);Ifreset=‘0’thenq<=X”0000”;Elsiffalling_edge(clock)thenifwen=‘1’thenq<=d;endif;Endif;常用的4種語(yǔ)句二、if語(yǔ)句7、例子5—二選一多路開(kāi)關(guān)
--Signalsel:std_logic;--Signala,b,c:std_logic_vector(15--downto0);Ifsel=‘0’thenc<=a;Elsec<=b;Endif;常用的4種語(yǔ)句三、進(jìn)程〔process〕語(yǔ)句PROCESS語(yǔ)句是VHDL語(yǔ)言中描述硬件系統(tǒng)行為的最根本的語(yǔ)句。本質(zhì)上描述了一個(gè)功能獨(dú)立的電路塊。1、process語(yǔ)句的根本形式PROCESS[〔敏感信號(hào)1,敏感信號(hào)2,…〕]BEGIN┇ENDPROCESS;常用的4種語(yǔ)句三、process語(yǔ)句2、說(shuō)明敏感信號(hào)表中的任何一個(gè)發(fā)生變化,都啟動(dòng)process語(yǔ)句工作。敏感信號(hào)表中的信號(hào)是一局部輸入信號(hào),或者在process語(yǔ)句中形成的反響信號(hào);純粹輸出的信號(hào)或者在本語(yǔ)句中不發(fā)生變化的信號(hào)不能放入敏感信號(hào)表。常用的4種語(yǔ)句三、process語(yǔ)句我們?cè)趇f語(yǔ)句中介紹的電路如果不和PROCESSS語(yǔ)句結(jié)合起來(lái),不能構(gòu)成一個(gè)功能獨(dú)立的電路,編譯時(shí)就會(huì)出錯(cuò)。下面是改造后的16位存放器和2選1多路開(kāi)關(guān)。3、改造后的16位存放器--Signalreset,clk,wen:std_logic;
--Signald,q:std_logic_vector(15downto0);
register_pro:process(reset,clock)
begin
Ifreset=‘0’then
q<=x”0000”;
Elsifclock’eventandclock=‘1’then
ifwen=‘1’then
q<=d;
endif;
Endif;
endprocess;
注意:敏感信號(hào)表中沒(méi)有信號(hào)D,因?yàn)橹恍枰猺eset和clock啟動(dòng)這個(gè)process語(yǔ)句;信號(hào)q是個(gè)輸出信號(hào),因此不能放入process語(yǔ)句的敏感信號(hào)表中。
Register_pro:表示一個(gè)標(biāo)號(hào),標(biāo)號(hào)可有可無(wú)。
常用的4種語(yǔ)句三、process語(yǔ)句4、改造后的2選一多路開(kāi)關(guān)--Signalsel:std_logic;
--Signala,b,c:std_logic_vector(15
--downto0);
process(sel,a,b)
begin
Ifsel=‘0’then
c<=a;
Else
c<=b;
Endif;
endprocess;
常用的4種語(yǔ)句三、process語(yǔ)句5、程序計(jì)數(shù)器PC的一種設(shè)計(jì)--signalpc,zjmp_pc,cjmp_pc:
--std_logic_vector(15downhto0);
--signalt,zj_flag,cj_flag,dw_flag,reset:std_logic;
pc_proc:process(pc,zjmp_pc,cjmp_pc,t,zj_flag,cj_flag,
dw_flag,reset)
begin
ifreset=‘0’then
pc<=x”0000”;
elsift’eventandt=‘1’then
ifzj_flag=‘1’then
pc<=zjmp_pc;
elsifcj_flag=‘1’then
pc<=cjmp_pc;
elsifdw_flag=‘1’then
pc<=pc+“10”;
else
pc<=pc+‘1’;
endif;
endif;
endprocess;常用的4種語(yǔ)句三、process語(yǔ)句6、1000000計(jì)數(shù)器設(shè)計(jì)--signalcounter:std_logic_vector(19downto0);
--signalcounterclk,reset:std_logic;
--16進(jìn)制f423f等于10進(jìn)制999999
process(reset,clk)
begin
ifreset=‘0’then
counter<=x”00000”;
elsifclk’eventandclk=‘1’then
ifcounter/=x”f423f”then
counter<=counter+‘1’;
else
counter<=x”00000”;
endif;
endif;
endprocess;
常用的4種語(yǔ)句三、process語(yǔ)句7、鎖存器設(shè)計(jì)--signalreset,set,clk:std_logic;
--siganld,q:std_logic_vector(15downto0);
process(reset,set,clk)
ifreset=‘0’then
q<=x”0000”;
elsifset=‘0’then
q<=x”ffff”;
elsifclk=‘1’then
q<=d;
endif;
endprocess;常用的4種語(yǔ)句四、CASE語(yǔ)句1、CASE語(yǔ)句的書寫格式CASE條件表達(dá)式ISWHEN條件表達(dá)式值1=〉假設(shè)干語(yǔ)句 ┆WHEN條件表達(dá)式n=〉 假設(shè)干語(yǔ)句WHENOTHERS=〉 假設(shè)干語(yǔ)句ENDCASE;常用的4種語(yǔ)句四、CASE語(yǔ)句2、例子1—運(yùn)算器設(shè)計(jì)
一個(gè)有加、減、與、或功能的16位運(yùn)算器。其中,cin是原來(lái)的進(jìn)位值,cout是運(yùn)算后的進(jìn)位值,q是運(yùn)算的結(jié)果,a和b是2個(gè)操作數(shù),sel是個(gè)2位的運(yùn)算選擇碼。
--signala,b,q:std_logic_vector(15downto0);
--signalsel:std_logic_vector(1downto0);
--signalcin,cout:std_logic;
--signalresult:std_logic_vector(16downto0);
process(a,b,sel,cin)
begin
caseselis
when“00”=>
result<=‘0’&a+‘0’&b;
q<=result(15downto0);
cout<=result(16);
when“01”=>
result<=‘0’&a+‘0’&b;
q<=result(15downto0);
cout<=result(16);
when“10”=>
q<=aandb;
cout<=cin
whenothers=>
q<=aorb;
cout<=cin;
endcase;
endprocess;常用的4種語(yǔ)句四、CASE語(yǔ)句3、例子2—一個(gè)2與非門--signal
a:std_logic_vector(1downto0);
--signalc:std_logic;
process(a)
begin
caseselis
when“00”|“01”|“10”=>
c<=‘1’;
when“11”=>
c<=‘0’;
whenothers=>
null;
endcase;
endprocess;
在本例子中,第一個(gè)when中的“|“代表或者,即三個(gè)條件中的任何一個(gè)滿足,都執(zhí)行c<=‘1’。實(shí)際上與非門很少這樣設(shè)計(jì)。
Null是個(gè)什么也不做的空語(yǔ)句。常用的4種語(yǔ)句四、CASE語(yǔ)句4、例子3—一個(gè)狀態(tài)機(jī)設(shè)計(jì)該狀態(tài)機(jī)可用于指令cache的在不命中時(shí)的控制。指令cache容量是8x8字。每個(gè)字16位。存儲(chǔ)器數(shù)據(jù)總線是16位。Miss是不命中標(biāo)志。
--signalstate,next_state:std_logic_vector(3downto0);
--signalreset,clk,miss:std_logic;
proceee(reset,clk)
begin
ifreset=‘0’then
state<=“0000”;
elsifclk’eventandclk=‘1’then
state<=next_state;
endif;
endprocess;
process(miss,state)
begin
casestateis
when“0000”=>
ifmiss=‘1’then
next_state<=“0001”;
else
next_state<=“0000”;
endif;
when“0001”=>--1
next_state<=“0011”;
when“0011”=>--2
next_state<=“0010”;
when“0010”=>--3
next_state<=“0110”;
when“0110”=>--4
next_state<=“0111”;
when“0111”=>--5
next_state<=“0100”;
when“0100”=>--6
next_state<=“1100”;
when“1100”=>--7
next_state<=“1000”;
when“1000”=>--8
next_state<=“0000”;
whenothers=>
next_state<=“0000”;
endcase;
endprocess;設(shè)計(jì)實(shí)體VHDL適合做大型工程的設(shè)計(jì)。除了極少數(shù)十分簡(jiǎn)單的工程外,根本上都采用層次結(jié)構(gòu)的設(shè)計(jì)。在層次結(jié)構(gòu)的設(shè)計(jì)中,設(shè)計(jì)實(shí)體是一個(gè)根本單元。使用VHDL語(yǔ)言設(shè)計(jì)一個(gè)工程的過(guò)程中,經(jīng)常要使用廠家提供各種庫(kù),庫(kù)中存放的是供用戶使用的已經(jīng)設(shè)計(jì)好的設(shè)計(jì)實(shí)體。因此可以認(rèn)為,一個(gè)工程就是用戶設(shè)計(jì)的各個(gè)設(shè)計(jì)實(shí)體和庫(kù)中提供的設(shè)計(jì)實(shí)體通過(guò)適當(dāng)?shù)男盘?hào)連接完成的。設(shè)計(jì)實(shí)體在一個(gè)工程中除了最高層的設(shè)計(jì)實(shí)體外,其他設(shè)計(jì)實(shí)體都是子系統(tǒng),或者稱為元件。這里的元件是廣義的,不是市場(chǎng)上賣的現(xiàn)成的元件。最高層的設(shè)計(jì)實(shí)體就是系統(tǒng)總體。
設(shè)計(jì)實(shí)體一個(gè)設(shè)計(jì)實(shí)體由三局部構(gòu)成:實(shí)體〔entity〕定義系統(tǒng)對(duì)外聯(lián)系的信號(hào),信號(hào)的方向和數(shù)據(jù)類型。相當(dāng)于電子器件的引腳。結(jié)構(gòu)體(architecture)完成設(shè)計(jì)實(shí)體規(guī)定的功能,就是子系統(tǒng)的內(nèi)部電路結(jié)構(gòu)。庫(kù)(library)和程序包(package)設(shè)計(jì)實(shí)體前面要寫明該設(shè)計(jì)實(shí)體用到的庫(kù)和程序包。實(shí)體〔entity〕Entity定義流出、流入設(shè)計(jì)實(shí)體的信號(hào)。Entity的書寫形式如下:
Entity
實(shí)體名is
端口說(shuō)明;
end實(shí)體名;實(shí)體〔entity〕下面舉一個(gè)實(shí)體的例子:ENTITYmuxISPORT(d0,d1,sel:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux;
其中,MUX是實(shí)體名。PORT〔端口〕說(shuō)明的是端口信號(hào)的數(shù)據(jù)類型的和流動(dòng)方向。在本例中,d0、d1和sel是STD_LOGIC數(shù)據(jù)類型,是流入實(shí)體的信號(hào);q是STD_LOGIC數(shù)據(jù)類型,是流出實(shí)體的信號(hào)。實(shí)體〔entity〕Port(端口的書寫形式)
PORT(端口名,…,端口名:模式數(shù)據(jù)類型; 端口名,…,端口名:模式數(shù)據(jù)類型;
. . .
端口名,…,端口名:模式數(shù)據(jù)類型);
實(shí)體說(shuō)明中的每一個(gè)輸出/輸入被稱為一個(gè)端口。一個(gè)端口實(shí)際上表示一個(gè)或者一組具有相同模式和數(shù)據(jù)類型的負(fù)責(zé)與外部通訊的信號(hào),相當(dāng)于元件的引腳。實(shí)體〔entity〕下面是一個(gè)PORT語(yǔ)句的例子:PORT (reset,cs: in std_logic; rd,wr in std_logic; a1,a0: in std_logic; pa,pb inout std_logic_vector(7downto0); pc out std_logic_vector(17downto0));
端口的模式用來(lái)說(shuō)明信號(hào)通過(guò)端口的方向和通過(guò)方式,有以下幾種方式:實(shí)體〔entity〕IN〔流入實(shí)體〕OUT〔從實(shí)體流出〕INOUT〔雙向端口,即可流入實(shí)體,又可從實(shí)體流出〕BUFFER〔雙向端口,可從實(shí)體流出,也能用于內(nèi)部反響〕
OUT模式的端口不能用于被設(shè)計(jì)實(shí)體的內(nèi)部反響。BUFFER模式的端口能夠用于被設(shè)計(jì)實(shí)體的內(nèi)部反響。INOUT模式可以代替IN、INOUT、BUFFER模式,INOUT模式允許內(nèi)部反響。雖然INOUT模式能代替其他模式,但在設(shè)計(jì)時(shí),除非真正需要雙向端口時(shí),建議不要使用INOUT模式。慣例是把輸入端口指定為IN模式,把輸出端口指定為OUT模式,把雙向端口指定INOUT模式。這一良好的設(shè)計(jì)習(xí)慣,從端口的名稱和端口模式就可以一目了然地判定信號(hào)的用途、性質(zhì)、來(lái)源和去向,十分方便。對(duì)于一個(gè)大型設(shè)計(jì)任務(wù),大家協(xié)同工作,這樣的描述不會(huì)引起歧義。另一方面,指定滿足端口性能的最根本模式,可以減少占用的器件內(nèi)部的資源。結(jié)構(gòu)體(architecture)完成設(shè)計(jì)實(shí)體規(guī)定的功能,就是子系統(tǒng)的內(nèi)部電路結(jié)構(gòu)。結(jié)構(gòu)體的書寫形式如下:ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS內(nèi)部信號(hào),常量,數(shù)據(jù)類型,函數(shù)等的定義;BEGIN 假設(shè)干并行執(zhí)行語(yǔ)句;END結(jié)構(gòu)體名;注意:實(shí)體名一定要與對(duì)應(yīng)的實(shí)體名完全一致。ARCHITECTURE后面的結(jié)構(gòu)體名與END后的結(jié)構(gòu)體名完全一致。結(jié)構(gòu)體的名字可以隨便起,因?yàn)閯e的地方都用不著這個(gè)名字。結(jié)構(gòu)體內(nèi)要求并行執(zhí)行語(yǔ)句,類似IF之類的順序執(zhí)行語(yǔ)句,只要將它們放在并行語(yǔ)句〔如process)之內(nèi)即可。結(jié)構(gòu)體(architecture)一個(gè)實(shí)體可以對(duì)應(yīng)幾個(gè)結(jié)構(gòu)體,我們這里只介紹一個(gè)實(shí)體只對(duì)應(yīng)一個(gè)結(jié)構(gòu)體的情況。結(jié)構(gòu)體有許多構(gòu)成的方法,就是把各類的并行語(yǔ)句加以不同的組合方式形成各種構(gòu)成方法。我們使用賦值語(yǔ)句、PROCESS語(yǔ)句和COMPONENT〔元件語(yǔ)句〕構(gòu)成結(jié)構(gòu)體的方法,這是初學(xué)者最常使用的方法,也是很管用的方法。庫(kù)在層次結(jié)構(gòu)設(shè)計(jì)中,程序包〔PACKAGE〕和庫(kù)(LIBRARY)都是很重要的工具,即使是由一個(gè)設(shè)計(jì)實(shí)體構(gòu)成的設(shè)計(jì),也要用到庫(kù)。VHDL的庫(kù)是用來(lái)存儲(chǔ)可編譯的設(shè)計(jì)單元的地方,也就是用來(lái)存放可編譯的程序包的地方,這樣它就可以在其他設(shè)計(jì)中被調(diào)用。庫(kù)中的設(shè)計(jì)單元〔實(shí)體說(shuō)明、結(jié)構(gòu)體、配置說(shuō)明、程序包說(shuō)明和程序包體等〕可以用作其他VHDL設(shè)計(jì)的資源。VHDL語(yǔ)言的庫(kù)分為兩種,一種是設(shè)計(jì)庫(kù),一種是資源庫(kù)。被IEEE認(rèn)可的資源庫(kù)稱為IEEE庫(kù)。VHDL工具廠商和EDA工具專業(yè)公司都有自己的資源庫(kù),有的自行參加到各自的開(kāi)發(fā)工具IEEE庫(kù)中,也有自行建庫(kù),另行獨(dú)立調(diào)用的資源庫(kù)。庫(kù)IEEE庫(kù)是最常用的資源庫(kù),其中包含的程序包是:Std_logic_1164 一些常用函數(shù)和數(shù)據(jù)類型程 序包Numeric_bit bit類型程序包 Numeric_Std 用于綜合的數(shù)值類型和算術(shù) 函數(shù)程序包Math_Real 實(shí)數(shù)的算術(shù)函數(shù)程序包Math_Complex 復(fù)數(shù)的算術(shù)函數(shù)程序包Vital_Timing Vital時(shí)序程序包Vital_Primitives Vital元件程序包
上述程序包中,不是每一個(gè)EDA軟件都全部提供。使用時(shí)應(yīng)該詳細(xì)了解EDA軟件的功能,看有無(wú)相應(yīng)的程序包,或者找出替代的程序包。
庫(kù)除了IEEE標(biāo)準(zhǔn)資源庫(kù)外,各可編程器件的廠家提供的EDA軟件提供自己獨(dú)特的資源程序包。由于這些程序包是為它們制造的器件效勞的,往往更有針對(duì)性。QartusⅡ中提供了一個(gè)LPM庫(kù),庫(kù)中有許多稱之為MegaFunctions的功能強(qiáng)大的函數(shù)。在QartusⅡ中使用菜單命令Tools→MegaWizardPlug-InManager能夠很容易地掌握QartusⅡ提供的許多元件和函數(shù)的使用。使用Cyclone芯片中的存儲(chǔ)器時(shí),Altera公司強(qiáng)烈推薦通過(guò)Tools→MegaWizardPlug-InManager進(jìn)行設(shè)計(jì)。一個(gè)設(shè)計(jì)實(shí)體例子
libraryieee;useieee.std_logic_1164.all;
ENTITYand_gateIS PORT(op1,op2:instd_logic; and_result:outstd_logic);ENDand_gate;
ARCHITECTUREbehavOFand_gateISBEGIN and_result<=op1ANDop2;ENDbehav;
庫(kù)使用庫(kù)中的元件和函數(shù)之前,需要使用LIBRARY子句和USE子句予以說(shuō)明。沒(méi)有說(shuō)明的庫(kù)中的元件通常不能使用。如果一個(gè)設(shè)計(jì)實(shí)體中使用了某個(gè)庫(kù)中的元件和函數(shù),就要使用相應(yīng)的LIBRARY子句和USE子句,LIBRARY子句和USE子句放在總是放在設(shè)計(jì)文件的最前面〔可以放在注釋之后〕,LIBRARY子句的作用是使該庫(kù)在當(dāng)前文件中“可見(jiàn)”。LIBRARY子句說(shuō)明使用哪個(gè)庫(kù),它的格式是 LIBRARY庫(kù)名1,庫(kù)名2,…,庫(kù)名n;USE子句說(shuō)明使用哪個(gè)庫(kù)中的哪個(gè)程序包中的元件或者函數(shù)。它的格式是: USE庫(kù)名.程序包名.ALL;下面是使用,LIBRARY子句和USE子句的例子:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;對(duì)于一般使用而言,這些庫(kù)的說(shuō)明語(yǔ)句夠用了。
component〔元件〕語(yǔ)句
和portmap〔端口映射〕語(yǔ)句在層次化結(jié)構(gòu)設(shè)計(jì)中,要經(jīng)常用到component〔元件〕語(yǔ)句和portmap〔端口映射〕語(yǔ)句。component語(yǔ)句的作用是說(shuō)明設(shè)計(jì)實(shí)體中使用的哪個(gè)低層設(shè)計(jì)實(shí)體和該低層設(shè)計(jì)實(shí)體的端口。該低層設(shè)計(jì)實(shí)體在本設(shè)計(jì)實(shí)體中作為現(xiàn)成的元件使用。component〔元件〕語(yǔ)句一般放在結(jié)構(gòu)體中architecture語(yǔ)句和首次出現(xiàn)的begin之間,給人以一目了然的感覺(jué)。portmap語(yǔ)句完成低層設(shè)計(jì)實(shí)體的端口信號(hào)和本設(shè)計(jì)實(shí)體其他局部的信號(hào)連接問(wèn)題。它必須放在結(jié)構(gòu)體內(nèi)首次出現(xiàn)的begin之后。component〔元件〕語(yǔ)句
和portmap〔端口映射〕語(yǔ)句高層的設(shè)計(jì)實(shí)體可以把低層設(shè)計(jì)實(shí)體當(dāng)作元件來(lái)引用稱作例化。在一個(gè)高層設(shè)計(jì)實(shí)體中可以對(duì)一個(gè)元件例化屢次。component〔元件〕語(yǔ)句
和portmap〔端口映射〕語(yǔ)句COMPONENT語(yǔ)句的書寫形式是:COMPONENT元件名--指定調(diào)用元件PORT 說(shuō)明--被調(diào)用元件端口ENDCOMPONENT;端口的說(shuō)明和被調(diào)用元件〔設(shè)計(jì)實(shí)體〕中ENTITY中的說(shuō)明要完全一致〔次序可以改變〕。component〔元件〕語(yǔ)句
和portmap〔端口映射〕語(yǔ)句PORT語(yǔ)句的書寫格式如下: [標(biāo)號(hào)]:POETMAP(MS1=>S1,MS2=>S2,…,MSn=>Sn); 其中,MS1,MS2,…,MSn和S1,S2,…,Sn都是信號(hào)名。標(biāo)號(hào)是可選的,即可有可無(wú)。S1,S2,…,Sn是高層設(shè)計(jì)實(shí)體中使用的信號(hào)名;MS1,MS2,…,MSn是低層建立元件時(shí)使用的端口信號(hào)名〔引腳名〕。這種映射方式稱為顯式映射方式,它把元件端口的信號(hào)和高層中使用的信號(hào)顯式對(duì)應(yīng)起來(lái),書寫的順序不受任何限制。請(qǐng)注意:高層中使用的信號(hào)名和元件端口對(duì)應(yīng)的信號(hào)名可以相同,也可以不同;但是完全相同有時(shí)根本做不到。component〔元件〕語(yǔ)句
和portmap〔端口映射〕語(yǔ)句每次引用該元件都要使用portmap〔端口映射〕語(yǔ)句例化一次。標(biāo)號(hào)是可選的。然而我主張,為了區(qū)別同一個(gè)元件在一個(gè)設(shè)計(jì)實(shí)體內(nèi)的屢次例化,最好使用標(biāo)號(hào)將屢次例化加以區(qū)分。在一個(gè)設(shè)計(jì)實(shí)體的獨(dú)立電路〔如process〕原那么上都應(yīng)該有標(biāo)號(hào),以便閱讀。一個(gè)層次結(jié)構(gòu)設(shè)計(jì)的例子設(shè)計(jì)一個(gè)由2個(gè)與門、1個(gè)或門構(gòu)成的與或門低層的設(shè)計(jì)實(shí)體“與門”
libraryieee;
useieee.std_logic_1164.all;
ENTITYand_gateIS
PORT(op1,op2:instd_logic;
and_result:outstd_logic);
ENDand_gate;
ARCHITECTUREbehavOFand_gateIS
BEGIN
and_result<=op1ANDop2;
ENDbehav;低層的設(shè)計(jì)實(shí)體“或門”
libraryieee;
useieee.std_logic_1164.all;
ENTITYor_gateIS
PORT(op1,op2:instd_logic;
or_result:outstd_logic);
ENDor_gate;
ARCHITECTUREbehavOFor_gateIS
BEGIN
or_result<=op1ORop2;
ENDbehav;高層設(shè)計(jì)中使用元件and_gate和or_gate設(shè)計(jì)與或門
libraryieee;
useieee.std_logic_1164.all;
ENTITYand_or_gateIS
PORT(a1,a2,a3,a4:instd_logoc;
and_or_result:outstd_logic);
ENDand_or_gate;
ARCHITECTUREstructOFand_or_gateIS
SIGNALb1,b2:std_logic;--高層設(shè)計(jì)中使用的內(nèi) --部信號(hào)
COMPONENTand_gate--說(shuō)明元件“與門”and_gate
PORT(op1,op2:instd_logic;
and_result:outstd_logic);
ENDCOMPONENT;
COMPONENTor_gate--說(shuō)明元件“或門”or_gate
PORT(op1,op2:instd_logic;
or_result:outstd_logic);
ENDCOMPONENT;
BEGIN
--對(duì)“與門”and_gate的一次例化
G1:and_gate
PORTMAP(op1=>a1,op2=>a2,
and_result=>b1);
--對(duì)“與門”and_gate的一次例化
G2:and_gatePORTMAP(op1=>a3,op2=>a4,
and_result=>b2);
--對(duì)“或門”or_gate的一次例化
G3:or_gatePORTMAP(op1=>b1,or_result=>
and_or_result,op2=>b2);
ENDstruct;
Pachage(程序包)
和工作庫(kù)work在上面與或門的構(gòu)建中,我們會(huì)覺(jué)察一個(gè)問(wèn)題:如果每個(gè)高層設(shè)計(jì)實(shí)體在使用同一個(gè)低層設(shè)計(jì)實(shí)體時(shí)都要對(duì)引用的低層設(shè)計(jì)實(shí)體進(jìn)行說(shuō)明豈不是太麻煩?解決這個(gè)問(wèn)題的的方法是使用package(程序包)和工作庫(kù)work。程序包〔PACKAGE〕是一種使包體中的類型、常量、元件和函數(shù)對(duì)其他模塊〔文件〕是可見(jiàn),可以調(diào)用的設(shè)計(jì)單元。程序包是公用的存儲(chǔ)區(qū),在程序包內(nèi)說(shuō)明的數(shù)據(jù),可以被其他模塊〔文件〕使用。程序包由包頭和包體2局部組成。WORK庫(kù)是設(shè)計(jì)庫(kù),在任何設(shè)計(jì)文件中隱含都是“可見(jiàn)”的,不需要特別說(shuō)明。也就是說(shuō),每一個(gè)設(shè)計(jì)文件中總是隱含以下不可見(jiàn)的行: LIBRARY WORK;下面仍將與或門的設(shè)計(jì)為例,說(shuō)明pachage和庫(kù)work的使用。與門和活門的設(shè)計(jì)不變,增加一個(gè)PACKAGE的設(shè)計(jì),對(duì)與或門設(shè)計(jì)進(jìn)行修改。LIBRARYieee;
USEieee.std_logic_1164.all;
PACKAGEand_or_componentsIS
COMPONENTor_gate--說(shuō)明元件“或門”or_gate
PORT(op1,op2:instd_logic;
or_result:outstd_logic);
ENDCOMPONENT;
COMPONENTand_gate --說(shuō)明元件“與門”and_gate
PORT(op1,op2:instd_logic;
and_result:outstd_logic);
ENDCOMPONENT;
ENDand_or_components;LIBRARYieee;
USEieee.std_logic_1164.all;
USEwork.and_or_components.all;--指明調(diào)用的程序包,使其成為可用
ENTITYand_or_gateIS
PORT(a1,a2,a3,a4:instd_logoc;
and_or_result:outstd_logic);
ENDand_or_gate;
ARCHITECTUREstructOFand_or_gateIS
SIGNALb1,b2:std_logic;--高層設(shè)計(jì)中使用的內(nèi)部信號(hào)
BEGIN
--對(duì)“與門”and_gate的一次例化
G1:and_gate PORTMAP(op1=>a1,op2=>a2,and_result=>b1);
--對(duì)“與門”and_gate的一次例化
G2:and_gatePORTMAP(op1=>a3,op2=>a4,and_result=>b2);
--對(duì)“或門”or_gate的一次例化
G3:or_gatePORTMAP(op1=>b1,or_result=>and_or_result,op2=>b2);
ENDstruct;一個(gè)存放器堆的設(shè)計(jì)要求:1、設(shè)計(jì)4個(gè)16位的存放器堆2、當(dāng)reset信號(hào)為低時(shí),使所有存放器復(fù)位。3、用rd〔2位〕選擇寫入的存放器。當(dāng)寫允許信號(hào)write為高時(shí),在時(shí)鐘信號(hào)clk的上升沿將數(shù)據(jù)d_input寫入rd選中的存放器。4、用rs〔2位〕信號(hào)選擇讀出的存放器,讀出的內(nèi)容送q_out。一個(gè)存放器堆的設(shè)計(jì)設(shè)計(jì)方案:1、低層設(shè)計(jì)實(shí)體有3個(gè):16位的存放器register_162—4譯碼器decoder2_to_44選1多路開(kāi)關(guān)mux4_to_12、使用上述元件的高層設(shè)計(jì)實(shí)體regfile16位存放器register_16LIBRARYieee;USEieee.std_logic_1164.all;ENTITYregiister_16IS PORT ( reset :IN STD_LOGIC; d_input :IN STD_LOGIC_vector(15downto0); clk :IN STD_LOGIC; write :IN STD_LOGIC; sel :IN STD_LOGIC; q_output :OUT STD_LOGIC_vector(15downto0) );
ENDregister_16;ARCHITECTUREaOFregister_16IS
BEGIN
PROCESS(reset,clk)
BEGIN
IFreset='0'then
q_output<=x"0000";
elsif(clk'EVENTANDclk='1')THEN
IFsel='1'andwrite='1'THEN
q_output<=d_input;
ENDIF;
ENDIF;
ENDPROCESS;
ENDa;
2-4譯碼器decoder2_to_4LibraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entitydecoder2_to_4is port( rd:instd_logic_vector(1downto0); sel00:outstd_logic; sel01:outstd_logic; sel02:outstd_logic; sel03:outstd_logic);enddecoder2_to_4;architectureBehavioralofdecoder2_to_4isbegin sel00 <=(notrd(1))and(notrd(0)); sel01 <=(notrd(1))andrd(0); sel02 <=rd(1)and(notrd(0)); sel03 <=rd(1)andrd(0);endBehavioral;4選1多路開(kāi)關(guān)mux4_to_1libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entitymux4_to_1isport( Input0,Input1,Input2,Input3 :instd_logic_vector(15downto0); Sel :instd_logic_vector(1downto0); Out_put:outstd_logic_vector(15downto0));endmux4_to_1;architectureBehavioralofmux4_to_1isbeginmux:process(Sel,Input0,Input1,Input2,Input3)begincaseSelis when"00"=>Out_put<=Input0; when"01"=>Out_put<=Input1; when"10"=>Out_put<=Input2; when"11"=>Out_put<=Input3; endcase;endprocess;endBehavioral;存放器堆regfile高層設(shè)計(jì)實(shí)體libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
entityregfileis
Port( rs:instd_logic_vector(2downto0);
rd:instd_logic_vector(2downto0);
reset :instd_logic;
write :instd_logic;
clk :instd_logic;
d_input:instd_logic_vector(5downto0);
q_out:outstd_logic_vector(5downto0)
);
endregfile;architecturestructureofregfileis
componentregister_16PORT(--16bit存放器
reset,clk,write,sel:INSTD_LOGIC;
d_input :IN STD_LOGIC_vector(15downto0);
q_output:OUTSTD_LOGIC_vector(15downto0));
endcomponent;
comp
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 12富起來(lái)到強(qiáng)起來(lái) 第一課時(shí)(說(shuō)課稿)-2023-2024學(xué)年道德與法治五年級(jí)下冊(cè)統(tǒng)編版
- 13《貓》說(shuō)課稿-2023-2024學(xué)年四年級(jí)語(yǔ)文下冊(cè)統(tǒng)編版
- Unit 4 Customs and Traditions:Review of Passives 語(yǔ)法銜接活動(dòng)案例說(shuō)課稿-2024-2025學(xué)年高中英語(yǔ)滬外版必修第一冊(cè)
- 8 安全記心上《平安出行》(說(shuō)課稿)-部編版道德與法治三年級(jí)上冊(cè)
- 西藏小區(qū)變壓器施工方案
- 27《巨人的花園》(說(shuō)課稿)-2023-2024學(xué)年統(tǒng)編版語(yǔ)文四年級(jí)下冊(cè)
- 《3 我的本領(lǐng)大-循環(huán)模塊與執(zhí)行器模塊組合應(yīng)用》說(shuō)課稿-2023-2024學(xué)年清華版(2012)信息技術(shù)六年級(jí)下冊(cè)001
- 9元日說(shuō)課稿-2023-2024學(xué)年三年級(jí)下冊(cè)語(yǔ)文統(tǒng)編版
- Unit 3 Seasons Lesson 2(說(shuō)課稿)-2023-2024學(xué)年人教新起點(diǎn)版英語(yǔ)二年級(jí)下冊(cè)
- 倒賣人口合同范例
- 邵陽(yáng)市職工勞動(dòng)能力鑒定表
- 稀土配合物和量子點(diǎn)共摻雜構(gòu)筑發(fā)光軟材料及其熒光性能研究
- 衛(wèi)生部手術(shù)分級(jí)目錄(2023年1月份修訂)
- JJG 921-2021環(huán)境振動(dòng)分析儀
- 中藥炮制學(xué)-第五、六章
- 中國(guó)風(fēng)軍令狀誓師大會(huì)PPT模板
- 小兒高熱驚厥精品課件
- 2023機(jī)械工程師考試試題及答案
- 2022年電拖實(shí)驗(yàn)報(bào)告伍宏淳
- 豐田汽車戰(zhàn)略規(guī)劃與戰(zhàn)略管理體系研究(2021)
- 即興口語(yǔ)(姜燕)-課件-即興口語(yǔ)第一章PPT-中國(guó)傳媒大學(xué)
評(píng)論
0/150
提交評(píng)論