日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

手把手教你用FPGA實現(xiàn)數(shù)字秒表

 goandlove 2017-05-02

對于芯片設(shè)計而言,F(xiàn)PGA的易用性不僅使得設(shè)計更加簡單、快捷,并且節(jié)省了反復(fù)流片驗證的巨額成本。對于某些小批量應(yīng)用的場合,甚至可以直接利用FPGA實現(xiàn),無需再去訂制專門的數(shù)字芯片。

本文介紹了一種基于FPGA利用VHDL硬件描述語言的數(shù)字秒表設(shè)計方法,在設(shè)計過程中使用基于VHDL的EDA工具ModelSim對各個模塊仿真驗證,并給出了完整的源程序和仿真結(jié)果。



1 總體功能結(jié)構(gòu)設(shè)計

一個完整的數(shù)字秒表應(yīng)具有計時、相應(yīng)的控制以及計時結(jié)果顯示功能,總體的功能結(jié)構(gòu)如圖1所示。黑色線框內(nèi)是計數(shù)模塊、使能轉(zhuǎn)化模塊和顯示譯碼模塊,左邊是輸入控制信號,右邊是顯示計時結(jié)果的數(shù)碼顯示管,用六位BCD七段數(shù)碼管顯示讀數(shù),顯示格式如圖2,計時范圍為:1小時,精度為0.01s。


圖1 電子秒表原理結(jié)構(gòu)圖


圖2 數(shù)值秒表顯示格式

輸入時鐘信號由32MHz的石英晶振提供,考慮到設(shè)計指標(biāo)要求秒表精度為0.01秒,計數(shù)脈沖的時鐘輸入就應(yīng)該是頻率為100Hz的脈沖,所以先要設(shè)計一個320000分頻器,分頻器的輸出可作計數(shù)器的輸入;其次計數(shù)模塊設(shè)計應(yīng)綜合考慮秒表的計時范圍(1小時)和顯示輸出(6位輸出),6位輸出中有兩位是六進制輸出,其余四位是十進制輸出,所以可通過設(shè)計4個模10計數(shù)器和2個模6計數(shù)器來實現(xiàn),其中較低位的進位輸出就是高位的計數(shù)輸入端。

控制模塊應(yīng)包括開始計時/停止計時、復(fù)位兩個按鈕,即電路設(shè)計經(jīng)常用到的使能端和清零端,這兩個控制端口直接接到計數(shù)器的清零和史能端即可實現(xiàn)復(fù)位、開始計時/停止計時;但是外圍使能輸入需要經(jīng)過使能轉(zhuǎn)換電路后,才可變?yōu)橛嫈?shù)器可用的使能控制信號。因此在輸入使能信號和計數(shù)器使能輸入之間需設(shè)計一個信號轉(zhuǎn)換模塊。

顯示計數(shù)結(jié)果的模塊實現(xiàn)較為簡單,只需將六位計數(shù)結(jié)果通過七段譯碼電路接到輸出即可點亮數(shù)碼管,無需時序控制,直接用組合邏輯電路就可以實現(xiàn)。數(shù)碼管顯示可以采用掃描顯示,用一個頻率1KHz的信號掃描一個多路選擇器,實現(xiàn)對六位已經(jīng)鎖存的計數(shù)結(jié)果的掃描輸出。


2 各功能模塊設(shè)計

2.1 分頻器模塊

分頻器的功能是提供標(biāo)準(zhǔn)時鐘控制信號以精確控制計數(shù)器的開閉,提供的標(biāo)準(zhǔn)信號是32MHz,根據(jù)設(shè)計精度0.01s的要求,輸出信號是100Hz,所以該分頻器實現(xiàn)的功能是320000分頻,具體的VHDL源程序:

process(clk)

begin

if(clk'event and clk='1')then

if (q=159999)then

q<>

count_temp<=not>

else

 q<=q>

end if;

end if;

end process;

2.2 計數(shù)模塊

該計數(shù)器要實現(xiàn)最大計數(shù)值為59分59秒99的計數(shù),而且為了數(shù)碼管顯示方便,該模塊必須通過計數(shù)器的級聯(lián)來實現(xiàn),即首先分別設(shè)計一個模6計數(shù)器和一個模10計數(shù)器,然后將他們級聯(lián),其中調(diào)用4次模10計數(shù)器、2次模6計數(shù)器,這樣可以比直接設(shè)計模100 的計數(shù)器和模60的計數(shù)器節(jié)省資源。級聯(lián)時低位的計數(shù)進位輸出接高位的計數(shù)輸入端,如圖3所示。再考慮到控制模塊的要求,每個計數(shù)器有三個輸入端:時鐘、使能和清零,兩個輸出端:計數(shù)輸出和進位輸出,采用同步使能異步清零的設(shè)計方法,每個計數(shù)器的使能和清零端都與外圍的使能和清零端相聯(lián)。


圖3 模6/模10計數(shù)器級聯(lián)結(jié)構(gòu)圖

模6計數(shù)器的VHDL源程序如下:

 process(clear,clk)

begin

if (clear='1') then

 tmp<>

carryout<>

elsif(clk'event and clk='1') then

if (rst='0') then

if (tmp='0101') then

carryout<>

tmp<>

else

tmp<=tmp>

carryout<>

end if;

end if;

end if;

模10計數(shù)器的VHDL源程序與模6計數(shù)器類似,為節(jié)省篇幅,不再給出。

2.3 使能信號轉(zhuǎn)換模塊

數(shù)字秒表輸入的開始和停止信號是單個脈沖信號,而計數(shù)器要持續(xù)計數(shù)所需的使能信號是持續(xù)的高電平,所以需要通過使能控制電路實現(xiàn)使能信號的轉(zhuǎn)換。該模塊的VHDL源程序以及ModelSim仿真輸出結(jié)果如下:

該模塊源程序:

process(enablein)

begin

if(enablein'event and enablein='1')then

temp<= not="">

end if ;

end process;

2.4 譯碼顯示模塊

由上面的設(shè)計可知,計數(shù)器輸出為二進制碼,不能直接點亮數(shù)碼管,要想將計數(shù)結(jié)果通過數(shù)碼管顯示必須再設(shè)計一個七段譯碼電路,以便將計數(shù)結(jié)果輸出。通過分析可知該譯碼器是一個4輸入,7輸出元件,其真值表如表1所示:


根據(jù)以上真值表可寫出譯碼電路VHDL源程序如下:

process(datainput)

begin

case datainput is

when '0000'=>dataoutput<>

when '0001'=>dataoutput<>

when '0010'=>dataoutput<>

when '0011'=>dataoutput<>

when '0100'=>dataoutput<>

when '0101'=>dataoutput<>

when '0110'=>dataoutput<>

when '0111'=>dataoutput<>

when '1000'=>dataoutput<>

when '1001'=>dataoutput<>

when others=>dataoutput<>

end case;

end process;

3 功能驗證以及下載實現(xiàn)

完成以上各個子模塊的設(shè)計后,該數(shù)字秒表的模塊設(shè)計就基本完成了,剩下的工作就是通過一個頂層文件將各個子模塊連接起來。在頂層文件中可以將以上各個子模塊看作一個個黑匣子,只將其輸入輸出端對應(yīng)相連就可以了。下面是該頂層文件的VHDL源程序:

architecture Behavioral of topfile is

signal clk:std_logic:='0';

signal enableout:std_logic:='0';

signal data0,data1,data2,

data3,data4,data5:std_logic_vector(3

downto 0):='0000';

component abc

port(clk:in std_logic;

dout:out std_logic);

end component;

component enable

port(enablein:in std_logic;

enableout:out std_logic);

end component;

component highlevel

port(rst,clk,clear:in std_logic;

output1,output2,output3,

output4,output5,output6:out

std_logic_vector(3 downto 0);

carryout:out std_logic);

end component;

component yima

port(datainput:in std_logic_vector(3 downto 0);

dataoutput: out std_logic_vector(6 downto 0));

end component;

begin


u0:abc port map(clkin,clk);


u1:enable port map(enablein,enableout);

u2:highlevel port map(enableout,clk,clear,data0,data1,data2,data3,data4,data5);

u3:yima port map(data0,dataout0);

u4:yima port map(data1,dataout1);

u5:yima port map(data2,dataout2);

u6:yima port map(data3,dataout3);

u7:yima port map(data4,dataout4);


u8:yima port map(data5,dataout5);

end Behavioral;

由于各個子模塊都已經(jīng)經(jīng)過驗證無誤,并且頂層文件中不涉及復(fù)雜的時序關(guān)系,相當(dāng)于只是將各個模塊用導(dǎo)線連接起來,只要各個端口的連接對應(yīng)正確即可,所以不需寫專門的test bench進行驗證。完成以上設(shè)計后,即可進行邏輯綜合,綜合無誤后進行管腳適配,生成.bit文件然后下載到實驗板上測試。經(jīng)過反復(fù)多次測試,以上設(shè)計完全滿足了預(yù)期的設(shè)計指標(biāo),開始/停止按鍵和清零按鍵都能準(zhǔn)確的控制秒表的運行,七段顯示數(shù)碼管也能夠準(zhǔn)確的顯示計時結(jié)果。通過與標(biāo)準(zhǔn)秒表對比,該設(shè)計的計時誤差在0.03s以內(nèi),而這其中也包括實驗板上晶振由于長期使用所帶來的誤差。


4 結(jié)束語

本文所介紹數(shù)字秒表設(shè)計方法,采用了當(dāng)下最流行的EDA設(shè)計手段。在Xinlinx FPGA開發(fā)環(huán)境下,采用至上而下的模塊化設(shè)計方法,使得系統(tǒng)開發(fā)速度快、成本低、系統(tǒng)性能大幅度提升。通過實驗驗證,本文設(shè)計的數(shù)字秒表計時準(zhǔn)確、性能穩(wěn)定,可以很容易嵌入其他復(fù)雜的數(shù)字系統(tǒng),充當(dāng)計時模塊。

利用EDA設(shè)計工具,結(jié)合基于FPGA的可編程實驗板,輕松實現(xiàn)電子芯片的設(shè)計,現(xiàn)場觀察實驗結(jié)果,大大縮短了產(chǎn)品的設(shè)計周期和調(diào)試周期,提高了設(shè)計的可靠性和成功率,體現(xiàn)了邏輯器件在數(shù)字設(shè)計中優(yōu)越性。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多