「新手入門」Vivado工程升級及板級信號調試

由於疫情,大家最近都只能在家中進行學習。同時實驗室的研一同學也在通過Teamviewer進行培訓項目的實際操作。這次把兩位同學的研究成果給大家分享一下,老司機們可以重溫一下當年自己新手時的情景,新司機們可以借鑑一下他人的經驗。本次實驗操作包括:工程的版本遷移,板級測試時信號的抓取。

如何使用新版本的vivado去打開舊版本的vivado工程

李家俊同學給大家介紹了一下如何使用新版本的vivado去打開舊版本的vivado工程。

對於舊版本的vivado工程或者是ise工程,更新到新版本的vivado環境下有兩種方法:

1、直接用新版本vivado打開原有工程文件,進行IP核更新;

2、拷貝原有工程設計文件、約束文件、IP核文件夾至新建新版本vivado空白工程文件下,進行更新。

1、在舊版本vivado基礎上直接升級

我們先來介紹一下如何直接使用新版本打開舊版本工程並且進行升級。

「新手入門」Vivado工程升級及板級信號調試

直接使用新版本vivado打開vivado的工程文件。

「新手入門」Vivado工程升級及板級信號調試

對於新版本vivado一般在打開舊版本工程時都會自動進行更新默認自動更新就好。

打開工程之後,需要對舊版本工程的IP核進行升級操作。點擊Reports->Report IP Status查看IP核被鎖狀態進行升級。

「新手入門」Vivado工程升級及板級信號調試

「新手入門」Vivado工程升級及板級信號調試

選中所有IP核進行升級。

「新手入門」Vivado工程升級及板級信號調試

點擊確定。

「新手入門」Vivado工程升級及板級信號調試

保持默認不使用核容器,(Core Container沒有用過,我都是默認不使用)。

「新手入門」Vivado工程升級及板級信號調試

升級完成之後的界面如圖所示。

如何使用新版本的vivado去打開舊版本的vivado工程

debug步驟:

在需要debug的輸入輸出端口列表前加 (* mark_debug = “true” *)。

在編譯通過後,進行綜合生成網表等文件,點setup debug進行添加。

保存,xdc中應該有約束了,原理圖裡也有ila_core 模塊,直接進行實現即佈局佈線。

在線調試:生成比特後下載,run trigger。

注意:在有多個debug端口時,會引入1個以上ila_core,每一個ila_core 的時鐘域都是獨立的,且在每一個ila_core中各個端口的時鐘域是一樣的。

1、設置信號抓取標記

將需要測試的端口前標記上(*mark_debug = “1”*)或者(*mark_debug = “true”*)

注意:這裡最好將需要測試的端口信號打一拍再進行測試,因為輸入輸出端口的驅動單元類型往往是不一樣的,比如兩個紅框之間的rgmii_txd信號它的驅動單元類型就是ODDR,這將影響佈線到此處的邏輯分析儀ila的探針的連接,具體的我也不清楚應該是驅動能力不匹配之類的,反正最好實現的時候會報錯。如果不打拍則在後續設置setup debug的時候就要注意去除不符合驅動類型的信號。

「新手入門」Vivado工程升級及板級信號調試

2、建立debug文件

「新手入門」Vivado工程升級及板級信號調試

添加完debug標記後,進行編譯、綜合,沒有問題則可以查看當前原理圖(其實也可以不用看,這裡只是為了對比ila模塊)然後點擊Set Up Debug對剛剛添加的信號進行設置。

「新手入門」Vivado工程升級及板級信號調試

設置的信號有幾個需要注意的地方:

1、關於時鐘域的選擇,如圖紅框部分,這些時鐘需要選擇free clock,所謂free clock(按照我自己的理解,也可能不準確)就是系統一上電就能運行的時鐘,並且不會因為復位以外的條件停振,比如有些時鐘為了節省功耗,僅在需要進行數據交換時振動,在其他時刻保持低電平,但是這種時鐘就不是free clock。

「新手入門」Vivado工程升級及板級信號調試

2、注意選擇具有符合標準驅動單元的信號,這裡右側紅框中都是可以的,但是對於DDR型的驅動信號就會出錯。

3、同一個時鐘域的信號都在同一個ila模塊下,即有幾個時鐘域就會有幾個ila模塊。

「新手入門」Vivado工程升級及板級信號調試

這裡需要注意:

1、是選擇採樣深度,會佔用一定的FPGA資源,所以如果設計系統簡單就可以選擇多一點,可以看到較長時鐘週期內存儲的信號變化。

2、選擇上後,可以進行高級設置操作(選了也沒用上==)。

「新手入門」Vivado工程升級及板級信號調試

可以看到這裡的summary是4個時鐘域和之前選擇一致。

「新手入門」Vivado工程升級及板級信號調試

「新手入門」Vivado工程升級及板級信號調試

這是兩張原理圖,後者的紅框框部分是添加的4個ila模塊,中間藍色圓框部分是debug hub,即連接FPGA和jtag的部分。

「新手入門」Vivado工程升級及板級信號調試

「新手入門」Vivado工程升級及板級信號調試

在底部Debug窗口可以看到各個ila模塊的時鐘選擇。

「新手入門」Vivado工程升級及板級信號調試

對於debug hub時鐘域的選擇查看可以通過tcl命令也可以點擊原理圖連線的方式,在左側會有連接顯示,這裡看到是連接到了ila3模塊上,這樣不太好,因為如果ila3的時鐘沒選擇對就會導致整個debug hub在後面下載比特時無法被檢測到,就算其他ila的時鐘對了也白瞎。因為計算機是通過jtag返回數據的,而jtag又靠著debug hub 連接fpga的ila。

3、完善XDC文件,實現電路

「新手入門」Vivado工程升級及板級信號調試

修改完成之後,依然需要保存修改,看到這裡沒有保存約束文件在214行。

「新手入門」Vivado工程升級及板級信號調試

保存之後xdc增加了ila模塊的對應約束。

「新手入門」Vivado工程升級及板級信號調試

這裡對應debug hub 的連接時鐘。

「新手入門」Vivado工程升級及板級信號調試

之前說了debug hub時鐘保持默認的缺點,這裡通過tcl命令進行修改,通過查看ug908文檔可以知道推薦的debug hub時鐘在100Mhz左右,且至少在JTAG下載速率的2.5倍以上,採樣定理嘛,一般jtag速率默認15Mhz,查看代碼中時鐘生成部分,發現CLK_OUT2也就是mac的用戶側時鐘就是100Mhz,所以我們選擇debug hub時鐘為100Mhz。

「新手入門」Vivado工程升級及板級信號調試

修改完成後,查看xdc確認已經修改了(其實也可以直接通過xdc

修改,但是直接修改xdc軟件可能會提示綜合過期,讓重新綜合,而通過tcl則可以直接進行後面的步驟)。

「新手入門」Vivado工程升級及板級信號調試

我們再次查看原理圖,可以看到debug hub的時鐘域已經修改。

4、生成比特流文件,進行板級調試並抓取信號

「新手入門」Vivado工程升級及板級信號調試

直接生成比特文件。

「新手入門」Vivado工程升級及板級信號調試

相比較之前的工程版本遷移時的下載界面,紅框部分多出了後綴為ltx的文件,即邏輯分析儀的探針文件。

「新手入門」Vivado工程升級及板級信號調試

下載完成後會彈出4個dashboard對應著4個不同時鐘域的ila模塊,可是沒有信號,這時可以點擊+號進行添加。

「新手入門」Vivado工程升級及板級信號調試

ctrl+a選中所有進行添加。

「新手入門」Vivado工程升級及板級信號調試

添加完信號後注意右下角的觸發條件設置,同樣點擊+號設置需要添加的信號,這裡選則的是幀起始標誌sop,並且選擇觸發條件的關係為或,同時觸發值設置為1’b1,之後再點擊三角型的 run trigger符號即可。

「新手入門」Vivado工程升級及板級信號調試

這裡lower部分已經有波形了。

「新手入門」Vivado工程升級及板級信號調試

放大看所有的信號。

「新手入門」Vivado工程升級及板級信號調試

這裡發現沒有前導碼是因為這裡的4字節數據已經是進了mac之後經過了8轉32的數據了已經去掉了前導碼和CRC。但是upper client沒有數據,原來是沒有ping都沒有發怎麼有?

「新手入門」Vivado工程升級及板級信號調試

「新手入門」Vivado工程升級及板級信號調試

結果發現ping了也沒有,好氣。

「新手入門」Vivado工程升級及板級信號調試

注意之前設置的觸發條件,是或關係,於是lower的sop信號在當前的1024個鐘內比其他的sop先觸發,而各個sop的間隔週期大於我們設置的採樣深度1024,所以無法同時顯示,刪除lower觸發條件後就有了,當然lower又沒有了。

「新手入門」Vivado工程升級及板級信號調試

「新手入門」Vivado工程升級及板級信號調試

「新手入門」Vivado工程升級及板級信號調試

這邊按照同樣的步驟,添加觀察信號、添加設置觸發條件、點擊run trigger,就能看到波形了,注意放大後的紅框部分,有了前導碼,按單字節應該是 55 55 55 d5的順序而這裡由於是rgmii只是半字節,所以是 5 5 5 5 5 5 5 d。

「新手入門」Vivado工程升級及板級信號調試

「新手入門」Vivado工程升級及板級信號調試

對ila3按同樣的步驟操作當我們點擊run trigger的時候會發現出現unable to arm ila core的錯誤,這就是時鐘域的問題,由於我們選擇的是rgmii_rx_clk這是由phy提供的,但是ila3即例化時的client對應的phy沒有插網線,所以也沒有時鐘,自然無法arm ila core。

這裡特意為了對比不同時鐘域的選擇對於ila的影響,其實也可以將lower upper client的ila時鐘域都設置成用戶側即CLK_OUT2因為這個時鐘一直存在,這樣即使ila3對應的模塊的網口沒有插網線,在dashboard上顯示也會有全0 的數據,就和ila0 一樣,可以翻到前面去看看,這裡的lower upper client的ff_rx_data[31: 0]來自三個獨立的例化模塊,但是也可以放到同一個時鐘域。表達的不太好實踐一下就能知道了。


全文完。


分享到:


相關文章: