1. 前言
在數字IP/IC,FPGA項目的上板驗證階段,對于一些難以確定原因的bug,比如:RTL仿真時,測試pattern覆蓋不夠全面,fpga跑起來后的實際信號時序可能跟RTL 仿真不一致,從而出現Bug。一種debug的方式就是用FPGA工具提供的ILA模塊(xilixn在ISE中叫:chipscope),來實時抓取FPGA內部數字信號的波形,分析邏輯錯誤的原因,幫助debug。
ILA的正確、高效使用,能加速debug的進程。
2. ILA工作原理
根據xilinx的datasheet功能描述,猜測ILA也是一個數字IP,大致結構如下:
其中:
1) dbg_sig?:是待觀測的debug信號;
2) ila_clk:是設置的ILA工作時鐘(監測、抓取);
3) jtag_inf:ILA數據與上層的交互口(tigger條件設置,抓取的數據上傳);
4) sram_ctrl:根據trig_ctrl,觸發抓取,并把抓取的數據按cila_clk的cycle實時寫入SRAM;
5) sram:抓取數據的存儲空間;
6) jtag_io:Jtag協議定義的標準IO;
根據這個大致結構,預計ILA工作原理如下:
1) PC端GUI應用程序設置trigger條件;通過jtag_io配置進入ILA core;
2) ILA core開始工作,使用ila_clk監測debug信號是否符合tigger條件;
3) 符合條件后,使用ila_clk抓取debug信號,并實時存入SRAM;
4) 抓取結束后,通過jtag_io把debug信號的值上傳到PC端;
5) PC端GUI應用程序顯示波形;
根據這個工作原理,可以推導出ILA的一些使用特性:
1) ILA加入后,需要增加LUT/DFF的使用量;
2) ILA加入后,需要增加的使用量,跟debug信號的數量,抓取深度成正比;
這些特性,跟實際布局布線后的結果是匹配的。
3. ILA使用方法與注意
ILA的使用步驟如下:
A. 設計綜合;
B. 點擊:Set Up Debug開始添加ILA;
C. 添加debug信號:
D. 對每個debug信號選擇監測、抓取時鐘:
E. 設置抓取特性:
F. 結束,保存ILA設置。ILA信息將存入工程的xdc約束文件:
到此,ILA插入結束,在place&route完成,產生configure bit后,下載進入FPAG即可使用ILA進行內部觀測了。
4. ILA使用注意
在ILA的使用過程中,有如下3點需要注意:
A. 設置監測、抓取時鐘時,最好用drive這個信號的clk。因為是數字電路,也存在跨時鐘域的問題。如果ila_clk和debug信號的clk不一致,這兒就是一個跨時鐘域的點。在P&R時,timing會報錯。你可以用set_false_path來mask掉這些timing violation,但是需要記住跨時鐘域的特性:如果debug一個4bit信號,實際信號只有4‘b0001--》 4’b0111的變化,可能抓取到:4‘b0001--》 4’b0101 -》 4‘b0111。
B. 因為綜合可能優化掉一些信號(尤其是組合邏輯),或改變信號的名字,為了keep某些信號,可以在RTL code中,添加:“* mark_debug = “true” *”,使用如下:
C. 設置抓取特性時,“input pipe stage”建議設置到2~3。這樣雖然多用些DFF,可以確保ILA輸入時的timing更容易過。因為你的debug邏輯可能離ILA core非常的遠,增加pipe stage寄存器,可以把信號一級一級pipe到ILA core的輸入口。
5. 寫在最后
雖然ILA比邏輯分析儀好用多了,但是并不建議靠ILA來debug。因為:
1) ILA分析的波形長度有限;
2) ILA抓取的信號數量有限;
3) 添加大量信號時,麻煩;
4) 如果需要新加debug信號,需要重新做ILA,在Place&Route,這樣費時費力(一個稍大的工程,可能需要跑數小時);
所以,“此女”雖好但不可褻玩焉,否則走火入魔,舉步維艱。建立完備的測試pattern,cover全功能點,跑RTL simulation才是正道。
編輯:jq
-
數字電路
+關注
關注
193文章
1619瀏覽量
80734 -
GUI
+關注
關注
3文章
662瀏覽量
39805 -
ILA
+關注
關注
0文章
5瀏覽量
3615
原文標題:數字IC/FPGA設計基礎_ILA原理與使用
文章出處:【微信號:bianpinquan,微信公眾號:變頻圈】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論