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

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


ISE工程轉到Vivado2018.2環境下

版本遷移的操作想必大家已經做過不少了,其中包括從ISE轉換到vivado與vivado老版本遷移到新版本。鄭智海同學給大家介紹了一下如何把工程從ISE遷移到vivado中。

首先我們拿到的是一個ISE的工程,當然是不能夠直接用Vivado軟件打開的,所以我們要進行第一步操作,將工程導入進去:

打開Vivado2018.2後,點”Creat Project”後,再點擊Imported Project,勾選ISE後,尋找到ISE工程所放在的位置進行添加,記得添加的是後綴為.xise的文件,因為之前我點的是別的形式,就一直添加不了,這個小問題要注意。操作如下列圖步驟所示。

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

選擇好後點擊Next鍵繼續,並選擇好自己的工程目錄。

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

Project_1就是我想將工程建在此文件夾中。

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

勾選ISE之後,選擇ISE所在文件目錄。

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

選擇好ISE工程之後就算成功將ISE導入vivado2018.2了,也就算完成了第一步工作。

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

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

如上面兩張圖所示,進入vivado2018.2頁面後,會顯示出這個界面,此時你的IP核在這裡是處於過期的狀態,因為在ise裡的ip核到了vivado中不一定適用,不同軟件中的ip核是不兼容的,這裡很簡單,只需手動升級,即選中ip核並點擊右鍵,有一個upgrade up代表升級,點擊之後會出現下面界面:

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

點擊ok後進行generate後,ip核就會自動更新完成:

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

完成ip核更新後,還有一個重要的問題是此時的約束文件的格式是ucf(代表的是ise的約束文件格式),但vivado是不支持這種格式的,我們需要將ucf轉成xdc格式。這裡我想介紹兩種方法:逐行代碼手動修改與圖形界面配置修改。

1、手動更改

根據ucf的約束管腳,對應著寫一個xdc文件。

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

逐行修改就是根據上圖的轉換規則,一行一行地把代碼改成xdc形式。下面放上部分一行行修改後的代碼。


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

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

2. 圖形界面配置管腳

而通過圖形界面修改就方便得多,鼠標點點即可。在完成synthesis之後,打開implement選項:

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

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

在I/O Ports窗口展開管腳,對於每個輸入輸出信號,在Site欄選擇對應的管腳,注意確保Fixed欄處於勾選狀態,I/O Std常選擇LVCMOS25。設置好後,Implemented Design窗口標題欄會顯示一個*號,表示設置發生了更改。按Ctrl+S快捷鍵保存設置,會彈出窗口如圖,提示保存constraints文件會導致綜合與實現過期。也就是說,修改了管腳分配設置後,需要重新進行綜合、實現操作。

隨後會彈出保存新文件的窗口,選擇Create a new file並輸入文件名,點擊OK即可。

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

此時約束文件就已經生成,保存之後就可以在vivado的約束部分看到自己的xdc了。

個人認為如果ucf文件不是特別多的話可以手動更改,如果很多的話可能就需要在tcl輸入對應的腳本去更改,這個我就還沒嘗試過。

板級測試時信號的抓取

1、添加調試的信號

添加信號抓取要先進行synthesis操作,然後open synthesis,點擊Set up debug。

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

在這之前,你就應該想好你要debug哪些信號,抓哪些信號去看波形,當你想用ila抓取哪些信號時,你就可以在代碼前標記出(*mark_debug = "true"*)或者(*mark_debug = "1"*).因為標記了之後,你點擊set up Debug之後就可以在信號列表中找到相應的信號。

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

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

上圖是我所標記的部分信號,當然我們需要對代碼的功能進行分析,你才好判斷。這裡還要提及一點,儘量不要抓頂層的信號,因為頂層的信號往往是沒有經過處理的信號,這樣子很有可能ila是抓不出來波形的。

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

那麼對於我的工程主要是rgmii轉gmii,即是一個4位數據轉換成8位數據,再對接受的8位數據進行一個CRC的校驗,那麼我們當然是想抓接收到4位的數據和接收8位的數據,這樣你就有了目的,可以在代碼中尋找到輸入或者輸出位寬是4的數據,再找位寬為8的數據,進行mark debug。

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

如圖就是告訴你可以選擇對應的信號進行標記,並且可以選擇他們的時鐘域,之後可以對你選擇的信號給予一定的值進行觸發。

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

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

你在代碼裡標記之後,就會在列表中出現對應信號,這裡需要注意的地方有以下幾個點:

A.Clock Domain

這個地方是時鐘域的選擇,這個是非常講究的,有時候你抓不到波形的原因就是因為參考時鐘太慢,信號往往是從一個快時鐘域下來的,你拿慢時鐘去抓,就抓不到,而且時鐘域選擇不當在佈局佈線的過程往往都會報錯。報錯的原因是因為你所選的時鐘和ila所連接的距離太遠,佈局佈線太困難,這時候你需要更改你的時鐘域。這裡再說一個概念叫free clock,free clock是要求上電無條件運行的時鐘,一般直接用晶振時鐘,是比較穩定的時鐘,給予電路永久的一種時鐘。所以在選擇時鐘的時候我們都需要考慮去選擇free clock。

B.Driver cell

對於DDR型的驅動信號在佈局佈線過程中往往都會失敗的,像圖中的IDDR和ODDR,他們是一種原語,由一個時鐘輸入,下降沿數據由輸入時鐘的本地反轉來計時的,反饋到I/O塊的所有的時鐘被完全複用,總之在加入debug的時候,要把這兩種DDR型的驅動信號刪除。個人感覺如果在這些信號再接一個IBUF,再將輸出試著添加debug,有可能能成功。

C.ila的個數問題

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

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

當你選擇了幾個時鐘域,你就會對應有幾個ila,如果你選的時鐘都是一樣的,那麼你就只有一個ila。

如上圖所示,是我最終留下來的信號,並將它們的時鐘都選擇了clk_out2,通過代碼裡的clk_gen模塊可以知道clk_out2的時鐘是100MHZ,這裡選擇100MHZ還有一個原因是debug hub也應該選擇在100MHZ,至少在JTAG下載速率的2.5倍以上,而JTAG一般默認在15MHZ,所以我們選擇clk_out2也是OK的,個人感覺時鐘域的選擇還是要在clk_gen給出的選擇裡挑選,這樣的時鐘一般都是free clock,時鐘域選擇的越多,ila越多,佈局佈線的困難往往就會更大,所以個人覺得要控制ila的數量,不然很容易出錯。還有就是採樣深度的選擇,如果你的信號不多的話可以默認1024,不然也會佔用一定的FPGA資源,不過感覺影響也不大。還有Capture control和Advance trigger兩個感覺也是可勾選也可以不勾選。

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


之後我們看到,由於我們只選擇了一個時鐘域out2,所以它給我們分配了一個ila0以及1個時鐘域。之後就點擊finish就可以了。完成之後還需要進行保存,保存之後xdc就會自動添加ila和debug hug的部分,將你所需要檢測的信號與ila上的探頭進行連接:

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

在這裡你可以檢查自己的xdc是否是準確的,管腳對應探頭的位置,同時可以看到u_ila_0已經例化,並寫在了xdc裡面。

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

2、修改調試信號的時鐘域

需要注意的是最後一行的debug_hub的時鐘,由於我只選擇了一個時鐘域out2,那麼hub的時鐘就是默認為out2(雖然它顯示的是Clk_user),當有多個ila的時候,hub的時鐘往往默認的都會出問題,可能它會與其他的ila時鐘默認連接,如果此時的ila時鐘為0的話,那麼就會出問題。例如現在有兩個ila_0和ila_1,分別對應兩個時鐘clk_out1,clk_out2,然後同時連在一個hub上,默認下,hub的clk是連到ila_1的clk_out2上,這對ila_0就有問題,不同的時鐘域,將會導致hub不工作。所以我們可以對hub的時鐘進行更改:

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

a. 直接在xdc上進行更改

可以直接在xdc上進行更改,如上圖可以在get_nets後面的內容進行更改,比如我需要改為clk_gen裡引出的clk_2,那麼我們可以寫為get_nets clk_gen/CLK_OUT2,保存即可。不過修改之後的xdc可能還要需要重綜合,因為會顯示綜合過期,比較麻煩,所以我們可以用tcl命令去更改,就可以直接省去這一步,所以tcl的腳本還是很給力的,之後還要多加學習這方面。

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

b.採用tcl進行更改或者圖形界面更改

直接在tcl的path裡輸入命令後,xdc就會被自動更改。

我們可以打開綜合設計裡的Schematic裡去查看代碼所生成的電路情況,包括各個走線的情況,可以找到對應生成的hub和如下圖的ila_0。


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

可以看到u_ila_0中有引出的探頭,與所測的信號相連接。

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

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

把圖縮小,可以看到整體的情況,標藍色的線就是ila_0和hub的clk共同連接到模塊gen_clk所引出的CLK_OUT2上,同時可以看出hub的輸入與輸出都是緊緊與ila_0相連接的,在我們分析debug哪些信號的的時候,可以觀察Schematic,判斷各個總線所連接的情況,往往比讀代碼更要直觀。

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

如上圖所示,我們還可以打開vivado頁面的Debug,裡面會有生成好的ila和hub,包括探頭所連接的信號,還有他們的時鐘域。這裡還應該注意到有一個Unassigned Debug Nets,這個就是你有在代碼裡標註mark debug信號,但在最終選擇debug信號列表裡刪除了,它可能是DDR的驅動信號,或者是你不需要看的信號。倒不是很重要,就是可以注意一下,所以說有很多地方都可以檢測你的ila生成的是否正確。每次更改debug的時候都記得要保存,同時還應該檢查xdc是否刪除乾淨並生成了新的ila。


在抓信號的的時候我曾經出現過這種狀況,後來發現是xdc裡有未刪除乾淨的ila_1,這些問題都是需要注意的。

到這就完成了mark debug的工作,然後直接佈局佈線,並生成比特流,如果沒有問題那就能正常的生成比特流了。

3、生成比特流文件並下載抓取信號

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

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

完成比特流生成後,點擊Open Hardware Manager後,再點擊Auto Connect之後右鍵點擊Program Device.第一行是我們比特流生成的文件,第二行則是我們邏輯分析儀的探頭文件,也就是ltx文件。

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

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

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

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

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

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

如上圖所示,要在Waveform中添加相應你想看到的信號,才會在ila窗口出現波形,同時要在右下角添加觸發信號,例如ctl,或者是mac裡的dval(這些算是觸發信號,抓的時候要一同帶上,是用來指示當前數據有效的信號)我剛開始沒有在waveform的頁面添加想看的信號,只在右下角添加了觸發信號ctl,然後怎麼樣也看不到波形,以為自己哪裡出了問題,後來才發現沒有添加想看的信號。

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

這裡很重要的一點是在選號觸發條件之後(三個ctl都是等於1的時候觸發),一定要記得更改觸發條件,一開始我選擇的是AND(即當三個同時為1的時候才滿足觸發條件),導致我的信號都是0

如圖所示,我所添加的信號都為0,就是因為觸發條件沒選對。

後來我將AND改為OR,只要他們三個有一個為1,那麼就滿足了觸發條件,之後點擊run進行觸發:

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

如圖所示,當client的信號ctl拉高的時候,rgmii_rxd開始接收到4位二進制的有效數據,之後從CCD模塊的rxd_o裡接收到了8位二進制的有效數據。

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

如圖5變成了55,f變成了ff,同時ff前面還帶著一個d5,f前帶著一個d,那麼d5就算是前導碼,然後是目的地址,源地址,那麼半字節就是d。總之我們得到我們最終想要的波形,就算是成功了。當然我們注意到lower和upper的信號都是0。

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

應該是Zedboard板子的網口只插上了1口,可能client剛好對應在1口上,所以不是信號傳輸有什麼問題,是網口沒接上。

當然還應該可以添加更多的信號進行debug,還需要不斷地去嘗試,不過最主要的信號還是需要找出來debug的,這也需要對工程的代碼有一定的瞭解,藉助Schematic網圖進行不斷地分析。

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

實驗總結

這裡我還想說的就是,有一段時間我一直出現這種狀況,無論是改變debug信號,還是更改他們的時鐘域,最終Program device後都會出現沒有debug cores的情況,感覺很迷,最後我重新將這個ISE工程又導入一個新的文件,重新操作後就解決了,可能有時候一直弄不出來的話,可以考慮重新建工程,或者重新將工程導入。

再總結一下這次調試所遇到的一些問題

1、ere are no debugs core.

2、佈線出現問題

3、A clock has stopped. Uable to arm ILA core

4. The debug hub core was notdetected.

5. Device is programmed with adesign that has no supported debug core(s) in it.

這些大部分還是時鐘域的問題,時鐘域導致了debug失敗,所以在選擇時鐘域方面,我還要多加嘗試。


全文完。


分享到:


相關文章: