大家好,這里是程序員 杰克 。一名平平無奇的嵌入式軟件工程師。
在日常FPGA開發(fā)過程中,邏輯代碼設計完成后,為了驗證代碼邏輯的正確性,優(yōu)先使用邏輯仿真(modesim)進行驗證。仿真驗證通過后進行板級驗證時,使用邏輯分析儀進行分析和驗證邏輯是否正確。FPGA兩大主流廠商的軟件集成邏輯分析儀供使用,Altera的Quartus自帶SignalTap、Xilinx的Vivado自帶ILA邏輯調(diào)試工具。
本篇總結和分享在Xilinx編譯工具Vivado環(huán)境下,使用內(nèi)嵌的邏輯分析儀(ILA)的4種方法:
- HDL代碼實例化ILA IP核
- Block Design添加ILA IP核
- Synthesis后對Nets執(zhí)行Mark Debug操作
- 在HDL代碼中使用屬性關鍵字mark_debug
本文以"LED每0.5s間隔亮滅"工程為例,觀測 led[0]信號以及l(fā)ed_cnt[24:0]時鐘計數(shù)信號 ,演示ILA使用的4種方法以及相關的注意事項。
01 HDL代碼實例化ILA IP核
在IP Catalog中搜索ILA,然后雙擊該IP核進行配置。
本示例中l(wèi)ed[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
);
綜合、實現(xiàn)、生成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開發(fā)不建議)。ILA使用操作如下:
創(chuàng)建/打開Block Design,在Diagram界面,點擊“+”按鈕,搜索ILA,然后雙擊該IP核進行配置。
參數(shù)配置的方式與上一小節(jié)一致,這里不作贅述。不同之處是在Block Design中使用ILA核,ILA核的實例化HDL代碼會自動生成到Block Design文件中。
綜合、實現(xiàn)、生成bit后寫到FPGA芯片便可觀測到信號(此處不做演示)。
特別說明:
帶MicroBlaze軟核/ARM硬核的FPGA的復雜設計中,模塊接口的信號觀測ILA使用該方法;模塊內(nèi)部信號的觀測ILA使用上一小節(jié)的方式;兩者可結合使用。
03 綜合后添加Mark Debug
對工程執(zhí)行綜合,綜合完成后,找到要觀測的信號的Nets,右鍵選擇“Mark Debug”;
要觀測信號的Nets選擇并設置完成后,點擊“Set Up Debug”;按照下面步驟配置Debug ILA參數(shù);
Debug ILA配置完成后,保存SYNTHESIZED DESIGN后會在約束文件(.xdc)中生成ILA的配置約束,如下圖所示:
綜合、實現(xiàn)、生成bit后寫到FPGA芯片便可觀測到信號(此處不做演示)。
特別說明:mark_debug僅可以對Nets類型進行操作,不能對Cells操作;
04 HDL中使用MARK_DEBUG
MARK_DEBUG描述
vivado設計IDE提供了一些屬性供開發(fā)者使用,本篇推文主要是描述MARK_DEBUG屬性約束的使用和注意事項。詳細可參考UG912文檔的內(nèi)容。使用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-內(nèi)部信號, 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
執(zhí)行綜合操作,綜合完成后,打開綜合設計,然后點擊“Set Up Debug”;
按照下面步驟配置Debug ILA參數(shù);
* Debug ILA配置完成后,保存SYNTHESIZED DESIGN后會在約束文件(.xdc)中生成ILA的配置約束,如下圖所示:
綜合、實現(xiàn)、生成bit后寫到FPGA芯片便可觀測到信號(此處不做演示)。
特別說明:
MARK_DEBUG約束標記會阻止Vivado對該信號以及下級信號的優(yōu)化。因此,在邏輯驗證完成后,要刪除Mark_DEBUG約束標記或者將其失能。
05 文章總結
上面總結和分享了4種Vivado下使用ILA的方法。杰克更推薦使用前面兩種實例化的方法去使用ILA IP核。對于 純FPGA HDL開發(fā) ,配置生成ILA核并在HDL代碼中實例化使用便可;對于帶軟核/硬核的FPGA開發(fā) ,在Block模塊外部接口信號通過添加ILA核,Block模塊內(nèi)部信號則在HDL代碼中實例化ILA核,兩者結合使用。
-
FPGA
+關注
關注
1645文章
22050瀏覽量
618543 -
Xilinx
+關注
關注
73文章
2185瀏覽量
125367 -
邏輯分析儀
+關注
關注
3文章
216瀏覽量
23751 -
Vivado
+關注
關注
19文章
835瀏覽量
68784 -
ILA
+關注
關注
0文章
6瀏覽量
3752
發(fā)布評論請先 登錄
邏輯分析儀是什么
Vivado邏輯分析儀使用教程
邏輯分析儀的使用
什么是邏輯分析儀?邏輯分析儀的使用方法是什么?邏輯分析儀和示波器有什么區(qū)別
邏輯分析儀的作用_邏輯分析儀怎么用_邏輯分析儀的使用方法(教程)
邏輯分析儀選型參數(shù)有哪些_邏輯分析儀有哪些技術指標_邏輯分析儀有什么推薦的?
邏輯分析儀的計量說明
Based邏輯分析儀的應用特點、優(yōu)勢及使用方法
在Vivado中使用邏輯分析儀ILA的過程

評論