陳彬兵,周群,劉婕,賈紹芝
(四川大學(xué) 電氣工程學(xué)院,四川 成都)
《數(shù)字電子技術(shù)基礎(chǔ)》課程作為電類相關(guān)專業(yè)的專業(yè)基礎(chǔ)課程,其課程內(nèi)容需要與時俱進(jìn)地跟上信息技術(shù)和微電子技術(shù)的快速發(fā)展,課程的教學(xué)內(nèi)容和教學(xué)方法一直是相關(guān)專業(yè)教師關(guān)注的重點,顯然基于傳統(tǒng)74系列中規(guī)模集成芯片為基礎(chǔ)的數(shù)字電路課程教學(xué)內(nèi)容,已經(jīng)無法滿足課程發(fā)展的要求,將 FPGA 引入數(shù)字電路課程,取代傳統(tǒng)的 74 系列集成電路模塊已經(jīng)成為目前大多數(shù)數(shù)電課程團(tuán)隊的共識[1]。我校數(shù)電教學(xué)團(tuán)隊也將數(shù)字電路課程的教學(xué)內(nèi)容和教學(xué)手段更新作為工作重點,對如何將FPGA引入《數(shù)字電子技術(shù)基礎(chǔ)》課程的教學(xué)工作,展開了深入的探索與實踐。
《數(shù)字電子技術(shù)基礎(chǔ)》課程是我校面向大二本科多學(xué)院學(xué)生開設(shè)的專業(yè)基礎(chǔ)課,每期學(xué)生人數(shù)超過1000人,理論課48學(xué)時,配套的實驗課24學(xué)時。課程要求學(xué)生:掌握數(shù)字電路的基本分析和基本設(shè)計方法;掌握數(shù)字集成電路的基本使用方法;能夠使用硬件描述語言來設(shè)計、驗證并實現(xiàn)數(shù)字電路;能獨(dú)立完成中小規(guī)模的數(shù)字電路設(shè)計。目前教學(xué)中存在的主要問題,一是相對教學(xué)內(nèi)容來說學(xué)時數(shù)較少,二是傳統(tǒng)的數(shù)字電路分析設(shè)計方法不適應(yīng)課程發(fā)展和教學(xué)需求。
數(shù)字技術(shù)是所有現(xiàn)代技術(shù)里面發(fā)展最快、應(yīng)用最廣泛的技術(shù)領(lǐng)域。2015年,英特爾(Intel)看中了可編程芯片領(lǐng)域的機(jī)會,出資167億美元收購了FPGA廠商Altera,這也是截至目前英特爾歷史上規(guī)模最大的一筆收購,收購?fù)瓿珊螅⑻貭柍蔀槿虻诙驠PGA器件廠商,僅次于賽靈思(Xilinx)。2020年,英特爾老對手AMD(美國超威半導(dǎo)體公司)也同樣看中可編程芯片領(lǐng)域的機(jī)會,以350億美元價值的全股票交易收購了賽靈思(Xilinx)[2]。他們感興趣的FPGA是什么呢?FPGA(Field Programmable Gate Array),現(xiàn)場可編程門陣列,是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。FPGA芯片主要由可編程邏輯塊、可編程互聯(lián)開關(guān)、可編程I/O模塊3部分構(gòu)成[3]。主要用于:1.通信領(lǐng)域-高速接口電路設(shè)計,處理高速接口協(xié)議;2.算法實現(xiàn)領(lǐng)域-例如數(shù)字信號處理、視頻圖形處理,需要實時處理大量數(shù)據(jù);3.IC設(shè)計驗證領(lǐng)域-尤其數(shù)字電路的設(shè)計驗證;4.嵌入式領(lǐng)域-SOPC,用FPGA搭建底層系統(tǒng)硬件環(huán)境。而無論是FPGA的哪個方向,都離不開數(shù)字邏輯知識的支撐。數(shù)字邏輯是任何電子電氣類專業(yè)的專業(yè)基礎(chǔ)知識,F(xiàn)PGA只是一種實現(xiàn)數(shù)字邏輯的方式而已,而從數(shù)字電路角度看,F(xiàn)PGA是電子工程師尤其做數(shù)字電路必須掌握的一門技能。從實際看,行業(yè)中設(shè)計數(shù)字電路很少再采用分立器件設(shè)計,基本由可編程器件代替,F(xiàn)PGA還適合原型設(shè)計,方便學(xué)生創(chuàng)新或參加電賽,所以在《數(shù)字電子技術(shù)基礎(chǔ)》課程的教學(xué)中,同時學(xué)習(xí)FPGA的軟硬件知識十分有必要。
器件資源上,我們選擇了小腳丫STEP-MAX10 FPGA開發(fā)板。它采用超小巧40腳DIP結(jié)構(gòu),核心FPGA芯片選用了Intel-Altera公司MAX10系列產(chǎn)品,同時板上集成了USB-Blaster編程器和按鍵、撥碼開關(guān)、數(shù)碼管、LED等多種外設(shè)資源。板上的36個FPGA的I/O接口都通過2.54mm通孔焊盤引出,可以和面包板配合使用,快速搭建自己的硬件電路。板卡尺寸為52mm X 18mm,能夠靈活地嵌入到插座或者其他的系統(tǒng)中。STEP-MAX10 FPGA 板上集成的編程器能夠支持Intel-Altera工具Quartus系列開發(fā)軟件,只需要一根Micro USB數(shù)據(jù)線就能夠完成FPGA的編程仿真和下載。我們按照實驗小組,每2位同學(xué)配置一塊開發(fā)板,學(xué)生使用開發(fā)板上手容易,另一方面學(xué)生可以根據(jù)實驗要求,在任何場所完成軟件編程和實驗步驟,教師僅需在實驗室對實驗進(jìn)行驗收和對部分同學(xué)在實驗中出現(xiàn)的問題進(jìn)行修改,從而提高了課程學(xué)習(xí)的效果和效率,使將FPGA引入《數(shù)字電子技術(shù)基礎(chǔ)》課程的教學(xué)工作成為可能。
課程采用了“基于SPOC的線上-線下混合教學(xué)法”,在中國大學(xué)MOOC平臺上建立了SPOC學(xué)校專有課程,已完整實施了3個教學(xué)周期。課時安排上,將每周3學(xué)時的課時拆分成1學(xué)時在教師引導(dǎo)下的學(xué)生線上自主學(xué)習(xí)和2學(xué)時線下課堂教學(xué),充分利用SPOC課程資源實現(xiàn)以教為中心向以學(xué)為中心的轉(zhuǎn)變,使學(xué)生真正成為學(xué)習(xí)的主體。利用線上資源完全由學(xué)生線上自學(xué)的內(nèi)容占到總體內(nèi)容的30%以上,做到線上課程以基本知識基本概念為主,線下課程發(fā)揮教師與學(xué)生面對面即時交流的優(yōu)勢,以解決重點、難點內(nèi)容為主[4]。
按照這種教學(xué)方法,對FPGA內(nèi)容的學(xué)習(xí),我們將可編程器件的基本結(jié)構(gòu)、邏輯功能編程實現(xiàn)的原理完全由學(xué)生自學(xué),可編程器件的一般開發(fā)過程,包括開發(fā)軟件Quartus下載、安裝和使用,Verilog HDL語言的學(xué)習(xí),則是在教師的指導(dǎo)下學(xué)生自主學(xué)習(xí)。
為了在有限的學(xué)時中學(xué)會開發(fā)FPGA,我們充分整合理論教學(xué)和實驗教學(xué)時間,在理論課的教學(xué)中,學(xué)生學(xué)會開發(fā)軟件Quartus的使用,學(xué)會使用Verilog HDL語言描述數(shù)字電路,而在實驗課的教學(xué)中,通過由淺入深的實驗設(shè)計,使學(xué)生先是把FPGA用起來,然后讓學(xué)生學(xué)會如何將FPGA里面的資源組合,實現(xiàn)更多復(fù)雜功能,最后充分發(fā)揮學(xué)生的積極性和創(chuàng)造性獨(dú)立完成中小規(guī)模的數(shù)字電路設(shè)計。具體設(shè)計的有關(guān)三個FPGA實驗如下:
實驗一:組合邏輯電路(FPGA)
一、實驗?zāi)康模?/p>
通過對組合邏輯電路實驗的學(xué)習(xí),掌握以下知識要點:
二、實驗任務(wù):
任務(wù)1:邏輯門電路功能驗證
輸入:a,b
輸出:z[5:0]
z[5:0]與輸入的邏輯關(guān)系分別是:與、與非、或、或非、異或、同或
仿真電路并用實驗板上的FPGA實現(xiàn)相應(yīng)的邏輯功能。供參考的源文件代碼如圖1所示。

圖1 邏輯門電路功能驗證實驗源文件代碼
任務(wù)2:在數(shù)碼管上顯示數(shù)字
輸入:A[3:0]
輸出:g_to_a[8:0]
在實驗板上實現(xiàn)數(shù)碼顯示,供參考的源文件代碼如圖2所示。

圖2 數(shù)碼管顯示實驗源文件代碼
三、實驗步驟:(略)
實驗二:時序邏輯電路(FPGA)
一、實驗?zāi)康?/p>
通過對時序邏輯電路實驗的學(xué)習(xí),掌握以下知識要點:
二、實驗任務(wù):
任務(wù)1:分頻器
實驗板內(nèi)置時鐘頻率為12MHZ,通過分頻電路得到頻率為1HZ的時鐘信號。
輸入:clk,rst
輸出:clock_out
點亮實驗板上的LED燈,觀察輸出信號頻率,供參考的源文件代碼如圖3所示。

圖3 分頻器實驗源文件代碼
任務(wù)2:設(shè)計8位二進(jìn)制加計數(shù)器,并在數(shù)碼管上顯示計數(shù)數(shù)字
輸入:clk,rst
輸出:seg[17:0]
計數(shù)器對秒脈沖信號計數(shù),實驗板上顯示計數(shù)數(shù)字,供參考的源文件代碼如圖4所示。該程序需要調(diào)用之前生成的2個子模塊:divider(分頻器)和segmen7(7段數(shù)碼顯示)。

圖4 二進(jìn)制計數(shù)器實驗源文件代碼
三、實驗步驟:(略)
實驗三:課程設(shè)計(FPGA)
一、實驗要求
每個小組需要在以下題目1~題目8中,抽選一題用硬件描述語言Verilog完成設(shè)計,并用實驗板驗證。
題目所要求的是基本功能(輸入、輸出端口設(shè)置僅供參考),設(shè)計時可在完成題目設(shè)計要求基礎(chǔ)上進(jìn)行發(fā)揮,功能越合理,越完善,越好!
若不能完成所抽題目的設(shè)計,可選擇題目9,成績要乘0.9的系數(shù)。
設(shè)計報告中要包含完整.v源文件的文本(不是圖片),Analysis&Synthesis成功的截圖(截圖時關(guān)掉Compilation Report窗口,留下.v文件窗口),管腳分配表的截圖,Compile Design成功的截圖,programmer成功的截圖,實驗板演示圖片或附視頻文件。
最后一次實驗課進(jìn)行現(xiàn)場驗收,每個小組展示設(shè)計成果并提交設(shè)計報告,設(shè)計成績由教師評定(50%)+小組自評(20%)+小組互評(30%)組成。
二、實驗題目
題目1:流水燈設(shè)計(有兩種以上設(shè)計方案)
設(shè)計要求:控制8只LED燈,周而復(fù)始地從LED1~LED8,延時點亮,產(chǎn)生流水效果。需設(shè)定合適的延時時間:延時時間太短,由于人眼視覺暫留,看到的是8個LED同時點亮;延時時間太長,8個LED斷續(xù)點亮,沒有流水的效果。比較各種設(shè)計方案。
輸入:clk,//內(nèi)部時鐘
輸出:【7:0】LEDS,//控制實驗板上的8個LED
題目2:彩燈設(shè)計
設(shè)計要求:控制8只LED燈LED1~LED8,按下述方式顯示:全亮→奇數(shù)燈依次滅→偶數(shù)燈依次滅→由LED1~LED8依次亮,循環(huán)進(jìn)行,且顯示時間間隔0.5S和1S可調(diào)。
輸入:clk,key //內(nèi)部時鐘,控制時間間隔
輸出:【7:0】LEDS,//控制實驗板上的8個LED
題目3:秒表設(shè)計
設(shè)計要求:秒表為60進(jìn)制,以秒計時。秒數(shù)用數(shù)碼管以十進(jìn)制顯示,分鐘數(shù)用LDE燈顯示,即秒顯示從 00 到 59 循環(huán)每秒跳轉(zhuǎn)計數(shù),每計滿1分鐘,增加點亮1個LED燈,最大計數(shù)到7分59秒(此時7個LED燈亮,數(shù)碼管顯示59)。要求帶復(fù)位、啟動/暫停功能。
輸入:clk,rst,key,//時鐘,復(fù)位,啟動/暫停
輸出:【8:0】seg_10,seg_1 //數(shù)碼管顯示秒數(shù)
【7:0】led //LED顯示分鐘數(shù)
題目4:模可變的秒計數(shù)器設(shè)計
設(shè)計要求:對秒脈沖計數(shù),通過控制信號實現(xiàn)模10、模24、模60、模100計數(shù)。計數(shù)值用數(shù)碼管顯示。要求帶復(fù)位、啟動/暫停功能。
輸入:clk,rst,star,//時鐘,復(fù)位,啟動/暫停
[1:0] s //模 控 制 端s=00,M=10; s=01,M=24; s=10,M=60; s=11,M=100
輸出:【8:0】seg_H,seg_L //數(shù)碼管顯示計數(shù)值
題目5:24進(jìn)制可逆秒計數(shù)器設(shè)計
設(shè)計要求:秒計數(shù)器為24進(jìn)制,對秒脈沖計數(shù),通過控制信號可實現(xiàn)正計時和倒計時(遞增和遞減計數(shù))。計數(shù)值用數(shù)碼管以十進(jìn)制顯示。要求帶復(fù)位、啟動/暫停功能。
輸入:clk,rst,star,//時鐘,復(fù)位,啟動/暫停dir //控制端dir=1,加計數(shù); dir=0,減計數(shù)
輸出:【8:0】seg_10,seg_1 //數(shù)碼管顯示秒數(shù)題目6:交通信號燈控制設(shè)計
設(shè)計要求:按圖5所示方案進(jìn)行信號燈控制,主路和支路的信號燈分別用實驗板上的三色燈顯示(每個三色燈由R、G、B三個變量控制,低電平驅(qū)動,紅+綠=黃)。

圖5 交通信號燈控制方案
輸入:clk,rst_n,//時鐘,啟動
輸出:【5:0】RGB_out,//控制實驗板上的2個三色燈
題目7:利用PWM設(shè)計呼吸燈
設(shè)計要求:產(chǎn)生PWM脈沖來控制LED燈的亮度,前1秒從亮到弱,后1秒從弱到亮,周而復(fù)始,產(chǎn)生呼吸效果。
輸入:clk, //時鐘,啟動
輸出:led,//控制實驗板上的LED燈
原理:由占空比可調(diào)節(jié)的PWM脈沖來反復(fù)控制LED的導(dǎo)通和關(guān)斷,如果PWM脈沖的頻率高于人眼視覺暫留需要的頻率,尤其是達(dá)到50Hz以上后,我們一般人眼就覺察不出LED的閃爍了,從而認(rèn)為LED沒有閃爍。所以可以通過改變PWM脈沖的占空比來改變LED的亮度。
題目8:搶答器
設(shè)計要求:主持人發(fā)出信號后,開始搶答。三人參賽每人一個按鍵,搶中者數(shù)碼管顯示其編號。答題時限為10秒鐘,搶中后,數(shù)碼管即開始顯示倒計時答題時間9、8…1、0,時間到時,停止答題燈亮。
輸入:clk,star,k1,k2,k3//時鐘,主持人控制鍵,搶答鍵
輸出:【8:0】seg_num, //數(shù)碼管顯示答題者編號
【8:0】seg_ time, //數(shù)碼管倒計時顯示答題時間
led //停止答題燈
題目9:自擬題目
設(shè)計要求:輸入端個數(shù)大于2個,輸出端個數(shù)大于4個,同時包含組合邏輯電路和時序邏輯電路部分,要使用系統(tǒng)內(nèi)部時鐘,邏輯功能越完善越好。
本文提到的教學(xué)方案已在全部教學(xué)班中實施,2021年春季學(xué)期末,我們隨機(jī)抽取1個136人的教學(xué)班,對其課程設(shè)計成績分析,結(jié)果如圖6所示。從圖中我們可以看到,除3位同學(xué)因為特殊原因沒有參加課程設(shè)計以外,其他學(xué)生都能很好地完成設(shè)計,其中還有23位學(xué)生表現(xiàn)優(yōu)秀。

圖6 課程設(shè)計成績分布圖
將FPGA技術(shù)深入融合到《數(shù)字電子技術(shù)基礎(chǔ)》課程的教學(xué)中,能夠通過合理的教學(xué)設(shè)計,在有限的學(xué)時下保證教學(xué)質(zhì)量。另外,通過加強(qiáng)理論與實踐的結(jié)合,使學(xué)生對可編程器件FPGA有一定的了解,知道FPGA能完成很多數(shù)字電路功能,對后期的數(shù)字電路和FPGA的學(xué)習(xí)產(chǎn)生興趣,對訓(xùn)練學(xué)生工程能力,創(chuàng)新能力和培養(yǎng)創(chuàng)新意識發(fā)揮很好的作用。