Vivado中使用邏輯分析儀ILA
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模組
-
完成綜合之後,Open Synth Design,點裡面的Set Up Debug
-
按需要選一個
-
進去之後,就可以新增/刪除被測net。如果提示沒有參考時鐘,右鍵選擇一個合適的即可
-
選擇FIFO深度。這個深度可以選很大,每個被測訊號都會得到這麼大的一個FIFO,所以邏輯分析儀非常佔用bram資源!合理設定觸發條件,FIFO就不用選太大的。
-
我這裡再跳回上一步選時鐘域的部分,結合上面的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個波形介面顯示。其實如果資源確實夠用的話,建議按照大功能分開,這樣能顯示在不同介面上,然後各自設定觸發條件。
第三大部分 訊號波形
-
連上jtag,open目標板,然後燒寫bit和ltx檔案。
-
設定觸發條件。這裡就跟示波器是一樣的用法了,可以run也可以trig。
-
右鍵有很多功能:short顯示名 設定顏色 進位制轉換 分組 等等,可以琢磨一下。
-
舉例子
下面被測的訊號是20mhz的clk,但是顯示的波形卻不是均勻方波!為什麼?因為是用50mhz的時鐘採的,就是這樣的,沒有錯。所以再說一遍,clock domain的選擇非常重要。