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

評論