




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
EDA技術(shù)基礎(chǔ)第5章電路設(shè)計實踐5.18位加法器5.1.1設(shè)計原理1.設(shè)計任務(wù)設(shè)計一個可以對兩個8位二進制數(shù)進行加法運算的加法器。2.方案構(gòu)思多位加法器按其進位方式的不同可以分為兩類:串行進位加法器和并行進位加法器。串行進位加法器是將多個1位全加器級聯(lián),低位全加器的進位輸出送給相鄰高位全加器作為進位輸入,以此構(gòu)成多位加法器。這種設(shè)計思路簡單明了且占用資源較少,但運算速度較慢。并行進位方式則是在各位的加法環(huán)節(jié)之外,另外設(shè)有進位產(chǎn)生邏輯電路,各位的進位輸入信號同時產(chǎn)生,從而各位可以同時完成全加運算,輸出最后結(jié)果。并行進位方式具有較快的運算速度,但是相對于串行進位方式來說,卻往往占用更多的資源。尤其是當(dāng)運算位數(shù)增加的時候,相同位數(shù)的并行進位和串行進位加法器的資源占用差距也越來越大。因此,常常需要設(shè)計者在運算速度和資源占用量之間做出折中和平衡。實踐證明,4位二進制并行進位加法器和串行級聯(lián)加法器占用的資源幾乎相同。因此,可以用兩個4位二進制并行加法器級聯(lián)以構(gòu)成8位二進制加法器,這是一種較為合理的選擇,其結(jié)構(gòu)組成如圖5.1所示。圖5.18位加法器電路原理圖5.1.2程序設(shè)計1.子模塊設(shè)計4位二進制并行進位加法器源程序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è)計8位二進制加法器源程序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è)計可以用VHDL程序輸入法,也可以用圖5-1所示的原理圖輸入法。5.1.3編譯/仿真1.編譯過程(1)建立頂層設(shè)計文件夾ADDER8B在硬盤適當(dāng)位置建立ADDER8B文件夾(本書中將該文件夾建立在G:\BEIDA_EDA)中。注意:該文件夾的路徑中不能包含漢字。路徑中的所有目錄和子目錄的名稱都必須符合VHDL語言的語法規(guī)則。后面例子中的相關(guān)步驟都與此類似。(2)ADDER4B.VHD子模塊設(shè)計新建一個.VHD格式文件,輸入ADDER4B.VHD源程序后保存在頂層設(shè)計文件夾中,并進行語法查錯、編譯、功能和時序仿真等相關(guān)操作,同時生成符號文件(即.SYM文件)。(3)頂層文件設(shè)計新建一個ADDER8B.VHD文件,輸入源程序后進行保存、查錯、編譯、功能和時序仿真等相關(guān)操作。或者采用原理圖輸入法,新建一個ADDER8B.GDF文件,按照圖5-1所示原理圖進行設(shè)計,兩者結(jié)果一致。后面各例中的模塊化設(shè)計方法與此例類似。2.仿真結(jié)果該8位并行進位加法器的仿真結(jié)果如圖5.2所示,A、B、S都以十進制形式顯示。圖5.28位加法器仿真結(jié)果5.1.4下載驗證1.引腳鎖定按照表格5.1所示對應(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;進位輸入信號由鍵7輸入;進位輸出標(biāo)志由二極管D1顯示。2.下載驗證選擇實驗箱NO.1配置模式,執(zhí)行主菜單MAX+PLUSII|PROGRAMMER,然后點擊CONFIGURE開始對芯片進行配置。配置完成后讀者可以自行設(shè)置被加數(shù)和加數(shù)以及進位輸入,同時觀察相加后的和以及進位輸出信號,可以發(fā)現(xiàn),該設(shè)計是正確的。(本書所有例子均基于杭州康芯GW48-CK實驗箱)表5.18位加法器引腳鎖定對照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳A725A321B716B38S738S330A624A219B611B27S637S229A523A118B510B16S536S128A422A017B49B05S435S027CIN80COUT545.28×8乘法器5.2.1設(shè)計原理1.設(shè)計任務(wù)設(shè)計一個可以對兩個8位二進制數(shù)進行乘法運算的電路,結(jié)果以16位二進制數(shù)的形式輸出。2.方案構(gòu)思(1)原理分析兩個8位二進制數(shù)相乘,其積最大值為255×255=65025,而一個16位二進制數(shù)能表示的最大數(shù)值是65535。因此可知,該乘法器只需有16位二進制輸出即可,不會再產(chǎn)生第17位的進位輸出。在數(shù)字電路設(shè)計中,乘法運算一般是采用逐項移位相加的原理來實現(xiàn)的。從乘數(shù)最低位開始:若為1,則將被乘數(shù)右端與乘數(shù)右端對齊寫在下面;若為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ù)以上分析進行構(gòu)思,可得該乘法器的邏輯結(jié)構(gòu)圖,如圖5.3所示。圖5.38位乘法器邏輯結(jié)構(gòu)圖乘數(shù)加載于8位右移寄存器的輸入端,被乘數(shù)加載于16位左移寄存器的輸入端。各引腳功能及系統(tǒng)工作原理說明如下。①ENABLEENABLE是一個使能端。它有兩個功能:當(dāng)為高電平時,16位鎖存器LATCH16清零,同時乘數(shù)和被乘數(shù)向移位寄存器加載,并封鎖CCLK不輸出脈沖;當(dāng)它為低電平時,CCLK輸出脈沖信號,可以進行乘法運算。②CLKCLK為計數(shù)脈沖,每來一個脈沖,乘數(shù)的某一位就和被乘數(shù)的各位完成一次二進制乘法運算,并將結(jié)果送到16位鎖存器里面。隨著每一時鐘節(jié)拍,加載于8位右移寄存器的乘數(shù)由低位向高位逐位移出,當(dāng)該位為1時,與門打開,被乘數(shù)在同一時鐘節(jié)拍左移后進入16位加法器,與上一次鎖存在“LATCH16”中的和進行相加,其和在下一時鐘上升沿被鎖存進16位鎖存器“LATCH16”。而當(dāng)被乘數(shù)的移出位為0時,與門輸出全零輸出。如此往復(fù),直至9個時鐘脈沖過后,8位右移寄存器各位已全部變成0。此時,16位鎖存器的輸出值即為最后乘積,以后即使再來脈沖,鎖存器的值也不再變化,保持在兩數(shù)乘積值。(3)A[8..1]、B[8..1]A[8..1]、B[8..1]端子為兩個乘數(shù)的輸入端。因為是進行乘法操作,而不是除法操作,所以無所謂被乘數(shù)與乘數(shù)輸入端,最后所得結(jié)果都是兩數(shù)的乘積。(4)P[16..1]P[16..1]為乘積輸出端。此乘法器的優(yōu)點時節(jié)省芯片資源,它的核心元件只是一個16位加法器,其運算速度取決于輸入的時鐘頻率。若時鐘頻率為100MHZ,則每一運算周期僅需80ns。而若利用具備最高時鐘,即12MHZ晶振的MCS-51單片機的乘法指令,進行8位乘法運算,僅單指令的運算周期長達(dá)4微妙。因此可以利用此乘法器,或相同原理構(gòu)成更高位數(shù)的乘法器完成一些數(shù)字信號處理方面的運算。5.2.2程序設(shè)計1.子模塊設(shè)計(1)8位右移寄存器該右移寄存器只有一個QOUT輸出端。在LOAD信號為高電平時,將乘數(shù)置入內(nèi)部寄存器,移位脈沖CLK不起作用,不進行移位。并且要求LOAD信號為高電平期間,QOUT輸出應(yīng)該為零;在LOAD信號為低電平時,不再接受新的乘數(shù)置入,此時CLK起作用,每來一個脈沖,將右邊最低位輸出,同時其余7位也依次右移一位,最左邊空出來的最高位置零。根據(jù)以上功能要求,可設(shè)計其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個輸出端。在LOAD信號為高電平時,將被乘數(shù)置入內(nèi)部寄存器,并將CLK移位脈沖屏蔽,不進行移位操作。在LOAD為低電平時,CLK脈沖起作用,但來第一個脈沖時,并不進行移位操作,只將被乘數(shù)各位從輸出端Q[8..1]對應(yīng)輸出,Q[16..9]置零。從第二個脈沖開始,每來一個脈沖,乘數(shù)都向左移動一位,并將空出的低位置零。根據(jù)以上要求,可設(shè)計其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)乘法運算控制器模塊源程序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è)計好的8位加法器中的ADDER8B.VHD文件和ADDER8B.SYM文件復(fù)制到8位乘法器文件夾,然后按照圖5.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è)計將前面所述6個模塊全部編譯仿真通過后,調(diào)用其符號文件構(gòu)建如圖5-3所示原理圖,即為頂層模塊設(shè)計方案,然后進行總體編譯和仿真。5.2.3編譯/仿真1.編譯過程新建一個MULTI8X8文件夾,并依次在其中建立、編譯和仿真上述所有子模塊,生成相應(yīng)的符號文件,然后按照圖5.3所示構(gòu)建頂層設(shè)計,并進行系統(tǒng)整體仿真和編譯。2.仿真結(jié)果該乘法器仿真結(jié)果如圖5.5、5.6所示。圖5.5所示為兩個乘數(shù)為最大值FFH(即十進制數(shù)255)的情況。圖5.58×8乘法器仿真實例一圖9-6所示為一般乘法運算的情況。圖5.68×8乘法器仿真實例二5.2.4下載驗證1.管腳鎖定按照表格5.2所示對應(yīng)關(guān)系鎖定引腳。表5.28×8乘法器引腳鎖定對照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳A825B816P1653P838A724B711P1552P737A623B610P1451P636A522B59P1350P535A421B48P1249P430A319B37P1148P329A218B26P1047P228A117B15P939P127ENABLE81CLK2
2.下載驗證選擇實驗箱NO.1配置方案,下載完成后將CLOCK0上面的跳線冒置于不同的短路位置,即可實現(xiàn)以不同的速度進行乘法運算。當(dāng)然對于此例,如果不需要考慮資源占用率的話,可以直接考慮用VHDL語言提供的乘法指令來實現(xiàn),將會使整個設(shè)計變得非常簡單,而且所設(shè)計電路的時序性能會更加穩(wěn)定、可靠。讀者可以自己嘗試著去做一番比較,在此限于篇幅,不再對后者給出具體程序。5.3同步清零的可逆計數(shù)器5.3.1設(shè)計原理1.設(shè)計任務(wù)設(shè)計一個可預(yù)置計數(shù)初始值、可同步清零、帶計數(shù)使能端的128進制可逆計數(shù)器。2.方案構(gòu)思根據(jù)這個計數(shù)器所應(yīng)具備的功能,可以構(gòu)思出其方框圖,如圖5.7所示。圖5.7可預(yù)置\可同步清零\帶使能端\128進制\可逆計數(shù)器設(shè)計方框圖端口說明:CLK→計數(shù)脈沖輸入端;SCLR→異步清零端;CNT_EN→計數(shù)使能控制端;LOAD→預(yù)置數(shù)據(jù)控制端;UPDOWN→遞增\遞減計數(shù)控制端;DIN[7..0]→預(yù)置數(shù)據(jù)輸入端;Q[7..0]→計數(shù)結(jié)果輸出端。5.3.2程序設(shè)計該計數(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.編譯過程新建一個COUNTER128.VHD文件,輸入源程序后保存在G:\BEIDA_EDA\COUNTER128文件夾中。然后進行語法查錯、編譯和仿真等全部相關(guān)操作。2.仿真結(jié)果仿真完成后,可得功能和時序仿真結(jié)果如圖5.8所示。圖5.8128進制可逆計數(shù)器功能與時序仿真結(jié)果5.3.4下載驗證1.管腳鎖定并按照表格5.3所示對應(yīng)關(guān)系鎖定引腳。表5.3128進制可逆計數(shù)器引腳鎖定對照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳DIN725UPDOWN10Q738DIN624SCLR9Q637DIN523CNT_EN8Q536DIN422LOAD7Q435DIN321CLK43Q330DIN219Q229DIN118Q128DIN017Q0272.下載驗證選擇實驗箱NO.0配置方案進行程序下載。然后可以由讀者自行設(shè)定各輸入端狀態(tài),進行預(yù)置計數(shù)初始值、清零、計數(shù)使能等操作,觀察其實現(xiàn)128進制計數(shù)的情況。5.4可預(yù)置\可同步清零\8位
雙向循環(huán)移位寄存器設(shè)計
5.4.1設(shè)計原理1.設(shè)計任務(wù)設(shè)計一個可以預(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è)計該移位寄存器源程序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.編譯過程跟前面幾個例子類似,不再贅述。2.仿真結(jié)果移位寄存器仿真結(jié)果如圖5.10所示,為便于觀察循環(huán)移位情況,特將預(yù)置數(shù)和8位輸出以自然二進制形式表示。圖5.108位雙向循環(huán)移位寄存器功能與時序仿真結(jié)果5.4.4下載驗證1.管腳鎖定按照表格5.4所示對應(yīng)關(guān)系鎖定引腳。2.下載驗證選擇實驗箱NO.6配置方案,并按照前面例子中相同的方法進行程序配置,然后開始功能驗證:用鍵2和鍵1配合輸入初始數(shù)據(jù),用鍵6~3控制各項操作,用D8~1共8個發(fā)光二極管顯示移位操作的數(shù)據(jù)移動。5.5電子琴硬件電路設(shè)計5.5.1設(shè)計原理1.設(shè)計任務(wù)利用數(shù)控分頻器設(shè)計一個電子琴硬件電路。主系統(tǒng)由頂層模塊TOP.VHD和兩個功能子模塊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模塊是一個音階發(fā)生器,當(dāng)8位發(fā)聲控制輸入INDEX中某一位為高電平時,則對應(yīng)該音階的數(shù)值將從端口TONE輸出,作為獲得該音階的分頻預(yù)置值;同時由CODE輸出對應(yīng)該音階簡譜的顯示數(shù)碼,如‘5’,并由HIGH輸出指示音階高8度顯示,由此可知,該模塊的VHDL描述應(yīng)是類似于真值表的純組合電路描述,其中的音階分頻預(yù)置值,如TONE<=1290是根據(jù)產(chǎn)生該音階頻率所對應(yīng)的分頻比獲得的。(3)SPEAKER子模塊其主要電路是一個數(shù)控分頻器。這個數(shù)控分頻器由一個初值可預(yù)置的加法計數(shù)器構(gòu)成,詳細(xì)的設(shè)計和工作原理不再詳述。當(dāng)模塊SPEAKER由端口TONE獲得一個2進制數(shù)后,將以此值為計數(shù)器的預(yù)置數(shù),對端口CLK12MHZ輸入的頻率進行分頻,之后由SPKOUT向揚聲器輸出發(fā)聲。5.5.2程序設(shè)計1.子模塊設(shè)計(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模塊符號以備頂層設(shè)計調(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.下面分別敘述頻率計各邏輯模塊的功能與設(shè)計方法。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模塊符號,以備頂層設(shè)計調(diào)用。2.TOP(頂層模塊)設(shè)計上述兩項操作完成后,將TONE.SYM、TONE.VHD文件和SPEAKER.SYM和SPEAKER.VHD文件復(fù)制到TOP項目的文件夾中,即可進行調(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è)計是否成功不太直觀。最好的辦法是完成下載驗證后通過實際電路驗證一下,這里不再給出仿真結(jié)果。5.5.4下載驗證1.管腳鎖定按照表格5.5所示對應(yīng)關(guān)系鎖定引腳。2.下載驗證選擇實驗箱NO.3配置方案,按照前面所述的方法進行程序配置,然后可由讀者自己找一段音樂簡譜進行演奏,應(yīng)該是可以實現(xiàn)預(yù)期功能的。表5.5硬件電子琴引腳鎖定對照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳INDEX105INDEX1611CODE027INDEX116INDEX1716CODE128INDEX127CLK12MHZ1CODE229INDEX138CODE330INDEX149HIGH117INDEX1510SPKOUT35.6交通燈控制器設(shè)計5.6.1設(shè)計原理1.設(shè)計任務(wù)設(shè)計一個十字路口的交通燈控制系統(tǒng),用實驗平臺上的LED發(fā)光二極管顯示車輛通過的方向(東西和南北各一組),用數(shù)碼管顯示該方向的剩余時間。2.方案構(gòu)思(1)該交通燈控制器應(yīng)具備的功能設(shè)東西和南北方向的車流量大致相同,因此紅、黃、綠燈的時長也相同,定為紅燈45sec,黃燈5sec,綠燈40sec,同時用數(shù)碼管指示當(dāng)前狀態(tài)(紅、黃、綠)剩余時間。另外,設(shè)計一個緊急狀態(tài),當(dāng)緊急狀態(tài)出現(xiàn)時,兩個方向都禁止通行,指示紅燈。緊急狀態(tài)解除后,重新計數(shù)并指示時間。(2)實現(xiàn)方案交通燈控制器是狀態(tài)機的一個典型應(yīng)用,除了計數(shù)器是狀態(tài)機外,還有東西、南北方向的不同狀態(tài)組合(紅綠、紅黃、綠紅、黃紅4個狀態(tài)),如表5.6所示。
我們可以簡單的將其看成兩個(東西、南北)減1計數(shù)器,通過檢測兩個方向的計數(shù)值,可以檢測紅、黃、綠燈組合的跳變。這樣使一個較復(fù)雜的狀態(tài)機設(shè)計變成一個較簡單的計數(shù)器設(shè)計。本例假設(shè)東西方向和南北方向的黃燈時間均為5sec,在設(shè)計交通燈控制器時,可在簡單計數(shù)器的基礎(chǔ)上增加一些狀態(tài)檢測,即可通過檢測兩個方向的計數(shù)值判斷交通燈應(yīng)處于4種狀態(tài)中的哪個狀態(tài)。表5.6交通燈的4種可能亮燈狀態(tài)狀態(tài)東西方向南北方向紅黃綠紅黃綠11000012100010300110040101000本交通燈控制器外部接口如圖5.12所示。在表5.7中列出了需檢測的狀態(tài)跳變點,從中可以看出,有兩種情況出現(xiàn)了東西和南北方向計數(shù)值均為1的情況,因此在檢查跳變點時還應(yīng)同時判斷當(dāng)前是處于狀態(tài)2還是狀態(tài)4,這樣就可以決定次狀態(tài)是狀態(tài)3還是狀態(tài)1。對于緊急狀態(tài),只需設(shè)計一個異步時序電路即可解決。圖5.12交通燈控制器方框圖表5.7交通燈設(shè)計設(shè)計中的狀態(tài)跳變點交通燈現(xiàn)狀態(tài)計數(shù)器計數(shù)值交通燈次狀態(tài)計數(shù)器計數(shù)值東西方向計數(shù)值南北方向計數(shù)值東西方向計數(shù)值南北方向計數(shù)值1612552113404531645541114540程序中還應(yīng)防止出現(xiàn)非法狀態(tài),即程序運行后應(yīng)判斷東西方向和南北方向的計數(shù)值是否超出范圍。此電路僅在電路啟動運行時有效,因為一旦兩個方向的計數(shù)值正確后,就可能再計數(shù)到非法狀態(tài)。5.6.2程序設(shè)計該交通燈控制器的源程序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]以自然二進制表示,EAST_WEST[7..4]、EAST_WEST[3..0]、SOUTH_NORTH[7..4]、SOUTH_NORTH[3..0]為十進制表示。圖5.13交通燈控制器功能與時序仿真結(jié)果5.6.4下載驗證1.鎖定管腳按照表格5.8所示對應(yīng)關(guān)系鎖定管腳。2.下載驗證用實驗箱上NO.9方案,按照前面幾例中所述方法完成程序配置后,可以觀察數(shù)碼管的計數(shù)情況,判斷其功能是否正常。注意:CLOCK0應(yīng)置于1Hz位置。表5.8交通燈控制器引腳鎖定對照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳CLK2EAST_WEST753SOUTH_NORTH738LED765EAST_WEST652SOUTH_NORTH637LED664EAST_WEST551SOUTH_NORTH536LED562EAST_WEST450SOUTH_NORTH435LED461EAST_WEST349SOUTH_NORTH330LED360EAST_WEST248SOUTH_NORTH229LED259EAST_WEST147SOUTH_NORTH128LED158EAST_WEST039SOUTH_NORTH027LED0545.78位十進制數(shù)字頻率計5.7.1設(shè)計原理1.設(shè)計任務(wù)設(shè)計一個8位十進制頻率計,即測頻上限為100MHz。2.方案構(gòu)思該頻率計的方框圖如圖5.14所示。它由一個測頻控制信號發(fā)生器TESTCTL、8個有時鐘使能的十進制計數(shù)器CNT10、一個32位鎖存器REG32B組成。下面分別敘述頻率計各邏輯模塊的功能與設(shè)計方法。圖5.148位十進制數(shù)字頻率計邏輯結(jié)構(gòu)圖(1)測頻控制信號發(fā)生器設(shè)計頻率測量的基本原理是計算每秒鐘內(nèi)待測信號的脈沖個數(shù)。這就要求TESTCTL的計數(shù)使能信號TSTEN能產(chǎn)生一個1sec脈寬的周期信號,并對頻率計的每一計數(shù)器CNT10的ENA使能端進行同步控制。當(dāng)TSTEN高電平時,允許計數(shù);低電平時,停止計數(shù),并保持其所計的數(shù)。在停止計數(shù)期間,首先需要一個鎖存信號LOAD的上升沿將計數(shù)器在前1sec鐘的計數(shù)值鎖存進32位鎖存器REG32B中,并由外部的7段譯碼器譯出并穩(wěn)定顯示。鎖存信號之后,必須有一個清零信號CLR_CNT對計數(shù)器進行清零,為下一秒鐘的計數(shù)操作作準(zhǔn)備。測頻控制信號發(fā)生器的工作時序如圖5.15所示。為了產(chǎn)生這個時序圖,需首先建立一個由D觸發(fā)器構(gòu)成的二分頻器,在每次時鐘CLK上升沿到來時其值翻轉(zhuǎn)。其中控制信號時鐘CLK的頻率取1Hz,而信號TSTEN的脈寬恰好為1sec,可以用作閘門信號。此時,根據(jù)測頻的時序要求,可得出信號LOAD和CLR_CNT的邏輯描述。由圖5.15可知,在計數(shù)完成后,即計數(shù)使能信號TSTEN在1sec的高電平后,利用其反相值的上跳沿產(chǎn)生一個鎖存信號LOAD,0.5sec后CLR_CNT產(chǎn)生一個清零信號上跳沿。高質(zhì)量的測頻控制信號發(fā)生器的設(shè)計十分重要,設(shè)計中要對其進行仔細(xì)的實時仿真,以防止可能產(chǎn)生的毛刺。(2)寄存器REG32B設(shè)計設(shè)置鎖存器的好處是,顯示的數(shù)據(jù)穩(wěn)定,不會由于周期性的清零信號而不斷閃爍。若已有32位BCD碼存在于此模塊的輸入口,在信號LOAD的上升沿后即被鎖存到寄存器REG32B的內(nèi)部,并由REG32B的輸出端輸出,然后由實驗板商的7段譯碼器譯成能在數(shù)碼管商顯示輸出的相對應(yīng)數(shù)值。(3)十進制計數(shù)器CNT10的設(shè)計如圖5.14所示,此十進制計數(shù)器的特殊之處是,有一時鐘使能輸入端ENA,用于鎖定計數(shù)值。當(dāng)高電平時計數(shù)允許,低電平時禁止計數(shù)。圖5.15測頻控制信號發(fā)生器工作時序5.7.2程序設(shè)計1.子模塊設(shè)計(1)帶使能端的十進制計數(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)測頻控制信號發(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è)計系統(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)新建一個FREQ文件夾,并依次在其中建立上述各子模塊,全部編譯/仿真完成后生成符號文件。(2)按照圖5.14所示建立建立頂層設(shè)計文件,并進行系統(tǒng)編譯和仿真。2.仿真結(jié)果系統(tǒng)仿真結(jié)果如圖5.16所示。圖5.168位數(shù)字頻率計仿真結(jié)果5.7.4下載驗證1.引腳鎖定按照表格5.9所示對應(yīng)關(guān)系鎖定引腳。表
5.98位數(shù)字頻率計引腳鎖定對照表輸入端子輸出端子端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳端子名稱鎖定引腳CLK43DOUT3179DOUT2365DOUT1553DOUT738FSIN2DOUT3078DOUT2264DOUT1452DOUT637DOUT2973DOUT2162DOUT1351DOUT536DOUT2872DOUT2061DOUT1250DOUT435DOUT2771DOUT1960DOUT1149DOUT330DOUT2670DOUT1859DOUT1048DOUT229DOUT2567DOUT1758DOUT947DOUT128DOUT2466DOUT1654DOUT839DOUT0272.下載驗證選擇實驗箱NO.0方案進行配置。基準(zhǔn)時鐘信號CLK由CLOCK2輸入,實驗箱CLOCK2提供了1Hz、2Hz、4Hz、8Hz種頻率值,在這里應(yīng)該選擇1Hz,用跳線冒將其短路。被測信號從CLOCK0輸入,實驗箱提供了14種頻率值。讀者可以自己驗證實驗箱面板上標(biāo)出的頻率值與頻率計測出來的頻率值是否相等,若不相等,相對誤差為多大。補充說明:對于頻率計,其設(shè)計方案有很多,除了上述方案外,還有很多其他的方案。下面給出另一種更精巧的設(shè)計方案作為參考,讀者可以自己進行后續(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ù)檢測器5.8.1設(shè)計原理1.設(shè)計任務(wù)設(shè)計一個串行數(shù)據(jù)檢測器。在連續(xù)輸入3個以上1的時候輸出為1,其他輸入情況下輸出為0。2.方案構(gòu)思設(shè)計該電路應(yīng)該用狀態(tài)機,其狀態(tài)轉(zhuǎn)換電路如圖5.17所示。其方框圖如圖5.18所示。管腳說明:CP-時鐘信號;X-輸入變量;Y-輸出變量。圖5.17串行數(shù)據(jù)檢測器狀態(tài)轉(zhuǎn)換圖圖5.18串行數(shù)據(jù)檢測器方框圖5.8.2程序設(shè)計該串行數(shù)據(jù)檢測器源程序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.編譯過程該例較簡單,編譯過程略。2.仿真結(jié)果仿真結(jié)果如圖5.19所示。5.8.4下載/驗證本例較為簡單,下載/驗證過程略,讀者可以自己進行有關(guān)操作。圖5.19串行數(shù)據(jù)檢測器功能與時序仿真結(jié)果5.9智能函數(shù)信號發(fā)生器5.9.1設(shè)計原理1.設(shè)計任務(wù)設(shè)計一個能夠產(chǎn)生遞增斜波、遞減斜波、三角波、階梯波、正弦波、方波等多種波形,并可通過開關(guān)選擇輸出波形的多功能函數(shù)信號發(fā)生器。2.方案構(gòu)思系統(tǒng)總體構(gòu)思如圖5.20所示,輸出端Q[7..0]后面接D/A轉(zhuǎn)換器的數(shù)據(jù)輸入端。圖5.20智能函數(shù)信號發(fā)生器總體框圖5.9.2程序設(shè)計1.子模塊設(shè)計(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的計數(shù)使能信號TSTEN能產(chǎn)生一個1sec脈寬的周期信號,并對頻率計的每一計數(shù)器CNT10的ENA使能端進行同步控制。STD_LOGIC_1164.LOAD:OUTSTD_LOGIC);PORT(LOAD,CLK:INSTD_LOGIC;關(guān)于分頻器
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)智能化與人力資源的變革
- 工業(yè)安全與智能制造的關(guān)系
- 工業(yè)污染源監(jiān)測的新技術(shù)動態(tài)
- 工業(yè)物聯(lián)網(wǎng)在生產(chǎn)車間的應(yīng)用實踐
- 工業(yè)自動化中機器視覺算法優(yōu)化探討
- 工業(yè)能源管理與節(jié)能減排技術(shù)應(yīng)用
- 工業(yè)綠色化與節(jié)能減排技術(shù)
- 工業(yè)級智能硬件產(chǎn)品的設(shè)計要求與標(biāo)準(zhǔn)
- 工業(yè)火災(zāi)防控策略與方法
- 工業(yè)設(shè)計在制造業(yè)的未來應(yīng)用
- 2025年全國普通高校招生全國統(tǒng)一考試數(shù)學(xué)試卷(新高考Ⅰ卷)含答案
- T/CSPSTC 75-2021微動探測技術(shù)規(guī)程
- 【KAWO科握】2025年中國社交媒體平臺指南報告
- 大部分分校:地域文化形考任務(wù)一-國開(CQ)-國開期末復(fù)習(xí)資料
- 《藥物設(shè)計學(xué)》課程教學(xué)大綱
- DB5301∕T 43-2020 城鎮(zhèn)污水處理廠主要水污染物排放限值
- 炮車專項方案
- 解讀三級公立醫(yī)院績效考核課件
- 華能集團全員績效考核指導(dǎo)意見
- 高三地理復(fù)習(xí)資料_《極地地區(qū)》導(dǎo)學(xué)案
- CJJ101-2004埋地聚乙烯給水管道工程技術(shù)規(guī)程
評論
0/150
提交評論