《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的數(shù)字秒表設(shè)計(jì)與實(shí)現(xiàn)
基于FPGA的數(shù)字秒表設(shè)計(jì)與實(shí)現(xiàn)
來(lái)源:微型機(jī)與應(yīng)用2014年第5期
王媛媛
(西安科技大學(xué) 電氣與控制工程學(xué)院,,陜西 西安 710054)
摘要: 在Quartus II軟件平臺(tái)的基礎(chǔ)上,,基于VHDL語(yǔ)言及圖形輸入,采用FPGA設(shè)計(jì)了一款數(shù)字秒表,同時(shí),,給出了數(shù)字秒表系統(tǒng)設(shè)計(jì)方案及各個(gè)功能模塊的設(shè)計(jì)原理,。通過(guò)對(duì)系統(tǒng)進(jìn)行編譯、仿真,,并下載到Cyclone系列EP2C5Q208C8器件中進(jìn)行測(cè)試,,結(jié)果表明,本設(shè)計(jì)能實(shí)現(xiàn)計(jì)時(shí)顯示,、啟停,、復(fù)位及計(jì)時(shí)溢出報(bào)警功能。
關(guān)鍵詞: FPGA 數(shù)字秒表 VHDL
Abstract:
Key words :

摘  要: 在Quartus II軟件平臺(tái)的基礎(chǔ)上,,基于VHDL語(yǔ)言及圖形輸入,,采用FPGA設(shè)計(jì)了一款數(shù)字秒表,同時(shí),,給出了數(shù)字秒表系統(tǒng)設(shè)計(jì)方案及各個(gè)功能模塊的設(shè)計(jì)原理,。通過(guò)對(duì)系統(tǒng)進(jìn)行編譯、仿真,,并下載到Cyclone系列EP2C5Q208C8器件中進(jìn)行測(cè)試,,結(jié)果表明,本設(shè)計(jì)能實(shí)現(xiàn)計(jì)時(shí)顯示,、啟停,、復(fù)位及計(jì)時(shí)溢出報(bào)警功能。
關(guān)鍵詞: 數(shù)字秒表,;VHDL,;FPGA

 數(shù)字秒表是一種常用的計(jì)時(shí)工具,以其價(jià)格低廉,、走時(shí)精確、使用方便,、功能多而倍受廣大用戶的喜愛(ài)[1],。而基于FPGA的設(shè)計(jì)是當(dāng)前數(shù)字系統(tǒng)設(shè)計(jì)領(lǐng)域中的重要方式之一[2]。同時(shí),,基于FPGA的片上系統(tǒng)與基于專用集成電路(ASIC)的片上系統(tǒng)相比,,具有風(fēng)險(xiǎn)小、開(kāi)發(fā)周期短,、成本低,、可擦寫(xiě)等優(yōu)點(diǎn)[3]。其可以完全由用戶通過(guò)軟件進(jìn)行配置和編程,,從而完成某種特定的功能,,且可以反復(fù)擦寫(xiě)。在修改和升級(jí)時(shí)不需額外地改變PCB電路板,只是在計(jì)算機(jī)上修改和更新程序,,使硬件設(shè)計(jì)工作成為軟件工作,,從而縮短了系統(tǒng)的開(kāi)發(fā)周期,提高了實(shí)現(xiàn)的靈活性并降低了成本,。本文基于FPGA開(kāi)發(fā)平臺(tái),,采用VHDL硬件描述語(yǔ)言設(shè)計(jì)了一款數(shù)字秒表,實(shí)現(xiàn)了以下功能:按鍵1(K1),,啟動(dòng)和停止秒表,;按鍵2(K2),復(fù)位(清零),;蜂鳴器實(shí)現(xiàn)溢出報(bào)警,;數(shù)碼管實(shí)現(xiàn)計(jì)時(shí)顯示。
1 基于FPGA的數(shù)字秒表設(shè)計(jì)
1.1 系統(tǒng)設(shè)計(jì)

 數(shù)字秒表常用于體育競(jìng)賽以及各種要求有較精確計(jì)時(shí)的場(chǎng)合,,其主要指標(biāo)參數(shù)和功能要求有:精度及分辨率,,計(jì)時(shí)長(zhǎng)度,啟,、停,,復(fù)位等。根據(jù)設(shè)計(jì)的指標(biāo)及功能要求,,系統(tǒng)分為分頻模塊,、計(jì)數(shù)模塊、顯示控制模塊和譯碼,、顯示模塊,,其總體結(jié)構(gòu)框圖如圖1所示。分頻模塊將FPGA開(kāi)發(fā)板提供的50 MHz時(shí)鐘信號(hào)進(jìn)行分頻,,得到計(jì)數(shù)及數(shù)碼管動(dòng)態(tài)掃描顯示所需的頻率,;計(jì)數(shù)模塊由十進(jìn)制和六進(jìn)制計(jì)數(shù)器組成,用于實(shí)現(xiàn)秒表計(jì)時(shí)功能,,其輸出數(shù)據(jù)首先送給顯示控制模塊,,該模塊的主要功能是實(shí)現(xiàn)數(shù)碼管的動(dòng)態(tài)掃描顯示控制,提供顯示的位選控制信號(hào)和段選控制信號(hào),;最后是譯碼,、顯示輸出,將計(jì)時(shí)時(shí)間進(jìn)行譯碼并正確顯示在數(shù)碼管上,。

1.2 子模塊功能設(shè)計(jì)與仿真
1.2.1 分頻模塊

 分頻模塊的主要作用是將較高頻率的輸入時(shí)鐘信號(hào)進(jìn)行分頻,,產(chǎn)生設(shè)計(jì)所需頻率的時(shí)鐘信號(hào)。模塊框圖如圖2所示,。FPGA開(kāi)發(fā)板提供的時(shí)鐘信號(hào)頻率為50 MHz,,而設(shè)計(jì)要求秒表精度為0.01 s,,即需要計(jì)數(shù)時(shí)鐘頻率為100 Hz,同時(shí)顯示掃描頻率需1 kHz,,因此,,通過(guò)分頻模塊對(duì)時(shí)鐘信號(hào)進(jìn)行分頻,得到100 Hz和1 kHz的時(shí)鐘信號(hào),,分別提供給計(jì)數(shù)模塊和顯示控制模塊,。該模塊VHDL程序如下。

ENTITY f_div IS
        PORT(
        clk:IN STD_LOGIC,;
        fout100,,fout1k:OUT STD_LOGIC);
        END f_div,;
ARCHITECTURE one OF f_div IS
signal f100:std_logic,;
signal f1k:std_logic;
    BEGIN
process (clk)
variable count:integer range 0 to 25e4-1,;
begin if clk ′event and clk=′1′ then
if count=25e4-1 then f100<=not f100,;
count:=0;
else count:=count+1,;
end if,;
end if;
fout100<=f100,;
end process,;
process(clk)
variable count1:integer range 0 to 25e3-1;
begin if clk ′event and clk=′1′then
if count1=25e3-1 then f1k<=not f1k,;
count1:=0,;
else count1:=count1+1;
end if,;
end if,;
fout1k<=f1k;
end process,;
END one,;
1.2.2 計(jì)數(shù)模塊
 計(jì)數(shù)模塊是秒表的核心模塊,完成計(jì)時(shí)功能,。本設(shè)計(jì)要求秒表分辨率為0.01 s,,即10 ms,,最大計(jì)時(shí)為:59 min,,59.99 s。因此,,該模塊包括4個(gè)十進(jìn)制計(jì)數(shù)器和兩個(gè)六進(jìn)制計(jì)數(shù)器,。通過(guò)十進(jìn)制和六進(jìn)制計(jì)數(shù)器的級(jí)聯(lián)組合,,分別產(chǎn)生秒表的百分秒(0~99)、秒(0~59)和分(0~59),。十進(jìn)制計(jì)數(shù)器為異步復(fù)位,、同步使能計(jì)數(shù)器,其程序代碼如下,。
entity counter10 is
port(clk,,rst,en:in std_logic,;
cq:out std_logic_vector(3 downto 0),;
cout:out std_logic);
end counter10,;
architecture behav of counter10 is
begin
process(clk,,rst,en)
variable cqi:std_logic_vector(3 downto 0),;
begin
         if rst=′0′ then cqi:=(others=>′0′),;
      elsif clk ′event and clk=′1′ then
       if en=′1′ then
        if cqi<9 then cqi:=cqi+1;
         else cqi:=(others=>′0′),;
          end if,;
      end if;
end if,;
       if clk ′event and clk=′1′ then
       if cqi=9 then cout<=′1′,;
  else cout<=′0′;end if,;
end if,;
   cq<=cqi;
end process,;
end behav,;
 十進(jìn)制計(jì)數(shù)器的仿真波形如圖3所示。

1.2.3 數(shù)碼管動(dòng)態(tài)掃描顯示模塊
 通過(guò)分頻模塊和計(jì)數(shù)模塊,,已可以實(shí)現(xiàn)秒表的計(jì)時(shí)功能,,接下來(lái)要將秒表的計(jì)時(shí)時(shí)間通過(guò)數(shù)碼管顯示出來(lái)。數(shù)碼管顯示方式有靜態(tài)顯示和動(dòng)態(tài)掃描顯示,,本設(shè)計(jì)采用數(shù)碼管動(dòng)態(tài)掃描顯示方式,。
 (1)數(shù)碼管動(dòng)態(tài)掃描顯示原理分析
 數(shù)碼管顯示的方式有靜態(tài)顯示方式和動(dòng)態(tài)顯示方式兩種,。靜態(tài)顯示的特點(diǎn)是每個(gè)數(shù)碼管的段選必須接一個(gè)8位數(shù)據(jù)線來(lái)保持顯示的字型碼,。當(dāng)送入一次字型碼后,顯示字形可一直保持,,直到送入新字形碼為止,。這種方法的優(yōu)點(diǎn)是占用CPU時(shí)間少,,顯示便于監(jiān)測(cè)和控制,缺點(diǎn)是硬件比較復(fù)雜,、成本高,。因此,在實(shí)際應(yīng)用中,,一般采用動(dòng)態(tài)顯示方式,,即所有數(shù)碼管的段選都并聯(lián)在一起,由位選線控制哪一位數(shù)碼管有效,。所謂動(dòng)態(tài)顯示即輪流向各位數(shù)碼管送出字型碼和相應(yīng)的位選,,利用發(fā)光管的余輝和人眼視覺(jué)暫留作用使人感覺(jué)數(shù)碼管是同時(shí)顯示的。在編程時(shí),,需要輸出段選和位選信號(hào),,位選信號(hào)選中其中一個(gè)數(shù)碼管,然后輸出段碼,,使該數(shù)碼管顯示所需的內(nèi)容,,延時(shí)一段時(shí)間后,再選中另一個(gè)數(shù)碼管,,再輸出對(duì)應(yīng)的段碼,,高速交替。在動(dòng)態(tài)顯示程序中,,各個(gè)位的延時(shí)時(shí)間長(zhǎng)短是非常重要的,,如果延時(shí)時(shí)間長(zhǎng),則會(huì)出現(xiàn)閃爍現(xiàn)象,;如果延時(shí)時(shí)間短,,則會(huì)出現(xiàn)顯示暗且有重影。
?。?)顯示控制部分
 根據(jù)對(duì)數(shù)碼管動(dòng)態(tài)掃描顯示原理的分析,,結(jié)合設(shè)計(jì)的功能要求,選用開(kāi)發(fā)板上6個(gè)共陰數(shù)碼管掃描輸出顯示秒表的分,、秒和百分秒,,掃描頻率一般只要超過(guò)人眼的視覺(jué)暫留頻率24 Hz以上就可以點(diǎn)亮單個(gè)數(shù)碼管而不閃爍,本設(shè)計(jì)采用1 kHz掃描頻率,。位選模塊框圖如圖4所示,。

位選程序代碼如下所示。
entity sel is
port(clk:in std_logic,;
sel:out std_logic_vector(2 downto 0)),;
end sel;
architecture one of sel is
signal CY:std_logic_vector(2 downto 0),;
begin
process(clk)
begin
if clk ′event and clk=′1′ then
    CY<=CY+1,;
end if;
sel<=CY,;
end process,;
end one;
 顯示控制原理示意圖如圖5所示,。位選信號(hào)在1 kHz時(shí)鐘的作用下循環(huán)掃描每位數(shù)碼管,,使各數(shù)碼管高速交替顯示輸出所送入的數(shù)據(jù)信號(hào)。在顯示控制模塊的作用下數(shù)碼管分別顯示對(duì)應(yīng)內(nèi)容:秒表的分,、秒和毫秒,,比如:顯示10:59:96,即10分59.96秒,。顯示控制模塊框圖如圖6所示,,顯示控制程序如下所示。

entity weiselcon is
port(sel:in std_logic_vector(2 downto 0),;
            min1,,min0,sec1,,sec0,,microsec1,microsec0:in
std_logic_vector(3 downto 0),;
      Q:out std_logic_vector(3 downto 0)),;
end;
architecture behav of weiselcon is
begin
process(sel,,min1,,min0,sec1,,sec0,,microsec1,microsec0)
begin
case(sel)is
when "000"=>Q<=min1,;
when"001"=>Q<=min0,;
when"010"=>Q<=sec1;
when"011"=>Q<=sec0,;
when"100"=>Q<=microsec1,;
when"101"=>Q<=microsec0;
when others=>Q<="1111",;
end case,;
end process;
end behav,;
?。?)譯碼,、顯示部分
 LED數(shù)碼管是由8個(gè)發(fā)光二極管封裝而成的,每段為一個(gè)發(fā)光二極管,,其字形結(jié)構(gòu)如圖7所示,。選擇點(diǎn)亮不 同的段,可以顯示出不同的字形,,例如,,當(dāng)“a,b,,c,,d,g”字段被點(diǎn)亮?xí)r,,顯示字符“3”,。

 譯碼、顯示部分的主要作用是將顯示控制模塊輸出的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成0~9的十進(jìn)制數(shù)據(jù)在數(shù)碼管上顯示,。其VHDL代碼如下所示,。
process(data)begin
case data is
when"0000"=>Y<="0111111";--顯示字符"0"
when"0001"=>Y<="0000110",;--顯示字符"1"
when"0010"=>Y<="1011011",;
when"0011"=>Y<="1001111";
when"0100"=>Y<="1100110",;
when"0101"=>Y<="1101101",;
when"0110"=>Y<="1111101";
when"0111"=>Y<="0000111",;
when"1000"=>Y<="1111111",;
when"1001"=>Y<="1101111";--顯示字符"9"
when others=>Y<="0000000",;end case,;
end process;
2 基于FPGA的數(shù)字秒表的實(shí)現(xiàn)
 在Quartus II開(kāi)發(fā)平臺(tái)上實(shí)現(xiàn)了數(shù)字秒表系統(tǒng)設(shè)計(jì),,其原理框圖如圖8所示,。

 

 

 對(duì)系統(tǒng)整體進(jìn)行了仿真分析,其仿真波形如圖9所示,。

3 編程下載與測(cè)試
 本系統(tǒng)采用VHDL硬件描述語(yǔ)言完成了編程,,并在Quartus II集成開(kāi)發(fā)環(huán)境下進(jìn)行了綜合、編譯和仿真分析,,最后將設(shè)計(jì)引腳與硬件電路進(jìn)行適配,,將程序代碼通過(guò)下載器下載至FPGA,本設(shè)計(jì)采用的是EP2C5Q208C8 FPGA。經(jīng)過(guò)調(diào)試與驗(yàn)證,,系統(tǒng)實(shí)現(xiàn)了如下功能:(1)具有復(fù)位功能,,任何時(shí)刻都可以進(jìn)行清零復(fù)位,復(fù)位時(shí)顯示00:00:00,;(2)具有啟動(dòng),、停止功能,可以實(shí)現(xiàn)秒表計(jì)時(shí)開(kāi)啟和計(jì)時(shí)中斷停止,,計(jì)時(shí)時(shí)長(zhǎng)為59分59.99秒;(3)具有溢出報(bào)警功能,。本系統(tǒng)實(shí)現(xiàn)了設(shè)計(jì)指標(biāo)要求,。
 本設(shè)計(jì)基于FPGA開(kāi)發(fā)平臺(tái),采用模塊化設(shè)計(jì)思想,、VHDL硬件描述語(yǔ)言和原理圖輸入方法,,并經(jīng)過(guò)實(shí)際電路測(cè)試,達(dá)到了預(yù)期的設(shè)計(jì)指標(biāo)要求,。與普通電子秒表系統(tǒng)相比,,該系統(tǒng)具有外圍電路少、精度高,、集成度高,、可靠性強(qiáng)等優(yōu)點(diǎn)[4]。除此之外,,也是基于FPGA的數(shù)字系統(tǒng)最為突出的特點(diǎn),,即當(dāng)系統(tǒng)需要升級(jí),或更新某項(xiàng)設(shè)計(jì)指標(biāo)時(shí),,用戶不需要重新設(shè)計(jì)或更換硬件電路,,只需要通過(guò)軟件修改程序即可,這樣既可以節(jié)約成本,,也可以大大縮短設(shè)計(jì)周期,。
參考文獻(xiàn)
[1] 樊金榮,謝智文.數(shù)字倒計(jì)時(shí)秒表的設(shè)計(jì)與實(shí)現(xiàn)[J].中南民族大學(xué)學(xué)報(bào),,2005,,24(1):79-80.
[2] 孫富明,李笑盈.基于多種EDA工具的FPGA設(shè)計(jì)[J].電子技術(shù)應(yīng)用,,2002(1):70-71.
[3] 崔健,,劉晉.基于FPGA嵌入式系統(tǒng)的研究與應(yīng)用[J].微型機(jī)與應(yīng)用,2010(3):8-10.
[4] 楊遠(yuǎn)成,,趙創(chuàng)社,,雷金利.基于FPGA的數(shù)字秒表的設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2008(12):52-53.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。