車保川
摘要:本文介紹了一種新型的基于FPGA的數(shù)字秒表的設(shè)計(jì)與實(shí)現(xiàn)方法,給出了頂層電路圖,和各模塊的設(shè)計(jì),增加了消除抖動(dòng)的控制方法,消除了開關(guān)按鍵的機(jī)械抖動(dòng)。通過編輯、編譯和器件編程,用MODELSIM仿真軟件進(jìn)行了仿真,并將編程器文件下載到ISP實(shí)驗(yàn)板TB-BD-TS101開發(fā)板中,經(jīng)實(shí)際電路測試驗(yàn)證,達(dá)到了預(yù)期的設(shè)計(jì)要求,顯示結(jié)果準(zhǔn)確無誤。
關(guān)鍵詞:FPGA;數(shù)字秒表;模塊;開關(guān)按鍵
中圖分類號:TN702 文獻(xiàn)標(biāo)識碼:A
1前言
當(dāng)今社會是數(shù)字化的社會,是數(shù)字集成電路廣泛應(yīng)用的社會。數(shù)字集成電路本身在不斷更新?lián)Q代,隨著電子技術(shù)的發(fā)展,設(shè)計(jì)人員更希望設(shè)計(jì)周期盡可能短,最好能在實(shí)驗(yàn)室、調(diào)試現(xiàn)場完成對邏輯塊和連線的配置,并且立即投入實(shí)際應(yīng)用之中,因而出現(xiàn)了現(xiàn)場可編程邏輯門陣列FPGA。
本文介紹了如何利用FPGA設(shè)計(jì)與實(shí)現(xiàn)數(shù)字秒表的全過程,利用了超高速硬件描述語言VHDL的EDA設(shè)計(jì)工具,采用的是Xinlinx 的低成本系列中的Spartan-3,型號為XC3S400-4PQ208C的芯片來實(shí)現(xiàn)系統(tǒng)功能,采用分模塊化思想編程,開關(guān)按鍵集計(jì)數(shù)、停止、清零與一體,節(jié)省資源,思路簡單,容易實(shí)現(xiàn)。
2秒表的功能要求
設(shè)計(jì)一個(gè)秒表stopwatch要求具有以下功能:有一個(gè)復(fù)位reset端子SW10,reset低電平有效;一個(gè)開關(guān)起、停、清零start/stop/clear端子SW7,系統(tǒng)啟動(dòng)后,第一次按SW7,秒表開始計(jì)數(shù),第二次按SW7,秒表停止計(jì)數(shù),第三次按SW7秒表清零。其頂層模塊如圖1 所示。
板子的主頻時(shí)鐘我們用32MHZ,秒表動(dòng)態(tài)的顯示在TS101板子的D5,D6,D7,D8 LED上,D5,D6表示分鐘位,D7,D8表示秒鐘,D6的小數(shù)點(diǎn)亮,表示分鐘和秒鐘的分隔。
3系統(tǒng)的模塊設(shè)計(jì)
圖2所示是數(shù)字秒表設(shè)計(jì)的頂層模塊圖,其中CLKIN是32MHz系統(tǒng)時(shí)鐘,RST是復(fù)位信號,可以對整個(gè)系統(tǒng)清零。
該模塊圖主要分為四個(gè)部分,第一部分是DCM(Digital Clock Manager)調(diào)用模塊。通過DCM的應(yīng)用,可以去除時(shí)鐘歪斜、頻率綜合與相位調(diào)整。
第二部分是消抖模塊,因?yàn)殚_關(guān)按鍵為機(jī)械彈性開關(guān),由于機(jī)械觸點(diǎn)的彈性作用,一個(gè)按鍵開關(guān)在按下的瞬間會有一連串的抖動(dòng),抖動(dòng)的長短由機(jī)械特性所決定,一般為5~15ms,抖動(dòng)引起電平信號波動(dòng),從而引起誤處理。為了確保一次按鍵動(dòng)作只確認(rèn)一次按鍵,必須消除抖動(dòng)。
第三部分是計(jì)數(shù)模塊,計(jì)數(shù)模塊內(nèi)部包括一個(gè)狀態(tài)控制進(jìn)程,控制開關(guān)的三個(gè)不同狀態(tài);一個(gè)分頻進(jìn)程,主要是把系統(tǒng)32MHz的時(shí)鐘分頻為1Hz:兩個(gè)6進(jìn)制計(jì)數(shù)器,和兩個(gè)十進(jìn)制計(jì)數(shù)器,這樣可以比直接使用60進(jìn)制計(jì)數(shù)器節(jié)省資源,直接利用秒的個(gè)位(十制)的進(jìn)位信號作為秒的十位的進(jìn)位信號,秒的十位(6進(jìn)制)的進(jìn)位信號作為分得個(gè)位的進(jìn)位信號,依此類推。部分計(jì)數(shù)程序如下:
……
---------CNT4---------秒的個(gè)位計(jì)數(shù)(10進(jìn)制計(jì)數(shù)器)
process(CLK0_OUT,LOCKED_OUT)--系統(tǒng)復(fù)位
begin
if(LOCKED_OUT = '0') then
r_ct4 <="0000";
elsif(CLK0_OUT = '1' and CLK0_OUT'event) then
if(r_outp = "00") then --清零
r_ct4 <= "0000";
elsif(r_outp = "10")then --停止計(jì)數(shù)
r_ct4 <= r_ct4;
elsif(r_outp = "01")then --開始計(jì)數(shù)
if(r_ci3 = '1') then
if(r_ct4 = "1001") then
r_ct4 <= "0000";
else
r_ct4 <= r_ct4 + '1';
end if;
end if;
end if;
end if;
end process;
r_ci4<= '1' when ((r_ct4 = "1001") and
(r_ct3 = "11110") and
(r_ct2 = "1111100110") and
(r_ct1 = "1111100110")) else
'0';--r_ci4<='1'為 進(jìn)位信號
CNT1 <= r_ct4;
----------------------------------------
……
第四部分是掃描顯示部分,計(jì)數(shù)器輸出的四個(gè)四位信號,分別是秒針個(gè)位、十位、分針、個(gè)位、十位。通過譯碼顯示程序,對應(yīng)四個(gè)LED數(shù)碼管。另外還有一片選信號,選出不同的要顯示的數(shù)據(jù),為了實(shí)現(xiàn)動(dòng)態(tài)顯示,還要控制掃描頻率 ,可以通過一分頻器實(shí)現(xiàn),經(jīng)實(shí)驗(yàn)得動(dòng)態(tài)顯示頻率控制在200Hz左右可等到比較好得效果。部分譯碼程序如下:
……
process(s_data) begin
case s_data is
when "0000" =>s_ledout(7 downto 1) <="0111111";
when "0001" =>s_ledout(7 downto 1) <="0000110";
when "0010" =>s_ledout(7 downto 1) <="1011011";
when "0011" =>s_ledout(7 downto 1) <="1001111";
when "0100" =>s_ledout(7 downto 1) <="1100110";
when "0101" =>s_ledout(7 downto 1) <="1101101";
when "0110" =>s_ledout(7 downto 1) <="1111101";
when "0111" =>s_ledout(7 downto 1) <="0100111";
when "1000" =>s_ledout(7 downto 1) <="1111111";
when "1001" =>s_ledout(7 downto 1) <="1101111";
when others=> s_ledout(7 downto 1) <="XXXXXXX";
end case;
end process;
process(s_ledsel) begin
if (s_ledsel="1011")then --控制小數(shù)點(diǎn)點(diǎn)亮
s_ledout(0) <= '1' ;
else
s_ledout(0) <= '0' ;
end if;
end process;
……
4 設(shè)計(jì)仿真與下載驗(yàn)證
上面數(shù)字秒表得模塊圖,采用VHDL語言編寫程序,把各程序經(jīng)過編譯后,生成模塊,通過建立頂層文件,調(diào)用這些模塊,完成電路得連接。通過ISE綜合可得到完整得電路模塊圖。如圖3所示:
再通過Modelsim 軟件進(jìn)行編譯、仿真,得到仿真圖形如圖4所示:
由仿真結(jié)果可知數(shù)字秒表實(shí)現(xiàn)了準(zhǔn)確的計(jì)數(shù)功能。
最后將該設(shè)計(jì)下載到實(shí)驗(yàn)、開發(fā)系統(tǒng)中進(jìn)行驗(yàn)證。經(jīng)ISE綜合后生成相應(yīng)的stopwatch.ucf文件,管腳鎖定如下:輸入信號CLKIN對應(yīng)P76引腳,RST對應(yīng)P120引腳, SW7對應(yīng)P116引腳;輸出信號LEDOUT[7:4]對應(yīng)P37~P34引腳,LEDOUT<3>對應(yīng)P31, LEDOUT<2>對應(yīng)P29, LEDOUT<1>對應(yīng)P28, LEDOUT<0>對應(yīng)P33, LEDSEL<3>對應(yīng)P39,LEDSEL<2>對應(yīng)P40,LEDSEL<1>對應(yīng)P42,LEDSEL<0>對應(yīng)P43。管腳鎖定后再進(jìn)行編譯,生成可下載的stopwatch.mcs文件,將該文件下載到TS101芯片中,可實(shí)際驗(yàn)證該設(shè)計(jì)的各種功能,復(fù)位、計(jì)數(shù)、暫停、清零等。
5 結(jié)束語
通過利用FPGA設(shè)計(jì)數(shù)字秒表可,進(jìn)一步熟悉了FPGA的整套開發(fā)流程,即設(shè)計(jì)入口,仿真,綜合,布局布線。在Xinlinx FPGA 開發(fā)環(huán)境下,采用至上而下的設(shè)計(jì)方法有利于早期發(fā)現(xiàn)結(jié)構(gòu)設(shè)計(jì)中的錯(cuò)誤,避免不必要的重復(fù)設(shè)計(jì)。在結(jié)合基于FPGA的“在系統(tǒng)”可編程實(shí)驗(yàn)板,輕輕松松就能實(shí)現(xiàn)電子產(chǎn)品的設(shè)計(jì),現(xiàn)場觀察實(shí)
驗(yàn)測試結(jié)果。大大縮短了產(chǎn)品的設(shè)計(jì)周期和調(diào)試周期,提高了設(shè)計(jì)的可靠性和成功率。充分體現(xiàn)了可編程邏輯器件在數(shù)字電路設(shè)計(jì)中的優(yōu)越性。
參考文獻(xiàn):
[1]王振紅.VHDL數(shù)字電路設(shè)計(jì)與應(yīng)用實(shí)踐教程[M],北京:機(jī)械工業(yè)出版社,2003(6).
[2]張淑驊.基于FPGA的數(shù)字秒表的VHDL設(shè)計(jì)[J],大眾科技,2006(5):7-78.
[3]詹小杏,林浩泉.用CPLD器件設(shè)計(jì)數(shù)字秒表[J],大眾科技,2004(10):2.
[4]韓芝俠.基于FPGA的數(shù)字秒表設(shè)計(jì) [J],陜西工學(xué)院學(xué)報(bào),2004,20(4):22-23.
[5]陳耀和.VHDL語言設(shè)計(jì)技術(shù)[M],北京:電子工業(yè)出版社,2004(3).
[6]翟殿棠,田萬民,厲光偉.VHDL在數(shù)字設(shè)計(jì)中的應(yīng)用研究[J],信息技術(shù)研究與應(yīng)用,2004(3):44-45.