1. 程式人生 > >Vivado中使用邏輯分析儀ILA

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型的,介面訊號或者內部變數,都可以新增。

blob.png

2、在Setup Debug過程中,直接新增Netlist

blob.png

我一般是,常用訊號都加DEBUG標識,臨時測量的就手動加net,需要的就加,不要的就刪。

第二大部分 生成ILA模組

  1. 完成綜合之後,Open Synth Design,點裡面的Set Up Debug

    blob.png

  2. 按需要選一個

    blob.png

  3. 進去之後,就可以新增/刪除被測net。如果提示沒有參考時鐘,右鍵選擇一個合適的即可

    blob.png

  4. 選擇FIFO深度。這個深度可以選很大,每個被測訊號都會得到這麼大的一個FIFO,所以邏輯分析儀非常佔用bram資源!合理設定觸發條件,FIFO就不用選太大的。

    blob.png

  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個波形介面顯示。其實如果資源確實夠用的話,建議按照大功能分開,這樣能顯示在不同介面上,然後各自設定觸發條件。

    blob.png

    blob.png

第三大部分 訊號波形

  1. 連上jtag,open目標板,然後燒寫bit和ltx檔案。

    blob.png

  2. 設定觸發條件。這裡就跟示波器是一樣的用法了,可以run也可以trig。

    blob.png

  3. 右鍵有很多功能:short顯示名 設定顏色 進位制轉換 分組 等等,可以琢磨一下。

    blob.png

  4. 舉例子

    下面被測的訊號是20mhz的clk,但是顯示的波形卻不是均勻方波!為什麼?因為是用50mhz的時鐘採的,就是這樣的,沒有錯。所以再說一遍,clock domain的選擇非常重要。

    blob.png