版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
EDA技術(shù)實用教程第5章VHDL設(shè)計進階5VHDL設(shè)計進階第1頁數(shù)據(jù)對象一定設(shè)計實例及相關(guān)語法次序語句和并行語句歸納半整數(shù)與奇數(shù)分頻電路設(shè)計主要任務(wù):給出一定電路實例,探討電路實例實際功效和VHDL語言實現(xiàn)特點。經(jīng)過詳細設(shè)計例子,深入熟悉VHDL設(shè)計流程。掌握信號含義,了解一些特定數(shù)字信號功效單元VHDL實現(xiàn)方案。主要內(nèi)容5VHDL設(shè)計進階第2頁5.1數(shù)據(jù)對象
在VHDL中,數(shù)據(jù)對象有三類,變量(variable)、常量(constant)和信號(signal)。數(shù)據(jù)對象類似于一個容器,用于接收不一樣數(shù)據(jù)類型賦值。注意:信號表現(xiàn)比較特殊,含有更多硬件特征,是VHDL中最有特色語言要素之一,在學(xué)習中需要進行熟練把握。5VHDL設(shè)計進階第3頁5.1數(shù)據(jù)對象
5.1.1常數(shù)
常數(shù)定義普通表述以下:CONSTANT常數(shù)名:數(shù)據(jù)類型:=表示式
;
CONSTANTFBT:STD_LOGIC_VECTOR:="010110";--標準位矢類型CONSTANTWIDTH:INTEGER:=4;--整數(shù)類型用途:常數(shù)設(shè)置主要是為了使程序更輕易閱讀和修改。如將邏輯位寬度定義為一個常量,只要修改這個常量就能夠很輕易改變寬度。SIGNALDATA:STD_LOGIC_VECTOR(WIDTH-1DOWNTO0)5VHDL設(shè)計進階第4頁5.1.1常數(shù)
VHDL要求所定義常量數(shù)據(jù)類型必須與表示式數(shù)據(jù)類型一致。常數(shù)可定義于:實體、結(jié)構(gòu)體、程序包、塊、進程、子程序。常數(shù)可視性規(guī)則:常數(shù)使用范圍取決于它被定義位置。假如在程序包中被定義,常數(shù)含有最大全局化特征,能夠用在調(diào)用此程序包全部設(shè)計實體中;假如定義在設(shè)計實體中,有效范圍為此設(shè)計實體全部結(jié)構(gòu)體中;假如在設(shè)計實體中某一結(jié)構(gòu)體中,則只能用于此結(jié)構(gòu)體中。5VHDL設(shè)計進階第5頁5.1數(shù)據(jù)對象
5.1.2變量
定義變量普通表述以下:
VARIABLE變量名:數(shù)據(jù)類型:=初始值;
VARIABLEa:INTEGERRANGE0TO15;--變量a定義為常數(shù),取值范圍是0到15VARIABLEd:STD_LOGIC:=‘1’;--變量d定義為標準邏輯位數(shù)據(jù)類型,初始值是1
用途:只能在進程和子程序中使用。變量不能將信息帶出對它作出定義結(jié)構(gòu)。特點:變量賦值是一個理想化數(shù)據(jù)傳輸,是馬上發(fā)生不存在任何延時行為。主要作用:在進程中作為暫時數(shù)據(jù)存放單元。5VHDL設(shè)計進階第6頁變量賦值普通表述以下:目標變量名:=表示式
5.1.2變量
變量是局部量,適用范圍僅限于定義了變量進程或子程序次序語句中。同一變量值將隨變量賦值語句前后次序運算而改變。變量賦值語句執(zhí)行與軟件描述語言中完全次序執(zhí)行賦值操作有相同處。變量賦值符號為:=,可定義初始值,但初始值不是必須。賦值需要相同數(shù)據(jù)類型。VARIABLEX,Y:INTEGERRANGE15DOWNTO0;VARIABLEA,B:STD_LOGIC_VECTOR(7DOWNTO0);X:=11;Y:=2+X;A:=B;A(0TO5):=B(2TO7);5VHDL設(shè)計進階第7頁5.1.3信號
在第3章中已經(jīng)介紹過了,在此我們深入深入了解信號硬件特征。信號能夠作為設(shè)計實體中并行語句模塊間信息交流通道。信號作為一個數(shù)值容器,不但能夠容納當前值,也能夠保持歷史值。這一屬性與觸發(fā)器記憶功效有很好對應(yīng)關(guān)系。5VHDL設(shè)計進階第8頁5.1.3信號
SIGNAL信號名:數(shù)據(jù)類型:=初始值;SIGNALA:STD_LOGIC:=‘0’;信號與實體端口(PORT)概念是一致,只是信號沒有方向說明。對于端口,區(qū)分只是輸出端口不能讀入數(shù)據(jù),輸入端口不能被賦值;信號可看成實體內(nèi)部端口;實體端口只是一個隱形信號,在實體中對端口定義實質(zhì)上是作了隱式信號定義,并要求了數(shù)據(jù)流向;信號本身定義是顯式定義。在實體中定義端口都能夠看作是一個信號,在結(jié)構(gòu)體中直接加以使用。5VHDL設(shè)計進階第9頁SIGNAL信號名:數(shù)據(jù)類型:=初始值;SIGNALA:STD_LOGIC:=‘0’;適用范圍:信號使用和定義范圍是實體、結(jié)構(gòu)體和程序包。注意:在進程和子程序次序語句中不允許定義信號,在進程中只能將信號列入敏感表,而不能將變量列入敏感表。進程只對信號敏感,對變量不敏感。(敏感標準)只有信號才能把進程外信息帶入進程內(nèi)部,或?qū)⑦M程內(nèi)部信息帶出進程。(信息內(nèi)部和外部溝通差異)5.1.3信號
5VHDL設(shè)計進階第10頁目標信號名<=表示式AFTER時間量;SIGNALa,b,c,y,z:INTEGER;...PROCESS(a,b,c)BEGINy<=a+b;z<=c–a;y<=b;ENDPROCESS;
5.1.3信號
信號定義還能夠設(shè)置延時量,以下信號賦值若設(shè)置延時量,如AFTER3ns,則目標信號取得出入數(shù)據(jù)不是即時。即使零延時設(shè)置,目標信號取得數(shù)據(jù)也要經(jīng)過一個特定延時(延時)。符號“<=”兩邊數(shù)值并不總是一致,與實際器件傳輸延遲特征是吻合。注意:變量和賦值過程有很大區(qū)分,務(wù)必區(qū)分兩種賦值不一樣之處。5VHDL設(shè)計進階第11頁5.1.3信號
SIGNALa,b,c,y,z:INTEGER;...PROCESS(a,b,c)BEGINy<=a+b;z<=c–a;y<=b;ENDPROCESS;
信號賦值能夠出現(xiàn)在一個進程中,也能夠直接出現(xiàn)于結(jié)構(gòu)體并行語句中,但其含義不一樣。位于進程中:屬于次序信號賦值,需關(guān)注進程是否被開啟,允許對同一目標信號進行屢次賦值。進程中對同一目標信號賦值,只有最終賦值語句有效。結(jié)構(gòu)體中并行語句:屬并行信號賦值,其賦值操作是各自獨立并行發(fā)生,不允許對同一目標信號進行屢次賦值(電路上意味著“線與”,須注意)。5VHDL設(shè)計進階第12頁5.1數(shù)據(jù)對象
5.1.4進程中信號與變量賦值
信號SIGNAL變量VARIABLE基本使用方法用于作為電路中信號連線用于作為進程中局部數(shù)據(jù)存放單元適用范圍在整個結(jié)構(gòu)體內(nèi)任何地方都能適用只能在所定義進程中使用行為特征在進程最終才對信號賦值馬上賦值表5-1信號與變量賦值語句功效比較5VHDL設(shè)計進階第13頁5.1.4進程中信號與變量賦值
從硬件電路系統(tǒng)來看,信號與變量相當于邏輯電路系統(tǒng)中連線和連線上信號值。從行為仿真和VHDL語句功效上看,信號與變量含有顯著區(qū)分,其差異主要表現(xiàn)為接收和保持信號方式和信息保留與傳遞區(qū)域大小上。信號可設(shè)置延時量,變量不能。變量只能作為局部信息載體,只能在所定義進程中有效,不能將信息帶出進程;信號可作為模塊間信息載體,在結(jié)構(gòu)體中各進程傳遞信息必須使用信號完成。變量設(shè)置有時是過渡,最終信息傳輸和界面通信依然需要靠信號來完成。除卻上述內(nèi)容,二者在很多情況下沒有什么區(qū)分,原因在于其二者均可接收賦值。5VHDL設(shè)計進階第14頁5.1.4進程中信號與變量賦值(存在范圍)
【例5-1】ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)
VARIABLEQQ:STD_LOGIC;
BEGINIFCLK'EVENTANDCLK='1'THENQQ:=D1;ENDIF;Q1<=QQ;ENDPROCESS;ENDbhv;【例5-2】ARCHITECTUREbhvOFDFF3IS
SIGNALQQ:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQQ<=D1;ENDIF;ENDPROCESS;Q1<=QQ;
ENDbhv;D觸發(fā)器VHDL描述,二者綜合后電路均相同圖5-2D觸發(fā)器電路不完整條件語句中,單獨變量賦值語句與信號賦值語句都能綜合出相同時序電路。5VHDL設(shè)計進階第15頁5.1.4進程中信號與變量賦值(賦值時序)【例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'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;
不一樣賦值源賦值對比(賦值傳遞)5VHDL設(shè)計進階第16頁5.1.4進程中信號與變量賦值
5.1數(shù)據(jù)對象
圖5-1例5-3RTL電路
圖5-2D觸發(fā)器電路
5VHDL設(shè)計進階第17頁從例5-3和例5-4中延時特征差異進行了解信號賦值需要有一個延時。如當執(zhí)行到5-3中A<=D1,D1向A賦值是在一個延時后發(fā)生,此時A并未得到更新,即A還未取得D1值。開啟賦值:開啟了一個延時為模確定時器。執(zhí)行賦值:只有在延時為后,A才能被更新,取得D1賦值。A<=D1延時經(jīng)時間后‘0’‘1’A<=D1‘1’‘1’兩個對象關(guān)系延時A為‘0’A為‘1’A在時序上改變5VHDL設(shè)計進階第18頁進程中賦值延時特點進程中,全部賦值語句(包含信號與變量賦值),均必須在一個延時內(nèi)完成。一個進程運行時間固定為一個延時。進程中全部信號賦值語句在進程開啟瞬間次序開啟各自延時為定時器,在定時結(jié)束后分別進行賦值操作。注意,次序開啟間隔幾乎為0,次序執(zhí)行到ENDPROCESS語句,延時結(jié)束,此時進程中全部信號賦值操作幾乎同時完成,可看作是并行方式完成賦值。所以“執(zhí)行操作賦值”和“完成賦值”是兩個不一樣概念。“執(zhí)行賦值”只是一個過程,含有次序特征;“完成賦值”是結(jié)果,含有VHDL最本質(zhì)并行特征。A為‘1’B為‘0’C為‘1’…延時A<=D1B<=D2C<=D3…PROCESS5VHDL設(shè)計進階第19頁進程中多賦值源延時和時序判定問題當進程中存在同一信號有多個賦值源時,即對同一信號發(fā)生屢次賦值,實際完成賦值,賦值對象信號更新是最靠近ENDPROCESS語句信號。進程中次序賦值部分沒有時間流逝。所以在次序語句部分,不論有多少語句,都必須抵達ENDPROCESS語句時,延遲才能發(fā)生。【例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;5VHDL設(shè)計進階第20頁【例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;進程在2ns+時刻被開啟,在今后時間進程中,全部行為都必須執(zhí)行完成。在2ns+時刻,信號e1被賦值為“1010”,但并沒有即使取得,信號e1值在2ns+2時刻才被更新。變量c1在賦值瞬間就被更新了,即在2ns+時刻,c1值變成“0011”。盡管c1賦值語句排在e1之后,但c1取得0011值時刻卻比e1取得1010值時刻早一個。5VHDL設(shè)計進階第21頁回頭再看例5-3和5-4例5-3中三個賦值語句都必須在ENDPROCESS后時刻內(nèi)執(zhí)行,所以它們含有近乎并行特征。當執(zhí)行到ENDPROCESS后,語句中A<=D1;B<=A;Q1<=B同時得到執(zhí)行。A得到了D1數(shù)值更新,但此時D1數(shù)值并不能傳遞至B,B取得是進程開啟前,A中數(shù)據(jù)。Q1賦值也是如此情形。所以,了解并行特征,能夠從一個時鐘進程作為判定標準。A兩次取得賦值時間差是一個時鐘周期,D1不可能經(jīng)過信號賦值方式將值傳到Q1,使Q1得到更新。實際運行中,A被更新是上一個時鐘周期D1,B取得數(shù)值也是上一個時鐘周期A,同理Q1被更新數(shù)值也是上一個時鐘數(shù)值B,而并非此時鐘周期執(zhí)行賦值所更新信號。時鐘進程M D1=‘1’ A=‘0’ B=‘1’ Q1=‘0’時鐘進程M+1 A=‘1’ B=‘0’ Q1=‘1’時鐘進程M+2 B=‘1’ Q1=‘0’5VHDL設(shè)計進階第22頁例5-4中三個賦值語句在ENDPROCESS后被執(zhí)行,因為A、B是變量,含有暫時保留數(shù)據(jù)特征,而且變量賦值更新是馬上發(fā)生,而且和程序執(zhí)行一樣,含有顯著次序性。當三條賦值語句次序執(zhí)行時,變量A和B就有了數(shù)據(jù)傳遞功效。語句執(zhí)行中,D1值傳到A,再經(jīng)過A傳到B,在一個時刻后由B傳給Q1.所以,在這些過程中,A和B只充當了D1數(shù)據(jù)暫存單元。Q1最終被更新值是上一個時鐘周期D1,在一個時鐘周期中,使用變量就能夠起到次序賦值以及即時更新作用。Q1<=B;B:=A;A:=D1;時鐘進程開始Q1準備被B賦值,B中數(shù)值為上一時鐘進程B變量被A賦值,B數(shù)值立刻更新,為A上一時鐘進程數(shù)值次序執(zhí)行程序,A變量被D1賦值,A立刻更新,為D1上一時鐘進程數(shù)值5VHDL設(shè)計進階第23頁再比較一下例5-6和5-7異同,深入了解次序語句中信號變量之間差異。設(shè)計一個4選1多路選擇器,對應(yīng)電路應(yīng)該是一個純組合邏輯電路。A和B是通道選擇信號。選擇通道組合,對應(yīng)產(chǎn)生不一樣邏輯信號,經(jīng)過標識符muxval來表示。所以考慮muxval數(shù)值更新范圍,是兩例關(guān)鍵。同一信號有多個賦值源問題5VHDL設(shè)計進階第24頁KX康芯科技【例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;5VHDL設(shè)計進階第25頁KX康芯科技【例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;5VHDL設(shè)計進階第26頁KX康芯科技5.1.4進程中信號與變量賦值
圖5-3例5-6RTL電路(Synplify綜合)
5VHDL設(shè)計進階第27頁5.1.4進程中信號與變量賦值
圖5-4例5-7RTL電路(Synplify綜合)
5VHDL設(shè)計進階第28頁ARCHITECTUREbody_mux4OFmux4ISsignalmuxval:integerrange7downto0;BEGINprocess(i0,i1,i2,i3,a,b)beginmuxval<=0;if(a='1')thenmuxval<=muxval+1;endif;if(b='1')thenmuxval<=muxval+2;endif;例5-6中,信號muxval在進程中出現(xiàn)了三次賦值操作,依據(jù)進程中信號賦值規(guī)則,前兩個賦值語句中賦值目標信號muxval都不能得到更新,只有最終賦值語句才能得到更新。在最終賦值語句中,因為傳輸信號右方muxval未能得到確切值,所以muxval一直是未知值。Muxval成為了一個不確定信號,在CASE語句中,因為Muxval值并不確定,所以無法經(jīng)過判斷muxval值來確定選通輸入。5VHDL設(shè)計進階第29頁5.1.4進程中信號與變量賦值
圖5-5例5-6中錯誤工作時序
5VHDL設(shè)計進階第30頁ARCHITECTUREbody_mux4OFmux4ISBEGINprocess(i0,i1,i2,i3,a,b)variablemuxval:integerrange7downto0;beginmuxval:=0;if(a='1')thenmuxval:=muxval+1;endif;if(b='1')thenmuxval:=muxval+2;endif;程序?qū)uxval定義為變量,依據(jù)變量次序賦值以及暫存數(shù)據(jù)規(guī)則,首先執(zhí)行語句muxval:=0;,從而兩個IF語句中muxval都能得到確定初值。當IF語句不滿足條件時,當a或b不等于1是,因為muxval已經(jīng)在第一句賦值語句中取得賦值,盡管兩個IF語句看起來屬于不完整條件語句,但都不可能被綜合成為時序電路。5VHDL設(shè)計進階第31頁5.1.4進程中信號與變量賦值
圖5-6例5-7中正確工作時序
5VHDL設(shè)計進階第32頁5.2VHDL設(shè)計實例及其語法內(nèi)涵主要目標:給出幾個不一樣類型VHDL設(shè)計實例經(jīng)過實例再深入說明信號賦值和變量賦值、次序語句和并行語句、進程結(jié)構(gòu)以及不完整條件語句關(guān)鍵點和特點。借助實例介紹相關(guān)VHDL語法知識。介紹一些經(jīng)典數(shù)字模塊設(shè)計方法深入了解和掌握VHDL設(shè)計基本方法和規(guī)律5VHDL設(shè)計進階第33頁5.2.1含同時并行預(yù)置功效8位移位存放器設(shè)計電路工作原理:當CLK上升沿到來時,移位進程被開啟。假如預(yù)置使能LOAD為高電平,則將輸入端口8位二進制并行置入移位存放器中,作為串行右移輸出初始值。假如預(yù)置使能LOAD為低電平則執(zhí)行語句。101010108位并行置入端口1010101005VHDL設(shè)計進階第34頁5.2.1含同時并行預(yù)置功效8位移位存放器設(shè)計CLK是移位時鐘信號DIN是8位并行預(yù)置數(shù)據(jù)端口LOAD是并行數(shù)據(jù)預(yù)置使能端口QB是串行輸出端口DOUT是移位并行輸出5VHDL設(shè)計進階第35頁【例5-8】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHFTISPORT(CLK,LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);QB:OUTSTD_LOGIC);ENDENTITYSHFT;ARCHITECTUREBEHAVOFSHFTISSIGNALREG8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(CLK,LOAD)BEGINIFCLK’EVENTANDCLK=‘1’THENIFLOAD=‘1’THENREG8<=DIN;ELSEREG8(6DOWNTO0)<=REG8(7DOWNTO1);--高位向低位移位ENDIF;ENDIF;ENDPROCESS;QB<=REG8(0);DOUT<=REG8;--需要等候時鐘嗎?ENDBEHAV;5VHDL設(shè)計進階第36頁時序功效說明第一個加載信號沒有出現(xiàn)在時鐘上升沿,故數(shù)據(jù)未被載入第二個加載信號,并行載入輸入數(shù)據(jù)“10011011”,DIN數(shù)據(jù)鎖入REG8中今后時鐘信號都是移位時鐘,每一個時鐘信號降臨,高位均向低位移位。注意QB,QB輸出屬于異步方式,即不隨CLK上升沿改變,隨REG8內(nèi)數(shù)據(jù)即時發(fā)生改變。所以QB數(shù)據(jù)改變比REG8(0)位改變,早一個時鐘周期。8位移位結(jié)束后,REG8內(nèi)被最高位數(shù)據(jù)填滿,為“11111111”,并繼續(xù)移位,但數(shù)值不發(fā)生改變,等候下一加載信號降臨。5VHDL設(shè)計進階第37頁5.2.1含同時并行預(yù)置功效8位移位存放器設(shè)計實現(xiàn)含同時并行預(yù)置功效8位移位存放器設(shè)計對比了同時數(shù)據(jù)移位功效實現(xiàn),以及異步存放器輸出時序關(guān)系。了解了進程時序邏輯與結(jié)構(gòu)體賦值語句時序?qū)崿F(xiàn)差異。5VHDL設(shè)計進階第38頁5.2.2移位模式可控8位移位存放器設(shè)計在掌握8位移位存放器設(shè)計基礎(chǔ)上,增加移位模式控制功效利用CASE語句實現(xiàn)移位模式控制,并體會信號賦值特征經(jīng)過移位模式控制字,控制移位模式1)帶進位循環(huán)左移;2)自循環(huán)左移;3)自循環(huán)右移;4)帶進位循環(huán)右移5)加載待移數(shù);6)保持;5VHDL設(shè)計進階第39頁【例5-8】LibraryIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTISPORT(CLK,C0:INSTD_LOGIC;--時鐘和進位輸入 MD:INSTD_LOGIC_VECTOR(2DOWNTO0);--移位模式控制字 D:INSTD_LOGIC_VECTOR(7DOWNTO0);--待加載移位數(shù)據(jù) QB:OUTSTD_LOGIC_VECTOR(7DOWNTO0);--移位數(shù)據(jù)輸出 CN:OUTSTD_LOGIC);--進位輸出ENDENTITY;ARCHITECTUREBEHAVOFSHIFTIS SIGNALREG:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALCY:STD_LOGIC;BEGIN PROCESS(CLK,MD,C0)BEGINIFCLK'EVENTANDCLK='1'THEN(接下頁)5.2.2移位模式可控8位移位存放器設(shè)計5VHDL設(shè)計進階第40頁(接上頁)CASEMDIS
WHEN"001"=>REG(0)<=C0;REG(7DOWNTO1)<=REG(6DOWNTO0);CY<=REG(7);--帶進位循環(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;REG(6DOWNTO0)<=REG(7DOWNTO1);CY<=REG(0);--帶進位循環(huán)右移WHEN"101"=>REG(7DOWNTO0)<=D(7DOWNTO0);--加載待移數(shù)WHENOTHERS=>REG<=REG;CY<=CY;--保持ENDCASE;ENDIF;ENDPROCESS;
QB(7DOWNTO0)<=REG(7DOWNTO0);CN<=CY;--移位后輸出ENDBEHAV;5VHDL設(shè)計進階第41頁5.2.2進程中信號與變量賦值
MD=“101”,加載待移數(shù),D=>REG=>QBMD=“001”,帶進位左移看時鐘信號,保持帶進位左移模式,進行數(shù)據(jù)左移。5VHDL設(shè)計進階第42頁5.2.3位矢中‘1’碼個數(shù)統(tǒng)計電路設(shè)計主要功效:統(tǒng)計輸入位矢中含‘1’個數(shù)。設(shè)計思想:將輸入位矢中數(shù)據(jù)進行比較,當位矢中每位數(shù)據(jù)為‘1’時,檢測并統(tǒng)計加1,完成對整個位矢檢視,輸出檢測累加結(jié)果。5VHDL設(shè)計進階第43頁【例5-10】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNTCISPORT(DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);CNTH:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYCNTC;ARCHITECTUREBHVOFCNTCISBEGINPROCESS(DIN)
VARIABLEQ:STD_LOGIC_VECTOR(3DOWNTO0);--為何定義變量?BEGINQ:=“0000”;
FORNIN0TO7LOOP--N是LOOP循環(huán)變量IF(DIN(N)=‘1’)THENQ:=Q+1;ENDIF;ENDLOOP;CNTH<=Q;ENDPROCESS;ENDBEV;5VHDL設(shè)計進階第44頁1.LOOP語句LOOP語句屬于可綜合循環(huán)語句,它能夠使所包含一組次序語句被循環(huán)執(zhí)行,其執(zhí)行次數(shù)可由設(shè)定循環(huán)參數(shù)決定。LOOP語句表示方式:(1)單個LOOP語句[LOOP標號:]LOOP次序語句ENDLOOP[LOOP標號];循環(huán)需引入其它控制語句(如EXIT語句)后才能確定。LOOP標號可任選。5VHDL設(shè)計進階第45頁(1)單個LOOP語句[LOOP標號:]LOOP次序語句ENDLOOP[LOOP標號];L2:LOOPA:=A+1;EXITL2WHENA>10;--當a大于10時跳出循環(huán)ENDLOOPL2;此程序循環(huán)方式由EXIT語句確定,其方式為,當A>10時結(jié)束循環(huán)執(zhí)行A:=A+1。EXIT語句(P350)EXIT;EXIT標號;EXIT標號WHEN表示式;5VHDL設(shè)計進階第46頁(2)FOR_LOOP語句[LOOP標號:]FOR循環(huán)變量IN循環(huán)次數(shù)范圍LOOP次序語句ENDLOOP[LOOP標號];FOR后循環(huán)變量是一個暫時變量,屬于LOOP局部變量,無須事先定義,這個變量只能作為賦值源,不能被賦值。在使用循環(huán)變量時,LOOP語句范圍內(nèi)不要使用其它與循環(huán)變量相同標識符。循環(huán)次數(shù)范圍:要求了LOOP語句中次序語句被執(zhí)行次數(shù)。循環(huán)變量從循環(huán)次數(shù)范圍初值開始,每執(zhí)行完一次次序語句后遞增1,直至到達循環(huán)次數(shù)范圍指定最大值。5VHDL設(shè)計進階第47頁(2)FOR_LOOP語句[LOOP標號:]FOR循環(huán)變量IN循環(huán)次數(shù)范圍LOOP次序語句ENDLOOP[LOOP標號];SIGNALA,B,C:STD_LOGIC_VECTOR(1TO3);……FORNIN1TO3LOOPA(N)<=B(N)ANDC(N);ENDLOOP;A(1)<=B(1)ANDC(1);A(2)<=B(2)ANDC(2);A(3)<=B(3)ANDC(3);LOOP語句等效于次序執(zhí)行了三個信號賦值操作,產(chǎn)生三個與邏輯模塊。每循環(huán)一次將產(chǎn)生一個硬件模塊,循環(huán)次數(shù)增加,硬件資源耗用情況增加,但工作時間耗用未必增加。5VHDL設(shè)計進階第48頁5.2.1三態(tài)門設(shè)計
三態(tài)門有著許多實際應(yīng)用。CPU設(shè)計中數(shù)據(jù)和地址總線構(gòu)建。RAM或堆棧數(shù)據(jù)端口設(shè)計等。三態(tài)門在FPGA中VHDL描述實現(xiàn):用STD_LOGIC數(shù)據(jù)類型‘Z’對一個變量賦值,就會引入三態(tài)門,并在控制下可使其輸出呈高阻態(tài),等效于使三態(tài)門禁止輸出。5VHDL設(shè)計進階第49頁5.2.1三態(tài)門設(shè)計
【例5-9】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)BEGIN
IFenable='1'THENdataout<=datain;ELSEdataout<="ZZZZZZZZ";ENDIF;ENDPROCESS;ENDbhv;圖5-88位3態(tài)控制門電路5VHDL設(shè)計進階第50頁5.2.1三態(tài)門設(shè)計
圖5-88位3態(tài)控制門電路例5-12是一個8位三態(tài)控制門電路描述,其功效描述為:當使能控制信號為‘1’時,8位數(shù)據(jù)輸出;為‘0’時輸出高阻態(tài),語句中將高阻態(tài)數(shù)據(jù)“ZZZZZZZZ”向輸出端口賦值。將某信號定義為STD_LOGIC數(shù)據(jù)類型,講‘Z’賦給此信號來取得三態(tài)控制門電路。需要注意,‘Z’在綜合中是一個不確定值,不一樣綜合器可能會給出不一樣結(jié)果。關(guān)鍵字‘Z’賦值表示高阻態(tài),必須賦值給STD_LOGIC數(shù)據(jù)類型,而且必須為大寫。5VHDL設(shè)計進階第51頁5.2.2雙向端口設(shè)計
用INOUT模式設(shè)計雙向端口需要考慮三態(tài)使用。雙向端口在完成輸入功效時,必須是原來呈輸出模式端口呈高阻態(tài)。不然,待輸入外部數(shù)據(jù)會與端口處原有電平發(fā)生“線與”,造成無法將外部數(shù)據(jù)讀入。輸入外部數(shù)據(jù),禁止輸出端口5VHDL設(shè)計進階第52頁5.2.2雙向端口設(shè)計
【例5-13】libraryieee;useieee.std_logic_1164.all;entitytri_stateisport(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;該IF語句含義怎樣?5VHDL設(shè)計進階第53頁5.2.2雙向端口設(shè)計
圖5-9例5-10仿真波形圖
從仿真波形看,當control=‘1’,q作為輸出端口,x輸出高阻態(tài)‘Z’,q輸出in1端口數(shù)值56和E9。當control=‘0’,q作為輸入端口,數(shù)據(jù)輸入到x,輸入前態(tài)無確切數(shù)值,造成輸入無法定義。輸出也無定義高阻態(tài),無法輸入。5VHDL設(shè)計進階第54頁5.2.2雙向端口設(shè)計
圖5-11例5-10綜合結(jié)果(Synplify綜合)
圖5-9例5-10仿真波形圖
綜合后沒能得到雙向端口結(jié)果,怎樣更正?5VHDL設(shè)計進階第55頁5.2.2雙向端口設(shè)計
【例5-14】(以上部分同上例)process(control,q,in1)beginif(control='0')thenx<=q;q<="ZZZZZZZZ";elseq<=in1;x<="ZZZZZZZZ";endif;endprocess;endbody_tri;if(control='0')thenx<=q;elseq<=in1;x<=“ZZZZZZZZ”;endif;例5-14增加了語句q<=“ZZZZZZZZ”,處理了兩個問題使q在IF語句中有完整條件描述,克服時序元件引入在q推行輸入功效時,將其設(shè)定為高阻態(tài)輸出,使q成為真正雙向端口5VHDL設(shè)計進階第56頁5.2.2雙向端口設(shè)計
圖5-10例5-11仿真波形圖
圖5-12例5-11綜合結(jié)果(Synplify綜合)
從仿真波形圖可看出,其功效已經(jīng)符合雙向端口設(shè)計要求5VHDL設(shè)計進階第57頁5.2.3三態(tài)總線電路設(shè)計
為了組成芯片內(nèi)部總線系統(tǒng),必須設(shè)計三態(tài)總線驅(qū)動器電路總線(Bus)是計算機各種功效部件之間傳送信息公共通信干線。總線工作原理:當總線空閑(其它器件都以高阻態(tài)形式連接在總線上)且器件A要與器件B通信時,發(fā)起通信器件A驅(qū)動總線,發(fā)出地址和數(shù)據(jù)。其它以高阻態(tài)形式連接在總線上器件(如器件B)假如收到與自己相符地址信息后,即接收總線上數(shù)據(jù)。發(fā)送器件完成通信,將總線讓出(輸出變?yōu)楦咦钁B(tài))。5VHDL設(shè)計進階第58頁5.2.3三態(tài)總線電路設(shè)計
描述要求:8位4通道三態(tài)總線驅(qū)動器數(shù)據(jù)輸入端1數(shù)據(jù)輸入端2數(shù)據(jù)輸入端3數(shù)據(jù)輸入端4選擇控制端總線系統(tǒng)處理數(shù)據(jù)輸入端與總線系統(tǒng)控制連接問題5VHDL設(shè)計進階第59頁KX康芯科技8位4通道三態(tài)總線驅(qū)動器設(shè)計【例5-15】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtristate2IS
port(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)BEGIN
IFenable="00"THENoutput<=input3;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="01"THENoutput<=input2;ELSEoutput<=(OTHERS=>'Z');ENDIF;(接下頁)
5VHDL設(shè)計進階第60頁(接上頁)IFenable="10"THENoutput<=input1;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="11"THENoutput<=input0;ELSEoutput<=(OTHERS=>'Z');ENDIF;ENDPROCESS;ENDmultiple_drivers;
8位4通道三態(tài)總線驅(qū)動器設(shè)計5VHDL設(shè)計進階第61頁圖5-13例5-12錯誤綜合結(jié)果(Synplify綜合結(jié)果)
8位4通道三態(tài)總線驅(qū)動器設(shè)計為何錯誤?怎樣錯誤?怎么更正?進程語句中信號賦值特點,output有四個激勵源,是不可能被次序賦值更新。在進程中,次序等價語句,包含賦值語句和IF語句,當它們列于同一進程敏感表中輸入信號同時改變時,只可能對進程結(jié)束前那一條賦值語句進行賦值操作。5VHDL設(shè)計進階第62頁怎樣錯誤?8位4通道三態(tài)總線驅(qū)動器設(shè)計IFenable="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;進程采取了四個次序等價語句。次序等價意思,同一進程下次序語句如對同一信號賦值,其效果等同于同一信號多賦值源賦值標準。5VHDL設(shè)計進階第63頁【例5-13】libraryieee;useieee.std_logic_1164.all;entitytri2isport(ctl:instd_logic_vector(1downto0);datain1,datain2,datain3,datain4:instd_logic_vector(7downto0);q:outstd_logic_vector(7downto0));endtri2;architecturebody_trioftri2isbegin
q<=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;怎么更正?采取并行條件賦值語句,并行獨立選擇(P159)8位4通道三態(tài)總線驅(qū)動器設(shè)計5VHDL設(shè)計進階第64頁U1:PROCESS(ENABLE)BEGINIFenable="00"THENoutput<=input3;ELSEoutput<=(OTHERS=>'Z');ENDIF;ENDPROCESS;U2:PROCESS(ENABLE)BEGINIFenable="01"THENoutput<=input2;ELSEoutput<=(OTHERS=>'Z');ENDIF;ENDPROCESS;U3:PROCESS(ENABLE)BEGINIFenable="10"THENoutput<=input1;ELSEoutput<=(OTHERS=>'Z');ENDIF;ENDPROCESS;U4:PROCESS(ENABLE)BEGINIFenable="11"THENoutput<=input0;ELSEoutput<=(OTHERS=>'Z');ENDIF;ENDPROCESS;結(jié)構(gòu)體中每一條并行語句都等同于一個獨立運行進程,其地位是平等,它們獨立且不沖突檢測各并行語句中敏感信號輸入。獨立控制多通道電路結(jié)構(gòu),使用并行語句結(jié)構(gòu)更為方便直觀。若將四個IF語句放在四個并列PROCESS語句中,可綜合出與并行語句相同結(jié)果。5VHDL設(shè)計進階第65頁圖5-14例5-13正確綜合結(jié)果(Synplify綜合結(jié)果)
8位4通道三態(tài)總線驅(qū)動器設(shè)計提議:普通情況下,同一進程中最好只放一個IF語句結(jié)構(gòu)(能夠包含嵌入式IF語句),不論描述組合邏輯或時序邏輯都一樣。輕易對程序功效進行直接分析,也適合綜合器普通功效。5VHDL設(shè)計進階第66頁5.3次序語句歸納基于進程語句結(jié)構(gòu)次序語句使用特點歸納在一個結(jié)構(gòu)體中,允許放置任意多個進程語句結(jié)構(gòu),每一進程內(nèi)部由一系列次序語句來組成。PROCESS語句結(jié)構(gòu)包含了一個代表著設(shè)計實體中部分邏輯行為、獨立次序語句描述進程。與并行語句同時執(zhí)行方式不一樣,次序語句能夠依據(jù)設(shè)計者要求,利用次序可控語句完成逐條執(zhí)行功效。5VHDL設(shè)計進階第67頁基于進程語句結(jié)構(gòu)次序語句使用特點歸納在VHDL中,所謂次序僅是指語句按序執(zhí)行上次序性,但不意味著PROCESS語句結(jié)構(gòu)在綜合后所對應(yīng)硬件邏輯行為也含有相同次序性。PROCESS結(jié)構(gòu)中次序語句,及其所謂次序執(zhí)行過程只是相對于計算機中HDL行為仿真模擬過程而言。PROCESS過程與硬件結(jié)構(gòu)中實現(xiàn)對應(yīng)邏輯行為是不完全相同。語言次序硬件次序5VHDL設(shè)計進階第68頁5.3.1進程語句格式
PROCESS語句結(jié)構(gòu)普通表示格式以下
[進程標號:]PROCESS[(敏感信號參數(shù)表)][IS][進程說明部分]BEGIN
次序描述語句ENDPROCESS[進程標號];進程標號:每一個PROCESS語句能夠賦予一個進程標號。進程說明部分:定義該進程所需局部數(shù)據(jù)環(huán)境。次序描述語句:一段次序執(zhí)行語句,描述該進程行為。5VHDL設(shè)計進階第69頁次序描述語句:一段次序執(zhí)行語句,描述該進程行為。5.3.1進程語句格式
PROCESS中要求了每個進程語句在它敏感信號值改變時都必須立刻完成某一功效行為。此行為由進程語句中次序語句定義,行為結(jié)果能夠賦給信號,并經(jīng)過信號被其它PROCESS或BLOCK讀取。一個結(jié)構(gòu)體中能夠含有多個PROCESS結(jié)構(gòu),每一PROCESS結(jié)構(gòu)對于其敏感信號參數(shù)表中定義任一敏感參量改變,能夠在任何時刻被激活或者開啟。在同一結(jié)構(gòu)體中,全部被激活進程都是并行運行。PROCESS結(jié)構(gòu)本身是并行語句。5VHDL設(shè)計進階第70頁5.3.2進程結(jié)構(gòu)組成(P162)5.3進程語句歸納
進程說明部分
數(shù)據(jù)類型、常數(shù)、變量、屬性、子程序
賦值語句、進程開啟語句、子程序調(diào)用語句、次序描述語句、進程跳出語句
次序描述語句部分敏感信號參數(shù)表5VHDL設(shè)計進階第71頁5.3.3進程關(guān)鍵點
對于VHDL進程結(jié)構(gòu),程序設(shè)計者需從四個方面判斷其功效和執(zhí)行情況?;谟嬎銠C純軟件VHDL行為仿真運行方式基于VHDL綜合器綜合結(jié)果所可能實現(xiàn)運行方式基于對綜合結(jié)果時序仿真波形表達功效方式基于最終實現(xiàn)硬件電路運行方式對進程認識和進行進程設(shè)計需要注意以下六個方面問題5VHDL設(shè)計進階第72頁5.3.3進程關(guān)鍵點
1.
PROCESS為一無限循環(huán)語句
同一結(jié)構(gòu)體中任一進程是一個獨立無限循環(huán)程序結(jié)構(gòu)。進程中無須放置返回語句,結(jié)構(gòu)體是自動返回。進程只有執(zhí)行狀態(tài)和等候狀態(tài)。滿足特定條件(敏感變量發(fā)生改變),進程進入執(zhí)行狀態(tài)。當碰到ENDPROCESS語句后停頓執(zhí)行,自動返回,進入等候狀態(tài)5VHDL設(shè)計進階第73頁2.
PROCESS中次序語句含有顯著次序/并行運行雙重性
軟件語言中每一條語句執(zhí)行是按CPU及其周期節(jié)拍次序執(zhí)行,每一條語句執(zhí)行時間是確定,它與CPU主頻頻率、工作方式、狀態(tài)周期、機器周期及指令周期長短緊密相連。PROCESS中,一個執(zhí)行狀態(tài)運行周期與外部原因無關(guān),甚至與次序語句多少都沒相關(guān)系,其執(zhí)行時間從行為仿真角度看,只有一個VHDL模擬器最小分辨時間;從綜合和硬件運行角度看,執(zhí)行時間是0。同一PROCESS中,10條語句和1000條語句執(zhí)行時間是一樣,次序語句含有并行執(zhí)行性質(zhì)。5VHDL設(shè)計進階第74頁PROCESS(abc)BEGIN
CASEabcISWHEN"0000"=>so<="010";WHEN"0001"=>so<="111";WHEN"0010"=>so<="101";...WHEN"1110"=>so<="100";WHEN"1111"=>so<="000";WHENOTHERS=>NULL;ENDCASE;
ENDPROCESS;2.
PROCESS中次序語句含有顯著次序/并行運行雙重性
若abc=“1110”,執(zhí)行語句WHEN“1110”=>SO<=“100”,無須逐條語句比較。所以執(zhí)行一條語句和執(zhí)行100條語句時間是一樣。次序語句生成是并行結(jié)構(gòu)組合電路。VHDL語句無法進行“單步”調(diào)試,只能經(jīng)過時序或功效仿真波形,以及生成電路實測來了解程序功效和可能存在問題。5VHDL設(shè)計進階第75頁3.進程語句本身是并行語句同一結(jié)構(gòu)體中不一樣進程是并行運行,其依據(jù)對應(yīng)敏感信號獨立運行。在例5-17中,兩個進程是完全獨立運行,除非兩組敏感信號中一對同時改變,兩進程才被同時開啟。因為兩進程敏感信號temp改變有先后關(guān)系,使得進程開啟含有先后次序關(guān)系。進程語句是并行語句,但敏感信號改變能夠是次序改變,造成執(zhí)行效果為次序執(zhí)行。【例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;5VHDL設(shè)計進階第76頁4.信號能夠是多個進程間通信線
結(jié)構(gòu)體中多個進程之所以能并行同時運行,一個很主要原因是進程之間通信是經(jīng)過信號來實現(xiàn)。信號對結(jié)構(gòu)體來說,含有全局特征,它是進程間聯(lián)絡(luò)主要路徑。5.一個進程中只允許描述對應(yīng)于一個時鐘信號同時時序邏輯
時序電路必須由進程中不完全條件次序語句描述。同一進程中可次序放置多個條件語句,但推薦只放一個判斷時鐘邊緣檢測語句條件語句。一個進程只能描述針對同一時鐘同時時序邏輯。5VHDL設(shè)計進階第77頁5.4并行賦值語句討論進程語句和并行賦值語句執(zhí)行和實現(xiàn)并非同時發(fā)生。二者開啟和執(zhí)行情況與敏感信號(信號)改變親密相關(guān)。任何一條信號并行賦值語句是縮略進程語句。在絕大多數(shù)情況下不能同時執(zhí)行。DATA1<=AANDB;DATA2<=C;執(zhí)行賦值需要信號改變,并行賦值語句非同時執(zhí)行。5VHDL設(shè)計進階第78頁【例5-18】ARCHITECTUREdataflowOFmuxISSIGNALseiect:INTEGERRANGE15DOWNTO0;BEGINSelect<=0WHENs0=’0’ANDs1=’0’ELSE1WHENs0=’1’ANDs1=’0’ELSE2WHENs0=’0’ANDs1=’1’ELSE3;
x<=aWHENselect=0ELSEbWHENselect=1ELSEcWHENselect=2ELSEd;...
5.4并行賦值語句討論并行賦值語句包含進程次序語句特征。SELECT改變由s0和s1數(shù)值確定。SELECT值確定x賦值源。所以兩并行賦值語句含有次序改變結(jié)構(gòu)。賦值結(jié)果信號作為另一并行語句判斷控制信號5VHDL設(shè)計進階第79頁5.5IF語句概述
(1)IF條件句Then
次序語句
ENDIF;
(2)IF條件句Then次序語句
ELSE
次序語句
ENDIF;
(3)IF條件句ThenIF條件句Then...ENDIFENDIF(4)IF條件句Then
次序語句ELSIF條件句Then次序語句...ELSE
次序語句ENDIF
5VHDL設(shè)計進階第80頁(1)IF條件句Then
次序語句
ENDIF;
第1種條件語句執(zhí)行情況:首先檢測關(guān)鍵詞IF后條件表示式布爾值是否為真假如為真,THEN將次序執(zhí)行條件句中列出各條語句,直到ENDIF;假如為假,跳過以下次序語句不予執(zhí)行,直接結(jié)束IF語句執(zhí)行。此形式為非完整性條件語句,通慣用于產(chǎn)生時序電路。5VHDL設(shè)計進階第81頁(2)IF條件句Then次序語句
ELSE
次序語句
ENDIF;
第2種IF語句差異在于那個所測條件為FALSE時,并不直接跳到ENDIF結(jié)束條件句執(zhí)行。轉(zhuǎn)向ELSE以下另一段次序語句進行執(zhí)行。第2種IF語句含有條件分支功效,就是經(jīng)過測定所設(shè)條件真假以決定執(zhí)行哪一組次序語句。執(zhí)行完其中一組語句,再結(jié)束IF語句執(zhí)行,這是一個完整性條件語句,通慣用于產(chǎn)生組合電路。5VHDL設(shè)計進階第82頁(3)IF條件句ThenIF條件句Then...ENDIFENDIF第3種IF語句是一個多重IF語句嵌套式條件句,能夠產(chǎn)生比較豐富條件描述。其既能夠產(chǎn)生時序電路,也能夠產(chǎn)生組合電路,或者二者混合。使用時需要注意,ENDIF結(jié)束句個數(shù)應(yīng)該與嵌入條件句數(shù)量一致。5VHDL設(shè)計進階第83頁(4)IF條件句Then
次序語句ELSIF條件句Then次序語句...ELSE
次序語句ENDIF
第4種IF語句與第3種語句一樣,也能夠?qū)崿F(xiàn)不一樣類型電路描述。關(guān)鍵詞ELSIF設(shè)定多個判定條件,以使次序語句執(zhí)行分支能夠超出兩個。這一類型語句主要特點,是任一分支次序語句執(zhí)行條件是以上各分支所確定條件相與(相關(guān)條件同時成立),語句中有向上相與功效。5VHDL設(shè)計進階第84頁5.5IF語句概述
【例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;BEGIN
IFaTHENn:=b;ELSEn:=c;ENDIF;output<=n;ENDPROCESS;ENDexample;IFaTHEN…ELSEa是判斷表示式,本條件示例含有兩個分支。5VHDL設(shè)計進階第85頁5.5IF語句概述
輸入輸出din0din1din2din3din4din5din6din7
output0output1output2xxxxxxx0000xxxxxx01100xxxxx011010xxxx0111110xxx01111001xx011111101x011111101101111111111表5-28線-3線優(yōu)先編碼器真值表
注:表中“x”為任意,類似VHDL中“-”值。
5VHDL設(shè)計進階第86頁KX康芯科技【例5-15】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)BEGIN
IF(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;向上相與,不符合條件轉(zhuǎn)向下一分支??紤]多個賦值源對output賦值情況5VHDL設(shè)計進階第87頁5.6半整數(shù)與奇數(shù)分頻電路設(shè)計在實用數(shù)字系統(tǒng)設(shè)計中常需要完成不一樣類型分頻,對于偶數(shù)次分頻(占空比50%)方法在第3章中已經(jīng)介紹給大家。復(fù)習:占空比為50%偶數(shù)次分頻電路設(shè)計方法,采取不一樣模計數(shù)器來實現(xiàn)。N分頻計數(shù)模為(N/2-1)。如6分頻電路計數(shù)模,計數(shù)次數(shù)為2(6/2-1=2),計數(shù)內(nèi)容為0、1、2,計數(shù)周期為3周期,當計數(shù)抵達2時即對輸出端電平進行翻轉(zhuǎn)一次。顯然,奇數(shù)次分頻不能采取上述方法得到。下面學(xué)習奇數(shù)次分頻(占空比50%)方法。5VHDL設(shè)計進階第88頁【例5-21】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年離婚房產(chǎn)分配合同模板
- 2024年平行進口車售后服務(wù)網(wǎng)點建設(shè)與銷售合同3篇
- 商丘師范學(xué)院《畜牧業(yè)經(jīng)營管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 商洛職業(yè)技術(shù)學(xué)院《交通信息系統(tǒng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 汕尾職業(yè)技術(shù)學(xué)院《中學(xué)歷史課程標準解讀與教材研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 陜西中醫(yī)藥大學(xué)《前廳管理實務(wù)實驗教學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 知名企業(yè)建筑工程園建工程施工技術(shù)標準規(guī)范圖示手冊
- 2024至2030年金屬刷子項目投資價值分析報告
- 2024至2030年玻璃電腦臺項目投資價值分析報告
- 放心早餐供貨合同范例
- 醫(yī)學(xué)倫理學(xué)(山東聯(lián)盟-濟寧醫(yī)學(xué)院)智慧樹知到期末考試答案2024年
- 譚軍業(yè)博士的學(xué)生邱安博士談人體使用基礎(chǔ)手冊
- DB11T 489-2024 建筑基坑支護技術(shù)規(guī)程
- 教育哲學(xué)智慧樹知到期末考試答案2024年
- 疼痛科護理年度工作計劃
- 第五章 中國特色社會主義理論體系的形成發(fā)展(一)
- 規(guī)章制度教案樣本
- JCT 2789-2023 涂料用長石粉 (正式版)
- DB11-T 1832.22-2023 建筑工程施工工藝規(guī)程 第22部分:裝配式裝修工程
- 個體診所藥品清單模板
- eviews操作說明課件
評論
0/150
提交評論