EDA技術(shù)及應(yīng)用-VHDL版(第三版)(潭會生)第6章_第1頁
EDA技術(shù)及應(yīng)用-VHDL版(第三版)(潭會生)第6章_第2頁
EDA技術(shù)及應(yīng)用-VHDL版(第三版)(潭會生)第6章_第3頁
EDA技術(shù)及應(yīng)用-VHDL版(第三版)(潭會生)第6章_第4頁
EDA技術(shù)及應(yīng)用-VHDL版(第三版)(潭會生)第6章_第5頁
已閱讀5頁,還剩257頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章VHDL設(shè)計(jì)應(yīng)用實(shí)例6.18位加法器的設(shè)計(jì)6.28位乘法器的設(shè)計(jì)6.38位除法器的設(shè)計(jì)

6.4PWM信號發(fā)生器的設(shè)計(jì)

6.5數(shù)字頻率計(jì)的設(shè)計(jì)

6.6數(shù)字秒表的設(shè)計(jì)6.7單片機(jī)總線接口電路的設(shè)計(jì)6.8交通燈信號控制器的設(shè)計(jì)6.9高速PID控制器的設(shè)計(jì)6.10FIR濾波器的設(shè)計(jì)6.11CORDIC算法的應(yīng)用設(shè)計(jì)6.12鬧鐘系統(tǒng)的設(shè)計(jì)

6.18位加法器的設(shè)計(jì)

1.設(shè)計(jì)思路加法器是數(shù)字系統(tǒng)中的基本邏輯器件,減法器和硬件乘法器都可由加法器來構(gòu)成。多位加法器的構(gòu)成有兩種方式:并行進(jìn)位和串行進(jìn)位方式。并行進(jìn)位加法器設(shè)有進(jìn)位產(chǎn)生邏輯,運(yùn)算速度較快;串行進(jìn)位方式是將全加器級聯(lián)構(gòu)成多位加法器。并行進(jìn)位加法器通常比串行級聯(lián)加法器占用更多的資源。隨著位數(shù)的增加,相同位數(shù)的并行加法器與串行加法器的資源占用差距也越來越大。因此,在工程中使用加法器時(shí),要在速度和容量之間尋找平衡點(diǎn)。實(shí)踐證明,4位二進(jìn)制并行加法器和串行級聯(lián)加法器占用幾乎相同的資源。這樣,多位加法器由4位二進(jìn)制并行加法器級聯(lián)構(gòu)成是較好的折中選擇。本設(shè)計(jì)中的8位二進(jìn)制并行加法器即是由兩個(gè)4位二進(jìn)制并行加法器級聯(lián)而成的,其電路原理圖如圖6.1所示。圖6.18位加法器電路原理圖2.VHDL源程序1)4位二進(jìn)制并行加法器的源程序ADDER4B.VHD--ADDER4B.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYADDER4BIS --4位二進(jìn)制并行加法器

PORT(C4:INSTD_LOGIC; --低位來的進(jìn)位

A4:INSTD_LOGIC_VECTOR(3DOWNTO0); --4位加數(shù)

B4:INSTD_LOGIC_VECTOR(3DOWNTO0); --4位被加數(shù)

S4:OUTSTD_LOGIC_VECTOR(3DOWNTO0); --4位和

CO4:OUTSTD_LOGIC); --進(jìn)位輸出ENDENTITYADDER4B;ARCHITECTUREARTOFADDER4BISSIGNALS5:STD_LOGIC_VECTOR(4DOWNTO0);SIGNALA5,B5:STD_LOGIC_VECTOR(4DOWNTO0);BEGINA5<=‘0’&A4;

--將4位加數(shù)矢量擴(kuò)為5位,為進(jìn)位提供空間

B5<=‘0’&B4;

--將4位被加數(shù)矢量擴(kuò)為5位,為進(jìn)位提供空間

S5<=A5+B5+C4;S4<=S5(3DOWNTO0);CO4<=S5(4);ENDARCHITECTUREART;

2)8位二進(jìn)制加法器的源程序ADDER8B.VHD--ADDER8B.VHDLIBRARYIEEE;USEIEEE_STD.LOGIC_1164.ALL;USEIEEE_STD.LOGIC_UNSIGNED.ALL:ENTITYADDER8BIS--由4位二進(jìn)制并行加法器級聯(lián)而成的8位二進(jìn)制加法器

PORT(CIN:INSTD_LOGIC;

A8:INSTD_LOGIC_VECTOR(7DOWNTO0);

B8:INSTD_LOGIC_VECTOR(7DOWNTO0);

S8:OUTSTD_LOGIC_VECTOR(7DOWNTO0);

CO8:OUTSTD_LOGIC);ENDADDER8B;ARCHICTUREARTOFADDER8BIS

COMPONENETADDER4B--對要調(diào)用的元件ADDER4B的界面端口進(jìn)行定義

PORT(CIN:INSTD_LOGIC;

A4:INSTD_LOGIC_VECTOR(3DOWNTO0);

B4:INSTD_LOGIC_VECTOR(3DOWNTO0);

S4:OUTSTD_LOGIC_VECTOR(3DOWNTO0);

CO4:OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALSC:STD_LOGIC; --4位加法器的進(jìn)位標(biāo)志

BEGINU1:ADDER4B--例化(安裝)一個(gè)4位二進(jìn)制加法器U1

PORTMAP(C4=>C8,A4=>A8(3DOWNTO0),B4=>B8(3DOWNTO0),S4=>S8(3DOWNTO0),CO4=>SC);U2:ADDER4B --例化(安裝)一個(gè)4位二進(jìn)制加法器U2PORTMAP(C4=>SC,A4=>A8(7DOWNTO4),B4=>B8(7DOWNTO4),S4=>S8(7DOWNTO4),CO4=>CO8);ENDARCHITECTUREART;

3.仿真結(jié)果驗(yàn)證

在程序調(diào)試和仿真時(shí),我們要使用自底向上的方法進(jìn)行,也就是對于含有多個(gè)模塊的設(shè)計(jì),我們要先從底層模塊進(jìn)行調(diào)試和仿真,再進(jìn)行更高層次模塊的調(diào)試和仿真,最后進(jìn)行頂層模塊的調(diào)試與仿真。圖6.2和圖6.3分別是使用Quartus?Ⅱ8.0對ADDER4B和ADDER8B進(jìn)行時(shí)序仿真的結(jié)果。從仿真結(jié)果可以看出,從輸入到輸出,有一個(gè)時(shí)延,時(shí)間大概在幾個(gè)納秒。同時(shí)輸出要經(jīng)過一個(gè)大概幾個(gè)納秒的不穩(wěn)定狀態(tài)或過渡過程,系統(tǒng)才達(dá)到一個(gè)穩(wěn)定而正確的結(jié)果。并且經(jīng)過對各組輸入與輸出數(shù)據(jù)的分析,仿真結(jié)果是正確的。圖6.2ADDER4B的時(shí)序仿真結(jié)果圖6.3ADDER8B的時(shí)序仿真結(jié)果

4.邏輯綜合分析

圖6.4是使用Quartus?Ⅱ8.0進(jìn)行邏輯綜合后ADDER8B的RTL視圖;圖6.5是對ADDER8B的RTL視圖中的ADDER4B進(jìn)行展開后的視圖;圖6.6是使用QuartusII8.0對ADDER8B進(jìn)行邏輯綜合后的資源使用情況。

圖6.4ADDER8B綜合后的RTL視圖圖6.5ADDER8B綜合后的RTL視圖中將ADDER4B展開后的視圖圖6.6ADDER8B邏輯綜合后的資源使用情況

5.硬件邏輯驗(yàn)證若使用GW48-CKEDA實(shí)驗(yàn)開發(fā)系統(tǒng)進(jìn)行硬件邏輯驗(yàn)證,可選擇實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.1,由5.2的實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.1和圖6.1確定引腳的鎖定。如可取實(shí)驗(yàn)電路結(jié)構(gòu)圖的PIO3~PIO0接A8[3..0],PIO7~PIO4接A8[7..4],PIO11~PIO8接B8[3..0],PIO15~PIO12接B8[7..4],PIO49接C8。此加法器的被加數(shù)A8和加數(shù)B8分別由鍵2與鍵1、鍵4與鍵3輸入,加法器的最低位進(jìn)位C8由鍵8輸入,計(jì)算結(jié)果將分別通過PIO23~PIO20,PIO19~PIO16輸出并顯示于數(shù)碼管6(高4位)和數(shù)碼管5(低4位),溢出進(jìn)位由PIO39輸出,當(dāng)有進(jìn)位時(shí),結(jié)果顯示于發(fā)光管D8。

6.28位乘法器的設(shè)計(jì)

1.系統(tǒng)設(shè)計(jì)思路純組合邏輯構(gòu)成的乘法器雖然工作速度比較快,但占用硬件資源多,難以實(shí)現(xiàn)寬位乘法器,而基于PLD器件外接ROM九九表的乘法器則無法構(gòu)成單片系統(tǒng),也不實(shí)用。這里介紹由8位加法器構(gòu)成的以時(shí)序邏輯方式設(shè)計(jì)的8位乘法器,此乘法器具有一定的實(shí)用價(jià)值。其乘法原理是:乘法通過逐項(xiàng)位移相加原理來實(shí)現(xiàn),從被乘數(shù)的最低位開始,若為1,則乘數(shù)左移后與上一次和相加;若為0,則左移后以全零相加,直至被乘數(shù)的最高位。從圖6.7的邏輯圖上可以清楚地看出此乘法器的工作原理。圖6.7中,ARICTL是乘法運(yùn)算控制電路,它的START(可鎖定于引腳I/O49)信號的上跳沿與高電平有兩個(gè)功能,即16位寄存器清零和被乘數(shù)A[7..0]向移位寄存器SREG8B加載;它的低電平則作為乘法使能信號。乘法時(shí)鐘信號從ARICTL的CLK輸入。當(dāng)被乘數(shù)加載于8位右移寄存器SREG8B后,隨著每一時(shí)鐘節(jié)拍,最低位在前,由低位至高位逐位移出。當(dāng)為1時(shí),與門ANDARITH打開,8位乘數(shù)B[7..0]在同一節(jié)拍進(jìn)入8位加法器,與上一次鎖存在16位鎖存器REG16B中的高8位進(jìn)行相加,其和在下一時(shí)鐘節(jié)拍的上升沿被鎖進(jìn)此鎖存器。而當(dāng)被乘數(shù)移出位為0時(shí),與門全零輸出。如此往復(fù),直至八個(gè)時(shí)鐘脈沖后,由ARICTL控制,乘法運(yùn)算過程自動(dòng)中止,ARIEND輸出高電平,以此可點(diǎn)亮一發(fā)光管,以示乘法結(jié)束。此時(shí),REG16B的輸出值即為最后乘積。圖6.78×8位乘法器電路原理圖此乘法器的優(yōu)點(diǎn)是節(jié)省芯片資源,它的核心元件只是一個(gè)8位加法器,其運(yùn)算速度取決于輸入的時(shí)鐘頻率。若時(shí)鐘頻率為100MHz,則每一運(yùn)算周期僅需80ns。而若利用備用最高時(shí)鐘,即12MHz晶振的MCS-51單片機(jī)的乘法指令進(jìn)行8位乘法運(yùn)算,則僅單指令的運(yùn)算周期就長達(dá)4?μs。因此,可以利用此乘法器或相同原理構(gòu)成的更高位乘法器完成一些數(shù)字信號處理方面的運(yùn)算。

2.?VHDL源程序

1)選通與門模塊的源程序ANDARITH.VHD--ANDARITH.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYANDARITHIS --選通與門模塊

PORT(ABIN:INSTD_LOGIC; --與門開關(guān)

DIN:INSTD_LOGIC_VECTOR(7DOWNTO0); --8位輸入

DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位輸出

ENDENTITYANDARITH;ARCHITECTUREARTOFANDARITHISBEGINPROCESS(ABIN,DIN)ISBEGINFORIIN0TO7LOOP --循環(huán),分別完成8位數(shù)據(jù)與一位控制位的與操作

DOUT(I)<=DIN(I)ANDABIN;ENDLOOP;ENDPROCESS;ENDARCHITECTUREART;

2)?16位鎖存器的源程序REG16B.VHD--REG16B.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYREG16BIS --16位鎖存器

PORT(CLK:INSTD_LOGIC; --鎖存信號

CLR:INSTD_LOGIC; --清零信號

D:INSTD_LOGIC_VECTOR(8DOWNTO0); --8位數(shù)據(jù)輸入

Q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));--16位數(shù)據(jù)輸出

ENDENTITYREG16B;ARCHITECTUREARTOFREG16BISSIGNALR16S:STD_LOGIC_VECTOR(15DOWNTO0); --16位寄存器設(shè)置

BEGINPROCESS(CLK,CLR)ISBEGINIFCLR='1'THENR16S<="0000000000000000"; --異步復(fù)位信號

ELSIFCLK'EVENTANDCLK='1'THEN --時(shí)鐘到來時(shí),鎖存輸入值

R16S(6DOWNTO0)<=R16S(7DOWNTO1); --右移低8位

R16S(15DOWNTO7)<=D; --將輸入鎖到高能位

ENDIF;ENDPROCESS;Q<=R16S;ENDARCHITECTUREART;

3)?8位右移寄存器的源程序SREG8B.VHD--SREG8B.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL; ENTITYSREG8BIS

--8位右移寄存器

PORT(CLK:INSTD_LOGIC;LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);QB:OUTSTD_LOGIC);ENDENTITYSREG8B;ARCHITECTUREARTOFSREG8BISSIGNALREG8B:STD_LOGIC_VECTOR(7DOWNTO0);

BEGINPROCESS(CLK,LOAD)ISBEGINIFCLK'EVENTANDCLK='1'THENIFLOAD='1'THENREG8B<=DIN; --裝載新數(shù)據(jù)

ELSEREG8B(6DOWNTO0)<=REG8B(7DOWNTO1); --數(shù)據(jù)右移

ENDIF;ENDIF;ENDPROCESS;QB<=REG8B(0); --輸出最低位

ENDARCHITECTUREART;

4)乘法運(yùn)算控制器的源程序ARICTL.VHD--ARICTL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYARICTLIS --乘法運(yùn)算控制器

PORT(CLK:INSTD_LOGIC;START:INSTD_LOGIC;CLKOUT:OUTSTD_LOGIC;RSTALL:OUTSTD_LOGIC;ARIEND:OUTSTD_LOGIC);ENDENTITYARICTL;

ARCHITECTUREARTOFARICTLISSIGNALCNT4B:STD_LOGIC_VECTOR(3DOWNTO0);BEGINRSTALL<=START;PROCESS(CLK,START)ISBEGINIFSTART='1'THENCNT4B<="0000"; --高電平清零計(jì)數(shù)器

ELSIFCLK'EVENTANDCLK='1'THENIFCNT4B<8THEN --小于則計(jì)數(shù),等于8表明乘法運(yùn)算已經(jīng)結(jié)束

CNT4B<=CNT4B+1;ENDIF;ENDIF;

ENDPROCESS;PROCESS(CLK,CNT4B,START)ISBEGINIFSTART='0'THENIFCNT4B<8THEN --乘法運(yùn)算正在進(jìn)行

CLKOUT<=CLK;ARIEND<='0';ELSECLKOUT<='0';ARIEND<='1'; --運(yùn)算已經(jīng)結(jié)束

ENDIF;ELSECLKOUT<=CLK;ARIEND<='0';ENDIF;ENDPROCESS;ENDARCHITECTUREART;

5)?8位乘法器的源程序MULTI8X8.VHD--MULTI8X8.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMULTI8X8IS --8位乘法器頂層設(shè)計(jì)

PORT(CLK:INSTD_LOGIC;START:INSTD_LOGIC; --乘法啟動(dòng)信號,高電平復(fù)位與加載,低電平運(yùn)算

A:INSTD_LOGIC_VECTOR(7DOWNTO0); --8位被乘數(shù)

B:INSTD_LOGIC_VECTOR(7DOWNTO0); --8位乘數(shù)

ARIEND:OUTSTD_LOGIC; --乘法運(yùn)算結(jié)束標(biāo)志位

DOUT:OUTSTD_LOGIC_VECTOR(15DOWNTO0)); --16位乘積輸出

ENDENTITYMULTI8X8;ARCHITECTUREARTOFMULTI8X8ISCOMPONENTARICTLIS

--待調(diào)用的乘法控制器端口定義

PORT(CLK:INSTD_LOGIC;START:INSTD_LOGIC;CLKOUT:OUTSTD_LOGIC;RSTALL:OUTSTD_LOGIC;ARIEND:OUTSTD_LOGIC);ENDCOMPONENTARICTL;COMPONENTANDARITHIS --待調(diào)用的控制與門端口定義

PORT(ABIN:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDCOMPONENTANDARITH;COMPONENTADDER8BIS --待調(diào)用的8位加法器端口定義

…COMPONENTSREG8BIS --待調(diào)用的8位右移寄存器端口定義

…COMPONENTREG16BIS --待調(diào)用的16位右移寄存器端口定義

…SIGNALS1,S2,S3,S4:STD_LOGIC;SIGNALS5:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALS6:STD_LOGIC_VECTOR(8DOWNTO0);SIGNALS7:STD_LOGIC_VECTOR(15DOWNTO0);

BEGINDOUT<=S7;S1<='0';U1:ARICTLPORTMAP(CLK=>CLK,START=>START,CLKOUT=>S2,RSTALL=>S3,ARIEND=>ARIEND);U2:SREG8BPORTMAP(CLK=>S2,LOAD=>S3,DIN=>A,QB=>S4);U3:ANDARITHPORTMAP(ABIN=>S4,DIN=>B,DOUT=>S5);U4:ADDER8BPORTMAP(C8=>S1,A8=>S7(15DOWNTO8),B8=>S5,S8=>S6(7DOWNTO0),CO8=>S6(8));U5:REG16BPORTMAP(CLK=>S2,CLR=>S3,D=>S6,Q=>S7);ENDARCHITECTUREART;

3.仿真結(jié)果驗(yàn)證圖6.8所示是使用Quartus?Ⅱ8.0對MULTI8X8進(jìn)行時(shí)序仿真的結(jié)果。從仿真結(jié)果可以看出,從啟動(dòng)乘法運(yùn)算開始(START='0'),要經(jīng)過8個(gè)時(shí)鐘周期后才能得到一個(gè)乘法結(jié)果(ARIEND='1'),并且當(dāng)輸入A=106,B=56時(shí),乘積輸出DOUT應(yīng)為106×56=5936,而實(shí)際仿真輸出為5936,因此仿真結(jié)果是正確的。各個(gè)模塊的時(shí)序仿真和結(jié)果分析,請讀者自己完成。圖6.8MULTI8X8的時(shí)序仿真結(jié)果

4.邏輯綜合分析圖6.9所示是使用Quartus?Ⅱ8.0進(jìn)行邏輯綜合后MULTI8X8的RTL視圖,該系統(tǒng)內(nèi)部各個(gè)模塊的進(jìn)一步展開后的RTL和門電路請讀者自己分析。圖6.10(a)和(b)所示分別是選用EPF10K10TC144-3和選用EP2C8T144C6芯片,使用Quartus?Ⅱ8.0對MULTI8X8進(jìn)行邏輯綜合后的資源使用情況。圖6.11所示是MULTI8X8的時(shí)鐘性能分析結(jié)果,從結(jié)果可以看出,若選用EPF10K10TC144-3芯片,則該系統(tǒng)的最高頻率可達(dá)到71.43?MHz;若選用EP2C8T144C6芯片,則該系統(tǒng)的最高頻率可達(dá)到231.96?MHz。從這里可以看出,對于相同的一個(gè)VHDL設(shè)計(jì),若采用不同的芯片,該系統(tǒng)的最高頻率是不同的。圖6.9MULTI8X8綜合后的RTL視圖(a)

(b)圖6.10MULTI8X8邏輯綜合后的資源使用情況(a)選用EPF10K10TC144-3的時(shí)鐘性能(b)選用EP2C8T144C6的時(shí)鐘性能

5.硬件邏輯驗(yàn)證若使用GW48-CKEDA實(shí)驗(yàn)開發(fā)系統(tǒng)進(jìn)行硬件邏輯驗(yàn)證,可選擇實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.1,由5.2節(jié)的實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.1和圖6.7確定引腳的鎖定。如乘法運(yùn)算時(shí)鐘CLK接CLOCK0,清零及啟動(dòng)運(yùn)算信號START由鍵8(PIO49)控制,被乘數(shù)A[7..0]接PIO15~PIO8(由鍵4、鍵3輸入8位二進(jìn)制數(shù)),乘數(shù)B[7..0]接PIO7~PIO0(由鍵2、鍵1輸入8位二進(jìn)制數(shù)),乘積輸出DOUT[15..0]接PIO31~PIO16,乘法運(yùn)算結(jié)束信號ARIEND接PIO39(D8)。進(jìn)行硬件驗(yàn)證的方法:①鍵4和鍵3分別輸入被乘數(shù)的高4位和低4位(輸入值顯示于數(shù)碼4和數(shù)碼3),鍵2和鍵1分別輸入乘數(shù)的高4位和低4位(輸入值顯示于數(shù)碼2和數(shù)碼1);②乘法操作時(shí)鐘信號輸入接CLOCK0;③鍵8輸入高電平時(shí),乘積鎖存器清零,乘數(shù)和被乘數(shù)數(shù)值加載,低電平時(shí)開始作乘法,8個(gè)脈沖后乘法結(jié)束,乘積顯示于數(shù)碼管8~5,高位在左。

6.38位除法器的設(shè)計(jì)

1.系統(tǒng)設(shè)計(jì)思路在所有的四種基本算術(shù)運(yùn)算中,除法是最復(fù)雜的,因此也是最耗時(shí)的運(yùn)算。對于給定的被除數(shù)(或分子)N和除數(shù)(或分母)D,除法得到兩個(gè)(與其他基本運(yùn)算不同)結(jié)果:商Q和余數(shù)R,即N/D=Q和R,其中?|R|<D。當(dāng)然我們也可以將除法看成是乘法的逆運(yùn)算,即N=D×Q+R。除法在很多方面都與乘法不同,最重要的區(qū)別是:在乘法中,所有的部分乘積都可以并行生成;在除法中,每個(gè)商的位都是以一種順序的“trail-and-error”過程確定的。除法運(yùn)算的算法有很多種,可分為兩類:線形收斂算法和均方收斂算法。其中,線形收斂算法包括Restoring算法、Nonrestoring算法、STR算法和Cordic算法。

Restoring(還原)算法的計(jì)算思想是:首先,調(diào)整分母并加載分子到余數(shù)寄存器中;然后,從余數(shù)中減去調(diào)整的分母并將結(jié)果存儲在余數(shù)寄存器中,如果新的余數(shù)為正,就將商的LSB設(shè)置為1,否則就將商的LSB設(shè)置為0,而且還需要通過加上分母來還原從前的余數(shù)值;最后,為下一步運(yùn)算重新調(diào)整商和分母。下面用VHDL設(shè)計(jì)一個(gè)8位Restoring除法器(假定分子和商都是8位寬,而分母和余數(shù)是6位寬的數(shù)值),其設(shè)計(jì)思想為:首先將8位的分子加載到余數(shù)寄存器中,6位的分母加載并調(diào)整(N位的分子采用2N-1),將商寄存器重置;在第二和第三階段S1和S2中進(jìn)行實(shí)際的串行除法;在第四階段S3中將商和余數(shù)傳輸?shù)捷敵黾拇嫫鳌?/p>

2.VHDL源程序

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYDIVIDERISGENERIC(WN:INTEGER:=8;

WD:INTEGER:=6;PO2WND:INTEGER:=8192; --2**(WN+WD)

PO2WN1:INTEGER:=128; --2**(WN-1)PO2WN:INTEGER:=255); --2**WN-1

PORT(CLK:INSTD_LOGIC;N_IN:INSTD_LOGIC_VECTOR(WN-1DOWNTO0); --被除數(shù)

D_IN:INSTD_LOGIC_VECTOR(WD-1DOWNTO0); --除數(shù)

R_OUT:OUTSTD_LOGIC_VECTOR(WD-1DOWNTO0); --余數(shù)

Q_OUT:OUTSTD_LOGIC_VECTOR(WN-1DOWNTO0)); --商

ENDENTITYDIVIDER;ARCHITECTUREARTOFDIVIDERISSUBTYPETWOWORDSISINTEGERRANGE-1TOPO2WND-1;SUBTYPEWORDISINTEGERRANGE0TOPO2WN;TYPESTATE_TYPEIS(S0,S1,S2,S3);

SIGNALSTATE:STATE_TYPE;BEGINSTATES:PROCESSISVARIABLER,D:TWOWORDS;VARIABLEQ:WORD;

VARIABLECOUNT:INTEGERRANGE0TOWN;BEGINWAITUNTILCLK='1';CASESTATEISWHENS0=> --初始化

STATE<=S1;COUNT:=0;Q:=0; --復(fù)位商寄存器QD:=PO2WN1*CONV_INTEGER(D_IN); --裝載除數(shù)DR:=CONV_INTEGER(N_IN);

--REMAINDER=NOMINATORWHENS1=> --減法運(yùn)算

R:=R-D; --減去除數(shù)D

STATE<=S2;WHENS2=> --恢復(fù)余數(shù)

IFR<0THENR:=R+D; --恢復(fù)以前的余數(shù)

Q:=Q*2; --LSB置0并邏輯左移一位

ELSEQ:=2*Q+1; --LSB0置1并邏輯左移一位

ENDIF;COUNT:=COUNT+1;D:=D/2;IFCOUNT=WNTHEN--DIVISIONREADY?STATE<=S3;ELSESTATE<=S1;

ENDIF;WHENS3=> --結(jié)果輸出

Q_OUT<=CONV_STD_LOGIC_VECTOR(Q,WN);R_OUT<=CONV_STD_LOGIC_VECTOR(R,WD);STATE<=S0; --開始下一步除法

ENDCASE;ENDPROCESSSTATES;ENDARCHITECTUREART;

3.仿真結(jié)果驗(yàn)證圖6.12是使用Quartus?Ⅱ8.0對DIVIDER進(jìn)行時(shí)序仿真的結(jié)果。從仿真結(jié)果可以看出,從啟動(dòng)除法運(yùn)算開始,要經(jīng)過8?×?2個(gè)時(shí)鐘周期后才得到一個(gè)除法結(jié)果。通過對輸入和輸出數(shù)據(jù)的分析,證明仿真結(jié)果是正確的。圖6.12DIVIDER的時(shí)序仿真結(jié)果

4.邏輯綜合分析根據(jù)第6.1節(jié)和第6.2節(jié)所述的方法,請讀者自己進(jìn)行邏輯綜合,查看并分析有關(guān)綜合結(jié)果。

5.硬件邏輯驗(yàn)證若使用GW48-CKEDA實(shí)驗(yàn)開發(fā)系統(tǒng)進(jìn)行硬件邏輯驗(yàn)證,可選擇實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.1,由5.2節(jié)的實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.1和DIVIDER.VHD的端口說明確定引腳的鎖定。如除法運(yùn)算時(shí)鐘CLK接CLOCK0,被除數(shù)N_IN[7..0]接PIO15~PIO8(由鍵4、鍵3輸入8位二進(jìn)制數(shù)),除數(shù)D_IN[7..0]接PIO7~PIO0(由鍵2、鍵1輸入6位二進(jìn)制數(shù)),商輸出Q_OUT[7..0]接PIO31~PIO24,余數(shù)輸出R_OUT[7..0]接PIO23~PIO16。進(jìn)行硬件驗(yàn)證的方法為:①乘法操作時(shí)鐘信號輸入接CLOCK0;②鍵4和鍵3分別輸入被除數(shù)的高4位和低4位(輸入值顯示于數(shù)碼4和數(shù)碼3),鍵2和鍵1分別輸入除數(shù)的高2位和低4位(輸入值顯示于數(shù)碼2和數(shù)碼1);③商顯示于數(shù)碼管8和數(shù)碼管7,余數(shù)顯示于數(shù)碼管6和數(shù)碼管5,高位在左。

6.4PWM信號發(fā)生器的設(shè)計(jì)

1.系統(tǒng)設(shè)計(jì)思路

PWM即脈沖寬度調(diào)制,就是利用微處理器的數(shù)字輸出來對模擬電路進(jìn)行控制的一種非常有效的技術(shù)。PWM從處理器到被控系統(tǒng)信號都是數(shù)字式的,無需進(jìn)行數(shù)/模轉(zhuǎn)換。讓信號保持為數(shù)字形式可將噪聲影響降到最小,因此廣泛應(yīng)用在測量、通信和功率控制與變換的許多領(lǐng)域中。圖6.13是一種PWM(脈沖寬度調(diào)制)信號發(fā)生器的邏輯圖,此信號發(fā)生器是由兩個(gè)完全相同的可自加載加法計(jì)數(shù)器LCNT8組成的,它的輸出信號的高、低電平脈寬可分別由兩組8位預(yù)置數(shù)進(jìn)行控制。圖6.13脈寬數(shù)控調(diào)制信號發(fā)生器邏輯圖如果將初始值可預(yù)置的加法計(jì)數(shù)器的溢出信號作為本計(jì)數(shù)器的初始預(yù)置加載信號LD,則可構(gòu)成計(jì)數(shù)初始值自加載方式的加法計(jì)數(shù)器,從而構(gòu)成數(shù)控分頻器。圖6.13中,D觸發(fā)器的一個(gè)重要功能就是均勻輸出信號的占空比,提高驅(qū)動(dòng)能力,這對驅(qū)動(dòng),諸如揚(yáng)聲器或電動(dòng)機(jī)十分重要。

2.VHDL源程序

1)?8位可自加載加法計(jì)數(shù)器的源程序LCNT8.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLCNT8IS --8位可自加載加法計(jì)數(shù)器

PORT(CLK,LD:INSTD_LOGIC; --工作時(shí)鐘/預(yù)置值加載信號

D:ININTEGERRANGE0TO255; --8位分頻預(yù)置數(shù)

CAO:OUTSTD_LOGIC); --計(jì)數(shù)溢出輸出

ENDENTITYLCNT8;ARCHITECTUREARTOFLCNT8ISSIGNALCOUNT:INTEGERRANGE0TO255; --8位計(jì)數(shù)器設(shè)置

BEGINPROCESS(CLK)ISBEGINIFCLK'EVENTANDCLK='1'THENIFLD='1'THENCOUNT<=D; --LD為高電平時(shí)加載預(yù)置數(shù)

ELSECOUNT<=COUNT+1; --否則繼續(xù)計(jì)數(shù)

ENDIF;ENDIF;ENDPROCESS;PROCESS(COUNT)ISBEGINIFCOUNT=255THENCAO<='1'; --計(jì)數(shù)滿后,置于溢出位

ELSECAO<='0';ENDIF;ENDPROCESS;ENDARCHITECTUREART;

2)?PWM信號發(fā)生器的源程序PWM.VHDLIBRARYIEEE; --PWM信號發(fā)生器頂層文件

USEIEEE.STD_LOGIC_1164.ALL;ENTITYPWMISPORT(CLK:INSTD_LOGIC; --計(jì)數(shù)時(shí)鐘

A,B:INSTD_LOGIC_VECTOR(7DOWNTO0);--8位計(jì)數(shù)預(yù)置數(shù)

PWM:OUTSTD_LOGIC); --計(jì)數(shù)溢出并分頻輸出

ENDENTITYPWM;ARCHITECTUREARTOFPWMISCOMPONENTLCNT8ISPORT(CLK,LD:INSTD_LOGIC; D:INSTD_LOGIC_VECTOR(7DOWNTO0);

CAO:OUTSTD_LOGIC);ENDCOMPONENTLCNT8;SIGNALCAO1,CAO2:STD_LOGIC;SIGNALLD1,LD2:STD_LOGIC;SIGNALSPWM:STD_LOGIC;BEGINU1:LCNT8PORTMAP(CLK=>CLK,LD=>LD1,D=>A,CAO=>CAO1);U2:LCNT8PORTMAP(CLK=>CLK,LD=>LD2,D=>B,CAO=>CAO2);

PROCESS(CAO1,CAO2)ISBEGINIFCAO1='1'THENSPWM<='0';ELSIFCAO2'EVENTANDCAO2='1'THENSPWM<='1';ENDIF;ENDPROCESS;LD1<=NOTSPWM;LD2<=SPWM;PWM<=SPWM;ENDARCHITECTUREART;

3.仿真結(jié)果驗(yàn)證圖6.14是使用Quartus?Ⅱ8.0對PWM進(jìn)行時(shí)序仿真的結(jié)果。從輸入和輸出數(shù)據(jù)的分析可知,仿真結(jié)果是正確的。各個(gè)模塊的時(shí)序仿真和結(jié)果分析,請讀者自己完成。圖6.14PWM的時(shí)序仿真結(jié)果

4.邏輯綜合分析根據(jù)第6.1節(jié)和第6.2節(jié)所述的方法,請讀者自己進(jìn)行邏輯綜合,查看并分析有關(guān)綜合結(jié)果。

5.硬件邏輯驗(yàn)證若使用GW48-CKEDA實(shí)驗(yàn)開發(fā)系統(tǒng)進(jìn)行硬件邏輯驗(yàn)證,可選擇實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.1,由5.2節(jié)的實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.1和圖6.13確定引腳的鎖定。輸入時(shí)鐘CLK接CLOCK0(用于發(fā)聲時(shí),接頻率65536Hz);8位數(shù)控預(yù)置輸入B[7..0]接PIO15~PIO8,由鍵4和鍵3控制輸入,輸入值分別顯示于數(shù)碼管4和數(shù)碼管3;另8位數(shù)控預(yù)置輸入A[7..0]接PIO7~PIO0,由鍵1和鍵2控制輸入,輸入值分別顯示于數(shù)碼管2和數(shù)碼管1;輸出PSOUT接SPEAKER(對應(yīng)1032E的是第5引腳PIN5;對應(yīng)EPF10K的是第3引腳PIN3)。進(jìn)行硬件驗(yàn)證的方法為:通過鍵2和鍵1輸入控制高電平信號脈寬的預(yù)置數(shù)(顯示于數(shù)碼管2和數(shù)碼管1);由鍵4和鍵3輸入控制低電平信號脈寬的預(yù)置數(shù)(顯示于數(shù)碼管4和數(shù)碼管3);取待分頻率F=12MHz、6MHz或3MHz,通過短路帽輸入CLK9;可利用示波器觀察波形隨預(yù)置數(shù)的變化而變化的情況。在沒有示波器時(shí),“CLK”可接低頻率信號,然后接通揚(yáng)聲器,通過聲音音調(diào)的變化來了解輸出頻率的變化。

6.5數(shù)字頻率計(jì)的設(shè)計(jì)

1.系統(tǒng)設(shè)計(jì)思路圖6.15是8位十進(jìn)制數(shù)字頻率計(jì)的電路邏輯圖,它由1個(gè)測頻控制信號發(fā)生器TESTCTL、8個(gè)有時(shí)鐘使能的十進(jìn)制計(jì)數(shù)器CNT10、1個(gè)32位鎖存器REG32B組成。以下分別敘述頻率計(jì)各邏輯模塊的功能與設(shè)計(jì)方法。圖6.158位十進(jìn)制數(shù)字頻率計(jì)邏輯圖

1)測頻控制信號發(fā)生器的設(shè)計(jì)頻率測量的基本原理是計(jì)算每秒鐘內(nèi)待測信號的脈沖個(gè)數(shù)。這就要求TESTCTL的計(jì)數(shù)使能信號TSTEN能產(chǎn)生一個(gè)1秒脈寬的周期信號,并對頻率計(jì)的每一計(jì)數(shù)器CNT10的ENA使能端進(jìn)行同步控制。當(dāng)TSTEN高電平時(shí),允許計(jì)數(shù);低電平時(shí),停止計(jì)數(shù),并保持其所計(jì)的數(shù)。在停止計(jì)數(shù)期間,首先需要一個(gè)鎖存信號LOAD的上跳沿將計(jì)數(shù)器在前1秒鐘的計(jì)數(shù)值鎖存進(jìn)32位鎖存器REG32B中,由外部的7段譯碼器譯出并穩(wěn)定顯示。鎖存信號之后,必須有一清零信號CLR_CNT對計(jì)數(shù)器進(jìn)行清零,為下一秒鐘的計(jì)數(shù)操作做準(zhǔn)備。測頻控制信號發(fā)生器的工作時(shí)序如圖6.16所示。為了產(chǎn)生這個(gè)時(shí)序圖,需首先建立一個(gè)由D觸發(fā)器構(gòu)成的二分頻器,在每次時(shí)鐘CLK上沿到來時(shí)其值翻轉(zhuǎn)。其中,控制信號時(shí)鐘CLK的頻率取1Hz,而信號TSTEN的脈寬恰好為1s,可以用作閘門信號。此時(shí),根據(jù)測頻的時(shí)序要求,可得出信號LOAD和CLR_CNT的邏輯描述。由圖6.16可見,在計(jì)數(shù)完成后,即計(jì)數(shù)使能信號TSTEN在1s的高電平后,利用其反相值的上跳沿產(chǎn)生一個(gè)鎖存信號LOAD,0.5s后,CLR_CNT產(chǎn)生一個(gè)清零信號上跳沿。圖6.16測頻控制信號發(fā)生器工作時(shí)序

2)寄存器REG32B的設(shè)計(jì)設(shè)置鎖存器的好處是,顯示的數(shù)據(jù)穩(wěn)定,不會由于周期性的清零信號而不斷閃爍。若已有32位BCD碼存在于此模塊的輸入口,在信號LOAD的上升沿后即被鎖存到寄存器REG32B的內(nèi)部,并由REG32B的輸出端輸出,然后由實(shí)驗(yàn)板上的7段譯碼器譯成能在數(shù)碼管上顯示的相對應(yīng)的數(shù)值。

3)十進(jìn)制計(jì)數(shù)器CNT10的設(shè)計(jì)如圖6.15所示,此十進(jìn)制計(jì)數(shù)器的特殊之處是,有一時(shí)鐘使能輸入端ENA,用于鎖定計(jì)數(shù)值。當(dāng)高電平時(shí)計(jì)數(shù)允許,低電平時(shí)計(jì)數(shù)禁止。

2.?VHDL源程序

1)有時(shí)鐘使能的十進(jìn)制計(jì)數(shù)器的源程序CNT10.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL; ENTITYCNT10ISPORT(CLK:INSTD_LOGIC; --計(jì)數(shù)時(shí)鐘信號

CLR:INSTD_LOGIC; --清零信號

ENA:INSTD_LOGIC; --計(jì)數(shù)使能信號

CQ:OUTINTEGERRANGE0TO15;--4位計(jì)數(shù)結(jié)果輸出

CO:OUTSTD_LOGIC);

--計(jì)數(shù)進(jìn)位

ENDENTITYCNT10;ARCHITECTUREARTOFCNT10ISSIGNALCQI:INTEGERRANGE0TO15;BEGINPROCESS(CLK,CLR,ENA)ISBEGINIFCLR='1'THENCQI<=0; --計(jì)數(shù)器異步清零

ELSIFCLK'EVENTANDCLK='1'THENIFENA='1'THENIFCQI<9THENCQI<=CQI+1;ELSECQI<=0;ENDIF; --等于9,則計(jì)數(shù)器清零

ENDIF;ENDIF;

ENDPROCESS;PROCESS(CQI)ISBEGINIFCQI=9THENCO<='1'; --進(jìn)位輸出

ELSECO<='0';ENDIF;ENDPROCESS;CQ<=CQI;ENDARCHITECTUREART;

2)?32位鎖存器的源程序REG32B.VHD

參照第3.9.2節(jié)寄存器的有關(guān)程序,請作者自行完成。

3)測頻控制信號發(fā)生器的源程序TESTCTL.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYTESTCTLISPORT(CLK:INSTD_LOGIC; --1Hz測頻控制時(shí)鐘

TSTEN:OUTSTD_LOGIC; --計(jì)數(shù)器時(shí)鐘使能

CLR_CNT:OUTSTD_LOGIC; --計(jì)數(shù)器清零

LOAD:OUTSTD_LOGIC); --輸出鎖存信號

ENDENTITYTESTCTL;

ARCHITECTUREARTOFTESTCTLIS

SIGNALDIV2CLK:STD_LOGIC;BEGINPROCESS(CLK)ISBEGINIFCLK'EVENTANDCLK='1'THEN --1Hz時(shí)鐘二分頻

DIV2CLK<=NOTDIV2CLK;ENDIF;ENDPROCESS;PROCESS(CLK,DIV2CLK)ISBEGINIFCLK='0'ANDDIV2CLK='0'THEN --產(chǎn)生計(jì)數(shù)器清零信號

CLR_CNT<='1';ELSECLR_CNT<='0';ENDIF;ENDPROCESS;LOAD<=NOTDIV2CLK;TSTEN<=DIV2CLK;ENDARCHITECTUREART;

4)數(shù)字頻率計(jì)的源程序FREQ.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYFREQISPORT(FSIN:INSTD_LOGIC;CLK:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));ENDENTITYFREQ;ARCHITECTUREARTOFFREQISCOMPONENTCNT10IS --待調(diào)用的有時(shí)鐘使能的十進(jìn)制計(jì)數(shù)器端口定義

PORT(CLK,CLR,ENA:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);CO:OUTSTD_LOGIC);

ENDCOMPONENTCNT10;

COMPONENTREG32BIS --待調(diào)用的32位鎖存器端口定義

COMPONENTTESTCTLIS --待調(diào)用的測頻控制信號發(fā)生器 端口定義

SIGNALSE,SC,SL:STD_LOGIC;

SIGNALS1,S2,S3,S4,S5,S6,S7,S8:STD_LOGIC;SIGNALSD:STD_LOGIC_VECTOR(31DOWNTO0);BEGINU0:TESTCTLPORTMAP(CLK=>CLK,TSTEN=>SE,CLR_CNT=>SC,LOAD=>SL);

U1:CNT10PORTMAP(CLK=>FSIN,CLR=>SC,ENA=>SE,CQ=>SD(3DOWNTO0),CO=>S1); --名字關(guān)聯(lián)……

U2:CNT10PORTMAP(CLK=>S1,CLR=>SC,ENA=>SE,CQ=>SD(7DOWNTO4),CO=>S2);U3:CNT10PORTMAP(S2,SC,SE,SD(11DOWNTO8),S3); --位置關(guān)聯(lián)

U4:CNT10PORTMAP(S3,SC,SE,SD(15DOWNTO12),S4);

U5:CNT10PORTMAP(S4,SC,SE,SD(19DOWNTO16),S5);U6:CNT10PORTMAP(S5,SC,SE,SD(23DOWNTO20),S6);U7:CNT10PORTMAP(S6,SC,SE,SD(27DOWNTO24),S7);U8:CNT10PORTMAP(S7,SC,SE,SD(31DOWNTO28),S8);U9:REG32BPORTMAP(LOAD=>SL,DIN=>SD(31DOWNTO0),DOUT=>DOUT);ENDARCHITECTUREART;

3.仿真結(jié)果驗(yàn)證圖6.17和圖6.18是使用Quartus?Ⅱ8.0對CNT10和FREQ進(jìn)行時(shí)序仿真的結(jié)果。從輸入和輸出數(shù)據(jù)的分析可知,仿真結(jié)果是正確的。其余模塊的時(shí)序仿真和結(jié)果分析,請讀者自己完成。圖6.17CNT10的時(shí)序仿真結(jié)果圖6.18FREQ的時(shí)序仿真結(jié)果

4.邏輯綜合分析根據(jù)第6.1節(jié)和第6.2節(jié)所述的方法,請讀者自己進(jìn)行邏輯綜合,查看并分析有關(guān)綜合結(jié)果。

5.硬件邏輯驗(yàn)證若使用GW48-CKEDA實(shí)驗(yàn)開發(fā)系統(tǒng)進(jìn)行硬件邏輯驗(yàn)證,可選擇實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.0,由5.2節(jié)的實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.0和圖6.15確定引腳的鎖定,測頻控制器時(shí)鐘信號CLK可通過低頻組中的CLOCK2將來自信號源的1Hz信號接入,待測頻率輸入端FSIN可接全頻信號CLOCK0,8位數(shù)碼顯示輸出DOUT[31..0]接PIO47~PIO16。進(jìn)行硬件驗(yàn)證的方法為:選擇實(shí)驗(yàn)?zāi)J?,測頻控制器時(shí)鐘信號CLK可通過CLOCK2將1Hz的信號接入,待測頻率輸入端FSIN與CLOCK0中的某個(gè)頻率信號相接,數(shù)碼管應(yīng)顯示來自CLOCK0的頻率。

6.6數(shù)字秒表的設(shè)計(jì)

1.系統(tǒng)設(shè)計(jì)思路今需設(shè)計(jì)一個(gè)計(jì)時(shí)范圍為0.01?s~1?h的數(shù)字秒表,首先需要獲得一個(gè)比較精確的計(jì)時(shí)基準(zhǔn)信號,這里是周期為1/100?s的計(jì)時(shí)脈沖。其次,除了對每一計(jì)數(shù)器需設(shè)置清零信號輸入外,還需為六個(gè)計(jì)數(shù)器設(shè)置時(shí)鐘使能信號,即計(jì)時(shí)允許信號,以便作為秒表的計(jì)時(shí)起、??刂崎_關(guān)。因此數(shù)字秒表可由一個(gè)分頻器、四個(gè)十進(jìn)制計(jì)數(shù)器(1/100?s、1/10?s、1?s、1?min)以及兩個(gè)六進(jìn)制計(jì)數(shù)器(10?s、10?min)組成,如圖6.19所示。圖6.19數(shù)字秒表電路邏輯圖

6個(gè)計(jì)數(shù)器中的每一計(jì)數(shù)器的4位輸出,通過外設(shè)的BCD譯碼器輸出顯示。圖6.19中,6個(gè)4位二進(jìn)制計(jì)數(shù)器輸出的最小顯示值分別為:DOUT[3..0]→1/100?s、DOUT[7..4]→1/10?s、DOUT[11..8]→1?s、DOUT[15..12]→10?s、DOUT[19..16]→1?min、DOUT[23..20]→10?min等。

2.?VHDL源程序

1)?3MHz→100Hz分頻器的源程序CLKGEN.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYCLKGENISPORT(CLK:INSTD_LOGIC; --3MHz信號輸入

NEWCLK:OUTSTD_LOGIC); --100Hz計(jì)時(shí)時(shí)鐘信號輸出

ENDENTITYCLKGEN;ARCHITECTUREARTOFCLKGENISSIGNALCNT:INTEGERRANGE0TO10#29999#;--十進(jìn)制計(jì)數(shù)預(yù)制數(shù)

BEGINPROCESS(CLK)IS --分頻計(jì)數(shù)器,由3MHz時(shí)鐘產(chǎn)生100Hz信號

BEGINIFCLK'EVENTANDCLK='1'THENIFCNT=10#29999#THENCNT<=0; --分頻常數(shù)為30?000ELSECNT<=CNT+1;ENDIF;ENDIF;ENDPROCESS;PROCESS(CNT)IS --計(jì)數(shù)溢出信號控制

BEGINIFCNT=10#29999#THENNEWCLK<='1';ELSENEWCLK<='0';ENDIF;ENDPROCESS;ENDARCHITECTUREART;

2)六進(jìn)制計(jì)數(shù)器的源程序CNT6.VHD(十進(jìn)制計(jì)數(shù)器CNT10.VHD與此類似)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT6ISPORT(CLK:INSTD_LOGIC;CLR:INSTD_LOGIC;ENA:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);CO:OUTSTD_LOGIC);

ENDENTITYCNT6;ARCHITECTUREARTOFCNT6ISSIGNALCQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(CLK,CLR,ENA)ISBEGINIFCLR='1'THENCQI<="0000";ELSIFCLK'EVENTANDCLK='1'THENIFENA='1'THENIFCQI="0101"THENCQI<="0000";ELSECQI<=CQI+'1';ENDIF;ENDIF;ENDIF;

ENDPROCESS;PROCESS(CQI)ISBEGINIFCQI="0000"THENCO<='1';ELSECO<='0';ENDIF;ENDPROCESS;CQ<=CQI;ENDARCHITECTUREART;

3)數(shù)字秒表的源程序TIMES.VHDLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTIMESISPORT(CLR:INSTD_LOGIC;CLK:INSTD_LOGIC;ENA:INSTD_LOGIC;DOUT:OUTSTD_LOGIC_VECTOR(23DOWNTO0));ENDENTITYTIMES;ARCHITECTUREARTOFTIMESISCOMPONENTCLKGENISPORT(CLK:INSTD_LOGIC;NEWCLK:OUTSTD_LOGIC);

ENDCOMPONENTCLKGEN;COMPONENTCNT10ISPORT(CLK,CLR,ENA:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);CO:OUTSTD_LOGIC);ENDCOMPONENTCNT10;COMPONENTCNT6ISPORT(CLK,CLR,ENA:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);CO:OUTSTD_LOGIC);ENDCOMPONENTCNT6;

SIGNALS0:STD_LOGIC;SIGNALS1,S2,S3,S4,S5:STD_LOGIC;BEGINU0:CLKGENPORTMAP(CLK=>CLK,NEWCLK=>S0); --名字關(guān)聯(lián)

U1:CNT10PORTMAP(S0,CLR,ENA,DOUT(3DOWNTO0),S1); --位置關(guān)聯(lián)

U2:CNT10PORTMAP(S1,CLR,ENA,DOUT(7DOWNTO4),S2);U3:CNT10PORTMAP(S2,CLR,ENA,DOUT(11DOWNTO8),S3);U4:CNT6PORTMAP(S3,CLR,ENA,DOUT(15DOWNTO12),S4);U5:CNT10PORTMAP(S4,CLR,ENA,DOUT(19DOWNTO16),S5);U6:CNT6PORTMAP(S5,CLR,ENA,DOUT(23DOWNTO20));ENDARCHITECTUREART;

3.仿真結(jié)果驗(yàn)證在程序的調(diào)試和仿真中,由于程序中有關(guān)參數(shù)的原因,要觀察有關(guān)輸出的變化,需要運(yùn)行較長的時(shí)間,或在一個(gè)給定的時(shí)間內(nèi),可能看不到有關(guān)輸出的變化。這時(shí)我們可采取調(diào)整有關(guān)參數(shù)的方法進(jìn)行仿真,待仿真證明程序正確后再復(fù)原到原程序。調(diào)整參數(shù)的具體方法是:先將需修改的內(nèi)容用“--”注釋掉并添加新的內(nèi)容,而調(diào)試好后復(fù)原的方法就是將修改后的內(nèi)容注釋掉,而將原內(nèi)容去掉注釋。比如本設(shè)計(jì)中的分頻電路程序,分頻常數(shù)為30?000,其輸出需要計(jì)數(shù)30?000次才發(fā)生一次變化,因此在我們設(shè)定的時(shí)間間隔內(nèi),根本看不到輸出的變化,也無法判斷該程序的正確與錯(cuò)誤。這時(shí)我們?nèi)魧⒎诸l常數(shù)修改為30,參數(shù)的修改方法如圖6.20所示,這時(shí)就能很容易地觀察有關(guān)仿真結(jié)果,仿真結(jié)果如圖6.21所示。圖6.21和圖6.22分別是使用Quartus?Ⅱ?8.0對CLKGEN和TIMES進(jìn)行時(shí)序仿真的結(jié)果,從輸入和輸出數(shù)據(jù)的分析可知,仿真結(jié)果是正確的。其余模塊的時(shí)序仿真和結(jié)果分析,請讀者自己完成。圖6.20使用注釋的方法進(jìn)行程序有關(guān)仿真參數(shù)的調(diào)整圖6.21CLKGEN的時(shí)序仿真結(jié)果(分頻常數(shù)修改為30)圖6.22TIMES的時(shí)序仿真結(jié)果

4.邏輯綜合分析根據(jù)第6.1節(jié)和第6.2節(jié)所述的方法,請讀者自己進(jìn)行邏輯綜合,查看并分析有關(guān)綜合結(jié)果。

5.硬件邏輯驗(yàn)證若使用GW48-CKEDA實(shí)驗(yàn)開發(fā)系統(tǒng)進(jìn)行硬件邏輯驗(yàn)證,可選擇實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.0,由5.2節(jié)的實(shí)驗(yàn)電路結(jié)構(gòu)圖NO.0和圖6.19確定引腳的鎖定。時(shí)鐘信號CLK可接CLOCK0,計(jì)數(shù)清零信號接鍵3,計(jì)數(shù)使能信號接鍵4,數(shù)碼管1~數(shù)碼管6分別顯示以1/100?s、1/10?s、1?s、10?s、1?min、10?min為計(jì)時(shí)基準(zhǔn)的計(jì)數(shù)值。進(jìn)行硬件驗(yà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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論