Vivado環境下,FPGA硬件調試方法很多,但常用方法主要圍繞 ILA核展開。
ILA核簡介
ILA是Vivado下的一個Debug IP核,類似於片上邏輯分析儀。在上一篇文章中,我們介紹了mark debug + set up debug,抓取信號的實時波形,調試工程;其中set up debug步驟,就是通過圖形界面自動添加ILA核。
本文將介紹另一種方法:通過在RTL代碼中直接例化ILA核,抓取想要觀察的信號。下面以一個簡單的counter模塊爲例,對Vivado(2014.1)下ILA核的使用進行說明。
1. RTL代碼
module counter
(
input clk,
output [3:0] q
);
wire clk;
//想抓取cnt信號進行觀察
(* keep ="TRUE" *)reg [3:0] cnt = 4'd0;
assign q = cnt;
always@(posedge clk)
begin
cnt <= cnt +4'd1;
end
endmodule
2. 加入ILA核
在vivado工程中,打開IP Catalog選項,找到ILA核
然後,雙擊進入ILA核的配置界面
step1.
“component Name”:修改例化名,
“Number of Prober”:修改想抓取信號的分組個數,在本例中僅觀察1組信號cnt,
“sample Data Depth”:可以修改抓取信號的深度,本例選擇默認值1024。
其他選項保持默認值。
step2.
“Probe Width”:選擇各分組信號的位寬,我們需要觀察的cnt信號爲4bit,這裏選擇4。
點擊OK,到此爲止,ILA的配置完成
3. 在RTL中例化ILA核
在Vivado工程的sources窗口找到剛生成的ILA核的例化代碼
將其複製到RTL設計中,並連接好信號
module counter
(
input clk,
output [3:0] q
);
wire clk;
//想抓取cnt信號進行觀察
(* keep ="TRUE" *)reg [3:0] cnt = 4'd0;
assign q = cnt;
always@(posedge clk)
begin
cnt <= cnt +4'd1;
end
ila_0 u_ila
(
.clk (clk),
.probe0 (cnt)
);
endmodule
ps:ILA的clk需要連接到需要觀察信號的相應時鐘域,在一個RTL中可以嵌入多個ILA,方便觀察不同時鐘域 的信號
4. 使用Vivado在線抓取信號波形
1)修改完RTL後,點擊Generate Bitstream生成bit文件
2)開發板上電,接上JTAG下載器,然後打開open Target
打開Open New Target..
點擊Next
點擊Next
點擊Next
點擊Finish
發現vivado界面的左下角的Program Device選項變亮,點擊該選項,下載bit文件
點擊Pro...
開始下載
下載完成,vivado界面發生變化
打開window菜單欄,選擇Debug Probes選項,界面會多出一個Debug Probes窗口
將需要觀察的信號cnt 信號“拖入”右側的Basic Trigger Setup窗口
在這個界面中可以修改觸發條件(cnt=2),觸發深度(1024),觸發位置(500)等參數(類似於chipscope)
點擊左側的觸發開關,vivado會自動打開一個wave窗口
通過放大波形,可以觀察波形細節
參考:https://blog.csdn.net/wordwarwordwar/article/details/71250427