EDA技術(shù)基礎(chǔ)第章電路設(shè)計(jì)實(shí)踐_第1頁
EDA技術(shù)基礎(chǔ)第章電路設(shè)計(jì)實(shí)踐_第2頁
EDA技術(shù)基礎(chǔ)第章電路設(shè)計(jì)實(shí)踐_第3頁
EDA技術(shù)基礎(chǔ)第章電路設(shè)計(jì)實(shí)踐_第4頁
EDA技術(shù)基礎(chǔ)第章電路設(shè)計(jì)實(shí)踐_第5頁
已閱讀5頁,還剩151頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

EDA技術(shù)基礎(chǔ)第5章電路設(shè)計(jì)實(shí)踐5.18位加法器5.1.1設(shè)計(jì)原理1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)可以對(duì)兩個(gè)8位二進(jìn)制數(shù)進(jìn)行加法運(yùn)算的加法器。2.方案構(gòu)思多位加法器按其進(jìn)位方式的不同可以分為兩類:串行進(jìn)位加法器和并行進(jìn)位加法器。串行進(jìn)位加法器是將多個(gè)1位全加器級(jí)聯(lián),低位全加器的進(jìn)位輸出送給相鄰高位全加器作為進(jìn)位輸入,以此構(gòu)成多位加法器。這種設(shè)計(jì)思路簡(jiǎn)單明了且占用資源較少,但運(yùn)算速度較慢。并行進(jìn)位方式則是在各位的加法環(huán)節(jié)之外,另外設(shè)有進(jìn)位產(chǎn)生邏輯電路,各位的進(jìn)位輸入信號(hào)同時(shí)產(chǎn)生,從而各位可以同時(shí)完成全加運(yùn)算,輸出最后結(jié)果。并行進(jìn)位方式具有較快的運(yùn)算速度,但是相對(duì)于串行進(jìn)位方式來說,卻往往占用更多的資源。尤其是當(dāng)運(yùn)算位數(shù)增加的時(shí)候,相同位數(shù)的并行進(jìn)位和串行進(jìn)位加法器的資源占用差距也越來越大。因此,常常需要設(shè)計(jì)者在運(yùn)算速度和資源占用量之間做出折中和平衡。實(shí)踐證明,4位二進(jìn)制并行進(jìn)位加法器和串行級(jí)聯(lián)加法器占用的資源幾乎相同。因此,可以用兩個(gè)4位二進(jìn)制并行加法器級(jí)聯(lián)以構(gòu)成8位二進(jìn)制加法器,這是一種較為合理的選擇,其結(jié)構(gòu)組成如圖5.1所示。圖5.18位加法器電路原理圖5.1.2程序設(shè)計(jì)1.子模塊設(shè)計(jì)4位二進(jìn)制并行進(jìn)位加法器源程序ADDER4B.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYADDER4BISPORT(CIN:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(3DOWNTO0);B:INSTD_LOGIC_VECTOR(3DOWNTO0);S:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDADDER4B;ARCHITECTUREAOFADDER4BISSIGNALSINT:STD_LOGIC_VECTOR(4DOWNTO0);SIGNALAA,BB:STD_LOGIC_VECTOR(4DOWNTO0);BEGINAA<='0'&A;BB<='0'&B;SINT<=AA+BB+CIN;S<=SINT(3DOWNTO0);COUT<=SINT(4);ENDA;2.頂層模塊設(shè)計(jì)8位二進(jìn)制加法器源程序ADDER8B.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYADDER8BISPORT(CIN:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(7DOWNTO0);B:INSTD_LOGIC_VECTOR(7DOWNTO0);S:OUTSTD_LOGIC_VECTOR(7DOWNTO0);COUT:OUTSTD_LOGIC);ENDADDER8B;ARCHITECTUREARTOFADDER8BISCOMPONENTADDER4BPORT(CIN:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(3DOWNTO0);B:INSTD_LOGIC_VECTOR(3DOWNTO0);S:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALCARRY_OUT:STD_LOGIC;BEGINU1:ADDER4BPORTMAP(CIN=>CIN,A=>A(3DOWNTO0),B=>B(3DOWNTO0),S=>S(3DOWNTO0),COUT=>CARRY_OUT);U2:ADDER4BPORTMAP(CIN=>CARRY_OUT,A=>A(7DOWNTO4),B=>B(7DOWNTO4),S=>S(7DOWNTO4),COUT=>COUT);ENDART;在本例中,頂層設(shè)計(jì)可以用VHDL程序輸入法,也可以用圖5-1所示的原理圖輸入法。5.1.3編譯/仿真1.編譯過程(1)建立頂層設(shè)計(jì)文件夾ADDER8B在硬盤適當(dāng)位置建立ADDER8B文件夾(本書中將該文件夾建立在G:\BEIDA_EDA)中。注意:該文件夾的路徑中不能包含漢字。路徑中的所有目錄和子目錄的名稱都必須符合VHDL語言的語法規(guī)則。后面例子中的相關(guān)步驟都與此類似。(2)ADDER4B.VHD子模塊設(shè)計(jì)新建一個(gè).VHD格式文件,輸入ADDER4B.VHD源程序后保存在頂層設(shè)計(jì)文件夾中,并進(jìn)行語法查錯(cuò)、編譯、功能和時(shí)序仿真等相關(guān)操作,同時(shí)生成符號(hào)文件(即.SYM文件)。(3)頂層文件設(shè)計(jì)新建一個(gè)ADDER8B.VHD文件,輸入源程序后進(jìn)行保存、查錯(cuò)、編譯、功能和時(shí)序仿真等相關(guān)操作。或者采用原理圖輸入法,新建一個(gè)ADDER8B.GDF文件,按照?qǐng)D5-1所示原理圖進(jìn)行設(shè)計(jì),兩者結(jié)果一致。后面各例中的模塊化設(shè)計(jì)方法與此例類似。2.仿真結(jié)果該8位并行進(jìn)位加法器的仿真結(jié)果如圖5.2所示,A、B、S都以十進(jìn)制形式顯示。圖5.28位加法器仿真結(jié)果5.1.4下載驗(yàn)證1.引腳鎖定按照表格5.1所示對(duì)應(yīng)關(guān)系鎖定引腳。被加數(shù)A[7..0]高4位和低4位分別由鍵4和鍵3輸入,其值顯示于數(shù)碼管4和3;加數(shù)B[7..0]高4位和低4位分別由鍵2鍵1輸入,其值顯示于數(shù)碼管2和1;相加后的和顯示于數(shù)碼管6和5;進(jìn)位輸入信號(hào)由鍵7輸入;進(jìn)位輸出標(biāo)志由二極管D1顯示。2.下載驗(yàn)證選擇實(shí)驗(yàn)箱NO.1配置模式,執(zhí)行主菜單MAX+PLUSII|PROGRAMMER,然后點(diǎn)擊CONFIGURE開始對(duì)芯片進(jìn)行配置。配置完成后讀者可以自行設(shè)置被加數(shù)和加數(shù)以及進(jìn)位輸入,同時(shí)觀察相加后的和以及進(jìn)位輸出信號(hào),可以發(fā)現(xiàn),該設(shè)計(jì)是正確的。(本書所有例子均基于杭州康芯GW48-CK實(shí)驗(yàn)箱)表5.18位加法器引腳鎖定對(duì)照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳A725A321B716B38S738S330A624A219B611B27S637S229A523A118B510B16S536S128A422A017B49B05S435S027CIN80COUT545.28×8乘法器5.2.1設(shè)計(jì)原理1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)可以對(duì)兩個(gè)8位二進(jìn)制數(shù)進(jìn)行乘法運(yùn)算的電路,結(jié)果以16位二進(jìn)制數(shù)的形式輸出。2.方案構(gòu)思(1)原理分析兩個(gè)8位二進(jìn)制數(shù)相乘,其積最大值為255×255=65025,而一個(gè)16位二進(jìn)制數(shù)能表示的最大數(shù)值是65535。因此可知,該乘法器只需有16位二進(jìn)制輸出即可,不會(huì)再產(chǎn)生第17位的進(jìn)位輸出。在數(shù)字電路設(shè)計(jì)中,乘法運(yùn)算一般是采用逐項(xiàng)移位相加的原理來實(shí)現(xiàn)的。從乘數(shù)最低位開始:若為1,則將被乘數(shù)右端與乘數(shù)右端對(duì)齊寫在下面;若為0,則將與被乘數(shù)同樣位數(shù)的0寫在下面。然后從乘數(shù)右邊第二位開始:若為1,則被乘數(shù)左移1位后與上一次的結(jié)果相加;若為0,則左移后以全0相加。后面依次類推,每次若乘數(shù)相應(yīng)位為1,則被乘數(shù)左移一位與前次和相加,若相應(yīng)位為0,則左移后以全0相加。(2)系統(tǒng)構(gòu)成及各引腳功能根據(jù)以上分析進(jìn)行構(gòu)思,可得該乘法器的邏輯結(jié)構(gòu)圖,如圖5.3所示。圖5.38位乘法器邏輯結(jié)構(gòu)圖乘數(shù)加載于8位右移寄存器的輸入端,被乘數(shù)加載于16位左移寄存器的輸入端。各引腳功能及系統(tǒng)工作原理說明如下。①ENABLEENABLE是一個(gè)使能端。它有兩個(gè)功能:當(dāng)為高電平時(shí),16位鎖存器LATCH16清零,同時(shí)乘數(shù)和被乘數(shù)向移位寄存器加載,并封鎖CCLK不輸出脈沖;當(dāng)它為低電平時(shí),CCLK輸出脈沖信號(hào),可以進(jìn)行乘法運(yùn)算。②CLKCLK為計(jì)數(shù)脈沖,每來一個(gè)脈沖,乘數(shù)的某一位就和被乘數(shù)的各位完成一次二進(jìn)制乘法運(yùn)算,并將結(jié)果送到16位鎖存器里面。隨著每一時(shí)鐘節(jié)拍,加載于8位右移寄存器的乘數(shù)由低位向高位逐位移出,當(dāng)該位為1時(shí),與門打開,被乘數(shù)在同一時(shí)鐘節(jié)拍左移后進(jìn)入16位加法器,與上一次鎖存在“LATCH16”中的和進(jìn)行相加,其和在下一時(shí)鐘上升沿被鎖存進(jìn)16位鎖存器“LATCH16”。而當(dāng)被乘數(shù)的移出位為0時(shí),與門輸出全零輸出。如此往復(fù),直至9個(gè)時(shí)鐘脈沖過后,8位右移寄存器各位已全部變成0。此時(shí),16位鎖存器的輸出值即為最后乘積,以后即使再來脈沖,鎖存器的值也不再變化,保持在兩數(shù)乘積值。(3)A[8..1]、B[8..1]A[8..1]、B[8..1]端子為兩個(gè)乘數(shù)的輸入端。因?yàn)槭沁M(jìn)行乘法操作,而不是除法操作,所以無所謂被乘數(shù)與乘數(shù)輸入端,最后所得結(jié)果都是兩數(shù)的乘積。(4)P[16..1]P[16..1]為乘積輸出端。此乘法器的優(yōu)點(diǎn)時(shí)節(jié)省芯片資源,它的核心元件只是一個(gè)16位加法器,其運(yùn)算速度取決于輸入的時(shí)鐘頻率。若時(shí)鐘頻率為100MHZ,則每一運(yùn)算周期僅需80ns。而若利用具備最高時(shí)鐘,即12MHZ晶振的MCS-51單片機(jī)的乘法指令,進(jìn)行8位乘法運(yùn)算,僅單指令的運(yùn)算周期長(zhǎng)達(dá)4微妙。因此可以利用此乘法器,或相同原理構(gòu)成更高位數(shù)的乘法器完成一些數(shù)字信號(hào)處理方面的運(yùn)算。5.2.2程序設(shè)計(jì)1.子模塊設(shè)計(jì)(1)8位右移寄存器該右移寄存器只有一個(gè)QOUT輸出端。在LOAD信號(hào)為高電平時(shí),將乘數(shù)置入內(nèi)部寄存器,移位脈沖CLK不起作用,不進(jìn)行移位。并且要求LOAD信號(hào)為高電平期間,QOUT輸出應(yīng)該為零;在LOAD信號(hào)為低電平時(shí),不再接受新的乘數(shù)置入,此時(shí)CLK起作用,每來一個(gè)脈沖,將右邊最低位輸出,同時(shí)其余7位也依次右移一位,最左邊空出來的最高位置零。根據(jù)以上功能要求,可設(shè)計(jì)其VHDL源程序SHIFTR_REG8.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTR_REG8ISPORT(LOAD,CLK:INSTD_LOGIC;A:INSTD_LOGIC_VECTOR(8DOWNTO1);QOUT:OUTSTD_LOGIC);ENDSHIFTR_REG8;ARCHITECTUREAOFSHIFTR_REG8ISBEGINPROCESS(LOAD,CLK)VARIABLEQ:STD_LOGIC_VECTOR(8DOWNTO1):="00000000";BEGINIFLOAD='1'THENQ:=A;ELSIFCLK'EVENTANDCLK='1'THENQOUT<=Q(1);Q(7DOWNTO1):=Q(8DOWNTO2);Q(8):='0';ENDIF;ENDPROCESS;ENDA;(2)16位左移寄存器該寄存器有16個(gè)輸出端。在LOAD信號(hào)為高電平時(shí),將被乘數(shù)置入內(nèi)部寄存器,并將CLK移位脈沖屏蔽,不進(jìn)行移位操作。在LOAD為低電平時(shí),CLK脈沖起作用,但來第一個(gè)脈沖時(shí),并不進(jìn)行移位操作,只將被乘數(shù)各位從輸出端Q[8..1]對(duì)應(yīng)輸出,Q[16..9]置零。從第二個(gè)脈沖開始,每來一個(gè)脈沖,乘數(shù)都向左移動(dòng)一位,并將空出的低位置零。根據(jù)以上要求,可設(shè)計(jì)其VHDL源程序SHIFTL_REG16.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTL_REG16ISPORT(LOAD,CLK:INSTD_LOGIC;B:INSTD_LOGIC_VECTOR(8DOWNTO1);Q:BUFFERSTD_LOGIC_VECTOR(16DOWNTO1));ENDSHIFTL_REG16;ARCHITECTUREAOFSHIFTL_REG16ISBEGIN

PROCESS(LOAD,CLK)VARIABLEM:STD_LOGIC_VECTOR(17DOWNTO1);BEGINIFLOAD='1'THENM(17DOWNTO1):="000000000"&B(8DOWNTO1);Q(16DOWNTO1)<=M(16DOWNTO1);ELSIFCLK'EVENTANDCLK='1'THENM(17DOWNTO2):=M(16DOWNTO1);M(1):='0';Q(16DOWNTO1)<=M(17DOWNTO2);ENDIF;ENDPROCESS;ENDA;(3)乘法運(yùn)算控制器模塊源程序EAL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYEALISPORT(CLK,EN:INSTD_LOGIC;CCLK:OUTSTD_LOGIC);ENDEAL;ARCHITECTUREBEHAVEOFEALISBEGINPROCESS(CLK,EN)BEGINCCLK<=CLKAND(NOTEN);ENDPROCESS;ENDBEHAVE;(4)ANDL模塊源程序ANDL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYANDLISPORT(X:INSTD_LOGIC;BB:INSTD_LOGIC_VECTOR(16DOWNTO1);O:OUTSTD_LOGIC_VECTOR(16DOWNTO1));ENDANDL;ARCHITECTUREARTOFANDLISBEGINPROCESS(X,BB)BEGINFORIIN1TO16LOOPO(I)<=BB(I)ANDX;ENDLOOP;ENDPROCESS;ENDART;(5)16位加法器原理圖可將前面5.1例子中已經(jīng)設(shè)計(jì)好的8位加法器中的ADDER8B.VHD文件和ADDER8B.SYM文件復(fù)制到8位乘法器文件夾,然后按照?qǐng)D5.4所示構(gòu)成16位加法器。圖5.416位加法器原理圖(6)16位鎖存器源程序LATCH16.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLATCH16ISPORT(CLK,CLR:INSTD_LOGIC;D:INSTD_LOGIC_VECTOR(16DOWNTO1);QX:BUFFERSTD_LOGIC_VECTOR(16DOWNTO1));ENDLATCH16;ARCHITECTUREARTOFLATCH16ISBEGINPROCESS(CLK,CLR)

BEGINIFCLR='1'THENQX<="0000000000000000";ELSIFCLK'EVENTANDCLK='1'THENQX<=D;ENDIF;ENDPROCESS;ENDART;2.頂層模塊設(shè)計(jì)將前面所述6個(gè)模塊全部編譯仿真通過后,調(diào)用其符號(hào)文件構(gòu)建如圖5-3所示原理圖,即為頂層模塊設(shè)計(jì)方案,然后進(jìn)行總體編譯和仿真。5.2.3編譯/仿真1.編譯過程新建一個(gè)MULTI8X8文件夾,并依次在其中建立、編譯和仿真上述所有子模塊,生成相應(yīng)的符號(hào)文件,然后按照?qǐng)D5.3所示構(gòu)建頂層設(shè)計(jì),并進(jìn)行系統(tǒng)整體仿真和編譯。2.仿真結(jié)果該乘法器仿真結(jié)果如圖5.5、5.6所示。圖5.5所示為兩個(gè)乘數(shù)為最大值FFH(即十進(jìn)制數(shù)255)的情況。圖5.58×8乘法器仿真實(shí)例一圖9-6所示為一般乘法運(yùn)算的情況。圖5.68×8乘法器仿真實(shí)例二5.2.4下載驗(yàn)證1.管腳鎖定按照表格5.2所示對(duì)應(yīng)關(guān)系鎖定引腳。表5.28×8乘法器引腳鎖定對(duì)照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳A825B816P1653P838A724B711P1552P737A623B610P1451P636A522B59P1350P535A421B48P1249P430A319B37P1148P329A218B26P1047P228A117B15P939P127ENABLE81CLK2

2.下載驗(yàn)證選擇實(shí)驗(yàn)箱NO.1配置方案,下載完成后將CLOCK0上面的跳線冒置于不同的短路位置,即可實(shí)現(xiàn)以不同的速度進(jìn)行乘法運(yùn)算。當(dāng)然對(duì)于此例,如果不需要考慮資源占用率的話,可以直接考慮用VHDL語言提供的乘法指令來實(shí)現(xiàn),將會(huì)使整個(gè)設(shè)計(jì)變得非常簡(jiǎn)單,而且所設(shè)計(jì)電路的時(shí)序性能會(huì)更加穩(wěn)定、可靠。讀者可以自己嘗試著去做一番比較,在此限于篇幅,不再對(duì)后者給出具體程序。5.3同步清零的可逆計(jì)數(shù)器5.3.1設(shè)計(jì)原理1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)可預(yù)置計(jì)數(shù)初始值、可同步清零、帶計(jì)數(shù)使能端的128進(jìn)制可逆計(jì)數(shù)器。2.方案構(gòu)思根據(jù)這個(gè)計(jì)數(shù)器所應(yīng)具備的功能,可以構(gòu)思出其方框圖,如圖5.7所示。圖5.7可預(yù)置\可同步清零\帶使能端\128進(jìn)制\可逆計(jì)數(shù)器設(shè)計(jì)方框圖端口說明:CLK→計(jì)數(shù)脈沖輸入端;SCLR→異步清零端;CNT_EN→計(jì)數(shù)使能控制端;LOAD→預(yù)置數(shù)據(jù)控制端;UPDOWN→遞增\遞減計(jì)數(shù)控制端;DIN[7..0]→預(yù)置數(shù)據(jù)輸入端;Q[7..0]→計(jì)數(shù)結(jié)果輸出端。5.3.2程序設(shè)計(jì)該計(jì)數(shù)器源程序COUNTER128.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCOUNTER128ISPORT(CLK,SCLR,EN:INSTD_LOGIC;LOAD,UPDOWN:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);Q:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDCOUNTER128;ARCHITECTUREAOFCOUNTER128ISBEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFSCLR='0'THENQ<="00000000";ELSIFQ="01111111"THENQ<="00000000";ELSIFEN='1'THENIFLOAD='1'THENQ<=DIN;ELSIFUPDOWN='1'THENQ<=Q+1;ELSEQ<=Q-1;ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDA;5.3.3仿真結(jié)果1.編譯過程新建一個(gè)COUNTER128.VHD文件,輸入源程序后保存在G:\BEIDA_EDA\COUNTER128文件夾中。然后進(jìn)行語法查錯(cuò)、編譯和仿真等全部相關(guān)操作。2.仿真結(jié)果仿真完成后,可得功能和時(shí)序仿真結(jié)果如圖5.8所示。圖5.8128進(jìn)制可逆計(jì)數(shù)器功能與時(shí)序仿真結(jié)果5.3.4下載驗(yàn)證1.管腳鎖定并按照表格5.3所示對(duì)應(yīng)關(guān)系鎖定引腳。表5.3128進(jìn)制可逆計(jì)數(shù)器引腳鎖定對(duì)照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳DIN725UPDOWN10Q738DIN624SCLR9Q637DIN523CNT_EN8Q536DIN422LOAD7Q435DIN321CLK43Q330DIN219Q229DIN118Q128DIN017Q0272.下載驗(yàn)證選擇實(shí)驗(yàn)箱NO.0配置方案進(jìn)行程序下載。然后可以由讀者自行設(shè)定各輸入端狀態(tài),進(jìn)行預(yù)置計(jì)數(shù)初始值、清零、計(jì)數(shù)使能等操作,觀察其實(shí)現(xiàn)128進(jìn)制計(jì)數(shù)的情況。5.4可預(yù)置\可同步清零\8位

雙向循環(huán)移位寄存器設(shè)計(jì)

5.4.1設(shè)計(jì)原理1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)可以預(yù)置數(shù);可以雙向循環(huán)移位;可以同步清零;且具有移位使能控制端的8位移位寄存器。2.方案構(gòu)思該移位寄存器的方框圖應(yīng)如圖5.9所示。圖5.98位雙向循環(huán)移位寄存器方框圖各端口的功能如下:LOAD→預(yù)置數(shù)據(jù)控制端;CLK→移位脈沖輸入端;CLR→清零控制端;DIRE→移位方向控制端;EN→移位使能控制端;ATA[7..0]→預(yù)置數(shù)據(jù)輸入端;DOUT[7..0]→輸出顯示端。5.4.2程序設(shè)計(jì)該移位寄存器源程序REG8.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYREG8ISPORT(LOAD,CLK,CLR,DIRE,EN:INSTD_LOGIC;DATA:INSTD_LOGIC_VECTOR(7DOWNTO0);DOUT:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDREG8;ARCHITECTUREAOFREG8ISBEGINPROCESS(CLK)BEGINIFEN='0'THENDOUT<=DOUT;ELSIFCLK'EVENTANDCLK='1'THENIFLOAD='1'THENDOUT<=DATA;ELSIFCLR='0'THENDOUT<="00000000";ELSIFDIRE='1'THENDOUT(7DOWNTO1)<=DOUT(6DOWNTO0);DOUT(0)<=DOUT(7);ELSEDOUT(6DOWNTO0)<=DOUT(7DOWNTO1);DOUT(7)<=DOUT(0);ENDIF;ENDIF;ENDPROCESS;ENDA;5.4.3編譯/仿真1.編譯過程跟前面幾個(gè)例子類似,不再贅述。2.仿真結(jié)果移位寄存器仿真結(jié)果如圖5.10所示,為便于觀察循環(huán)移位情況,特將預(yù)置數(shù)和8位輸出以自然二進(jìn)制形式表示。圖5.108位雙向循環(huán)移位寄存器功能與時(shí)序仿真結(jié)果5.4.4下載驗(yàn)證1.管腳鎖定按照表格5.4所示對(duì)應(yīng)關(guān)系鎖定引腳。2.下載驗(yàn)證選擇實(shí)驗(yàn)箱NO.6配置方案,并按照前面例子中相同的方法進(jìn)行程序配置,然后開始功能驗(yàn)證:用鍵2和鍵1配合輸入初始數(shù)據(jù),用鍵6~3控制各項(xiàng)操作,用D8~1共8個(gè)發(fā)光二極管顯示移位操作的數(shù)據(jù)移動(dòng)。5.5電子琴硬件電路設(shè)計(jì)5.5.1設(shè)計(jì)原理1.設(shè)計(jì)任務(wù)利用數(shù)控分頻器設(shè)計(jì)一個(gè)電子琴硬件電路。主系統(tǒng)由頂層模塊TOP.VHD和兩個(gè)功能子模塊TONE.VHD、SPEAKER.VHD構(gòu)成。2.方案構(gòu)思(1)頂層模塊TOP該電子琴頂層模塊內(nèi)部構(gòu)成應(yīng)如圖5.11所示。圖5.11電子琴硬件結(jié)構(gòu)組成(2)TONE子模塊TONE模塊是一個(gè)音階發(fā)生器,當(dāng)8位發(fā)聲控制輸入INDEX中某一位為高電平時(shí),則對(duì)應(yīng)該音階的數(shù)值將從端口TONE輸出,作為獲得該音階的分頻預(yù)置值;同時(shí)由CODE輸出對(duì)應(yīng)該音階簡(jiǎn)譜的顯示數(shù)碼,如‘5’,并由HIGH輸出指示音階高8度顯示,由此可知,該模塊的VHDL描述應(yīng)是類似于真值表的純組合電路描述,其中的音階分頻預(yù)置值,如TONE<=1290是根據(jù)產(chǎn)生該音階頻率所對(duì)應(yīng)的分頻比獲得的。(3)SPEAKER子模塊其主要電路是一個(gè)數(shù)控分頻器。這個(gè)數(shù)控分頻器由一個(gè)初值可預(yù)置的加法計(jì)數(shù)器構(gòu)成,詳細(xì)的設(shè)計(jì)和工作原理不再詳述。當(dāng)模塊SPEAKER由端口TONE獲得一個(gè)2進(jìn)制數(shù)后,將以此值為計(jì)數(shù)器的預(yù)置數(shù),對(duì)端口CLK12MHZ輸入的頻率進(jìn)行分頻,之后由SPKOUT向揚(yáng)聲器輸出發(fā)聲。5.5.2程序設(shè)計(jì)1.子模塊設(shè)計(jì)(1)TONE子模塊源程序TONE.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTONEISPORT(INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);CODE:OUTINTEGERRANGE0TO15;HIGH:OUTSTD_LOGIC;TONE:OUTINTEGERRANGE0TO16#7FF#);END;ARCHITECTUREONEOFTONEISBEGINSEARCH:PROCESS(INDEX)BEGINCASEINDEXISWHEN"00000001"=>TONE<=773;CODE<=1;HIGH<='0';WHEN"00000010"=>TONE<=912;CODE<=2;HIGH<='0';WHEN"00000100"=>TONE<=1036;CODE<=3;HIGH<='0';WHEN"00001000"=>TONE<=1116;CODE<=4;HIGH<='0';WHEN"00010000"=>TONE<=1197;CODE<=5;HIGH<='0';WHEN"00100000"=>TONE<=1290;CODE<=6;HIGH<='0';WHEN"01000000"=>TONE<=1372;CODE<=7;HIGH<='0';WHEN"10000000"=>TONE<=1410;CODE<=1;HIGH<='1';WHENOTHERS=>TONE<=2047;CODE<=0;HIGH<='0';ENDCASE;ENDPROCESS;END;生成TONE.SYM模塊符號(hào)以備頂層設(shè)計(jì)調(diào)用。(2)SPEAKER模塊源程序SPEAKER.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSPEAKERISPORT(CLK1:INSTD_LOGIC;TONE1:ININTEGERRANGE0TO16#7FF#;SPKS:OUTSTD_LOGIC);END;ARCHITECTUREONEOFSPEAKERISSIGNALPRECLK,FULLSPKS:STD_LOGIC;BEGINDIVIDECLK:PROCESS(CLK1)VARIABLECOUNT4:INTEGERRANGE0TO15;BEGINPRECLK<='0';IFCOUNT4>11THENPRECLK<='1';COUNT4:=0;ELSIFCLK1'EVENTANDCLK1='1'THENCOUNT4:=COUNT4+1;ENDIF;ENDPROCESS;GENSPKS:PROCESS(PRECLK,TONE1)VARIABLECOUNT11:INTEGERRANGE0TO16#7FF#;INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALP:STATE;HIGH:OUTSTD_LOGIC;PROCESS(CLK,RESET)STD_LOGIC_1164.下面分別敘述頻率計(jì)各邏輯模塊的功能與設(shè)計(jì)方法。WHEN36=>Q<=13;WHEN37=>Q<=19;WHEN38=>Q<=26;PORT(LOAD:INSTD_LOGIC;TEST_EN<=NOTTEST_EN;CARRY_OUT:OUTSTD_LOGIC);IFCOUNT2='1'THENPROCESS(SEL)ENDADDER4B;ENDCOMPONENT;ELSIFDATA(7DOWNTO0)="10011001"THENBEGINIFPRECLK'EVENTANDPRECLK='1'THENIFCOUNT11=16#7FF#THENCOUNT11:=TONE1;FULLSPKS<='1';ELSECOUNT11:=COUNT11+1;FULLSPKS<='0';ENDIF;ENDIF;ENDPROCESS;DELAYSPKS:PROCESS(FULLSPKS)VARIABLECOUNT2:STD_LOGIC;BEGINIFFULLSPKS'EVENTANDFULLSPKS='1'THENCOUNT2:=NOTCOUNT2;IFCOUNT2='1'THENSPKS<='1';ELSESPKS<='0';ENDIF;ENDIF;ENDPROCESS;END;編譯后生成SPEAKER.SYM模塊符號(hào),以備頂層設(shè)計(jì)調(diào)用。2.TOP(頂層模塊)設(shè)計(jì)上述兩項(xiàng)操作完成后,將TONE.SYM、TONE.VHD文件和SPEAKER.SYM和SPEAKER.VHD文件復(fù)制到TOP項(xiàng)目的文件夾中,即可進(jìn)行調(diào)用。TOP模塊源程序TOP.VHD如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTOPISPORT(CLK12MHZ:INSTD_LOGIC;INDEX1:INSTD_LOGIC_VECTOR(7DOWNTO0);CODE1:OUTINTEGERRANGE0TO15;HIGH1,SPKOUT:OUTSTD_LOGIC);END;SIGNALTONE2:INTEGERRANGE0TO16#7FF#;ARCHITECTUREONEOFTOPISCOMPONENTTONEPORT(INDEX:INSTD_LOGIC_VECTOR(7DOWNTO0);CODE:OUTINTEGERRANGE0TO15;HIGH:OUTSTD_LOGIC;TONE:OUTINTEGERRANGE0TO16#7FF#);ENDCOMPONENT;COMPONENTSPEAKERPORT(CLK1:INSTD_LOGIC;TONE1:ININTEGERRANGE0TO16#7FF#;SPKS:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTONE2:INTEGERRANGE0TO16#7FF#;BEGINU1:TONEPORTMAP(INDEX=>INDEX1,TONE=>TONE2,CODE=>CODE1,HIGH=>HIGH1);U2:SPEAKERPORTMAP(CLK1=>CLK12MHZ,TONE1=>TONE2,SPKS=>SPKOUT);END;5.5.3編譯/仿真1.編譯過程跟前述例子類似,不再贅述。2.仿真結(jié)果本例從功能和時(shí)序仿真圖上來判斷設(shè)計(jì)是否成功不太直觀。最好的辦法是完成下載驗(yàn)證后通過實(shí)際電路驗(yàn)證一下,這里不再給出仿真結(jié)果。5.5.4下載驗(yàn)證1.管腳鎖定按照表格5.5所示對(duì)應(yīng)關(guān)系鎖定引腳。2.下載驗(yàn)證選擇實(shí)驗(yàn)箱NO.3配置方案,按照前面所述的方法進(jìn)行程序配置,然后可由讀者自己找一段音樂簡(jiǎn)譜進(jìn)行演奏,應(yīng)該是可以實(shí)現(xiàn)預(yù)期功能的。表5.5硬件電子琴引腳鎖定對(duì)照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳INDEX105INDEX1611CODE027INDEX116INDEX1716CODE128INDEX127CLK12MHZ1CODE229INDEX138CODE330INDEX149HIGH117INDEX1510SPKOUT35.6交通燈控制器設(shè)計(jì)5.6.1設(shè)計(jì)原理1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)十字路口的交通燈控制系統(tǒng),用實(shí)驗(yàn)平臺(tái)上的LED發(fā)光二極管顯示車輛通過的方向(東西和南北各一組),用數(shù)碼管顯示該方向的剩余時(shí)間。2.方案構(gòu)思(1)該交通燈控制器應(yīng)具備的功能設(shè)東西和南北方向的車流量大致相同,因此紅、黃、綠燈的時(shí)長(zhǎng)也相同,定為紅燈45sec,黃燈5sec,綠燈40sec,同時(shí)用數(shù)碼管指示當(dāng)前狀態(tài)(紅、黃、綠)剩余時(shí)間。另外,設(shè)計(jì)一個(gè)緊急狀態(tài),當(dāng)緊急狀態(tài)出現(xiàn)時(shí),兩個(gè)方向都禁止通行,指示紅燈。緊急狀態(tài)解除后,重新計(jì)數(shù)并指示時(shí)間。(2)實(shí)現(xiàn)方案交通燈控制器是狀態(tài)機(jī)的一個(gè)典型應(yīng)用,除了計(jì)數(shù)器是狀態(tài)機(jī)外,還有東西、南北方向的不同狀態(tài)組合(紅綠、紅黃、綠紅、黃紅4個(gè)狀態(tài)),如表5.6所示。

我們可以簡(jiǎn)單的將其看成兩個(gè)(東西、南北)減1計(jì)數(shù)器,通過檢測(cè)兩個(gè)方向的計(jì)數(shù)值,可以檢測(cè)紅、黃、綠燈組合的跳變。這樣使一個(gè)較復(fù)雜的狀態(tài)機(jī)設(shè)計(jì)變成一個(gè)較簡(jiǎn)單的計(jì)數(shù)器設(shè)計(jì)。本例假設(shè)東西方向和南北方向的黃燈時(shí)間均為5sec,在設(shè)計(jì)交通燈控制器時(shí),可在簡(jiǎn)單計(jì)數(shù)器的基礎(chǔ)上增加一些狀態(tài)檢測(cè),即可通過檢測(cè)兩個(gè)方向的計(jì)數(shù)值判斷交通燈應(yīng)處于4種狀態(tài)中的哪個(gè)狀態(tài)。表5.6交通燈的4種可能亮燈狀態(tài)狀態(tài)東西方向南北方向紅黃綠紅黃綠11000012100010300110040101000本交通燈控制器外部接口如圖5.12所示。在表5.7中列出了需檢測(cè)的狀態(tài)跳變點(diǎn),從中可以看出,有兩種情況出現(xiàn)了東西和南北方向計(jì)數(shù)值均為1的情況,因此在檢查跳變點(diǎn)時(shí)還應(yīng)同時(shí)判斷當(dāng)前是處于狀態(tài)2還是狀態(tài)4,這樣就可以決定次狀態(tài)是狀態(tài)3還是狀態(tài)1。對(duì)于緊急狀態(tài),只需設(shè)計(jì)一個(gè)異步時(shí)序電路即可解決。圖5.12交通燈控制器方框圖表5.7交通燈設(shè)計(jì)設(shè)計(jì)中的狀態(tài)跳變點(diǎn)交通燈現(xiàn)狀態(tài)計(jì)數(shù)器計(jì)數(shù)值交通燈次狀態(tài)計(jì)數(shù)器計(jì)數(shù)值東西方向計(jì)數(shù)值南北方向計(jì)數(shù)值東西方向計(jì)數(shù)值南北方向計(jì)數(shù)值1612552113404531645541114540程序中還應(yīng)防止出現(xiàn)非法狀態(tài),即程序運(yùn)行后應(yīng)判斷東西方向和南北方向的計(jì)數(shù)值是否超出范圍。此電路僅在電路啟動(dòng)運(yùn)行時(shí)有效,因?yàn)橐坏﹥蓚€(gè)方向的計(jì)數(shù)值正確后,就可能再計(jì)數(shù)到非法狀態(tài)。5.6.2程序設(shè)計(jì)該交通燈控制器的源程序TRAFFIC_CTROL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTRAFFIC_CTROLISPORT(CLK:INSTD_LOGIC;LED:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0);EAST_WEST,SOUTH_NORTH:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0));ENDTRAFFIC_CTROL;ARCHITECTUREAOFTRAFFIC_CTROLISBEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFEAST_WEST>"01000110"ORSOUTH_NORTH>"01000110"THENEAST_WEST<="01000101";SOUTH_NORTH<="01000000";LED<="10000100";ELSIFEAST_WEST="00000110"ANDSOUTH_NORTH="00000001"THENEAST_WEST<="00000101";SOUTH_NORTH<="00000101";LED<="10000010";ELSIFEAST_WEST="00000001"ANDSOUTH_NORTH="00000001"ANDLED="10000010"THENEAST_WEST<="01000000";SOUTH_NORTH<="01000101";LED<="00100001";ELSIFEAST_WEST="00000001"ANDSOUTH_NORTH="00000110"THENEAST_WEST<="00000101";SOUTH_NORTH<="00000101";LED<="01000001";ELSIFEAST_WEST="00000001"ANDSOUTH_NORTH="00000001"ANDLED="01000001"THENEAST_WEST<="01000101";SOUTH_NORTH<="01000000";LED<="10000100";ELSIFEAST_WEST(3DOWNTO0)=0THENEAST_WEST<=EAST_WEST-7;SOUTH_NORTH<=SOUTH_NORTH-1;ELSIFSOUTH_NORTH(3DOWNTO0)=0THENEAST_WEST<=EAST_WEST-1;SOUTH_NORTH<=SOUTH_NORTH-7;ELSEEAST_WEST<=EAST_WEST-1;SOUTH_NORTH<=SOUTH_NORTH-1;ENDIF;ENDIF;ENDPROCESS;ENDA;5.6.3編譯/仿真1.編譯過程與前面例子類似,不再贅述。2.仿真結(jié)果仿真結(jié)果如圖5.13所示。圖中LED[7..0]以自然二進(jìn)制表示,EAST_WEST[7..4]、EAST_WEST[3..0]、SOUTH_NORTH[7..4]、SOUTH_NORTH[3..0]為十進(jìn)制表示。圖5.13交通燈控制器功能與時(shí)序仿真結(jié)果5.6.4下載驗(yàn)證1.鎖定管腳按照表格5.8所示對(duì)應(yīng)關(guān)系鎖定管腳。2.下載驗(yàn)證用實(shí)驗(yàn)箱上NO.9方案,按照前面幾例中所述方法完成程序配置后,可以觀察數(shù)碼管的計(jì)數(shù)情況,判斷其功能是否正常。注意:CLOCK0應(yīng)置于1Hz位置。表5.8交通燈控制器引腳鎖定對(duì)照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳CLK2EAST_WEST753SOUTH_NORTH738LED765EAST_WEST652SOUTH_NORTH637LED664EAST_WEST551SOUTH_NORTH536LED562EAST_WEST450SOUTH_NORTH435LED461EAST_WEST349SOUTH_NORTH330LED360EAST_WEST248SOUTH_NORTH229LED259EAST_WEST147SOUTH_NORTH128LED158EAST_WEST039SOUTH_NORTH027LED0545.78位十進(jìn)制數(shù)字頻率計(jì)5.7.1設(shè)計(jì)原理1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)8位十進(jìn)制頻率計(jì),即測(cè)頻上限為100MHz。2.方案構(gòu)思該頻率計(jì)的方框圖如圖5.14所示。它由一個(gè)測(cè)頻控制信號(hào)發(fā)生器TESTCTL、8個(gè)有時(shí)鐘使能的十進(jìn)制計(jì)數(shù)器CNT10、一個(gè)32位鎖存器REG32B組成。下面分別敘述頻率計(jì)各邏輯模塊的功能與設(shè)計(jì)方法。圖5.148位十進(jìn)制數(shù)字頻率計(jì)邏輯結(jié)構(gòu)圖(1)測(cè)頻控制信號(hào)發(fā)生器設(shè)計(jì)頻率測(cè)量的基本原理是計(jì)算每秒鐘內(nèi)待測(cè)信號(hào)的脈沖個(gè)數(shù)。這就要求TESTCTL的計(jì)數(shù)使能信號(hào)TSTEN能產(chǎn)生一個(gè)1sec脈寬的周期信號(hào),并對(duì)頻率計(jì)的每一計(jì)數(shù)器CNT10的ENA使能端進(jìn)行同步控制。當(dāng)TSTEN高電平時(shí),允許計(jì)數(shù);低電平時(shí),停止計(jì)數(shù),并保持其所計(jì)的數(shù)。在停止計(jì)數(shù)期間,首先需要一個(gè)鎖存信號(hào)LOAD的上升沿將計(jì)數(shù)器在前1sec鐘的計(jì)數(shù)值鎖存進(jìn)32位鎖存器REG32B中,并由外部的7段譯碼器譯出并穩(wěn)定顯示。鎖存信號(hào)之后,必須有一個(gè)清零信號(hào)CLR_CNT對(duì)計(jì)數(shù)器進(jìn)行清零,為下一秒鐘的計(jì)數(shù)操作作準(zhǔn)備。測(cè)頻控制信號(hào)發(fā)生器的工作時(shí)序如圖5.15所示。為了產(chǎn)生這個(gè)時(shí)序圖,需首先建立一個(gè)由D觸發(fā)器構(gòu)成的二分頻器,在每次時(shí)鐘CLK上升沿到來時(shí)其值翻轉(zhuǎn)。其中控制信號(hào)時(shí)鐘CLK的頻率取1Hz,而信號(hào)TSTEN的脈寬恰好為1sec,可以用作閘門信號(hào)。此時(shí),根據(jù)測(cè)頻的時(shí)序要求,可得出信號(hào)LOAD和CLR_CNT的邏輯描述。由圖5.15可知,在計(jì)數(shù)完成后,即計(jì)數(shù)使能信號(hào)TSTEN在1sec的高電平后,利用其反相值的上跳沿產(chǎn)生一個(gè)鎖存信號(hào)LOAD,0.5sec后CLR_CNT產(chǎn)生一個(gè)清零信號(hào)上跳沿。高質(zhì)量的測(cè)頻控制信號(hào)發(fā)生器的設(shè)計(jì)十分重要,設(shè)計(jì)中要對(duì)其進(jìn)行仔細(xì)的實(shí)時(shí)仿真,以防止可能產(chǎn)生的毛刺。(2)寄存器REG32B設(shè)計(jì)設(shè)置鎖存器的好處是,顯示的數(shù)據(jù)穩(wěn)定,不會(huì)由于周期性的清零信號(hào)而不斷閃爍。若已有32位BCD碼存在于此模塊的輸入口,在信號(hào)LOAD的上升沿后即被鎖存到寄存器REG32B的內(nèi)部,并由REG32B的輸出端輸出,然后由實(shí)驗(yàn)板商的7段譯碼器譯成能在數(shù)碼管商顯示輸出的相對(duì)應(yīng)數(shù)值。(3)十進(jìn)制計(jì)數(shù)器CNT10的設(shè)計(jì)如圖5.14所示,此十進(jìn)制計(jì)數(shù)器的特殊之處是,有一時(shí)鐘使能輸入端ENA,用于鎖定計(jì)數(shù)值。當(dāng)高電平時(shí)計(jì)數(shù)允許,低電平時(shí)禁止計(jì)數(shù)。圖5.15測(cè)頻控制信號(hào)發(fā)生器工作時(shí)序5.7.2程序設(shè)計(jì)1.子模塊設(shè)計(jì)(1)帶使能端的十進(jìn)制計(jì)數(shù)器源程序CNT10.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYCNT10ISPORT(CLK:INSTD_LOGIC;CLR:INSTD_LOGIC;ENA:INSTD_LOGIC;CQ:OUTINTEGERRANGE0TO15;CARRY_OUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREARTOFCNT10ISSIGNALCQI:INTEGERRANGE0TO15;BEGINPROCESS(CLK,CLR,ENA)BEGINIFCLR='1'THENCQI<=0;ELSIFCLK'EVENTANDCLK='1'THENIFENA='1'THENIFCQI<9THENCQI<=CQI+1;ELSECQI<=0;ENDIF;ENDIF;ENDIF;ENDPROCESS;PROCESS(CQI)BEGINIFCQI=9THENCARRY_OUT<='1';ELSECARRY_OUT<='0';ENDIF;ENDPROCESS;CQ<=CQI;ENDART;(2)32位鎖存器源程序REG32B.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYREG32BISPORT(LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(31DOWNTO0);DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDREG32B;ARCHITECTUREARTOFREG32BISBEGINPROCESS(LOAD,DIN)BEGINIFLOAD'EVENTANDLOAD='1'THENDOUT<=DIN;ENDIF;ENDPROCESS;ENDART;(3)測(cè)頻控制信號(hào)發(fā)生器源程序TESTCTL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTESTCTLISPORT(CLK:INSTD_LOGIC;TSTEN:OUTSTD_LOGIC;CLR_CNT:OUTSTD_LOGIC;LOAD:OUTSTD_LOGIC);ENDTESTCTL;ARCHITECTUREARTOFTESTCTLISSIGNALDVI2CLK:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENDVI2CLK<=NOTDVI2CLK;ENDIF;ENDPROCESS;PROCESS(CLK,DVI2CLK)BEGINIFCLK='0'ANDDVI2CLK='0'THENCLR_CNT<='1';ELSECLR_CNT<='0';ENDIF;ENDPROCESS;LOAD<=NOTDVI2CLK;TSTEN<=DVI2CLK;ENDART;2.頂層模塊設(shè)計(jì)系統(tǒng)整體源程序FREQ.VHD:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYFREQISPORT(FSIN:INSTD_LOGIC;CLK:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDFREQ;ARCHITECTUREARTOFFREQISCOMPONENTCNT10PORT(CLK,CLR,ENA:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);CARRY_OUT:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTREG32BPORT(LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(31DOWNTO0);DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDCOMPONENT;COMPONENTTESTCTLPORT(CLK:INSTD_LOGIC;TSTEN:OUTSTD_LOGIC;CLR_CNT:OUTSTD_LOGIC;LOAD:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALTSTEN:STD_LOGIC;SIGNALCLR_CNT:STD_LOGIC;SIGNALLOAD:STD_LOGIC;SIGNALCARRY1:STD_LOGIC;SIGNALCARRY2:STD_LOGIC;SIGNALCARRY3:STD_LOGIC;SIGNALCARRY4:STD_LOGIC;SIGNALCARRY5:STD_LOGIC;SIGNALCARRY6:STD_LOGIC;SIGNALCARRY7:STD_LOGIC;SIGNALCARRY8:STD_LOGIC;SIGNALDIN:STD_LOGIC_VECTOR(31DOWNTO0);BEGINU0:TESTCTLPORTMAP(CLK=>CLK,TSTEN=>TSTEN,CLR_CNT=>CLR_CNT,LOAD=>LOAD);U1:CNT10PORTMAP(CLK=>FSIN,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(3DOWNTO0),CARRY_OUT=>CARRY1);U2:CNT10PORTMAP(CLK=>CARRY1,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(7DOWNTO4),CARRY_OUT=>CARRY2);U3:CNT10PORTMAP(CLK=>CARRY2,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(11DOWNTO8),CARRY_OUT=>CARRY3);U4:CNT10PORTMAP(CLK=>CARRY3,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(15DOWNTO12),CARRY_OUT=>CARRY4);U5:CNT10PORTMAP(CLK=>CARRY4,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(19DOWNTO16),CARRY_OUT=>CARRY5);U6:CNT10PORTMAP(CLK=>CARRY5,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(23DOWNTO20),CARRY_OUT=>CARRY6);U7:CNT10PORTMAP(CLK=>CARRY6,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(27DOWNTO24),CARRY_OUT=>CARRY7);U8:CNT10PORTMAP(CLK=>CARRY7,CLR=>CLR_CNT,ENA=>TSTEN,CQ=>DIN(31DOWNTO28),CARRY_OUT=>CARRY8);U9:REG32BPORTMAP(LOAD=>LOAD,DIN=>DIN(31DOWNTO0),DOUT=>DOUT);ENDART;5.7.3編譯仿真1.編譯過程(1)新建一個(gè)FREQ文件夾,并依次在其中建立上述各子模塊,全部編譯/仿真完成后生成符號(hào)文件。(2)按照?qǐng)D5.14所示建立建立頂層設(shè)計(jì)文件,并進(jìn)行系統(tǒng)編譯和仿真。2.仿真結(jié)果系統(tǒng)仿真結(jié)果如圖5.16所示。圖5.168位數(shù)字頻率計(jì)仿真結(jié)果5.7.4下載驗(yàn)證1.引腳鎖定按照表格5.9所示對(duì)應(yīng)關(guān)系鎖定引腳。表

5.98位數(shù)字頻率計(jì)引腳鎖定對(duì)照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳CLK43DOUT3179DOUT2365DOUT1553DOUT738FSIN2DOUT3078DOUT2264DOUT1452DOUT637DOUT2973DOUT2162DOUT1351DOUT536DOUT2872DOUT2061DOUT1250DOUT435DOUT2771DOUT1960DOUT1149DOUT330DOUT2670DOUT1859DOUT1048DOUT229DOUT2567DOUT1758DOUT947DOUT128DOUT2466DOUT1654DOUT839DOUT0272.下載驗(yàn)證選擇實(shí)驗(yàn)箱NO.0方案進(jìn)行配置?;鶞?zhǔn)時(shí)鐘信號(hào)CLK由CLOCK2輸入,實(shí)驗(yàn)箱CLOCK2提供了1Hz、2Hz、4Hz、8Hz種頻率值,在這里應(yīng)該選擇1Hz,用跳線冒將其短路。被測(cè)信號(hào)從CLOCK0輸入,實(shí)驗(yàn)箱提供了14種頻率值。讀者可以自己驗(yàn)證實(shí)驗(yàn)箱面板上標(biāo)出的頻率值與頻率計(jì)測(cè)出來的頻率值是否相等,若不相等,相對(duì)誤差為多大。補(bǔ)充說明:對(duì)于頻率計(jì),其設(shè)計(jì)方案有很多,除了上述方案外,還有很多其他的方案。下面給出另一種更精巧的設(shè)計(jì)方案作為參考,讀者可以自己進(jìn)行后續(xù)操作。其VHDL源程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFREQUENCY_TESTISPORT(FSIN:INSTD_LOGIC;CLK:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDFREQUENCY_TEST;ARCHITECTUREBEHAVEOFFREQUENCY_TESTISSIGNALTEST_EN:STD_LOGIC;SIGNALCLEAR:STD_LOGIC;SIGNALDATA:STD_LOGIC_VECTOR(31DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENTEST_EN<=NOTTEST_EN;ENDIF;ENDPROCESS;CLEAR<=NOTCLKANDNOTTEST_EN;PROCESS(FSIN)BEGINIFCLEAR='1'THENDATA<="00000000000000000000000000000000";ELSIFFSIN'EVENTANDFSIN='1'THENELSIFDATA(7DOWNTO0)="10011001"THENDATA<=DATA+"01100111";ELSIFDATA(3DOWNTO0)="1001"THENDATA<=DATA+"0111";ELSEDATA<=DATA+'1';ENDIF;ENDIF;ENDPROCESS;

PROCESS(TEST_EN,DATA)BEGINIFTEST_EN'EVENTANDTEST_EN='0'THENDOUT<=DATA;ENDIF;ENDPROCESS;ENDBEHAVE;方案二的引腳鎖定關(guān)系和方案一基本相同。5.8串行數(shù)據(jù)檢測(cè)器5.8.1設(shè)計(jì)原理1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)串行數(shù)據(jù)檢測(cè)器。在連續(xù)輸入3個(gè)以上1的時(shí)候輸出為1,其他輸入情況下輸出為0。2.方案構(gòu)思設(shè)計(jì)該電路應(yīng)該用狀態(tài)機(jī),其狀態(tài)轉(zhuǎn)換電路如圖5.17所示。其方框圖如圖5.18所示。管腳說明:CP-時(shí)鐘信號(hào);X-輸入變量;Y-輸出變量。圖5.17串行數(shù)據(jù)檢測(cè)器狀態(tài)轉(zhuǎn)換圖圖5.18串行數(shù)據(jù)檢測(cè)器方框圖5.8.2程序設(shè)計(jì)該串行數(shù)據(jù)檢測(cè)器源程序H32.VHD:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYH32ISPORT(X,CP:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDH32;ARCHITECTUREWOFH32ISTYPESTATEIS(S0,S1,S2,S3);SIGNALP:STATE;SIGNALN:STATE;BEGIN

S:PROCESS(CP)BEGINIFCP'EVENTANDCP='1'THENP<=N;ENDIF;ENDPROCESSS;C:PROCESS(X,P)BEGINCASEPISWHENS0=>IFX='1'THENN<=S1;ELSEN<=S0;ENDIF;Y<='0';WHENS1=>IFX='1'THENN<=S2;ELSEN<=S0;ENDIF;Y<='0';WHENS2=>IFX='1'THENN<=S3;Y<='0';ELSEN<=S0;Y<='0';ENDIF;

WHENS3=>IFX='1'THENN<=S3;Y<='1';ELSEN<=S0;Y<='0';ENDIF;WHENOTHERS=>NULL;ENDCASE;ENDPROCESSC;ENDW;5.8.3編譯/仿真1.編譯過程該例較簡(jiǎn)單,編譯過程略。2.仿真結(jié)果仿真結(jié)果如圖5.19所示。5.8.4下載/驗(yàn)證本例較為簡(jiǎn)單,下載/驗(yàn)證過程略,讀者可以自己進(jìn)行有關(guān)操作。圖5.19串行數(shù)據(jù)檢測(cè)器功能與時(shí)序仿真結(jié)果5.9智能函數(shù)信號(hào)發(fā)生器5.9.1設(shè)計(jì)原理1.設(shè)計(jì)任務(wù)設(shè)計(jì)一個(gè)能夠產(chǎn)生遞增斜波、遞減斜波、三角波、階梯波、正弦波、方波等多種波形,并可通過開關(guān)選擇輸出波形的多功能函數(shù)信號(hào)發(fā)生器。2.方案構(gòu)思系統(tǒng)總體構(gòu)思如圖5.20所示,輸出端Q[7..0]后面接D/A轉(zhuǎn)換器的數(shù)據(jù)輸入端。圖5.20智能函數(shù)信號(hào)發(fā)生器總體框圖5.9.2程序設(shè)計(jì)1.子模塊設(shè)計(jì)(1)遞增斜波產(chǎn)生模塊源程序ZENG.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYZENGISPORT(CLK,RESET:INSTD_LOGIC;Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDZENG;ARCHITECTUREBEHAVEOFZENGISBEGINPROCESS(CLK,RESET)VARIABLETMP:STD_LOGIC_VECTOR(7DOWNTO0);BEGINIFRESET='0'THENTMP:="00000000";ELSIFCLK'EVENTANDCLK='1'THENIFTMP="11111111"THENTMP:="00000000";ELSETMP:=TMP+1;COMPONENTTESTCTLIFCOUNT2='1'THEN這就要求TESTCTL的計(jì)數(shù)使能信號(hào)TSTEN能產(chǎn)生一個(gè)1sec脈寬的周期信號(hào),并對(duì)頻率計(jì)的每一計(jì)數(shù)器CNT10的ENA使能端進(jìn)行同步控制。STD_LOGIC_1164.LOAD:OUTSTD_LOGIC);PORT(LOAD,CLK:INSTD_LOGIC;關(guān)于分頻器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論