大家好,這里是程序員 杰克 。一名平平無奇的嵌入式軟件工程師。
在日常FPGA開發過程中,邏輯代碼設計完成后,為了驗證代碼邏輯的正確性,優先使用邏輯仿真(modesim)進行驗證。仿真驗證通過后進行板級驗證時,使用邏輯分析儀進行分析和驗證邏輯是否正確。FPGA兩大主流廠商的軟件集成邏輯分析儀供使用,Altera的Quartus自帶SignalTap、Xilinx的Vivado自帶ILA邏輯調試工具。
本篇總結和分享在Xilinx編譯工具Vivado環境下,使用內嵌的邏輯分析儀(ILA)的4種方法:
- HDL代碼實例化ILA IP核
- Block Design添加ILA IP核
- Synthesis后對Nets執行Mark Debug操作
- 在HDL代碼中使用屬性關鍵字mark_debug
本文以"LED每0.5s間隔亮滅"工程為例,觀測 led[0]信號以及led_cnt[24:0]時鐘計數信號 ,演示ILA使用的4種方法以及相關的注意事項。
01 HDL代碼實例化ILA IP核
在IP Catalog中搜索ILA,然后雙擊該IP核進行配置。
本示例中led[0]、led_cnt[24:0]信號位寬分別為1、25bit,具體配置如下所示;配置完成后,點擊“OK”;在彈出的界面點擊“Generate”完成IP核的配置和生成。
在Verilog代碼中對剛生成的ILA核進行實例化,在具體代碼添加例化代碼,如下所示:
ila_0 ila_0_inst0 (
.clk (clk ), // input wire clk
.probe0 (led ), // input wire [0:0] probe0
.probe1 (led_cnt) // input wire [24:0] probe1
);
綜合、實現、生成bit后寫到FPGA芯片便可觀測到信號(此處不做演示)。
特別說明:對于純FPGA工程,杰克推薦該方式去使用ILA;
02 Block Design添加ILA IP核
在Vivado中,除了使用HDL語言去描述設計,還可以通過Block Design圖形化連接的方式進行設計。7系列的軟核MicroBlaze、帶硬核的SOC芯片(ZYNQ、MPSOC等)的設計都是通過Block和HDL相結合來描述設計。本文仍以純FPGA方式來說明在Block Design中使用ILA核(純FPGA開發不建議)。ILA使用操作如下:
創建/打開Block Design,在Diagram界面,點擊“+”按鈕,搜索ILA,然后雙擊該IP核進行配置。
參數配置的方式與上一小節一致,這里不作贅述。不同之處是在Block Design中使用ILA核,ILA核的實例化HDL代碼會自動生成到Block Design文件中。
綜合、實現、生成bit后寫到FPGA芯片便可觀測到信號(此處不做演示)。
特別說明:
帶MicroBlaze軟核/ARM硬核的FPGA的復雜設計中,模塊接口的信號觀測ILA使用該方法;模塊內部信號的觀測ILA使用上一小節的方式;兩者可結合使用。
03 綜合后添加Mark Debug
對工程執行綜合,綜合完成后,找到要觀測的信號的Nets,右鍵選擇“Mark Debug”;
要觀測信號的Nets選擇并設置完成后,點擊“Set Up Debug”;按照下面步驟配置Debug ILA參數;
Debug ILA配置完成后,保存SYNTHESIZED DESIGN后會在約束文件(.xdc)中生成ILA的配置約束,如下圖所示:
綜合、實現、生成bit后寫到FPGA芯片便可觀測到信號(此處不做演示)。
特別說明:mark_debug僅可以對Nets類型進行操作,不能對Cells操作;
04 HDL中使用MARK_DEBUG
MARK_DEBUG描述
vivado設計IDE提供了一些屬性供開發者使用,本篇推文主要是描述MARK_DEBUG屬性約束的使用和注意事項。詳細可參考UG912文檔的內容。使用MARK_DEBUG的條件如下:
約束對象必須是Nets類型
在Nets信號的頂端聲明處進行約束
vivado提供了包括Verilog、VHDL、XDC三種語法。三種語法如下所示:
//Verilog語法
約束語法:
(* MARK_DEBUG="value" *)
#value = true/flase
使用示例:
(* MARK_DEBUG="true" *) output wire led;
(* MARK_DEBUG="true" *) reg [24:0] led_cnt;
//VHDL語法
約束語法:
聲明: attribute MARK_DEBUG : string;
語法: attribute MARK_DEBUG of signal_name : signal is "value";
//signal_name-內部信號, value = TRUE/FALSE
使用示例:
signal led : std_logic;
attribute MARK_DEBUG : string;
attribute MARK_DEBUG of led : signal is "TRUE";
//XDC語法
約束語法:
set_property MARK_DEBUG value [get_nets < net_name >]
#value = TRUE/FLASE
#net_name-是信號名
使用示例:
set_property MARK_DEBUG TURE [get_nets led];
使用MARK_DEBUG標記生成ILA觀測信號步驟
在led[0]、led_cnt[24:0]信號的頂端聲明處進行約束,省略代碼如下:
module led_top(
input wire clk_i,
input wire rst_n,
(* MARK_DEBUG="true" *) output wire led_o
)
;
...
(* MARK_DEBUG="true" *) reg [24:0] led_cnt;
...
endmodule
執行綜合操作,綜合完成后,打開綜合設計,然后點擊“Set Up Debug”;
按照下面步驟配置Debug ILA參數;
* Debug ILA配置完成后,保存SYNTHESIZED DESIGN后會在約束文件(.xdc)中生成ILA的配置約束,如下圖所示:
綜合、實現、生成bit后寫到FPGA芯片便可觀測到信號(此處不做演示)。
特別說明:
MARK_DEBUG約束標記會阻止Vivado對該信號以及下級信號的優化。因此,在邏輯驗證完成后,要刪除Mark_DEBUG約束標記或者將其失能。
05 文章總結
上面總結和分享了4種Vivado下使用ILA的方法。杰克更推薦使用前面兩種實例化的方法去使用ILA IP核。對于 純FPGA HDL開發 ,配置生成ILA核并在HDL代碼中實例化使用便可;對于帶軟核/硬核的FPGA開發 ,在Block模塊外部接口信號通過添加ILA核,Block模塊內部信號則在HDL代碼中實例化ILA核,兩者結合使用。
-
FPGA
+關注
關注
1602文章
21320瀏覽量
593173 -
Xilinx
+關注
關注
70文章
2121瀏覽量
119373 -
邏輯分析儀
+關注
關注
3文章
200瀏覽量
22913 -
Vivado
+關注
關注
18文章
790瀏覽量
65093 -
ILA
+關注
關注
0文章
5瀏覽量
3505
發布評論請先 登錄
相關推薦
評論