FPGA綜合出來的電路都在芯片內部,基本上是沒法用示波器或者邏輯分析儀器去測量信號的,所以xilinx等廠家就發明了內置的邏輯分析儀。
在vivado中叫 ILA(Integrated Logic Analyzer),之前在ISE中是叫ChipScope。基本原理就是用fpga內部的門電路去搭建一個邏輯分析儀,綜合成一個ILA的core核伸出許多probe去探測信號線。
下面逐步講解在線debug的過程,主要側重ILA中clock domain的正確使用。
第一大部分 添加被測信號線
通常有兩種方式 :
1、在代碼中添加這么一句 ( MARK_DEBUG="TRUE" ) 。不管是reg還是wire型的,接口信號或者內部變量,都可以添加。
2、在Setup Debug過程中,直接添加Netlist
我一般是,常用信號都加DEBUG標識,臨時測量的就手動加net,需要的就加,不要的就刪。
第二大部分 生成ILA模塊
1、完成綜合之后,Open Synth Design,點里面的Set Up Debug
2、按需要選一個
3、進去之后,就可以添加/刪除被測net。如果提示沒有參考時鐘,右鍵選擇一個合適的即可
4、選擇FIFO深度。這個深度可以選很大,每個被測信號都會得到這么大的一個FIFO,所以邏輯分析儀非常占用bram資源!合理設置觸發條件,FIFO就不用選太大的。
5、我這里再跳回上一步選時鐘域的部分,結合上面的FIFO來說明選取clock domain的重要性。
時鐘域的選擇會影響兩大方面:生成幾個ILA核,以及能探測多少時間。
1) 選了3個時鐘就一定會生成3個ILA核,畢竟給D觸發器的clk不一樣嘛;
2) FIFO的參考時鐘不同,直接決定FIFO多久會被存滿;
比如我這個設計中有3個時鐘進來 50mhz 20mhz 以及8mhz轉400khz給IIC用。如果IIC的參考50mhz,那scl sda的FIFO瞬間就存滿了,觸發后FIFO的任務完成了,但是我們連一個信號跳變都看不到。如果參考400khz的,那從起始條件到8bit數據到停止條件都能抓到了。
FIFO存數據是參考信號時鐘的,有一拍clk才會存1bit數據。
選擇合適的clock domain非常重要,因為最終影響到資源的占用。ILA核的個數,FIFO的個數(經常會出現要抓500個甚至1000個信號。為什么這么多!比如你32位的地址,32位的總線,還讀寫分開,還有好幾個,慢慢就聚集多了,fpga本來功能就是采用并行總線提高速度的原理)。
比如下面這個設置,鐵定會生成3個ILA核,分3個波形界面顯示。其實如果資源確實夠用的話,建議按照大功能分開,這樣能顯示在不同界面上,然后各自設置觸發條件。
第三大部分 信號波形
1、連上jtag,open目標板,然后燒寫bit和ltx文件。
2、設置觸發條件。這里就跟示波器是一樣的用法了,可以run也可以trig。
3、右鍵有很多功能:short顯示名 設置顏色 進制轉換 分組 等等,可以琢磨一下。
4、舉例子
下面被測的信號是20mhz的clk,但是顯示的波形卻不是均勻方波!為什么?因為是用50mhz的時鐘采的,就是這樣的,沒有錯。所以再說一遍,clock domain的選擇非常重要。
-
示波器
+關注
關注
113文章
6247瀏覽量
185026 -
D觸發器
+關注
關注
3文章
164瀏覽量
47918 -
邏輯分析儀
+關注
關注
3文章
214瀏覽量
23174 -
FPGA系統
+關注
關注
0文章
10瀏覽量
7032 -
FIFO存儲
+關注
關注
0文章
103瀏覽量
5986
發布評論請先 登錄
相關推薦
評論