文章目錄
- 前言
- 軟件安裝
- 開發軟件
- 仿真軟件
- 點燈測試
- 代碼編寫與編譯
- 引腳分配
- 固件下載
- 仿真測試
- ModelSim添加仿真庫
- TangDynasty仿真設置
- 進行仿真
- 后記
前言
最近因為工作需要用安路的FPGA,這里對安路FPGA開發相關流程做個記錄。作為測試只需要一個核心板(我這里用的 EF2L45LG144B
)和下載器( AL-LINK
,我這里是核心板上板載的)。
安路的所有軟件和資料都可以在官網上下載到,不過因為權限問題,有些內容可能需要發郵箱給安路申請提升權限:
https://www.anlogic.com/
軟件安裝
開發軟件
安路FPGA開發軟件是 TangDynasty
,這里使用下面版本,另外還需要下載 license
:
之前碰到過筆記本離電性能平衡模式下怎么樣裝都裝不成功,插電高性能下安裝就一點都沒問題,不知道是不是安裝程序哪里有超時機制處理不當的BUG什么的。
軟件安裝后需要手動把下載的 license
放到安裝目錄對應位置下(這個許可是過段時間就過期,需要重新下載替換,可以用文本方式查看到有效期限):
軟件安裝后安裝目錄對應位置下有下載器的驅動,下載器連接電腦后可能需要手動更新驅動才會正常:
軟件安裝后可以打開軟件找到軟件手冊:
這個手冊基本上用到的東西都有介紹了,熟悉FPGA開發的人直接看這個就能用起來了。
仿真軟件
ModelSim-英特爾? FPGAs 標準版軟件版本:
https://www.intel.cn/content/www/cn/zh/software-kit/750666/modelsim-intel-fpgas-standard-edition-software-version-20-1-1.html
點燈測試
這里直接就點燈進行測試了。
代碼編寫與編譯
首先新建文件:
編寫代碼如下:
module blink(clk, led);input clk;output reg led = 0;reg [31:0] counter = 0;always@(posedge clk)if (counter == 5_000_000)counter <= 0;elsecounter <= counter + 1;always@(posedge clk)if (counter == 5_000_000)led <= !led;endmodule
我的板子上有個 10MHz 的時鐘輸入到芯片,我拿它設置了個500ms的計數器,每次計數溢出時翻轉一次外接LED的端口電平,實現LED閃爍效果。
運行編譯:
引腳分配
沒有報錯的話分配下IO口:
另外未用到的IO口狀態可以在下面地方統一設置(默認通常是上拉輸入的):
固件下載
設置IO口后重新運行編譯,成功后可以下載比特流( .bit
)文件到芯片中看到LED閃爍效果:
下載時選擇 JTAG
,掉電后就會失效;選擇 PROGRAM FLASH
掉電后也不會失效。
這里有點問題,官方說 PROGRAM FLASH
是下載到外部Flash, PROGRAM INTERNAL FLASH
是下載到芯片內置的Flash中,我的芯片按理說是選用后者才對,但我這里后面的選項不可選,并且選擇前面的也可以正常使用。
仿真測試
TangDynasty
使用 ModelSim
仿真可以參考軟件手冊或者也可以參考下面文章:
https://chipdebug.com/forum-post/55252.html
下面步驟中在 ModelSim添加仿真庫 后其實就直接可以在 ModelSim
中進行仿真了,這個可以參考上面資料。這里介紹的是通過 TangDynasty
生成仿真腳本來進行仿真。
ModelSim添加仿真庫
ModelSim添加仿真庫理論上對于源碼和庫目錄大概是沒有硬性要求的,這里參考上面資料的方式進行介紹。
首先在ModelSim目錄中新建存放安路器件源碼和模塊庫的目錄,并從TangDynasty安裝目錄中拷貝源碼到這里:
需要注意的是如果在上面目錄中新建和拷貝需要權限的話,下面打開ModelSim需要以管理員方式打開,否則建立文件等會失敗。
啟動 ModelSim
,選擇 File > Change Directory
將路徑轉到 anlogic
文件夾下。然后選擇 File > New > Library
下新建庫:
選擇 Compile → Compile
進行編譯:
編譯完成后可以看到模塊和相關文件:
TangDynasty仿真設置
TangDynasty可以生成ModelSim用的放在腳本,但是需要進行一些設置。
Process > Properties >
進行仿真
首先根據實際需求在 Process > Properties
設置模塊庫目錄以及仿真時間和精度:
然后準備測試腳本,比如這里用 blink_tb.v
,測試腳本內容如下:
`timescale 1ns/1ns // 仿真時間尺度和精度module blink_tb();reg sig_clk;wire sig_led;blink blink_inst(.clk(sig_clk),.led(sig_led));initial sig_clk = 0; // 設置初值always #50 sig_clk = ~sig_clk; // 每 50*1ns 翻轉一次sig_clk(即10MHz信號)initial begin // 開始執行#2_000_000_000; // 延時 2_000_000_000 納秒(即 2000ms 或 2秒鐘)$stop; // 停止執行endendmodule
TangDynasty中運行到不同的步驟可以執行不同發仿真:
當 HDL2Bit Flow 運行至 Read Design 這一步時,可執行 Behavioral Simulation;
當 HDL2Bit Flow 運行至 Optimize RTL 這一步時,可執行 Post-RTL Simulation;
當 HDL2Bit Flow 運行至 Optimize Gate 這一步時,可執行 Post-Gate Simulation;
當 HDL2Bit Flow 運行至 Optimize Routing 這一步時,可執行 Post-Route Simulation。
例如下面:
接著選擇 Tool > Simlation
添加測試腳本:
添加后會生成仿真腳本,注意檢查相關內容,如果不對可以在這里直接修改,需要注意的是 -voptargs=+acc
這行:
之后就可以在ModelSim中進行仿真了,首先切換目錄:
然后輸入命令開始執行仿真:
仿真結果如下:
后記
TangDynasty 整體使用還是比較簡單的,只有使用ModelSim來仿真稍稍會麻煩些,但也不算特別麻煩。