第五章 VHDL設(shè)計(jì)進(jìn)階_第1頁
第五章 VHDL設(shè)計(jì)進(jìn)階_第2頁
第五章 VHDL設(shè)計(jì)進(jìn)階_第3頁
第五章 VHDL設(shè)計(jì)進(jìn)階_第4頁
第五章 VHDL設(shè)計(jì)進(jìn)階_第5頁
已閱讀5頁,還剩121頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論