潘曉明,龔 軍
(華中科技大學(xué)電子信息與通信學(xué)院,武漢 430074)
當(dāng)前,國(guó)內(nèi)半導(dǎo)體行業(yè)的發(fā)展蒸蒸日上,尤其是在電子行業(yè)各個(gè)領(lǐng)域都有非常廣泛用途的可編程邏輯門陣列(Field Programmable Gate Array,F(xiàn)PGA)芯片,其產(chǎn)業(yè)發(fā)展?fàn)顩r受到國(guó)內(nèi)外密切關(guān)注。
目前絕大部分工科高校都有開(kāi)設(shè)FPGA電路設(shè)計(jì)課程,但教學(xué)使用的FPGA 軟硬件基本都來(lái)自于國(guó)外公司。實(shí)際上,美國(guó)FPGA 產(chǎn)業(yè)占有世界FPGA 領(lǐng)域?qū)⒔?6%市場(chǎng)份額[1],專利達(dá)6 000 余項(xiàng),居于絕對(duì)壟斷地位。而國(guó)內(nèi)FPGA 廠商正在奮起直追,但畢竟還處于起步期,技術(shù)不夠成熟完善,主流硬件性能指標(biāo)上也較為落后,市場(chǎng)占有率低[2]。國(guó)產(chǎn)FPGA相關(guān)工程實(shí)例與教學(xué)資源零碎稀少,在校學(xué)生偶爾使用國(guó)產(chǎn)FPGA芯片感覺(jué)上手比較困難,這對(duì)國(guó)產(chǎn)FPGA產(chǎn)業(yè)發(fā)展是很不利的。為給國(guó)內(nèi)相關(guān)行業(yè)未來(lái)發(fā)展提供更有力的支撐,加強(qiáng)國(guó)產(chǎn)FPGA在教學(xué)領(lǐng)域的應(yīng)用勢(shì)在必行。
本文結(jié)合FPGA 正弦信號(hào)產(chǎn)生電路設(shè)計(jì)實(shí)驗(yàn),對(duì)本科教學(xué)中開(kāi)設(shè)以國(guó)產(chǎn)FPGA芯片為核心的電路設(shè)計(jì)實(shí)驗(yàn)流程進(jìn)行研討,并引入開(kāi)源仿真工具來(lái)完善實(shí)驗(yàn)環(huán)節(jié)。
本文探討的教學(xué)實(shí)驗(yàn)所使用的核心FPGA芯片是國(guó)內(nèi)2014 年推出的一款入門級(jí)產(chǎn)品GW1NLV1QN48[4]。其主要結(jié)構(gòu)與主流FPGA 基本一致,包括查找表、寄存器、布線、輸入輸出等,并加入了非易失性的閃存儲(chǔ)存器、鎖相環(huán)等內(nèi)部硬件單元[5],圖1 所示為GW1N-1 器件結(jié)構(gòu)示意圖。
圖1 GW1N-1器件結(jié)構(gòu)示意圖
和目前教學(xué)常用的國(guó)外公司在其大學(xué)計(jì)劃中推廣的入門級(jí)FPGA 芯片相比,GW1N-1的55 nm制作工藝和片內(nèi)資源數(shù)量都相對(duì)較弱,但資源類型并不少,數(shù)量也足夠本科教學(xué)用,性價(jià)比很不錯(cuò)。而且片內(nèi)包含非易失性存儲(chǔ)器,能有效降低外圍電路復(fù)雜度,使用上更為方便靈活。
教學(xué)實(shí)驗(yàn)選用的搭載GW1N-1 芯片的小型簡(jiǎn)約型開(kāi)發(fā)板如圖2 所示。板上載有系統(tǒng)開(kāi)發(fā)必需的調(diào)試下載器以及外部支撐電路和少量用戶資源[6],小巧實(shí)用,價(jià)格低廉。
圖2 實(shí)驗(yàn)用國(guó)產(chǎn)FPGA開(kāi)發(fā)板
上位機(jī)通過(guò)一根數(shù)據(jù)線以通用串行總線(Universal Serial Bus,USB)方式連接開(kāi)發(fā)板,完成+5 V供電、下載調(diào)試以及串口通信功能,實(shí)驗(yàn)者使用配套開(kāi)發(fā)軟件即可完成相應(yīng)FPGA 設(shè)計(jì)物理實(shí)現(xiàn)流程,操作簡(jiǎn)便。開(kāi)發(fā)板兩側(cè)引出腳可直插面包板,使得拓展外部電路連接很方便,非常適合基礎(chǔ)教學(xué)實(shí)驗(yàn)。
實(shí)驗(yàn)開(kāi)發(fā)軟件主要是配套GW1N系列芯片的云源設(shè)計(jì)軟件。該軟件從其官網(wǎng)可免費(fèi)下載,免費(fèi)申請(qǐng)?jiān)S可證,教學(xué)使用無(wú)成本和版權(quán)問(wèn)題。云源軟件包括了從硬件描述語(yǔ)言(Hardware Description Language,HDL)代碼輸入到FPGA芯片編程的物理實(shí)現(xiàn)全流程[7]。圖3 所示為云源集成開(kāi)發(fā)環(huán)境界面部分展開(kāi)示意圖。
圖3 云源界面部分展開(kāi)界面圖
云源軟件開(kāi)發(fā)可使用主流的兩種HDL 代碼輸入方式,支持相應(yīng)語(yǔ)言新特性,但不支持教學(xué)中盡量淡化的傳統(tǒng)原理圖設(shè)計(jì)輸入方式[8]。軟件中關(guān)鍵的HDL綜合工具是國(guó)內(nèi)自主開(kāi)發(fā)的Gowin Synthesis,功能較完備。
使用云源軟件進(jìn)行開(kāi)發(fā),物理實(shí)現(xiàn)流程和主流FPGA 基本一致,主要功能操作集中在綜合處理Process菜單項(xiàng)和工具組件Tools菜單項(xiàng)。軟件帶有頗為詳細(xì)的中文用戶指南,初學(xué)者使用沒(méi)有太大難度。
目前FPGA 業(yè)界設(shè)計(jì)流行基于知識(shí)產(chǎn)權(quán)核(Intellectual Property core,IP core)的設(shè)計(jì)方法,以此促進(jìn)新功能模塊的增添并壓縮項(xiàng)目完成時(shí)間。GW1N系列FPGA也有不少自主開(kāi)發(fā)的IP core,包括硬核和軟核,根據(jù)選定芯片片內(nèi)的硬件資源不同,提供的可用IP core有增減。
云源軟件實(shí)現(xiàn)了物理實(shí)現(xiàn)全流程開(kāi)發(fā),但暫時(shí)沒(méi)有內(nèi)置HDL 仿真功能,而軟件HDL 仿真調(diào)試對(duì)于實(shí)際工程和教學(xué)實(shí)驗(yàn)都是非常重要。目前的解決方案是結(jié)合云源提供的自有IP core 仿真庫(kù),在云源外部運(yùn)行第3方獨(dú)立仿真軟件對(duì)相應(yīng)測(cè)試Testbench代碼進(jìn)行再編譯并仿真。目前高校常用的是業(yè)界優(yōu)秀的HDL仿真工具M(jìn)odelSim,但從本科教學(xué)角度,考慮成本和特殊情況下的版權(quán)問(wèn)題,引入逐漸流行的開(kāi)源仿真工具補(bǔ)足仿真環(huán)節(jié)是更為合理的方式。輕量、免費(fèi)、開(kāi)源的HDL仿真套件Icarus Verilog就是一個(gè)不錯(cuò)的選擇[9]。
Icarus Verilog支持常見(jiàn)三大系統(tǒng)平臺(tái),相比于主流FPGA廠商相關(guān)商業(yè)軟件,其顯得極為小巧,但教學(xué)使用效果并不弱,而且有開(kāi)源的優(yōu)勢(shì)。一般使用是以命令行方式依次執(zhí)行套件中3 個(gè)工具。
Iverilog.exe:處理HDL 文件,進(jìn)行語(yǔ)法檢查、轉(zhuǎn)換、編譯并生成中間文件。
Vvp.exe:執(zhí)行中間文件,生成特定格式的VCD數(shù)據(jù)文件。
GTKWave.exe:打開(kāi)VCD 文件,圖形化交互顯示設(shè)計(jì)中變量仿真結(jié)果。
其中VCD(.vcd)數(shù)據(jù)文件是Verilog HDL語(yǔ)言標(biāo)準(zhǔn)中定義的一種通用的文件格式。它主要包含了頭信息、變量預(yù)定義和變量值變化信息,即記錄了整個(gè)仿真運(yùn)行的信息,可以用它來(lái)再現(xiàn)仿真,顯示各端口各變量的數(shù)據(jù)[10]。作為語(yǔ)言標(biāo)準(zhǔn)的一部分,可以用Verilog HDL系統(tǒng)函數(shù)來(lái)產(chǎn)生,包括ModelSim 和GTKWave 等主流HDL仿真器都能夠查看該類文件。
正弦波產(chǎn)生實(shí)驗(yàn)電路設(shè)計(jì)思路是基于直接數(shù)字合成(Direct Digtal Synthesis,DDS)波形產(chǎn)生的基本原理,原理框圖如圖4 所示,電路設(shè)計(jì)的關(guān)鍵是波形數(shù)據(jù)查找表[11]。實(shí)驗(yàn)電路中,正弦波形數(shù)據(jù)查找表和相位累加器正是以HDL 設(shè)計(jì)由FPGA 來(lái)實(shí)現(xiàn)。時(shí)鐘源由板載晶振電路輸出時(shí)鐘在FPGA片內(nèi)分頻得到。
圖4 DDS波形產(chǎn)生原理框圖
數(shù)模轉(zhuǎn)換器(Digital-to-Analog Converter,D/AC)和低通濾波器(Low Pass Filter,LPF)在實(shí)驗(yàn)電路中由FPGA外部的8 bit并行電流型模數(shù)轉(zhuǎn)換DAC0808 芯片級(jí)聯(lián)運(yùn)放芯片UA741實(shí)現(xiàn),后級(jí)電路原理如圖5所示。
圖5 后級(jí)D/AC+LPF電路原理圖
實(shí)驗(yàn)電路直流工作電源用正負(fù)5 V,+5 V由上位機(jī)通過(guò)USB數(shù)據(jù)線提供;-5 V 則由電源轉(zhuǎn)換模塊轉(zhuǎn)換+5 V得到??紤]到D/AC和LPF工作正電源接同一個(gè)+5 V,LPF運(yùn)放增益需要調(diào)節(jié)到小于1 以避免輸出信號(hào)截頂失真。實(shí)驗(yàn)整體硬件電路樣例見(jiàn)圖6。
圖6 實(shí)驗(yàn)整體硬件電路樣例
實(shí)驗(yàn)工程頂層HDL文件主要工作包括:
(1)調(diào)用分頻子模塊(Gowin_CLKDIV)對(duì)輸入時(shí)鐘分頻以產(chǎn)生DDS工作時(shí)鐘;
(2)調(diào)用帶復(fù)位及使能的相位累加器子模塊(memaddr)以產(chǎn)生查找表輸出地址;
(3)調(diào)用存儲(chǔ)正弦波形數(shù)據(jù)的查找表子模塊(sin_pROM)以根據(jù)地址輸出相應(yīng)數(shù)據(jù);
(4)幅度衰減處理語(yǔ)句;
如圖7 所示為頂層HDL設(shè)計(jì)在通過(guò)綜合后,以云源原理圖展示組件生成的設(shè)計(jì)電路原理圖。
圖7 實(shí)驗(yàn)電路FPGA的HDL設(shè)計(jì)原理圖
子模塊中,相位累加器子模塊主體是單獨(dú)編寫手動(dòng)加入的.v文件,關(guān)鍵語(yǔ)句:mem_addr <=mem_addr+’b1 +freq_sel;實(shí)現(xiàn)每個(gè)時(shí)鐘地址增1,若開(kāi)關(guān)freq_sel按下,則地址再增1(使輸出頻率加倍)。時(shí)鐘分頻子模塊和關(guān)鍵的數(shù)據(jù)查找表子模塊主體則是基于GW1N系列IP core設(shè)計(jì)的單獨(dú)文件,由云源獨(dú)立組件操作生成并引入工程。
在云源軟件中運(yùn)行IP core Generator獨(dú)立組件,界面如圖8 所示。在芯片型號(hào)下方列出了相應(yīng)型號(hào)FPGA硬件能提供的不同功能類型IP core,逐層展開(kāi)功能類型,名稱為黑色字的是當(dāng)前工程可選用的,相應(yīng)說(shuō)明信息展示在窗口右邊。
圖8 云源的IP Core Generator界面
本實(shí)驗(yàn)中,以只讀存儲(chǔ)器(Read-Only Memory,ROM)方式存放數(shù)據(jù)的查找表子模塊是基于GW1N pROM 核設(shè)計(jì)的。FPGA正弦信號(hào)數(shù)據(jù)按8 bit并行輸出,即數(shù)據(jù)查找表位寬為8,地址深度即周期采樣點(diǎn)數(shù)定為256。選用IP core 列表中的pROM核,按上述參數(shù)定制查找表FPGA硬件結(jié)構(gòu),定制界面如圖9 所示。最后是導(dǎo)入指定的存放正弦波形數(shù)據(jù)的存儲(chǔ)初始化.mi文件。
圖9 pROM核定制界面
本實(shí)驗(yàn)用兼容Matlab 語(yǔ)法的Octave 開(kāi)源科學(xué)計(jì)算軟件來(lái)編程處理生成初始化.mi文件。處理程序?qū)?個(gè)周期的正弦函數(shù)進(jìn)行采樣;將采樣得到的-1~1之間的小數(shù)轉(zhuǎn)換為0~255 的整數(shù),即硬件需要的正弦波形數(shù)據(jù);創(chuàng)建需要的.mi文件,寫入合乎pROM規(guī)范的文件頭后,依序?qū)⒉ㄐ螖?shù)據(jù)填入。主要代碼如下:
云源IP core Generator組件完成pROM核設(shè)計(jì)后,自動(dòng)在工程源碼文件夾下生成子文件夾以存放IP core子模塊主體以及相應(yīng)輔助文件。云源主界面自動(dòng)打開(kāi)輔助的臨時(shí)示例文件,方便用戶將定制的IP core正確引入主設(shè)計(jì)中。實(shí)驗(yàn)電路中的時(shí)鐘分頻子模塊也以類似過(guò)程基于CLKDIV核生成。
HDL設(shè)計(jì)全部輸入后,執(zhí)行云源中的Synthesize菜單項(xiàng)做語(yǔ)法檢查、編譯和綜合,完成主體電路初步設(shè)計(jì)。
和通常FPGA教學(xué)實(shí)驗(yàn)流程稍有區(qū)別的是,由于云源軟件目前沒(méi)有內(nèi)置HDL 仿真功能和仿真工具接口,所以根據(jù)主體電路設(shè)計(jì)編寫的仿真測(cè)試HDL文件不加進(jìn)設(shè)計(jì)工程,而是獨(dú)立供第3 方仿真工具調(diào)用。
本實(shí)驗(yàn)電路仿真測(cè)試HDL代碼中,除了通常的輸入信號(hào)仿真生成變化等語(yǔ)句外,還增加了幾處配合Icarus Verilog仿真工具的Verilog HDL語(yǔ)句。
(1)在initial 塊開(kāi)始處加入如下語(yǔ)句,使仿真數(shù)據(jù)輸出到VCD文件。
其中wave.vcd參數(shù)是生成的VCD文件名稱。
(2)在initial塊結(jié)束處設(shè)定仿真結(jié)束條件或足夠的仿真運(yùn)行時(shí)長(zhǎng),并加系統(tǒng)函數(shù)$stop 以便仿真運(yùn)行能自行完整結(jié)束。
(3)在endmodule語(yǔ)句之后,用include 語(yǔ)句將主體電路各模塊代碼文件(不包括輔助文件)按相應(yīng)存放路徑引入仿真測(cè)試文件。
由于實(shí)驗(yàn)使用了IP core設(shè)計(jì),仿真需要調(diào)用云源軟件安裝文件夾下的IP core 仿真庫(kù)prim_sim.v。為簡(jiǎn)化后續(xù)操作,將該文件拷貝到仿真測(cè)試文件所在文件夾下,并將其用`include語(yǔ)句也引入仿真文件中。
在系統(tǒng)命令行終端,依次運(yùn)行開(kāi)源仿真套件中3個(gè)工具,對(duì)仿真測(cè)試文件進(jìn)行處理,常用命令行如下:
iverilog 對(duì)指定名稱的實(shí)驗(yàn)仿真測(cè)試文件(TB_top.v)處理后產(chǎn)生中間文件(缺省名a.out)。Vvp 執(zhí)行中間文件,按仿真測(cè)試代碼中指定名稱生成lxt2 壓縮格式的wave.vcd 數(shù)據(jù)文件。實(shí)驗(yàn)者操作Gtkwave圖形化工具讀取.vcd文件,選定需要展示的變量并設(shè)定變量值顯示方式[12],觀察其仿真波形,從中分析仍可能有的深層邏輯錯(cuò)誤,以便修正設(shè)計(jì)。
GTKWave交互界面如圖10 所示,圖中的正弦波正是本實(shí)驗(yàn)FPGA 最終8 bit 并行輸出數(shù)據(jù)以模擬Analog(仿DAC處理)顯示方式展示的結(jié)果,表明當(dāng)前的HDL設(shè)計(jì)在功能邏輯上已達(dá)實(shí)驗(yàn)要求。
圖10 GTKwave交互界面及實(shí)驗(yàn)輸出仿真波形
功能仿真驗(yàn)證無(wú)誤后,由云源軟件執(zhí)行后續(xù)物理實(shí)現(xiàn)操作,包括User Constraints(物理約束、時(shí)序約束)、Place&Route(布局布線、時(shí)序分析)和Program Device(芯片編程)。過(guò)程中的詳細(xì)反饋可以查看信息窗口和相應(yīng)詳細(xì)文本報(bào)告。
其中物理約束操作會(huì)自動(dòng)產(chǎn)生包含管腳綁定及時(shí)序約束的.cst 文本文件并加進(jìn)工程。而Place&Route操作在本實(shí)驗(yàn)中會(huì)警告需要修改管腳配置,這是由于本實(shí)驗(yàn)用的并行數(shù)據(jù)傳輸管腳占用了硬件缺省規(guī)定的可復(fù)用功能管腳。此時(shí)需開(kāi)啟Place&Route 菜單項(xiàng)的復(fù)用配置界面做相應(yīng)設(shè)定,如圖11 所示。
圖11 云源復(fù)用管腳設(shè)定界面
物理實(shí)現(xiàn)最后步驟是生成bit流(.fs)文件并編程到硬件FPGA芯片,具體操作調(diào)用云源獨(dú)立組件編程器Programmer完成。芯片編程時(shí)可選擇對(duì)片內(nèi)易失性的靜態(tài)隨機(jī)存取存儲(chǔ)器(Static Random-Access Memory,SRAM)或非易失性的閃存Flash 操作。若選擇后者,則上電時(shí),無(wú)需上位機(jī)開(kāi)發(fā)軟件,芯片會(huì)自動(dòng)加載片內(nèi)Flash 中的內(nèi)容配置給SRAM 運(yùn)行。片內(nèi)Flash讀寫速度要高過(guò)目前教學(xué)FPGA 實(shí)驗(yàn)板中配置用可編程只讀存儲(chǔ)器(Programmable Read-Only Memory,PROM)的固化和加載速度[13]。
硬件系統(tǒng)測(cè)試,可使用云源內(nèi)置邏輯分析儀(Gowin Analyzer Oscilloscope,GAO)組件輔助調(diào)試,其功能類似主流FPGA的片上調(diào)試工具[14]。
本實(shí)驗(yàn)達(dá)到教學(xué)要求的最終輸出模擬信號(hào)樣例在數(shù)字和模擬示波器上分別顯示如圖12(a)、(b)所示。
圖12 實(shí)驗(yàn)最終輸出信號(hào)樣例
圖13 是云源軟件在設(shè)計(jì)過(guò)程中生成的報(bào)告節(jié)選,可見(jiàn),該FPGA片內(nèi)資源足夠本次實(shí)驗(yàn)教學(xué)需要。學(xué)生還可在文中設(shè)計(jì)思路的基礎(chǔ)上,進(jìn)一步加強(qiáng)此設(shè)計(jì),充分利用剩余片內(nèi)資源拓展諸如多類型信號(hào)、串行D/A、數(shù)字調(diào)制等功能[15];也可自主進(jìn)行其他HDL設(shè)計(jì),選用資源配置更高的其他國(guó)產(chǎn)FPGA 芯片,實(shí)現(xiàn)更復(fù)雜的綜合拓展創(chuàng)新實(shí)驗(yàn)。
圖13 實(shí)驗(yàn)設(shè)計(jì)占用資源報(bào)告節(jié)選
綜上,以低成本國(guó)產(chǎn)FPGA 芯片為核心的實(shí)驗(yàn)硬件配合相關(guān)開(kāi)發(fā)軟件足以很好地實(shí)現(xiàn)本科課程中FPGA設(shè)計(jì)課內(nèi)教學(xué)內(nèi)容。第3 方開(kāi)源仿真方案雖稍有別于目前FPGA 課程使用的開(kāi)發(fā)軟件內(nèi)聯(lián)仿真工具,但不錯(cuò)的HDL 解析編譯性能,同樣能增強(qiáng)設(shè)計(jì)和調(diào)試的靈活性,降低實(shí)驗(yàn)成本,提升教學(xué)實(shí)驗(yàn)效率[16]。而并不復(fù)雜的操作和開(kāi)源的特性,使其非常適合目前國(guó)內(nèi)FPGA教學(xué)。
相關(guān)教學(xué)實(shí)驗(yàn)開(kāi)設(shè)讓學(xué)生在學(xué)習(xí)、掌握FPGA 知識(shí)和HDL開(kāi)發(fā)技術(shù)的同時(shí),深入了解國(guó)產(chǎn)FPGA軟硬件,激發(fā)他們對(duì)國(guó)內(nèi)相關(guān)行業(yè)的興趣,在為國(guó)家高科技產(chǎn)業(yè)發(fā)展培養(yǎng)后備力量方面有事半功倍的效果。相信國(guó)內(nèi)相關(guān)行業(yè)會(huì)繼續(xù)奮進(jìn),自主開(kāi)發(fā)出更優(yōu)秀的FPGA專業(yè)軟件和更高性能的國(guó)產(chǎn)FPGA 芯片一起支撐起我國(guó)電子信息產(chǎn)業(yè)無(wú)限廣闊的未來(lái)。