版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章VHDL設(shè)計(jì)進(jìn)階§5.1數(shù)據(jù)對象*§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵*§5.3順序語句歸納§5.4并行賦值語句討論§5.5IF語句概述例解§5.7仿真延時(shí)§5.8VHDL的RTL表述11本章例程多功能移位寄存器三態(tài)門與三態(tài)總線優(yōu)先編碼器7段數(shù)碼顯示譯碼器(實(shí)驗(yàn)與設(shè)計(jì))8位數(shù)碼掃描顯示電路(實(shí)驗(yàn)與設(shè)計(jì))數(shù)控分頻器(實(shí)驗(yàn)與設(shè)計(jì))22§5.1數(shù)據(jù)對象DATAOBJECTS5.1.1常數(shù)(CONSTANT)常數(shù)定義的一般表述:
CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達(dá)式;定義:凡是可以被賦予一個數(shù)值的客體。是數(shù)據(jù)類型的載體。使用原則:分類:固定值,不能在程序中被改變;增強(qiáng)程序的可讀性,便于修改程序時(shí)傳遞參數(shù);相當(dāng)于電路中的恒定電平,如GND或VCC接口;可在Library、Entity、Architecture、Process中進(jìn)行定義,其有效使用范圍也相應(yīng)限定。例如:
constant
m
:std_logic_vector:=“0101”;
constant
i
:integer:=12;335.1.2變量(VARIABLE)定義變量的一般表述:
VARIABLE變量名:數(shù)據(jù)類型[:=表達(dá)式];
臨時(shí)數(shù)據(jù),沒有物理意義;只能在Process和Function中定義,并只在其內(nèi)部有效;要使其全局有效,先轉(zhuǎn)換為Signal;用“:=”進(jìn)行賦值。例如:
variable
x,y:integer;
variable
count:integerRange0to255:=10;其中Range0to255為約束條件,10為變量的初值?!?.1數(shù)據(jù)對象DATAOBJECTS445.1.3信號(SIGNAL)定義格式:
SIGNAL信號名:數(shù)據(jù)類型[:=初始值];--直接賦值
目標(biāo)信號名<=表達(dá)式AFTER時(shí)間量;--代入賦值代表物理連線,Port也是一種信號;沒有方向性,可給它賦值,也可當(dāng)作輸入;在Entity(端口)中和Architecture中定義,具有全局性;設(shè)定的初始值在綜合時(shí)沒有意義,只是在仿真時(shí)有效?;举x值符是:<=。例如:
signal
sys_clk
:bit:=‘0’;
sys_clk
<=‘0’;
§5.1數(shù)據(jù)對象DATAOBJECTS55【例4-19】
1位二進(jìn)制全加器頂層設(shè)計(jì)描述
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYf_adderISPORT(ain,bin,cin:INSTD_LOGIC;
cout,sum:OUTSTD_LOGIC);ENDENTITYf_adder;ARCHITECTUREfd1OFf_adderIS
COMPONENT
h_adder
--元件例化之元件定義語句
PORT(a,b:INSTD_LOGIC;
co,so:OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTor2a--元件例化之元件定義語句
PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;
BEGIN--元件例化之端口映射語句
u1:h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);
u2:h_adderPORTMAP(a=>e,b=>cin,co=>f,so=>sum);
u3:or2aPORT
MAP(a=>d,b=>f,c=>cout);
ENDARCHITECTUREfd1;66SIGNALa,b,c,y,z:INTEGERrange0to255;
...PROCESS(a,b,c)BEGINy<=a+b;z<=c–a;y<=b;ENDPROCESS;只有信號能進(jìn)入列表注意:同一信號有多個驅(qū)動源(賦值源)時(shí),只有離ENDPROCESS最近的一項(xiàng)被啟動進(jìn)行賦值操作?!?.1數(shù)據(jù)對象DATAOBJECTS77三種數(shù)據(jù)對象的基本用法比較數(shù)據(jù)對象常數(shù)CONSTANT變量VARIABLE信號SIGNAL使用原則先定義(賦值)后使用定義和使用范圍實(shí)體、結(jié)構(gòu)體、程序包、模塊、進(jìn)程和子程序進(jìn)程或子程序?qū)嶓w、結(jié)構(gòu)體和程序包基本用法程序中用到的恒定常數(shù)進(jìn)程中的暫存單元(可變)(僅用于順序語句中)實(shí)體中的內(nèi)部連線(延時(shí))(用于并行模塊間的信息傳遞)可視性原則(使用范圍)全局或局部性(GLOBOL/LOCAL)局部性(LOCAL)全局性(GLOBOL)Attention:變量和信號可以被多次賦值,常量只能賦值一次?!?.1數(shù)據(jù)對象DATAOBJECTS885.1.4進(jìn)程中的信號與變量賦值語句表5-1信號與變量賦值語句功能的比較信號SIGNAL變量VARIABLE基本用法用于作為電路中的信號連線用于作為進(jìn)程中局部數(shù)據(jù)存儲單元適用范圍
在整個結(jié)構(gòu)體內(nèi)的任何地方都能適用只能在所定義的進(jìn)程中使用行為特性在進(jìn)程的最后才對信號賦值立即賦值§5.1數(shù)據(jù)對象DATAOBJECTS995.1.4進(jìn)程中的信號與變量賦值語句【例5-1】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)
VARIABLEQQ:STD_LOGIC;--注意變量定義的位置
BEGINIFCLK'EVENTANDCLK='1'THEN
QQ:=D1;ENDIF;Q1<=QQ;
--變量必須通過信號方可傳遞出進(jìn)程
ENDPROCESS;END;§5.1數(shù)據(jù)對象DATAOBJECTS10105.1.4進(jìn)程中的信號與變量賦值語句【例5-2】...ARCHITECTUREbhvOFDFF3IS
SIGNALQQ:STD_LOGIC;--注意信號定義的位置
BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN
QQ<=D1;ENDIF;ENDPROCESS;
Q1<=QQ;END;以上兩例表明:在不完整條件語句中,單獨(dú)的變量賦值語句與信號賦值語句都能產(chǎn)生相同的時(shí)序電路?!?.1數(shù)據(jù)對象DATAOBJECTS1111【例5-3】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3IS
SIGNALA,B:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN
A<=D1;B<=A;Q1<=B;ENDIF;ENDPROCESS;
END;5.1.4進(jìn)程中的信號與變量賦值語句§5.1數(shù)據(jù)對象DATAOBJECTS1212【例5-4】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)
VARIABLEA,B:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THEN
A:=D1;B:=A;Q1<=B;ENDIF;ENDPROCESS;END;5.1.4進(jìn)程中的信號與變量賦值語句§5.1數(shù)據(jù)對象DATAOBJECTS13135.1.4進(jìn)程中的信號與變量賦值語句【例5-5】SIGNALin1,in2,e1,...:STD_LOGIC;...PROCESS(in1,in2,...)
VARIABLEc1,...:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFin1='1'THEN...–-第1行
e1<="1010";–-第2行
...IFin2='0'THEN...–-第15+n行
...c1:="0011";–-第30+m行
...
ENDIF;
ENDPROCESS;比較信號與變量賦值實(shí)現(xiàn)的先后!§5.1數(shù)據(jù)對象DATAOBJECTS1414【例5-6】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISsignalmuxval:integerrange7downto0;BEGINprocess(i0,i1,i2,i3,a,b)begin
muxval<=0;if(a='1')thenmuxval<=muxval+1;endif;if(b='1')thenmuxval<=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;無法實(shí)現(xiàn)的MUX4!信號多個賦值源情況muxval無初值1515圖5-3例5-6的RTL電路時(shí)序電路1616【例5-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISBEGINprocess(i0,i1,i2,i3,a,b)variablemuxval:integerrange7downto0;begin
muxval:=0;if(a='1')thenmuxval:=muxval+1;endif;if(b='1')thenmuxval:=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;正確的MUX4設(shè)計(jì)muxval有初值1717§5.1數(shù)據(jù)對象DATAOBJECTS例5-7的RTL電路1818圖5-3例5-6的錯誤的工作時(shí)序圖5-4例5-7的正確工作時(shí)序1919Signalsvs.Variables
SCOPE:BEHAVIOR:RepresentCircuitInterconnect(表示電路互聯(lián))GlobalScope(anywhere)(全局特征)UpdatedatendofPROCESS(newvaluenotavailableImmediately進(jìn)程結(jié)束時(shí)賦值)Representlocalstorage(表示局部暫存)LocalScope(insideprocess:局部特征)UpdatedImmediately(newvalueavailableImmediately:立即賦值)補(bǔ)充:信號與變量的比較相關(guān)作業(yè):P1755-42020§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵移位寄存器設(shè)計(jì)*位矢中‘1’碼個數(shù)統(tǒng)計(jì)電路設(shè)計(jì)三態(tài)門與三態(tài)總線設(shè)計(jì)*21215.2.1含同步并行預(yù)置功能的8位并入串出右移位寄存器設(shè)計(jì)同步并行預(yù)置:CLK上升沿且LOAD=1時(shí):輸入并行預(yù)置同步輸出:CLK上升沿且LOAD=0時(shí):串行右移輸出2222LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHFRTIS--8位右移寄存器
PORT(CLK,LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);
DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);
QB:OUTSTD_LOGIC);ENDSHFRT;ARCHITECTUREbehavOFSHFRTISSIGNALREG8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(CLK,LOAD)BEGINIFCLK'EVENTANDCLK='1'THENIFLOAD=‘1’THEN--同步裝載新數(shù)據(jù)
REG8<=DIN;ELSE
REG8(6DOWNTO0)<=REG8(7DOWNTO1);ENDIF;ENDIF;ENDPROCESS;
QB<=REG8(0);--輸出最低位
DOUT<=REG8;ENDbehav;【例5-8】移位方向?§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵2323(1)在第一個時(shí)鐘到來時(shí),實(shí)現(xiàn)移位和輸出(QB)(2)第二個時(shí)鐘,實(shí)現(xiàn)數(shù)據(jù)裝載(3)第三個時(shí)鐘及以后,實(shí)現(xiàn)右移移位和輸出(QB)§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵2424【例5-9】LibraryIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTISPORT(CLK,C0:INSTD_LOGIC;--時(shí)鐘和進(jìn)位輸入
MD
:INSTD_LOGIC_VECTOR(2DOWNTO0);--移位模式控制字
D:INSTD_LOGIC_VECTOR(7DOWNTO0);--待加載的數(shù)據(jù)
QB:OUT
STD_LOGIC_VECTOR(7DOWNTO0);--移位數(shù)據(jù)輸出
CN:OUTSTD_LOGIC);--進(jìn)位輸出ENDENTITY;ARCHITECTUREBEHAVOFSHIFTIS SIGNALREG:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALCY:STD_LOGIC;--進(jìn)位輸出暫存BEGIN PROCESS(CLK,MD,C0)BEGIN(接下頁)5.2.2移位模式可控的8位移位寄存器設(shè)計(jì)§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵2525(接上頁IFCLK'EVENTANDCLK='1'THENCASEMDIS--同步模式選擇控制
WHEN"001"=>REG(0)<=C0;CY<=REG(7);REG(7DOWNTO1)<=REG(6DOWNTO0);--帶進(jìn)位左循環(huán)
WHEN“010”=>REG(0)<=REG(7);REG(7DOWNTO1)<=REG(6DOWNTO0);--自循環(huán)左移
WHEN"011"=> REG(7)<=REG(0);REG(6DOWNTO0)<=REG(7DOWNTO1);--自循環(huán)右移
WHEN"100"=> REG(7)<=C0;CY<=REG(0);REG(6DOWNTO0)<=REG(7DOWNTO1);--帶進(jìn)位循環(huán)右移
WHEN“101”=>REG(7DOWNTO0)<=D(7DOWNTO0);--數(shù)據(jù)加載
WHENOTHERS=>REG<=REG;CY<=CY;--保持
ENDCASE;ENDIF;ENDPROCESS;QB(7DOWNTO0)<=REG(7DOWNTO0);CN<=CY;--移位后并行輸出ENDBEHAV;
§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵2626圖5-6例5-9中帶進(jìn)位循環(huán)左移仿真波形(MD="001")
§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵2727補(bǔ)充設(shè)計(jì):8位并入并出右移位寄存器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYRSHIFTISPORT(CLR,LOD,CLK:INBIT;D:INBIT_VECTOR(7DOWNTO0);Q:BUFFERBIT_VECTOR(7DOWNTO0));ENDRSHIFT;ARCHITECTUREONEOFRSHIFTISSIGNALQ_TMP:BIT_VECTOR(7DOWNTO0); BEGIN PROCESS(CLR,CLK,LOD)BEGIN IFCLR=‘0’THENQ_TMP<=“00000000”; ELSIFCLK’EVENTANDCLK=‘1’ THEN IFLOD=‘1’THENQ_TMP<=D;ELSEFORIIN7DOWNTO1LOOPQ_TMP(I-1)<=Q_TMP
(I);ENDLOOP;Q_TMP(7)<=D(7);ENDIF;ENDIF;Q<=Q_TMP;ENDPROCESS;ENDARCHITECTUREONE;循環(huán)語句§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵2828知識擴(kuò)展:移位寄存器有哪些實(shí)際應(yīng)用?串/并或并/串?dāng)?shù)據(jù)轉(zhuǎn)換序列發(fā)生器設(shè)計(jì):密碼電路;環(huán)形計(jì)數(shù)器(循環(huán)移位寄存器):節(jié)拍器線性反饋移位寄存器:CRC校驗(yàn)電路29295.2.3位矢中‘1’碼個數(shù)統(tǒng)計(jì)電路設(shè)計(jì)§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵Q只能定義為變量3030Q只能定義為變量;雖然采用不完全條件IF語句,但結(jié)果得到的是組合電路;而非時(shí)序電路;循環(huán)語句的使用§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵位矢中‘1’碼個數(shù)統(tǒng)計(jì)電路設(shè)計(jì)要點(diǎn)5.2.3位矢中‘1’碼個數(shù)統(tǒng)計(jì)電路設(shè)計(jì)3131§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵5.2.3位矢中‘1’碼個數(shù)統(tǒng)計(jì)電路設(shè)計(jì)LOOP語句的常用兩種表達(dá)方式:(1)單個LOOP語句(2)FOR_LOOP語句3232利用LOOP循環(huán)語句簡化同類順序語句的表達(dá)§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵等效于每次循環(huán)都將產(chǎn)生一個硬件模塊;隨循環(huán)次數(shù)增加,造成硬件資源大量耗用;相關(guān)作業(yè):,5-7(用shift,VHDL),5-1333335.2.4三態(tài)門設(shè)計(jì)§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵三態(tài)門如果不設(shè)置高阻會如何?3434LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTRI_GATEISPORT(DIN,EN:INSTD_LOGIC; DOUT:OUTSTD_LOGIC);ENDTRI_GATE;ARCHITECTUREARCHOFTRI_GATEIS BEGIN PROCESS(DIN,EN) BEGIN
5.2.4三態(tài)門設(shè)計(jì)--補(bǔ)充的程序(一位(標(biāo)量)型)IFEN=‘1’THEN DOUT<=DIN;ELSE DOUT<=‘Z’; ENDIF;ENDPROCESS;ENDARCH;§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵必須大寫!3535【例5-12】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtri_sISport(enable:INSTD_LOGIC;
datain:INSTD_LOGIC_VECTOR(7DOWNTO0);
dataout:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDtri_s;ARCHITECTUREbhvOFtri_sISBEGINPROCESS(enable,datain)BEGINIFenable='1'THENdataout<=datain;ELSEdataout<="ZZZZZZZZ";ENDIF;ENDPROCESS;ENDbhv;5.2.4三態(tài)門設(shè)計(jì)(矢量型:8位單向總線驅(qū)動器)圖5-88位3態(tài)控制門電路§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵36365.2.5雙向總線設(shè)計(jì)—利用inout端口§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵Inout:雙向端口37375.2.5雙向端口設(shè)計(jì)(使用INOUT端口模式)【例5-13】libraryieee;useieee.std_logic_1164.all;entitytri_stateis
port(control:instd_logic;in1:instd_logic_vector(7downto0);q:inoutstd_logic_vector(7downto0);x:outstd_logic_vector(7downto0));endtri_state;architecturebody_trioftri_stateisbeginprocess(control,q,in1)beginif(control='0')thenx<=q;elseq<=in1;x<="ZZZZZZZZ";
endif;endprocess;endbody_tri;BAD!§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵38385.2.5雙向端口設(shè)計(jì)圖5-10例5-13的仿真波形圖§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵Why?INOUT端口作為輸入端口用時(shí)必須把輸出端設(shè)定為高阻態(tài)!39395.2.5雙向端口設(shè)計(jì)圖5-9例5-13的綜合結(jié)果§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵40405.2.5雙向端口設(shè)計(jì)【例5-14】(以上部分同上例)process(control,q,in1)beginif(control='0')thenx<=q;q<="ZZZZZZZZ";elseq<=in1;x<="ZZZZZZZZ";endif;endprocess;endbody_tri;圖5-12例5-14的仿真波形圖§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵正確設(shè)計(jì)的關(guān)鍵!41415.2.5雙向端口設(shè)計(jì)圖5-11例5-14的綜合結(jié)果§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵4242libraryieee;useieee.std_logic_1164.all;entitytri_bigateisport(a,b:inoutstd_logic_vector(7downto0);control:instd_logic;
dr:instd_logic);endtri_bigate;architecturebody_trioftri_bigateis signalaout,bout:std_logic_vector(7downto0);Begin
5.2.5雙向總線(利用雙向端口)補(bǔ)充設(shè)計(jì)§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵輸出緩沖器4343P1:process(control,dr,a)beginif(control='0')and(dr=‘1’)thenbout<=a;a<="ZZZZZZZZ";elsebout<="ZZZZZZZZ";
endif;b<=bout;endprocess;P2:process(control,dr,b)beginif(control='0')and(dr=‘0’)thenaout<=b;b<="ZZZZZZZZ";else
aout<="ZZZZZZZZ";
endif;a<=aout;endprocess;endbody_tri;§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵44445.2.6多驅(qū)動源三態(tài)單向總線電路設(shè)計(jì)4545多驅(qū)動源總線的應(yīng)用?物聯(lián)網(wǎng):netofthings4646LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtristate2ISport(input3,input2,input1,input0:
INSTD_LOGIC_VECTOR(7DOWNTO0);enable:INSTD_LOGIC_VECTOR(1DOWNTO0);output:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDtristate2;ARCHITECTUREmultiple_driversOFtristate2ISBEGINPROCESS(enable,input3,input2,input1,input0)BEGINIFenable="00"THENoutput<=input3;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="01"THENoutput<=input2;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="10"THENoutput<=input1;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="11"THENoutput<=input0;
ELSEoutput<=(OTHERS=>'Z');ENDIF;ENDPROCESS;ENDmultiple_drivers;5.2.6多驅(qū)動源三態(tài)單向總線電路設(shè)計(jì)【例5-15】--BADDesign同一進(jìn)程中最好只用一個IF語句!47475.2.6三態(tài)總線電路設(shè)計(jì)圖5-13例5-15錯誤的綜合結(jié)果§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵48485.2.6三態(tài)總線電路設(shè)計(jì)libraryieee;useieee.std_logic_1164.all;entitytriisport(ctl:instd_logic_vector(1downto0);datain1,datain2,datain3,datain4:instd_logic_vector(7downto0);q:outstd_logic_vector(7downto0));endtri;architecturebody_trioftriisbeginq<=datain1whenctl="00"else(others=>'Z');q<=datain2whenctl="01"else(others=>'Z');q<=datain3whenctl="10"else(others=>'Z');q<=datain4whenctl="11"else(others=>'Z');endbody_tri;【例5-16】改進(jìn)的設(shè)計(jì)使用并行賦值語句WHEN...ELSE等同于一個進(jìn)程!§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵49495.2.6三態(tài)總線電路設(shè)計(jì)圖5-14例5-16正確的綜合結(jié)果5050在進(jìn)程中,順序等價(jià)的語句(如if語句),當(dāng)它們列于同一進(jìn)程敏感表中的輸入信號同時(shí)發(fā)生變化時(shí),只可能對進(jìn)程結(jié)束前的一條賦值語句進(jìn)行賦值操作,而忽略其上的所有的等價(jià)語句。一般情況下,同一進(jìn)程中最好只放一個if語句結(jié)構(gòu)。在結(jié)構(gòu)體中,每一條并行語句都等同于一個獨(dú)立運(yùn)行的進(jìn)程,它們獨(dú)立檢測各并行語句中作為敏感信號的輸入值ctl。要設(shè)計(jì)出能產(chǎn)生獨(dú)立控制的多通道的電路結(jié)構(gòu),必須使用并行語句結(jié)構(gòu)?!?.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵5151知識擴(kuò)展——基于LPM宏模塊的總線設(shè)計(jì)§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵52525.2.7雙邊沿觸發(fā)電路設(shè)計(jì)討論VHDL不允許對同一時(shí)鐘信號的兩個邊沿進(jìn)行任何數(shù)據(jù)賦值操作。§5.2VHDL設(shè)計(jì)實(shí)例及其語法內(nèi)涵相關(guān)作業(yè):5-145353§5.3順序(進(jìn)程)語句歸納
5.3.1進(jìn)程語句格式PROCESS語句結(jié)構(gòu)的一般表達(dá)格式如下
[進(jìn)程標(biāo)號:]PROCESS[(敏感信號參數(shù)表)][IS][進(jìn)程說明部分]BEGIN
順序描述語句
ENDPROCESS[進(jìn)程標(biāo)號];5454進(jìn)程舉例【例3-10】ENTITYCOMP_GOODISPORT(a1,b1:INBIT; q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_GOODISBEGINPROCESS(a1,b1)BEGINIFa1>b1THENq1<='1';ELSEq1<='0';ENDIF;ENDPROCESS;END【例3-14】...PROCESSBEGINwaituntilCLK='1';--利用wait語句
Q<=D;ENDPROCESS;§5.3進(jìn)程語句歸納
5555進(jìn)程舉例LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREbehavOFCNT10ISBEGINPROCESS(CLK,RST,EN)VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST=‘1’THENCQI:=(OTHERS=>‘0’);--計(jì)數(shù)器異步復(fù)位
ELSIFCLK'EVENTANDCLK='1'THEN--檢測時(shí)鐘上升沿
IFEN=‘1’THEN--檢測是否允許計(jì)數(shù)(同步使能)
IFCQI<“1001”THENCQI:=CQI+1;COUT<=‘0’;--允許計(jì)數(shù),進(jìn)位置1ELSECQI:=(OTHERS=>‘0’);COUT<=‘1’;--大于或等于9,
--計(jì)數(shù)值清零,進(jìn)位置1ENDIF;ENDIF;ENDIF;CQ<=CQI;ENDPROCESS;ENDbehav;例3-20計(jì)數(shù)器設(shè)計(jì)§5.3進(jìn)程語句歸納
5656進(jìn)程舉例【例5-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISBEGINprocess(i0,i1,i2,i3,a,b)variable
muxval:integerrange7downto0;begin
muxval:=0;if(a='1')thenmuxval:=muxval+1;endif;if(b='1')thenmuxval:=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;muxval有初值57575.3.2PROCESS結(jié)構(gòu)組成PROCESS語句結(jié)構(gòu)進(jìn)程說明順序描述語句敏感信號參數(shù)表信號賦值語句變量賦值語句進(jìn)程啟動語句順序描述語句子程序調(diào)用語句進(jìn)程跳出語句詳參§10-1§5.3進(jìn)程語句歸納
58585.3.3進(jìn)程要點(diǎn)1.PROCESS為一無限循環(huán)語句2.PROCESS中的順序語句具有明顯的順序/并行運(yùn)行雙重性3.進(jìn)程必須由敏感信號的變化來啟動(“激活”)4.進(jìn)程語句本身是并行語句§5.3進(jìn)程語句歸納
5959【例5-17】ENTITYmulISPORT(a,b,c,selx,sely:INBIT;data_out:OUTBIT);ENDmul;ARCHITECTUREexOFmulISSIGNALtemp:BIT;BEGINp_a:PROCESS(a,b,selx)BEGINIF(selx='0')THENtemp<=a;ELSEtemp<=b;ENDIF;ENDPROCESSp_a;p_b:PROCESS(temp,c,sely)BEGINIF(sely='0')THENdata_out<=temp;ELSEdata_out<=c;ENDIF;ENDPROCESSp_b;ENDex;§5.3進(jìn)程語句歸納
5.信號是多個進(jìn)程間的通信線60606.一個進(jìn)程中只允許描述對應(yīng)于一個時(shí)鐘信號的同步時(shí)序邏輯
例6-17的綜合結(jié)果§5.3進(jìn)程語句歸納
5.3.3進(jìn)程要點(diǎn)61617、時(shí)序電路必須由進(jìn)程中的不完全條件語句實(shí)現(xiàn)【例5-3】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALA,B:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENA<=D1;B<=A;Q1<=B;ENDIF;ENDPROCESS;END;【例5-4】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)VARIABLEA,B:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENA:=D1;B:=A;Q1<=B;ENDIF;ENDPROCESS;END;§5.3進(jìn)程語句歸納
5.3.3進(jìn)程要點(diǎn)6262§5.4并行賦值語句討論結(jié)合§10.2.1并行語句學(xué)習(xí)!任何一條并行賦值語句等效于一條進(jìn)程語句;!并行賦值的實(shí)現(xiàn)需要至少一個δ周期;!并行賦值語句的啟動需要條件。!并行賦值語句的兩種形式Data1<=aandb[例5-18]Signalselect:integerrange15downto0;…Select<=0whens0=‘0’ands1=‘0’else1whens0=‘0’ands1=‘0’else2whens0=‘0’ands1=‘0’else3;6363§5.5IF語句概述(1)不完全條件IF語句IF條件句Then
順序語句ENDIF;(2)完全條件IF語句IF條件句Then
順序語句ELSE
順序語句ENDIF;(3)IF嵌套IF條件句Then
IF
條件句Then...
ENDIF
ENDIF
(4)多重條件(判斷)IF語句**IF條件1Then
順序語句1ELSIF
條件2Then
順序語句2…ELSIF
條件nThen
順序語句nELSE順序語句n+1ENDIF
執(zhí)行條件向上相與特征!用于具有不同優(yōu)先級條件的電路(如優(yōu)先編碼器)設(shè)計(jì)。5.5.1IF語句分類6464【例5-19】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcontrol_stmtsISPORT(a,b,c:INBOOLEAN;output:OUTBOOLEAN);ENDcontrol_stmts;ARCHITECTUREexampleOFcontrol_stmtsISBEGINPROCESS(a,b,c)VARIABLEn:BOOLEAN;BEGINIFaTHENn:=b;ELSEn:=c;ENDIF;output<=n;ENDPROCESS;ENDexample;注意條件表達(dá)式的兩種寫法!§5.5IF語句概述65655.2多重條件IF語句——“向上相與”條件的應(yīng)用表5-28線-3線優(yōu)先編碼器真值表
輸入 輸出din0din1din2din3din4din5din6din7 output0output1output2 xxxxxxx0000 xxxxxx01100 xxxxx011010 xxxx0111110 xxx01111001 xx011111101 x0111111011 01111111111 注:表中的“x”為任意,類似VHDL中的“-”值?!?.5IF語句概述6666知識擴(kuò)展——普通8-3線編碼器的設(shè)計(jì)8線-3線普通編碼器真值表
輸入 輸出din0din1din2din3din4din5din6din7 output0output1output2 10000000000 01000000001 00100000010 00010000011 0000100010000000100101 00000010110 00000001111§5.5IF語句概述6767普通8-3線編碼器的設(shè)計(jì)(補(bǔ)充)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoder8_3IS PORT(din:INSTD_LOGIC_VECTOR(0TO7); output:OUTSTD_LOGIC_VECTOR(0TO2));ENDcoder8_3;ARCHITECTUREbehavOFcoder8_3ISBEGIN PROCESS(din) BEGIN CASEDINIS WHEN“10000000”=>output<=“000"; WHEN“01000000”=>output<="001"; WHEN“00100000”=>output<="010"; WHEN“00010000”=>output<="011";WHEN“00001000”=>output<="100"; WHEN“00000100”=>output<="101"; WHEN“00000010”=>output<="110"; WHENOTHERS=>output<="111"; ENDCASE;ENDPROCESS;ENDbehav;§5.5IF語句概述6868【例5-20】**LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(din:INSTD_LOGIC_VECTOR(0TO7);output:OUTSTD_LOGIC_VECTOR(0TO2));ENDcoder;ARCHITECTUREbehavOFcoderISSIGNALSINT:STD_LOGIC_VECTOR(4DOWNTO0);BEGINPROCESS(din)BEGINIF(din(7)='0')THENoutput<="000";ELSIF(din(6)='0')THENoutput<="100";ELSIF(din(5)='0')THENoutput<="010";ELSIF(din(4)='0')THENoutput<="110";ELSIF(din(3)='0')THENoutput<="001";ELSIF(din(2)='0')THENoutput<="101";ELSIF(din(1)='0')THENoutput<="011";ELSEoutput<="111";ENDIF;
ENDPROCESS;
ENDbehav;§5.5IF語句概述8線-3線優(yōu)先編碼器6969§5.6半整數(shù)與奇數(shù)分頻電路設(shè)計(jì)自學(xué),可作為課程設(shè)計(jì)題目7070§5.7仿真延時(shí)信號延時(shí):信號從發(fā)生到生效的時(shí)間間隔。延時(shí)模型:對實(shí)際電路運(yùn)行中必然存在的延時(shí)特性的軟件模擬。兩種延時(shí)模型:固有(慣性)延時(shí):INERTIAL
傳輸延時(shí):TRANSPORT信號賦值語句的完整語法:信號<=延時(shí)模型/[REJECT時(shí)間表達(dá)式]/UNAFFECTEDREJECT:用于指定脈沖寬度;UNAFFECTED:用于表示事件無變化;無關(guān)鍵字默認(rèn)為慣性延遲。綜合器不支持延時(shí)語句!7171§5.7仿真延時(shí)5.7.1固有延時(shí)(慣性延時(shí))InertialDelay是針對任何電子器件由于分布電容效應(yīng)的普遍存在而具有的延時(shí)特性的仿真模型。
z<=xXORyAFTER5ns;
z<=xXORy;零延遲討論:1、零延時(shí)存在嗎?如何仿真零延時(shí)?2、定義固有延時(shí)時(shí)間有何用?
延時(shí)固有延遲可用于消除毛刺固有延時(shí)適用作開關(guān)電路的延時(shí)模型,省略REJECT子句時(shí)脈沖寬度為保留字AFTER定義的時(shí)間值。
B<=AAFTER20ns;固有延遲可近似器件的實(shí)際延時(shí)。72725.7.2傳輸延時(shí)(TransportDelay)表示信號從輸入到輸出的傳輸過程中的延時(shí)模型
B<=TRANSPORTAAFTER20ns;§5.7仿真延時(shí)傳輸延時(shí)適用于延時(shí)器件(如延時(shí)繼電器、RC網(wǎng)絡(luò))、PCB板上的連線延時(shí)或ASIC上的通道延時(shí)的延時(shí)模型。73735.7.3仿真(延時(shí))定義:進(jìn)程(并行語句)重復(fù)執(zhí)行的周期,也是仿真器的最小分辨時(shí)間。x<=9;y<=x;z<=xAFTER5ns;引入延時(shí)的目的是保證功能仿真時(shí)并行語句能夠正確執(zhí)行§5.7仿真延時(shí)7474知識擴(kuò)展——電子電路中的延時(shí)與時(shí)序分析(參看P284~287)Tools→TimingAnalyzertool§5.7仿真延時(shí)7575QuartusII中的時(shí)序分析報(bào)告7676時(shí)序約束(TimingAssignments或TimingConstraints)的主要作用提高設(shè)計(jì)的工作頻率(速度優(yōu)化)
通過附加時(shí)序約束可以控制邏輯的綜合、映射、布局和布線,以減小邏輯和布線延時(shí),從而提高工作頻率。獲得正確的時(shí)序分析報(bào)告
QuartusII的靜態(tài)時(shí)序分析(STA)工具以約束作為判斷時(shí)序是否滿足設(shè)計(jì)要求的標(biāo)準(zhǔn),因此要求設(shè)計(jì)者正確輸入時(shí)序約束,以便STA工具能輸出正確的時(shí)序分析結(jié)果。7777靜態(tài)時(shí)序分析與動態(tài)時(shí)序仿真的區(qū)別動態(tài)時(shí)序仿真:針對給定的仿真輸入信號波形,模擬設(shè)計(jì)在器件實(shí)際工作時(shí)的功能和延時(shí)情況,給出相應(yīng)的仿真輸出信號波形。主要用于驗(yàn)證設(shè)計(jì)在器件實(shí)際延時(shí)情況下的邏輯功能。由動態(tài)時(shí)序仿真報(bào)告無法得到設(shè)計(jì)的各項(xiàng)時(shí)序性能指標(biāo),如最高時(shí)鐘頻率等。靜態(tài)時(shí)序分析:通過分析每個時(shí)序路徑的延時(shí),計(jì)算出設(shè)計(jì)的各項(xiàng)時(shí)序性能指標(biāo),如最高時(shí)鐘頻率、建立保持時(shí)間等,發(fā)現(xiàn)時(shí)序違規(guī)。僅僅聚焦于時(shí)序性能的分析,并不涉及設(shè)計(jì)的邏輯功能,邏輯功能驗(yàn)證仍需通過仿真或其他手段(如形式驗(yàn)證等)進(jìn)行。靜態(tài)時(shí)序分析是最常用的分析、調(diào)試時(shí)序性能的方法和工具。7878設(shè)計(jì)中常用的時(shí)序概念時(shí)鐘偏斜周期與最高頻率建立時(shí)間保持時(shí)間時(shí)鐘到輸出延時(shí)管腳到管腳延時(shí)Slack7979定義為由輸入引腳到輸出引腳的最大延遲時(shí)間.知識擴(kuò)展——電子電路中的延時(shí)Tsu:setuptime(建立時(shí)間)定義輸入信號D在clockedge多久前就需穩(wěn)定的最大需求;以上升沿觸發(fā)的DFF為例,就是D要比CLK提前Tsu
時(shí)間以前就要準(zhǔn)備好,此DFF才能正常工作.Th:holdtime(保持時(shí)間)Tco:clockoutputdelay(時(shí)鐘輸出延遲)Tpd:propagationdelay(傳輸延遲)定義輸入信號在clockedge后多久內(nèi)仍需穩(wěn)定的最大要求;以上升沿觸發(fā)的DFF為例,就是D要在CLK上升緣觸發(fā)后Th時(shí)間內(nèi)仍需要提供穩(wěn)定的數(shù)據(jù)D,此DFF才能正常輸出.定義由clocklatch/trigger到輸出數(shù)據(jù)有效的最大延遲時(shí)間;以上升沿觸發(fā)的DFF為例,就是Q要在CLK上升沿觸發(fā)后至多Tco時(shí)間就會穩(wěn)定輸出.§5.7仿真延時(shí)8080時(shí)鐘偏斜clockskew時(shí)鐘偏斜clockskew
:指一個同源時(shí)鐘到達(dá)兩個不同的寄存器時(shí)鐘端的時(shí)間差別。8181最小時(shí)鐘周期與最高時(shí)鐘頻率最小時(shí)鐘周期:
TCLK=Microtco
+tLOGIC
+tNET
+MicrotSU-tCLK_SKEW
tCLK_SKEW=tCD2-tCD1最高時(shí)鐘頻率: Fmax
=1/TCLK同步電路數(shù)據(jù)傳輸模型8282建立時(shí)間Tsu建立時(shí)間TSU
:在觸發(fā)器的時(shí)鐘信號有效沿到來以前,數(shù)據(jù)和使能信號必須保持穩(wěn)定不變的最小時(shí)間。如果建立時(shí)間不夠,數(shù)據(jù)將不能在該時(shí)鐘沿被正確打入觸發(fā)器。
TSU=DataDelay+MicrotSU
-ClockDelay
8383保持時(shí)間Th保持時(shí)間:在觸發(fā)器的時(shí)鐘信號有效沿到來以后,數(shù)據(jù)和使能信號必須保持穩(wěn)定不變的最小時(shí)間。如果保持時(shí)間不夠,數(shù)據(jù)同樣不能被正確打入觸發(fā)器。
Th=ClockDelay–
DataDelay+MicroTh8484時(shí)鐘到輸出延時(shí)Tco時(shí)鐘到輸出延時(shí):從時(shí)鐘信號有效沿到數(shù)據(jù)有效的時(shí)間間隔。
TCO=ClockDelay+MicrotCO
+
DataDelay8585管腳到管腳延時(shí)Tpd管腳到管腳延時(shí)
Tpd(pin-to-pindelay):指信號從輸入管腳進(jìn)來,穿過純組合邏輯,到達(dá)輸出管腳的延遲。由于CPLD的布線矩陣長度固定,所以常用最大管腳到管腳延時(shí)表示CPLD的速度等級。8686Slack(松弛部分:裕量)Slack用于表示設(shè)計(jì)是否滿足時(shí)序:正的Slack表示滿足時(shí)序(時(shí)序裕量),負(fù)的Slack表示不滿足時(shí)序(時(shí)序的欠缺量)。slack=
<requiredmaximumpoint-to-pointtime>-<actualmaximumpoint-to-pointtime>8787Slack:setupslackSetupSlack=SlackClockPeriod –(Microtco
+DataDelay
+MicrotSU
)相關(guān)作業(yè):5-1,5-28888§5.8VHDL的RTL表述VHDL描述形式(建模方法)行為描述RTL描述(數(shù)據(jù)流描述)結(jié)構(gòu)描述8989§5.8VHDL的RTL表述5.8.1行為描述行為描述:結(jié)構(gòu)體中只描述希望電路的功能或行為,不包含硬件結(jié)構(gòu)信息。一般采用
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度個人財(cái)產(chǎn)保險(xiǎn)合同范本3篇
- 二零二五年度專業(yè)月嫂服務(wù)合同規(guī)范3篇
- 裝修公司人設(shè)打造方案
- 二零二五年度社區(qū)便利店承包權(quán)租賃合同詳規(guī)3篇
- 醫(yī)院防輻射裝修施工方案
- 二零二五年度個人對個人信用借款合同標(biāo)準(zhǔn)范本
- 二零二五版農(nóng)產(chǎn)品銷售采購合同臺賬2篇
- 虹口平整土方外運(yùn)施工方案
- 2025版私人珠寶財(cái)產(chǎn)抵押融資協(xié)議書3篇
- 二手物品交易合同
- 《小兒靜脈輸液速度》課件
- 營銷人員薪酬標(biāo)準(zhǔn)及績效考核辦法
- 香港朗文4B單詞及句子
- 醫(yī)院每日消防巡查記錄表
- 運(yùn)輸企業(yè)重大危險(xiǎn)源辨識及排查制度
- 運(yùn)動技能學(xué)習(xí)與控制課件第五章運(yùn)動中的中樞控制
- 中心血站改造項(xiàng)目謀劃建議書
- 高中數(shù)學(xué)三角函數(shù)圖像變換訓(xùn)練-含答案
- 初中英語專項(xiàng)練習(xí)介詞專項(xiàng)訓(xùn)練
- 財(cái)務(wù)部規(guī)范化管理 流程圖
- GB/T 20631.2-2006電氣用壓敏膠粘帶第2部分:試驗(yàn)方法
評論
0/150
提交評論