當(dāng)前位置:首頁 > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于FPGA的數(shù)字秒表設(shè)計(jì)與仿真

數(shù)字集成電路作為當(dāng)今信息時(shí)代的基石,不僅在信息處理、工業(yè)控制等生產(chǎn)領(lǐng)域得到普及應(yīng)用,并且在人們的日常生活中也是隨處可見,極大的改變了人們的生活方式。面對如此巨大的市場,要求數(shù)字集成電路的設(shè)計(jì)周期盡可能短、實(shí)驗(yàn)成本盡可能低,最好能在實(shí)驗(yàn)室直接驗(yàn)證設(shè)計(jì)的準(zhǔn)確性和可行性,因而出現(xiàn)了現(xiàn)場可編程邏輯門陣列FPGA.對于芯片設(shè)計(jì)而言,F(xiàn)PGA的易用性不僅使得設(shè)計(jì)更加簡單、快捷,并且節(jié)省了反復(fù)流片驗(yàn)證的巨額成本。對于某些小批量應(yīng)用的場合,甚至可以直接利用FPGA實(shí)現(xiàn),無需再去訂制專門的數(shù)字芯片。

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

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

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

 

 

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

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

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

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

2.1 分頻器模塊

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

process(clk)

begin

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

if (q=159999)then

q<=0;

count_temp<=not count_temp;

else

q<=q 1;

end if;

end if;

end process;

2.2 計(jì)數(shù)模塊

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

 

 

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

process(clear,clk)

begin

if (clear=‘1’) then

tmp<=“0000”;

carryout<=‘0‘;

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

if (rst=‘0’) then

if (tmp=“0101”) then

carryout<=‘1‘;

tmp<=“0000”;

else

tmp<=tmp 1;

carryout<=‘0‘;

end if;

end if;

end if;

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

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

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

該模塊源程序:

process(enablein)

begin

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

temp<= not temp;

end if ;

end process;

2.4 譯碼顯示模塊

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

 

 

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

process(datainput)

begin

case datainput is

when “0000”=>dataoutput<=“0000010”;

when “0001”=>dataoutput<=“1001111”;

when “0010”=>dataoutput<=“0010001”;

when “0011”=>dataoutput<=“0000101”;

when “0100”=>dataoutput<=“1001100”;[!--empirenews.page--]

when “0101”=>dataoutput<=“0100100”;

when “0110”=>dataoutput<=“0100000”;

when “0111”=>dataoutput<=“0001111”;

when “1000”=>dataoutput<=“0000000”;

when “1001”=>dataoutput<=“0000100”;

when others=>dataoutput<=“1111111”;

end case;

end process;

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

完成以上各個(gè)子模塊的設(shè)計(jì)后,該數(shù)字秒表的模塊設(shè)計(jì)就基本完成了,剩下的工作就是通過一個(gè)頂層文件將各個(gè)子模塊連接起來。在頂層文件中可以將以上各個(gè)子模塊看作一個(gè)個(gè)黑匣子,只將其輸入輸出端對應(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;

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

4 結(jié)束語

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

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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉