芯航線——普利斯隊長精心奉獻
課程目標: 1.了解並學會FPGA開發設計的整體流程
2.設計一個二選一選擇器並進行功能仿真、時序仿真以及板級驗證
實驗平台:芯航線FPGA開發板、杜邦線
實驗內容:
良好的文件夾設置以及工程管理是一個好的FPGA設計的基礎,在學習之初就建立倆良好的習慣,會少走一些彎路。因此我們首先在新建的工程文件夾下面,分別建立如圖2-1所示的子文件夾。
圖2-1 FPGA工程子文件夾
上圖中,prj為工程文件存放目錄;rtl為verilog可綜合代碼存放目錄;testbench為測試文件的存放目錄;img為設計相關圖片存放目錄;doc為設計相關文檔存放目錄;ip文件夾存放quartus ii中生成的ip核文件。
建立工程
打開安裝好的Quartus II軟件,軟件啟動界面如圖2-2所示
圖2-2 Quartus II啟動界面
首先在這里單擊Creat a New Project來新建一個工程向導。界面如圖2-3所示。
圖2-3 工程路徑設置以及命名
第二步,添加已有設計文件。如沒有可直接點擊Nxet,本次單擊Nxet。
圖2-4 工程中添加相關設計文件
第三步,選擇器件。在這里選擇芯航線FPGA開發板上的Cyclone IV E系列的EP4CE10F17C8。這里可在右面紅色框內可以添加限定條件來減少需要翻看器件的書目。
圖2-5 設置工程用器件
第四步,EDA工具的設定。從上依次是綜合工具、仿真工具、形式驗證工具以及板級驗證工具。可根據實際情況自行設定。在這里根據自己安裝情況將仿真工具設置為Modelsim-Altera或者Modelsim,語言選擇Verilog HDL。
圖2-6 EDA工具設定
第五步,單擊Finish完成工程的建立,至此一個FPGA的工程已經建立完畢。
設計輸入
工程建立完成后,需要為工程添加新的設計文件,單擊File—New—Verilog HDL File,或者工具欄中的New,彈出圖2-7-2的選擇框。此處選擇Design Files中的Verilog HDL File。
圖2-7-1 新建設計文件圖2-7-2 新建設計文件選擇框
新的文件建立完成,輸入以下設計,並已led_text.v命名保存到工程所在的rtl文件下。
module led_test(a,b,key_in,led_out);
input a;//輸入端口A input b;//輸入端口B
input key_in; //按鍵輸入,實現輸入輸入通道的選擇
output led_out; //led 控制端口
//當key_in == 0 :led_out = a
assign led_out = (key_in == 0)? a : b;
endmodule |
分析和綜合
單擊工具欄中的Start Analysis & Synthesis來進行分析和綜合。如在設計過程有失誤的地方,在分析和綜合后會提示Error或者Warning,需針對不同情況進行修改。芯航線匯總了常見的問題以及解決方式,可以參考用戶手冊並針對性解決。
圖2-8 分析和綜合
全編譯后可以在RTL Viewer中可以看到圖2-9所示的硬件邏輯電路。即為一個二選一選擇器,符合預期設計。
圖2-9 RTL Viewer
功能仿真
為了驗證以上邏輯設計是否成功,在直接下載到開發板觀察之前需編寫激勵文件,此處再新建一個.v文件輸入以下內容。並以led_test_tb.v保存到工程對應的testbench文件夾下。並再次進行分析和綜合查看是否存在語法設計錯誤。
`timescale 1ns/1ps
module led_test_tb;
//激勵信號定義,對應連接到待測試模塊的輸入端口 reg signal_a; reg signal_b; reg signal_c;
//待檢測信號定義,對應連接到待測試模塊的輸出端口 wire led;
//例化待測試模塊 led_test led_test0( .a(signal_a), .b(signal_b), .key_in(signal_c), .led_out(led) );
//產生激勵 initial begin signal_a = 0;signal_b = 0;signal_c = 0; #100;//延時100ns signal_a = 0;signal_b = 0;signal_c = 1; #100; signal_a = 0;signal_b = 1;signal_c = 0; #100; signal_a = 0;signal_b = 1;signal_c = 1; #100; signal_a = 1;signal_b = 0;signal_c = 0; #100; signal_a = 1;signal_b = 0;signal_c = 1; #100; signal_a = 1;signal_b = 1;signal_c = 0; #100; signal_a = 1;signal_b = 1;signal_c = 1; #200; $stop; end
endmodule |
設置仿真腳本
單擊標題欄的Assignments—Settings—Simulation,查看仿真工具以及語言是否與之前一致否則進行相應修改。選中Compile test bench單擊Test Benches后點擊OK。可以看到如圖2-10界面。
圖2-10-1 仿真腳本設置
圖2-10-2 新建激勵
點擊New會彈出如圖2-11所示的testbench設置文件對話框,找到已經編寫好的激勵文件,單擊Add。在Test bench name中填寫對應的激勵名稱。點擊OK后回到主界面
圖2-11 測試激勵設置
單擊Tools—Run Simulation Tool—RTL Simulation或者單擊工具欄中的RTL Simulation來進行前仿真也就是常說的功能仿真。
圖2-12 開啟功能仿真
如出現如圖2-13對話框,即提示仿真軟件路徑報錯,可在Tools—Options—EDA Tool Options設置對應的仿真軟件的路徑即可,如圖2-14所示。
圖2-13 錯誤信息示例
圖2-14 設置EDA工具的鏈接
至此即可在仿真軟件modelsim中看到如圖2-15的波形文件,可以看出符合當key_in等於0時led_out等於a,當key_in等於1時led_out等於b。即功能仿真通過。
圖2-15 功能仿真波形
如沒有出現預期波形可針對具體問題具體分析,芯航線也匯總了一部分常見問題及解決辦法,此部分詳細內容也可以參考用戶手冊相關內容。
布局布線
點擊QII主界面的Start Compilation,進行綜合&布局布線。布局布線過程中如遇出錯,針對相應情況具體修改。
圖2-16 布局布線
時序仿真
點擊Tools—Run Simulation Tool—Gate Leval Simulation或者工具欄點擊Gate Leval Simulation進行后仿真也就是門級仿真。
圖2-17 門級仿真
彈出選擇時序模型對話框,可針對相應情況具體選擇。此時可選擇第一個,慢速工作溫度為85攝氏度內核供電1.2V的情況進行仿真。
圖2-18 仿真模型設置
在Modelsim中可以看到類似圖2-19的波形,存在不希望存在的脈沖。且在200ns時的led相對輸入信號有一定時間的邏輯延時。
圖2-19 時序仿真波形
IO分配以及生成配置文件
在標題欄中Assignments—Pin Planner或者直接單擊進行IO分配亦或者編寫tcl文件,此處需針對不同板卡進行不同的設置。
圖2-20 Pin Planner
芯航線開發板的引腳分配可以在附贈資料中查到,最終的配置如圖2-21所示。
圖2-21 分配好的引腳
在分配好引腳后,仍需進行一次全編譯才能使管腳分配生效。
配置FPGA下載
單擊工具欄中的Programmer,
圖2-22 Programmer
彈出以下對話框,單擊Start即可將設計好的邏輯下載到開發板中。通過按鍵以及兩根杜邦線控制E8、F8接入不同的電壓值可以觀測到led燈具有不同的亮滅效果。
圖2-23 下載界面
FPGA也支持多種下載方式,不同下載方式的具體操作可參見開發板附贈中的用戶手冊。
如在下載過程中出現其他情況,可查詢芯航線附贈的用戶手冊相關章節進行解決,此處不再詳述。
至此一個基本的FPGA設計開發流程介紹完畢。