闞子楊 劉蕭鳴 趙鶴煜 涂振華 孫赫陽 姜紹君
關(guān)鍵詞:FPGA;Verilog HDL;Quartus II;計時器
中圖分類號:TP311 文獻標(biāo)識碼:B
文章編號:1009-3044(2023)12-0089-03
可控計時器在日常生活中有著廣泛的應(yīng)用,例如交通燈信號控制,競賽倒計時,考試計時器等各個方面,如何快速準(zhǔn)確計時,且不出現(xiàn)誤差,就需要通過精確的儀器來計時?;贔PGA的硬件邏輯編程語言實現(xiàn)計時器設(shè)計,可以準(zhǔn)確地進行30秒的計時功能并顯示,減少人類短時計時的時間誤差。
1 設(shè)計
1.1 實現(xiàn)功能
1) 具有30秒計時,顯示功能,計時間隔為1秒。
2) 調(diào)整外部開關(guān),控制計時器直接清零,裝數(shù),啟動和保持(暫停)功能。
3) 計時器遞減到0時候顯示器不能滅燈,同時發(fā)出報警信號(報警燈亮起)。
4) 能夠解除警報。
5) 引腳說明:
輸入信號:時鐘CPA、直接清零CR、預(yù)置LD及減計數(shù)使能S。
輸出信號:QH[3..0]、QL[3..0](余3碼)和報警信號L。
1.2 原理
1.2.1 設(shè)計基礎(chǔ)
FPGA(Field Programmable Gate Array) ,完整形式是現(xiàn)場可編程邏輯門陣列,是一種電子設(shè)備,用于執(zhí)行任何(數(shù)字)邏輯功能或數(shù)字電路的硬件實現(xiàn);是在傳統(tǒng)邏輯電路和門陣列PAL、GAL,CPLD等可編程器件的基礎(chǔ)上進一步發(fā)展的產(chǎn)物[1]。FPGA最大的特點是它們是現(xiàn)場可編程的,這意味著它們在制造出來后,可以由客戶根據(jù)自己的要求在現(xiàn)場重新編程,優(yōu)點是可重復(fù)編程且低功耗。
Verilog HDL 是一種硬件描述語言,語法與C 接近,但Verilog語言是硬件設(shè)計語言,與C實質(zhì)不同,用于多層次的數(shù)字系統(tǒng)建模,代碼對應(yīng)硬件實體[2]。數(shù)字系統(tǒng)能夠按層次描述,并可在相同描述中顯式地進行時序建模。
Quartus,是Altera公司推出的綜合性CPLD/FPGA開發(fā)設(shè)計軟件,一種可編程邏輯的開發(fā)設(shè)計環(huán)境,軟件支持原理圖、VHDL、Verilong HDL等多種輸入形式,以及自帶仿真器,可以進行波形,原理圖以及頂層文件等設(shè)計繪制和仿真,可以完成從設(shè)計輸入到硬件配置的完整PLD設(shè)計流程。(——引用于百度百科詞條)
DE2_115開發(fā)板,核心是FPGA芯片,存儲芯片3 種,IO口配置分別為4個按鈕,18個開關(guān),18個RED- LED,9個GREEN-LED,8個七段數(shù)碼管,32字符液晶顯示屏;且含有標(biāo)準(zhǔn)接口:通用串行總線USB控制模塊以及A、B型接口,2個以太網(wǎng)絡(luò)適配器,RS-232標(biāo)準(zhǔn)串口,PS/2鍵盤接口;其他:50M晶振,支持外部時鐘,外接IO,1個連接器[3]。
1.2.2 設(shè)計原理
系統(tǒng)的核心部分是30秒可控遞減計時器,由外部開關(guān)按鍵進行清零(CR) ,直接控制遞減計時器的復(fù)位以及解除報警;預(yù)置鍵LD=0有效,當(dāng)可控計時器調(diào)至30秒時,輸出信號高四位QH[3..0]和低四位QL[3..0]分別為0110、0011(余3碼),說明可控計時器實現(xiàn)了置數(shù)功能;S為啟動和保持(暫停)按鍵,當(dāng)S=1時用于遞減計時器啟動時,當(dāng)S=0時用于保持(暫停)[4]。
2 總體設(shè)計
總體設(shè)計框圖,如圖1所示。
框圖包括10分頻器,30秒可控遞減計時器及報警電路。30秒可控遞減計時器是整個系統(tǒng)的核心部分,S=0時候用于暫?;蛘弑3?,S=1時候正常使用;當(dāng)輸入清零信號(CR) =1,可以直接控制遞減計時器的復(fù)位和接觸報警(L=0) 功能;一個數(shù)字系統(tǒng)中往往需要多種頻率的時鐘脈沖作為驅(qū)動源,這樣就需要對FPGA的系統(tǒng)時鐘(頻率較高)進行分頻,框圖中的分頻器的功能是為了對多種頻率進行分頻,提高控制精度,減小時間計時誤差。
3 硬件設(shè)計
3.1 框圖頂層文件
設(shè)計遵循最優(yōu)解原則,將代碼極簡,輸入,分頻,顯示,控制函數(shù)都編程在一個工程文件下,再建立頂層文件放在一個目錄下,畫圖編輯,建立Vector Wave? form file進行實驗仿真[5]??驁D頂層文件,如圖2所示。
3.2 模塊設(shè)計
分頻器和30可控遞減計時器模塊主要實現(xiàn)的是數(shù)字從30秒開始每秒進行減一的功能,首先撥動CR 清零后,就可以直接啟動分頻已經(jīng)計時功能,數(shù)字將會在30秒遞減,也可以時間暫停和開始等功能。
顯示器模塊主要是顯示30秒的遞減的實現(xiàn)結(jié)果,當(dāng)與之相對應(yīng)的快關(guān)撥動時,可以在顯示器上看到數(shù)字的跳動、停止和重置等功能。
筆者在這里選擇使用DE2_115 開發(fā)板進行仿真。在DE2_115 開發(fā)板上進行仿真,可以更加直觀地觀測實物。其中分頻器使用的是開發(fā)板自帶的晶振分頻,數(shù)字顯示模塊使用的是兩位八段譯碼管,控制模塊則使用觸發(fā)開關(guān),其余功能使用發(fā)光二極管表示。
4 仿真
CPA為時鐘定時50MHz,S為啟動暫停,CR為清零,S設(shè)置為高電平代表為啟動,整個電路繼續(xù)進行CR為高電平跳變觸發(fā),CPA、CPB設(shè)置時鐘頻率[5],當(dāng)暫停、清零以及數(shù)字30秒時L為報警電路跳變?yōu)楦唠娖?,對?yīng)的發(fā)光二極管開始工作。
為了測試計時器的功能是否正常,我們可以控制S=0或者1,來觀察可控計時器能否正常遞減計數(shù),當(dāng)計數(shù)器遞減至0的時候能否發(fā)出報警信號L是否為1。當(dāng)輸入清零(CR)低電平信號時,直接復(fù)位并解除報警,實現(xiàn)功能。
其仿真圖如圖3所示。
通過仿真波形圖可以看出,當(dāng)30秒可控計時器正常運行時,預(yù)置按鍵LD=0有效,當(dāng)計時器調(diào)為30秒時,輸出信號高四位QH[3..0]和低四位QL[3..0]分別為0110、0011(余3碼),即實現(xiàn)置數(shù)功能;啟動和保持(暫停)按鍵為S,當(dāng)S=1高電平的時,用于遞減計(啟動)時,當(dāng)S=0低電平時用于保持(暫停)[6]。
5 下載驗證
本次使用DE2_115開發(fā)板進行下載仿真驗證,各位讀者可以進行參考本次驗證,由于實驗的偶然性,本次實驗不排除有錯誤的情況。
首先使用Quartus||軟件中的Assignments—pins功能為工程圖分配管腳,此處附上管腳分配圖如圖4~圖7所示。
CPA分配表D.4.1時鐘輸入的引腳分配CLOCK_50;S、CP、LD分配表D.1.1觸發(fā)丌關(guān)引腳分配SW[0]、SW[1]、SW[2];L、CPB分配表D.1.3LED的引腳分配LEDR[0]、LEDR[1];QL[6..0]分配表D.1.9七段數(shù)據(jù)管的引腳HEX[0-6]; QH[6..0]分配表HEX1[0-6],如圖8所示。
使用USB數(shù)據(jù)線和電源線連接開發(fā)板,再使用軟件的Programmer功能Hardware Setup,將Currently se? lected hardware 搜索USB數(shù)據(jù)線配置,最后點擊start 進行下載,最后在開發(fā)板上進行驗證操作。
演示驗證狀態(tài)如下所示:實現(xiàn)了以下功能:
1)具有30秒計時,顯示功能,計時間隔為1秒,如圖9所示。
2)計時器遞減到0時候顯示器不能滅燈,同時發(fā)出報警信號(報警燈亮起),如圖10 所示。
3)調(diào)整外部開關(guān),控制計時器直接清零,裝數(shù),啟動和保持(暫停)功能,如圖11所示。
6 總結(jié)
本文采用了分塊設(shè)計的思想設(shè)計了簡單計時器,通過對FPGA的了解學(xué)習(xí),進一步熟悉和掌握了Quartus II軟件的使用方法,現(xiàn)能夠利用Verilog HDL 語言設(shè)計簡單數(shù)字電路系統(tǒng),本文分別設(shè)計了分頻模塊,遞減計時模塊,報警模塊,且通過軟件進行波形仿真對比,對結(jié)果進行驗證。經(jīng)過反復(fù)修改與驗證后,最終實現(xiàn)了所需功能,使30秒可控計時器能夠正常使用。