潘曉明,龔 軍
(華中科技大學電子信息與通信學院,武漢 430074)
當前,國內半導體行業的發展蒸蒸日上,尤其是在電子行業各個領域都有非常廣泛用途的可編程邏輯門陣列(Field Programmable Gate Array,FPGA)芯片,其產業發展狀況受到國內外密切關注。
目前絕大部分工科高校都有開設FPGA電路設計課程,但教學使用的FPGA 軟硬件基本都來自于國外公司。實際上,美國FPGA 產業占有世界FPGA 領域將近96%市場份額[1],專利達6 000 余項,居于絕對壟斷地位。而國內FPGA 廠商正在奮起直追,但畢竟還處于起步期,技術不夠成熟完善,主流硬件性能指標上也較為落后,市場占有率低[2]。國產FPGA相關工程實例與教學資源零碎稀少,在校學生偶爾使用國產FPGA芯片感覺上手比較困難,這對國產FPGA產業發展是很不利的。為給國內相關行業未來發展提供更有力的支撐,加強國產FPGA在教學領域的應用勢在必行。
本文結合FPGA 正弦信號產生電路設計實驗,對本科教學中開設以國產FPGA芯片為核心的電路設計實驗流程進行研討,并引入開源仿真工具來完善實驗環節。
本文探討的教學實驗所使用的核心FPGA芯片是國內2014 年推出的一款入門級產品GW1NLV1QN48[4]。其主要結構與主流FPGA 基本一致,包括查找表、寄存器、布線、輸入輸出等,并加入了非易失性的閃存儲存器、鎖相環等內部硬件單元[5],圖1 所示為GW1N-1 器件結構示意圖。

圖1 GW1N-1器件結構示意圖
和目前教學常用的國外公司在其大學計劃中推廣的入門級FPGA 芯片相比,GW1N-1的55 nm制作工藝和片內資源數量都相對較弱,但資源類型并不少,數量也足夠本科教學用,性價比很不錯。而且片內包含非易失性存儲器,能有效降低外圍電路復雜度,使用上更為方便靈活。
教學實驗選用的搭載GW1N-1 芯片的小型簡約型開發板如圖2 所示。板上載有系統開發必需的調試下載器以及外部支撐電路和少量用戶資源[6],小巧實用,價格低廉。

圖2 實驗用國產FPGA開發板
上位機通過一根數據線以通用串行總線(Universal Serial Bus,USB)方式連接開發板,完成+5 V供電、下載調試以及串口通信功能,實驗者使用配套開發軟件即可完成相應FPGA 設計物理實現流程,操作簡便。開發板兩側引出腳可直插面包板,使得拓展外部電路連接很方便,非常適合基礎教學實驗。
實驗開發軟件主要是配套GW1N系列芯片的云源設計軟件。該軟件從其官網可免費下載,免費申請許可證,教學使用無成本和版權問題。云源軟件包括了從硬件描述語言(Hardware Description Language,HDL)代碼輸入到FPGA芯片編程的物理實現全流程[7]。圖3 所示為云源集成開發環境界面部分展開示意圖。

圖3 云源界面部分展開界面圖
云源軟件開發可使用主流的兩種HDL 代碼輸入方式,支持相應語言新特性,但不支持教學中盡量淡化的傳統原理圖設計輸入方式[8]。軟件中關鍵的HDL綜合工具是國內自主開發的Gowin Synthesis,功能較完備。
使用云源軟件進行開發,物理實現流程和主流FPGA 基本一致,主要功能操作集中在綜合處理Process菜單項和工具組件Tools菜單項。軟件帶有頗為詳細的中文用戶指南,初學者使用沒有太大難度。
目前FPGA 業界設計流行基于知識產權核(Intellectual Property core,IP core)的設計方法,以此促進新功能模塊的增添并壓縮項目完成時間。GW1N系列FPGA也有不少自主開發的IP core,包括硬核和軟核,根據選定芯片片內的硬件資源不同,提供的可用IP core有增減。
云源軟件實現了物理實現全流程開發,但暫時沒有內置HDL 仿真功能,而軟件HDL 仿真調試對于實際工程和教學實驗都是非常重要。目前的解決方案是結合云源提供的自有IP core 仿真庫,在云源外部運行第3方獨立仿真軟件對相應測試Testbench代碼進行再編譯并仿真。目前高校常用的是業界優秀的HDL仿真工具ModelSim,但從本科教學角度,考慮成本和特殊情況下的版權問題,引入逐漸流行的開源仿真工具補足仿真環節是更為合理的方式。輕量、免費、開源的HDL仿真套件Icarus Verilog就是一個不錯的選擇[9]。
Icarus Verilog支持常見三大系統平臺,相比于主流FPGA廠商相關商業軟件,其顯得極為小巧,但教學使用效果并不弱,而且有開源的優勢。一般使用是以命令行方式依次執行套件中3 個工具。
Iverilog.exe:處理HDL 文件,進行語法檢查、轉換、編譯并生成中間文件。
Vvp.exe:執行中間文件,生成特定格式的VCD數據文件。
GTKWave.exe:打開VCD 文件,圖形化交互顯示設計中變量仿真結果。
其中VCD(.vcd)數據文件是Verilog HDL語言標準中定義的一種通用的文件格式。它主要包含了頭信息、變量預定義和變量值變化信息,即記錄了整個仿真運行的信息,可以用它來再現仿真,顯示各端口各變量的數據[10]。作為語言標準的一部分,可以用Verilog HDL系統函數來產生,包括ModelSim 和GTKWave 等主流HDL仿真器都能夠查看該類文件。
正弦波產生實驗電路設計思路是基于直接數字合成(Direct Digtal Synthesis,DDS)波形產生的基本原理,原理框圖如圖4 所示,電路設計的關鍵是波形數據查找表[11]。實驗電路中,正弦波形數據查找表和相位累加器正是以HDL 設計由FPGA 來實現。時鐘源由板載晶振電路輸出時鐘在FPGA片內分頻得到。

圖4 DDS波形產生原理框圖
數模轉換器(Digital-to-Analog Converter,D/AC)和低通濾波器(Low Pass Filter,LPF)在實驗電路中由FPGA外部的8 bit并行電流型模數轉換DAC0808 芯片級聯運放芯片UA741實現,后級電路原理如圖5所示。

圖5 后級D/AC+LPF電路原理圖
實驗電路直流工作電源用正負5 V,+5 V由上位機通過USB數據線提供;-5 V 則由電源轉換模塊轉換+5 V得到。考慮到D/AC和LPF工作正電源接同一個+5 V,LPF運放增益需要調節到小于1 以避免輸出信號截頂失真。實驗整體硬件電路樣例見圖6。

圖6 實驗整體硬件電路樣例
實驗工程頂層HDL文件主要工作包括:
(1)調用分頻子模塊(Gowin_CLKDIV)對輸入時鐘分頻以產生DDS工作時鐘;
(2)調用帶復位及使能的相位累加器子模塊(memaddr)以產生查找表輸出地址;
(3)調用存儲正弦波形數據的查找表子模塊(sin_pROM)以根據地址輸出相應數據;
(4)幅度衰減處理語句;
如圖7 所示為頂層HDL設計在通過綜合后,以云源原理圖展示組件生成的設計電路原理圖。

圖7 實驗電路FPGA的HDL設計原理圖
子模塊中,相位累加器子模塊主體是單獨編寫手動加入的.v文件,關鍵語句:mem_addr <=mem_addr+’b1 +freq_sel;實現每個時鐘地址增1,若開關freq_sel按下,則地址再增1(使輸出頻率加倍)。時鐘分頻子模塊和關鍵的數據查找表子模塊主體則是基于GW1N系列IP core設計的單獨文件,由云源獨立組件操作生成并引入工程。
在云源軟件中運行IP core Generator獨立組件,界面如圖8 所示。在芯片型號下方列出了相應型號FPGA硬件能提供的不同功能類型IP core,逐層展開功能類型,名稱為黑色字的是當前工程可選用的,相應說明信息展示在窗口右邊。

圖8 云源的IP Core Generator界面
本實驗中,以只讀存儲器(Read-Only Memory,ROM)方式存放數據的查找表子模塊是基于GW1N pROM 核設計的。FPGA正弦信號數據按8 bit并行輸出,即數據查找表位寬為8,地址深度即周期采樣點數定為256。選用IP core 列表中的pROM核,按上述參數定制查找表FPGA硬件結構,定制界面如圖9 所示。最后是導入指定的存放正弦波形數據的存儲初始化.mi文件。

圖9 pROM核定制界面
本實驗用兼容Matlab 語法的Octave 開源科學計算軟件來編程處理生成初始化.mi文件。處理程序對1個周期的正弦函數進行采樣;將采樣得到的-1~1之間的小數轉換為0~255 的整數,即硬件需要的正弦波形數據;創建需要的.mi文件,寫入合乎pROM規范的文件頭后,依序將波形數據填入。主要代碼如下:

云源IP core Generator組件完成pROM核設計后,自動在工程源碼文件夾下生成子文件夾以存放IP core子模塊主體以及相應輔助文件。云源主界面自動打開輔助的臨時示例文件,方便用戶將定制的IP core正確引入主設計中。實驗電路中的時鐘分頻子模塊也以類似過程基于CLKDIV核生成。
HDL設計全部輸入后,執行云源中的Synthesize菜單項做語法檢查、編譯和綜合,完成主體電路初步設計。
和通常FPGA教學實驗流程稍有區別的是,由于云源軟件目前沒有內置HDL 仿真功能和仿真工具接口,所以根據主體電路設計編寫的仿真測試HDL文件不加進設計工程,而是獨立供第3 方仿真工具調用。
本實驗電路仿真測試HDL代碼中,除了通常的輸入信號仿真生成變化等語句外,還增加了幾處配合Icarus Verilog仿真工具的Verilog HDL語句。
(1)在initial 塊開始處加入如下語句,使仿真數據輸出到VCD文件。

其中wave.vcd參數是生成的VCD文件名稱。
(2)在initial塊結束處設定仿真結束條件或足夠的仿真運行時長,并加系統函數$stop 以便仿真運行能自行完整結束。
(3)在endmodule語句之后,用include 語句將主體電路各模塊代碼文件(不包括輔助文件)按相應存放路徑引入仿真測試文件。
由于實驗使用了IP core設計,仿真需要調用云源軟件安裝文件夾下的IP core 仿真庫prim_sim.v。為簡化后續操作,將該文件拷貝到仿真測試文件所在文件夾下,并將其用`include語句也引入仿真文件中。
在系統命令行終端,依次運行開源仿真套件中3個工具,對仿真測試文件進行處理,常用命令行如下:

iverilog 對指定名稱的實驗仿真測試文件(TB_top.v)處理后產生中間文件(缺省名a.out)。Vvp 執行中間文件,按仿真測試代碼中指定名稱生成lxt2 壓縮格式的wave.vcd 數據文件。實驗者操作Gtkwave圖形化工具讀取.vcd文件,選定需要展示的變量并設定變量值顯示方式[12],觀察其仿真波形,從中分析仍可能有的深層邏輯錯誤,以便修正設計。
GTKWave交互界面如圖10 所示,圖中的正弦波正是本實驗FPGA 最終8 bit 并行輸出數據以模擬Analog(仿DAC處理)顯示方式展示的結果,表明當前的HDL設計在功能邏輯上已達實驗要求。

圖10 GTKwave交互界面及實驗輸出仿真波形
功能仿真驗證無誤后,由云源軟件執行后續物理實現操作,包括User Constraints(物理約束、時序約束)、Place&Route(布局布線、時序分析)和Program Device(芯片編程)。過程中的詳細反饋可以查看信息窗口和相應詳細文本報告。
其中物理約束操作會自動產生包含管腳綁定及時序約束的.cst 文本文件并加進工程。而Place&Route操作在本實驗中會警告需要修改管腳配置,這是由于本實驗用的并行數據傳輸管腳占用了硬件缺省規定的可復用功能管腳。此時需開啟Place&Route 菜單項的復用配置界面做相應設定,如圖11 所示。

圖11 云源復用管腳設定界面
物理實現最后步驟是生成bit流(.fs)文件并編程到硬件FPGA芯片,具體操作調用云源獨立組件編程器Programmer完成。芯片編程時可選擇對片內易失性的靜態隨機存取存儲器(Static Random-Access Memory,SRAM)或非易失性的閃存Flash 操作。若選擇后者,則上電時,無需上位機開發軟件,芯片會自動加載片內Flash 中的內容配置給SRAM 運行。片內Flash讀寫速度要高過目前教學FPGA 實驗板中配置用可編程只讀存儲器(Programmable Read-Only Memory,PROM)的固化和加載速度[13]。
硬件系統測試,可使用云源內置邏輯分析儀(Gowin Analyzer Oscilloscope,GAO)組件輔助調試,其功能類似主流FPGA的片上調試工具[14]。
本實驗達到教學要求的最終輸出模擬信號樣例在數字和模擬示波器上分別顯示如圖12(a)、(b)所示。

圖12 實驗最終輸出信號樣例
圖13 是云源軟件在設計過程中生成的報告節選,可見,該FPGA片內資源足夠本次實驗教學需要。學生還可在文中設計思路的基礎上,進一步加強此設計,充分利用剩余片內資源拓展諸如多類型信號、串行D/A、數字調制等功能[15];也可自主進行其他HDL設計,選用資源配置更高的其他國產FPGA 芯片,實現更復雜的綜合拓展創新實驗。

圖13 實驗設計占用資源報告節選
綜上,以低成本國產FPGA 芯片為核心的實驗硬件配合相關開發軟件足以很好地實現本科課程中FPGA設計課內教學內容。第3 方開源仿真方案雖稍有別于目前FPGA 課程使用的開發軟件內聯仿真工具,但不錯的HDL 解析編譯性能,同樣能增強設計和調試的靈活性,降低實驗成本,提升教學實驗效率[16]。而并不復雜的操作和開源的特性,使其非常適合目前國內FPGA教學。
相關教學實驗開設讓學生在學習、掌握FPGA 知識和HDL開發技術的同時,深入了解國產FPGA軟硬件,激發他們對國內相關行業的興趣,在為國家高科技產業發展培養后備力量方面有事半功倍的效果。相信國內相關行業會繼續奮進,自主開發出更優秀的FPGA專業軟件和更高性能的國產FPGA 芯片一起支撐起我國電子信息產業無限廣闊的未來。