摘 要:以FPGA為核心的數(shù)字秒表,具有外圍電路少、集成度高、可靠性強(qiáng)等特點(diǎn)。該數(shù)字秒表的設(shè)計(jì)是以VHDL為開(kāi)發(fā)工具,以QuartusⅡ?yàn)檐浖脚_(tái),采用模塊化設(shè)計(jì),并通過(guò)數(shù)碼管驅(qū)動(dòng)電路動(dòng)態(tài)顯示計(jì)時(shí)結(jié)果。給出部分模塊的VHDL源程序和仿真結(jié)果,仿真結(jié)果表明該設(shè)計(jì)方案的正確,展示了VHDL語(yǔ)言的強(qiáng)大功能和優(yōu)秀特性。
關(guān)鍵詞:FPGA;VHDL;數(shù)字秒表;Quartus Ⅱ
Design of Digital Stopwatch Based on FPGA
YANG Yuancheng,HAO Chuangshe,LEI Jinli
(Xi′an Institute of Applied Optics,Xi′an,710065,China
Abstract:The digital stopwatch whose core is FPGA with virtue of few periphery electric circuit,high intergration and high reliability.It is modular designed with VHDL language and QUARTUSⅡ software.The digital stopwatch can be displayed with the digital driving circuit.The VHDL source program and simulating results of digital stopwatch are given.The simulating results show that the design method is correct,it shows she powerful function and excellent character of the VHDL.
eywords:FPGA;VHDL;digital stopwatch;Quartus Ⅱ
應(yīng)用VHDL語(yǔ)言設(shè)計(jì)數(shù)字系統(tǒng),很多設(shè)計(jì)工作可以在計(jì)算機(jī)上完成,從而縮短了系統(tǒng)的開(kāi)發(fā)時(shí)間,提高了工作效率。本文介紹一種以FPGA為核心,以VHDL為開(kāi)發(fā)工具的數(shù)字秒表,并給出源程序和仿真結(jié)果。
1 系統(tǒng)設(shè)計(jì)方案
1.1 系統(tǒng)總體框圖
數(shù)字秒表主要有分頻器、計(jì)數(shù)模塊、功能控制模塊、勢(shì)能控制模塊和顯示輸出模塊組成。系統(tǒng)框圖如圖1所示。
本次的設(shè)計(jì)仿真選用以EP1C6Q240芯片為核心的FPGA開(kāi)發(fā)板,該開(kāi)發(fā)板提供了較完善的外圍周邊電路和信號(hào)接口,并提供了一塊4位7段數(shù)碼管的擴(kuò)展板,為本次設(shè)計(jì)提供了硬件條件。在設(shè)計(jì)中,功能控制模塊根據(jù)控制選擇不同的功能狀態(tài)的時(shí)間輸出,通過(guò)勢(shì)能控制模塊和顯示輸出模塊驅(qū)動(dòng)7段數(shù)碼管顯示相應(yīng)的時(shí)間。
1.2 系統(tǒng)功能要求
(1 具有時(shí)鐘秒表系統(tǒng)功能要求顯示功能,用4個(gè)數(shù)碼管分別顯示秒和百分秒;
(2 具有3種功能狀態(tài):系統(tǒng)時(shí)間運(yùn)行狀態(tài),系統(tǒng)時(shí)間至零狀態(tài),時(shí)鐘正常顯示狀態(tài),通過(guò)輸入控制信號(hào)可以使系統(tǒng)在這3個(gè)狀態(tài)之間切換,使數(shù)碼管顯示相應(yīng)狀態(tài)的時(shí)間;
(3 開(kāi)啟時(shí)間設(shè)定、關(guān)閉時(shí)間設(shè)定可通過(guò)控制信號(hào)中的時(shí)間調(diào)節(jié)來(lái)設(shè)置,在秒設(shè)置方面每按一下,秒就會(huì)自動(dòng)加1,采用60進(jìn)制計(jì)數(shù),當(dāng)計(jì)數(shù)到59時(shí)又會(huì)恢復(fù)為00;百分秒設(shè)置方面每按一下,百分秒會(huì)自動(dòng)加1,采用100進(jìn)制計(jì)數(shù),當(dāng)計(jì)數(shù)到99時(shí),向上進(jìn)位并恢復(fù)00。系統(tǒng)時(shí)間可以同單獨(dú)的至零信號(hào),將數(shù)碼管顯示時(shí)間直接恢復(fù)到00.00狀態(tài)。
2 模塊功能設(shè)計(jì)及仿真
2.1 分頻模塊
開(kāi)發(fā)板提供的系統(tǒng)時(shí)鐘為50 MHz,通過(guò)分頻模塊3次分頻,將系統(tǒng)的時(shí)鐘信號(hào)分為100 Hz和1 000 Hz分別提供給計(jì)數(shù)模塊和勢(shì)能控制模塊作為時(shí)鐘控制信號(hào)。該模塊部分VHDL源程序如下:
c1:process(clk_in
begin
if(clk_in′event and clk_in=′1′ then
if(count=\"110001\" then
count<=\"000000\";
clk1<=′1′;
else
clk1<=′0′;
count<=count+1;
end if;end if;
end process c1;
c2:process(clk1
begin
if(clk1′event and clk1=′1′ then
if(count1=\"1111100111\" then
count1<=\"0000000000\";
clk2<=′1′;
else
clk2<=′0′;
count1<=count1+1;
end if;end if;
clk_c<=clk2;
end process c2;
c3:process(clk2
begin
if(clk2′event and clk2=′1′ then
if(count2=\"1001\" then
count2<=\"0000\";
clk3<=′1′;
else
clk3<=′0′;
count2<=count2+1;
end if;end if;
clk_con<=clk3;
end process c3;
2.2 計(jì)數(shù)模塊
計(jì)數(shù)模塊中,時(shí)鐘信號(hào)是100 Hz作為秒表的百分秒輸入,百分秒為100進(jìn)制計(jì)數(shù)器,其進(jìn)位輸出作為秒的計(jì)數(shù)時(shí)鐘,秒為60進(jìn)制計(jì)數(shù)器。控制信號(hào)輸入端的beginstop和reset信號(hào)控制計(jì)數(shù)器的開(kāi)始、停止和至零。該模塊部分VHDL源程序如下,方針結(jié)果如圖2所示:
process(clk_con
begin
if reset=′1′ then
d0(3 downto 0<=\"0000\";
d1(3 downto 0<=\"0000\";
d2(3 downto 0<=\"0000\";
d3(3 downto 0<=\"0000\";
elsif(clk_con′event and clk_con=′1′ then
if beginstop=′1′ then
d0<=d0+1;
if d0(3 downto 0=\"1001\" then
d0(3 downto 0<=\"0000\";d1<=d1+1;
if d1(3 downto 0=\"1001\" then
d1(3 downto 0<=\"0000\";d2<=d2+1;
if d2(3 downto 0=\"1001\" then
d2(3 downto 0<=\"0000\";d3<=d3+1;
if d3(3 downto 0=\"0101\" then
d3(3 downto 0<=\"0000\";
end if;end if;end if;
end if;end if;end if;
num0<=d0;num1<=d1;
num2<=d2;num3<=d3;
end process;
2.3 勢(shì)能控制模塊
本次設(shè)計(jì)選用的開(kāi)發(fā)板數(shù)碼管擴(kuò)展板的數(shù)碼顯示采用的是4個(gè)數(shù)碼管動(dòng)態(tài)掃描輸出,一般只要每個(gè)掃描頻率超過(guò)人的眼睛視覺(jué)暫留頻率24 Hz以上就可以達(dá)到點(diǎn)亮單個(gè)顯示而不閃爍,掃描頻率采用1 kHz信號(hào)。通過(guò)勢(shì)能控制,每個(gè)數(shù)碼管的顯示頻率為250 Hz,滿足顯示要求。該模塊部分VHDL源程序如下:
process(clk_c
begin
if(clk_c′event and clk_c=′1′ then
if count=\"11\" then
count<=\"00\";
else
count<=count+1;
end if;
end if;
case count is
when \"00\"=>led<=\"0001\";
when \"01\"=>led<=\"0010\";
when \"10\"=>led<=\"0100\";
when \"11\"=>led<=\"1000\";
when others=>1;
end case;
end process;
2.4 顯示控制模塊
本次設(shè)計(jì)選用的開(kāi)發(fā)板在4位數(shù)碼管輸入方面只提供1個(gè)數(shù)據(jù)接口,用來(lái)動(dòng)態(tài)顯示4位數(shù)據(jù),在數(shù)據(jù)輸入信號(hào)方面要做到和勢(shì)能控制信號(hào)同頻率輸出,才能保證數(shù)碼顯示不會(huì)出錯(cuò)或顯示移位。該模塊部分VHDL源程序如下:
process(clk_mux4
begin
if(clk_mux4′event and clk_mux4=′1′ then
case count is
when \"00\"=>data<=num0;
when \"01\"=>data<=num1;
when \"10\"=>data<=num2;
when \"11\"=>data<=num3;
when others=>1;
end case;
if count=\"11\" then
count<=\"00\";
else
count<=count+1;
end if;end if;
end process;
led_data<=data;
architecture bhv of decode is
begin
segs<= \"1111110\" when data=\"0000\" else
\"0110000\" when data=\"0001\" else
\"1101101\" when data=\"0010\" else
\"1111001\" when data=\"0011\" else
\"0110011\" when data=\"0100\" else
\"1011011\" when data=\"0101\" else
\"1011111\" when data=\"0110\" else
\"1110000\" when data=\"0111\" else
\"1111111\" when data=\"1000\" else
\"1111011\" when data=\"1001\" else
\"1110111\" when data=\"1010\" else
\"0011111\" when data=\"1011\" else
\"1001110\" when data=\"1100\" else
\"0111101\" when data=\"1101\" else
\"1001111\" when data=\"1110\" else
\"1000111\";
end bhv;
同時(shí)通過(guò)控制信號(hào)示系統(tǒng)處在不同的功能狀態(tài):系統(tǒng)時(shí)間運(yùn)行狀態(tài),系統(tǒng)時(shí)間至零狀態(tài),時(shí)鐘正常顯示狀態(tài)。利用功能轉(zhuǎn)換信號(hào)實(shí)現(xiàn)3個(gè)功能狀態(tài)之間的轉(zhuǎn)換,并產(chǎn)生相應(yīng)的控制信號(hào)去控制顯示輸出模塊不同狀態(tài)的正確顯示。其部分源程序如下:
process(fun
variable cnt :std_logic_vector(1 downto 0;
begin
if (fun′event and fun=′1′ then
cnt:=cnt+1;
case cnt is
when \"00\"=>en<=\"00\";
when \"01\"=>en<=\"01\";
when \"10\"=>en<=\"10\";
when others=>1;
end case;
end if;
en_time<=en(0;[JY]//系統(tǒng)時(shí)間運(yùn)行狀態(tài)
en_on<=en(1;[JY]//系統(tǒng)時(shí)間至零狀態(tài)
en_off<=en(2; [JY]//時(shí)鐘正常顯示狀態(tài)
end process;
3 系統(tǒng)部分功能仿真
各部分模塊完成后,用QuartusⅡ?qū)Τ绦蚓幾g、仿真、[LL]得到的仿真波形如圖3所示。
本系統(tǒng)采用的FPGA芯片為Altera公司的EP1C6Q240,用VHDL和QuartusⅡ軟件工具開(kāi)發(fā),設(shè)計(jì)輸入完成后,進(jìn)行整體的編譯和邏輯仿真,然后進(jìn)行轉(zhuǎn)換、延時(shí)仿真生成配置文件,最后下載至FPGA器件,完成結(jié)果功能配置,實(shí)現(xiàn)其硬件功能。
4 結(jié) 語(yǔ)
該系統(tǒng)運(yùn)用先進(jìn)的EDA軟件和VHDL,采用模塊法自頂向下的設(shè)計(jì)原則,并借助FPGA實(shí)現(xiàn)數(shù)字秒表的設(shè)計(jì),充分體現(xiàn)了現(xiàn)代數(shù)字電路設(shè)計(jì)系統(tǒng)芯片化,芯片化設(shè)計(jì)的思想突破了傳統(tǒng)電子系統(tǒng)的設(shè)計(jì)模式,使系統(tǒng)開(kāi)發(fā)速度快、成本低、系統(tǒng)性能大幅度地提升。
參 考 文 獻(xiàn)
[1]侯伯亨,顧新.VHDL硬件描述語(yǔ)言與數(shù)字邏輯電路設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,1999.
[2]盧毅,賴(lài)杰.VHDL與數(shù)字電路設(shè)計(jì)[M].北京:科學(xué)出版社,2002.
[3]崔剛, 陳文楷.基于FPGA的數(shù)字鐘設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2004,27(22:102-103.