張燕凱 趙發(fā)勇 相乾 朱勇
摘要:針對傳統(tǒng)數(shù)字電路實驗存在的靈活性差以及綜合性不足等問題,提出將FPGA技術(shù)引入到數(shù)字電路的綜合性實驗設(shè)計之中.本文將邏輯代數(shù)、觸發(fā)器、定時器、計數(shù)器、譯碼器以及數(shù)碼管等數(shù)字電路中的傳統(tǒng)知識點進行有機結(jié)合,設(shè)計并實現(xiàn)了數(shù)字時鐘系統(tǒng).實踐表明,現(xiàn)代設(shè)計方法與傳統(tǒng)數(shù)字電路教學相結(jié)合的方法能夠起到良好的教學效果.學生在實現(xiàn)系統(tǒng)的過程中既能夠加深對相關(guān)知識點的理解,又能夠提高實踐動手能力.
關(guān)鍵詞:FPGA;數(shù)字電路;綜合實驗;數(shù)字時鐘
中圖分類號:TN791? 文獻標識碼:A? 文章編號:1673-260X(2019)01-0022-03
1 引言
數(shù)字電路是為高等院校電氣信息類專業(yè)本科生開設(shè)的一門專業(yè)核心課程,作為學習數(shù)字系統(tǒng)的入門課程,在人才培養(yǎng)方案中,一方面起到承接模擬電路相關(guān)知識的作用,另一方面也為學生后續(xù)學習信號處理相關(guān)內(nèi)容做鋪墊[1-2].于此同時,數(shù)字電路實驗課程在加深學生對數(shù)字電路理論知識的理解具有非常重要的作用.傳統(tǒng)數(shù)字電路實驗都大多采用74系列芯片,讓學生實現(xiàn)加法器、計數(shù)器等一些簡單的驗證性實驗.由于芯片之間以手動連線進行通信,當線路較復雜時,實驗的調(diào)試變得異常困難,實驗的靈活性以及綜合性難以保證[3-4].
FPGA(Filed Programmable Gate Array:現(xiàn)場可編程門陣列)作為專用集成電路領(lǐng)域中的一種半定制電路,通過邏輯綜合和布局、布線工具軟件,可以將用硬件描述語言描述的電路快速下載到FPGA上進行測試,并且其內(nèi)部邏輯可以被設(shè)計者反復修改.在現(xiàn)代電子產(chǎn)品設(shè)計中,F(xiàn)PGA在通信、信號處理以及嵌入式系統(tǒng)設(shè)計等領(lǐng)域得到了廣泛的應用[5].
針對傳統(tǒng)數(shù)字電路實驗課程存在的調(diào)試困難、實驗內(nèi)容靈活性差、綜合性不夠等問題,我們將FPGA技術(shù)引入到數(shù)字電路實驗課程中,本文以“數(shù)字時鐘”綜合實驗為例,首先對數(shù)字時鐘電路進行總體設(shè)計以及模塊劃分,然后利用硬件描述語言(Verilog HDL)進行描述,通過Quartus Ⅱ進行軟件仿真,最后下載至FPGA開發(fā)板上進行硬件驗證[6-7].
2 實驗總體方案設(shè)計
本實驗所要完成的功能為:數(shù)字時鐘系統(tǒng)具備顯示時、分、秒的功能,通過按鍵可以對當前時間進行調(diào)節(jié),為了保證時間調(diào)節(jié)的準確性,還應設(shè)置一按鍵用來暫停以及開啟時鐘記時,系統(tǒng)還需要具有整點報時的功能.
在明確系統(tǒng)功能的前提下,利用模塊化思想[8]可以將系統(tǒng)劃分為四個子模塊:按鍵模塊、記時模塊、數(shù)碼管模塊以及蜂鳴器模塊.模塊框圖如圖1所示,其中各模塊的功能為:
按鍵模塊:利用三個按鍵分別調(diào)節(jié)時鐘時、分、秒的個位,利用單獨按鍵暫?;蜷_始時鐘的記時,以便對時間進行準確校準.
計時模塊:首先完成1s的定時器,再根據(jù)時鐘的進位特點,分別設(shè)計三種計數(shù)器:模三計數(shù)器、模六計數(shù)器以及模十計數(shù)器.模三計數(shù)器用于完成小時的高位計數(shù),模六計數(shù)器用于完成秒、分的高位計數(shù),模十計數(shù)器用于完成秒、分、十位的低位計數(shù).
數(shù)碼管模塊:將記時模塊輸出的時、分、秒數(shù)字信息先進行譯碼,然后利用人眼的視覺暫留,通過分時掃描的方式將時間信息顯示在6位數(shù)碼管上.
蜂鳴器模塊: 將小時的低位信息作為蜂鳴器模塊的輸入,如果小時的低位發(fā)生變化,驅(qū)動蜂鳴器鳴叫一次.
3 實驗系統(tǒng)的模塊實現(xiàn)
3.1 按鍵模塊
為了讓系統(tǒng)能夠準確識別按鍵的操作,需要對按鍵進行消抖以及松手檢測處理.按鍵消抖可以分為硬件消抖以及軟件消抖,為了簡化實驗流程,本文采用軟件消抖的方式來獲取穩(wěn)定的電平信號,理論上的按鍵抖動時間為5~10ms,為此按鍵模塊首先定義一個時長為15ms的定時器,按下按鍵15ms以后再對相應端口的電平信號進行判斷.
松手檢測的實現(xiàn)方法如式(1)所示:
key_press=key_reg&(~key_reg_next);? (1)
式中key_press為表示按鍵按下是否有效的寄存器變量,key_reg存儲當前時刻按鍵的狀態(tài),key_reg_next為下一時刻按鍵的狀態(tài).從式(1)可知,key_press若為1,key_reg必為1以及key_ reg_next必為0,其對應的含義為:只有按鍵當前時刻沒有被按下,并且下一時刻被按下才認定為一次有效的按鍵觸發(fā)信號.圖2為松手檢測實現(xiàn)方法的門級電路圖.
3.2 計時模塊
計時模塊首先定義時長為1s的定時器作為計數(shù)器的時鐘基準,該模塊的設(shè)計思路為先利用1s的定時器完成單位秒的計數(shù),然后再根據(jù)單位秒與單位分以及單位分與單位時之間的關(guān)系,完成時鐘的計時.圖3為單位秒的實現(xiàn)框圖.秒位由秒個位與秒十位組成,數(shù)值在0~59之間循環(huán)變化,單位秒的實現(xiàn)過程就是模六十計數(shù)器的實現(xiàn)過程.模塊中首先定義模十計數(shù)器完成秒個位的計數(shù),隨后定義模六計數(shù)器,將模十計數(shù)器與模六計數(shù)器以串行進位的方式進行級聯(lián)完成模六十計數(shù)器的實現(xiàn)[9].每一個60s的計數(shù)完成以后,秒的個位與十位被清零,通過秒十位的進位輸出位(C)向單位分的個位進位,完成時鐘對分的計時.
3.3 數(shù)碼管模塊
實驗平臺的6個八段數(shù)碼管使用共陰極的方式連接到FPGA內(nèi)部的SEG_EN0~SEG_EN5管腳作為數(shù)碼管的片選端,6個數(shù)碼管的a~g以及小數(shù)點dp管腳并聯(lián)連接到FPGA的SEG_DATAa~ SEG_DATADP管腳作為數(shù)據(jù)輸入端.
實驗采用動態(tài)掃描的方式讓6個數(shù)碼管同時顯示當前時刻的時、分、秒信息.模塊定義1ms的定時器作為動態(tài)掃描數(shù)碼管的掃描周期,在掃描周期的時間段內(nèi),首先將待顯示的時間信息進行譯碼,根據(jù)實際情況,只對0~9這10個數(shù)字進行譯碼,譯碼完成以后將譯碼結(jié)果賦給SEG_DATAx(x=a,b…DP),與此同時將對應的數(shù)碼管片選端拉低,相應的時間信息就會顯示在數(shù)碼管上,每次間隔1ms開始對下一位時間信息進行掃描顯示,由于人眼的視覺暫留,此時看到時、分、秒的信息同時在數(shù)碼管上顯示.
3.4 蜂鳴器模塊
實驗平臺所用蜂鳴器的原理圖如圖4所示,由圖可知蜂鳴器的正極連接在三極管的集電極上,F(xiàn)PGA的輸出管腳BEEP接在三極管的基極.當BEEP管腳輸出高電平,三級管截止,蜂鳴器不發(fā)聲;當BEEP管腳輸出為低電平時,三極管導通,蜂鳴器的電流系形成回路,蜂鳴器發(fā)聲.通過控制BEEP管腳輸出方波信號的頻率以及占空比可以控制蜂鳴器的音調(diào)高低與音量大小.
實驗中利用蜂鳴器進行整點報時,模塊首先定義1s的定時器,然后檢測小時的個位是否變化,若發(fā)生變化,蜂鳴器發(fā)出時長為1s的固定音調(diào)聲音.
3.5 頂層模塊
利用硬件描述語言(Verilog HDL)完成對各模塊所要實現(xiàn)的功能進行描述之后,編寫頂層模塊連接各子模塊.利用Quartus Ⅱ所帶的分析綜合工具對工程進行編譯,生成RTL(Register Transfer Level)功能框圖如圖5所示,從圖中可以看出數(shù)字時鐘系統(tǒng)被分為4個模塊,系統(tǒng)的內(nèi)部端口與外部端口與所要設(shè)計的系統(tǒng)相符.
4 軟件仿真
為了驗證電路功能是否符合設(shè)計要求,首先利用ModelSim編寫測試代碼來對系統(tǒng)進行功能仿真.仿真結(jié)果如圖6所示,仿真時添加的時鐘激勵為50M Hz,對開始鍵施加有效信號,時鐘開始計時,此時使能位數(shù)據(jù)以及數(shù)據(jù)位的數(shù)據(jù)完全正確,因此數(shù)碼管能夠正確顯示初始設(shè)置的時間值,仿真結(jié)果表明設(shè)計電路正確實現(xiàn)了預先的設(shè)計要求.
5 硬件驗證
利用Modelsim對各模塊及整個電路進行軟件仿真后,確保各模塊功能正常,最后將編譯生成的sof文件通過下載線下載到FPGA開發(fā)板上.首先通過按鍵完成對時鐘時、分、秒的設(shè)置,然后按開始鍵啟動計時,當時鐘到達整點時,蜂鳴器能夠鳴叫1s.經(jīng)實際檢驗,所設(shè)計的數(shù)字時鐘能夠正常運行,滿足了預期的設(shè)計要求.
6 結(jié)束語
將FPGA技術(shù)運用到數(shù)字電路綜合實驗的設(shè)計之中是一種卓有成效的數(shù)字電路實驗教學方法.在實驗過程中,學生不僅能夠?qū)W到自頂向下、模塊化的現(xiàn)代工程設(shè)計思想,而且能夠掌握利用硬件描述語言對電路進行設(shè)計的現(xiàn)代電路設(shè)計方法.經(jīng)實踐證明,該方法能夠起到良好的教學效果,學生在實現(xiàn)系統(tǒng)的過程中既能夠加深對相關(guān)知識點的理解,又能夠提高實踐動手能力.
參考文獻:
〔1〕倪德克,師亞莉,朱旭花,等.EDA技術(shù)在數(shù)字電路課程設(shè)計教學改革中的探索與實踐[J].大學教育,2016(04).
〔2〕王紅航,劉凱,鄧春健,楊健君,等.數(shù)字電路和EDA課程融合實踐與探討[J].實驗科學與技術(shù),2018,16(02).
〔3〕陳衛(wèi)兵,陳曙光,李季.EDA技術(shù)與數(shù)字電路課程的教學改革[J].蘭州文理學院學報(自然科學版),2016,30(05).
〔4〕易藝,郝建衛(wèi).FPGA在數(shù)字邏輯電路教學中的應用[J].實驗科學與技術(shù),2016,14(02).
〔5〕韓彬,于瀟宇,張雷鳴.FPGA設(shè)計技巧與案例開發(fā)詳解[M].北京:電子工業(yè)出版社,2014.
〔6〕劉福奇.Verilog HDL設(shè)計與實戰(zhàn)[M].北京:北京航空航天大學出版社,2012.
〔7〕于斌,謝龍漢.ModelSim電子系統(tǒng)分析及仿真[M].北京:電子工業(yè)出版社,2014.
〔8〕蔚瑞華,余有靈,張偉,等.基于模塊化思想的FPGA綜合實驗項目設(shè)計[J].實驗技術(shù)與管理,2016,33(05).
〔9〕閻石.數(shù)字電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社,2006.