本次操作包括:工程的版本遷移,板級測試時信號的抓取。
ISE工程轉(zhuǎn)到Vivado2018.2環(huán)境下
版本遷移的操作想必大家已經(jīng)做過不少了,其中包括從ISE轉(zhuǎn)換到vivado與vivado老版本遷移到新版本。鄭智海同學(xué)給大家介紹了一下如何把工程從ISE遷移到vivado中。
首先我們拿到的是一個ISE的工程,當(dāng)然是不能夠直接用Vivado軟件打開的,所以我們要進(jìn)行第一步操作,將工程導(dǎo)入進(jìn)去:
打開Vivado2018.2后,點(diǎn)”Creat Project”后,再點(diǎn)擊Imported Project,勾選ISE后,尋找到ISE工程所放在的位置進(jìn)行添加,記得添加的是后綴為.xise的文件,因為之前我點(diǎn)的是別的形式,就一直添加不了,這個小問題要注意。操作如下列圖步驟所示。
選擇好后點(diǎn)擊Next鍵繼續(xù),并選擇好自己的工程目錄。
Project_1就是我想將工程建在此文件夾中。
勾選ISE之后,選擇ISE所在文件目錄。
選擇好ISE工程之后就算成功將ISE導(dǎo)入vivado2018.2了,也就算完成了第一步工作。
如上面兩張圖所示,進(jìn)入vivado2018.2頁面后,會顯示出這個界面,此時你的IP核在這里是處于過期的狀態(tài),因為在ise里的ip核到了vivado中不一定適用,不同軟件中的ip核是不兼容的,這里很簡單,只需手動升級,即選中ip核并點(diǎn)擊右鍵,有一個upgrade up代表升級,點(diǎn)擊之后會出現(xiàn)下面界面:
點(diǎn)擊ok后進(jìn)行g(shù)enerate后,ip核就會自動更新完成:
完成ip核更新后,還有一個重要的問題是此時的約束文件的格式是ucf(代表的是ise的約束文件格式),但vivado是不支持這種格式的,我們需要將ucf轉(zhuǎn)成xdc格式。這里我想介紹兩種方法:逐行代碼手動修改與圖形界面配置修改。
1、手動更改
根據(jù)ucf的約束管腳,對應(yīng)著寫一個xdc文件。
逐行修改就是根據(jù)上圖的轉(zhuǎn)換規(guī)則,一行一行地把代碼改成xdc形式。下面放上部分一行行修改后的代碼。
2. 圖形界面配置管腳
而通過圖形界面修改就方便得多,鼠標(biāo)點(diǎn)點(diǎn)即可。在完成synthesis之后,打開implement選項:
在I/O Ports窗口展開管腳,對于每個輸入輸出信號,在Site欄選擇對應(yīng)的管腳,注意確保Fixed欄處于勾選狀態(tài),I/O Std常選擇LVCMOS25。設(shè)置好后,Implemented Design窗口標(biāo)題欄會顯示一個*號,表示設(shè)置發(fā)生了更改。按Ctrl+S快捷鍵保存設(shè)置,會彈出窗口如圖,提示保存constraints文件會導(dǎo)致綜合與實現(xiàn)過期。也就是說,修改了管腳分配設(shè)置后,需要重新進(jìn)行綜合、實現(xiàn)操作。
隨后會彈出保存新文件的窗口,選擇Create a new file并輸入文件名,點(diǎn)擊OK即可。
此時約束文件就已經(jīng)生成,保存之后就可以在vivado的約束部分看到自己的xdc了。個人認(rèn)為如果ucf文件不是特別多的話可以手動更改,如果很多的話可能就需要在tcl輸入對應(yīng)的腳本去更改,這個我就還沒嘗試過。
板級測試時信號的抓取
1、添加調(diào)試的信號
添加信號抓取要先進(jìn)行synthesis操作,然后open synthesis,點(diǎn)擊Set up debug。
在這之前,你就應(yīng)該想好你要debug哪些信號,抓哪些信號去看波形,當(dāng)你想用ila抓取哪些信號時,你就可以在代碼前標(biāo)記出(*mark_debug = "true"*)或者(*mark_debug = "1"*).因為標(biāo)記了之后,你點(diǎn)擊set up Debug之后就可以在信號列表中找到相應(yīng)的信號。
上圖是我所標(biāo)記的部分信號,當(dāng)然我們需要對代碼的功能進(jìn)行分析,你才好判斷。這里還要提及一點(diǎn),盡量不要抓頂層的信號,因為頂層的信號往往是沒有經(jīng)過處理的信號,這樣子很有可能ila是抓不出來波形的。
那么對于我的工程主要是rgmii轉(zhuǎn)gmii,即是一個4位數(shù)據(jù)轉(zhuǎn)換成8位數(shù)據(jù),再對接受的8位數(shù)據(jù)進(jìn)行一個CRC的校驗,那么我們當(dāng)然是想抓接收到4位的數(shù)據(jù)和接收8位的數(shù)據(jù),這樣你就有了目的,可以在代碼中尋找到輸入或者輸出位寬是4的數(shù)據(jù),再找位寬為8的數(shù)據(jù),進(jìn)行mark debug。
如圖就是告訴你可以選擇對應(yīng)的信號進(jìn)行標(biāo)記,并且可以選擇他們的時鐘域,之后可以對你選擇的信號給予一定的值進(jìn)行觸發(fā)。
你在代碼里標(biāo)記之后,就會在列表中出現(xiàn)對應(yīng)信號,這里需要注意的地方有以下幾個點(diǎn):
A.Clock Domain
這個地方是時鐘域的選擇,這個是非常講究的,有時候你抓不到波形的原因就是因為參考時鐘太慢,信號往往是從一個快時鐘域下來的,你拿慢時鐘去抓,就抓不到,而且時鐘域選擇不當(dāng)在布局布線的過程往往都會報錯。報錯的原因是因為你所選的時鐘和ila所連接的距離太遠(yuǎn),布局布線太困難,這時候你需要更改你的時鐘域。這里再說一個概念叫free clock,free clock是要求上電無條件運(yùn)行的時鐘,一般直接用晶振時鐘,是比較穩(wěn)定的時鐘,給予電路永久的一種時鐘。所以在選擇時鐘的時候我們都需要考慮去選擇free clock。
B.Driver cell
對于DDR型的驅(qū)動信號在布局布線過程中往往都會失敗的,像圖中的IDDR和ODDR,他們是一種原語,由一個時鐘輸入,下降沿數(shù)據(jù)由輸入時鐘的本地反轉(zhuǎn)來計時的,反饋到I/O塊的所有的時鐘被完全復(fù)用,總之在加入debug的時候,要把這兩種DDR型的驅(qū)動信號刪除。個人感覺如果在這些信號再接一個IBUF,再將輸出試著添加debug,有可能能成功。
C.ila的個數(shù)問題
當(dāng)你選擇了幾個時鐘域,你就會對應(yīng)有幾個ila,如果你選的時鐘都是一樣的,那么你就只有一個ila。
如上圖所示,是我最終留下來的信號,并將它們的時鐘都選擇了clk_out2,通過代碼里的clk_gen模塊可以知道clk_out2的時鐘是100MHZ,這里選擇100MHZ還有一個原因是debug hub也應(yīng)該選擇在100MHZ,至少在JTAG下載速率的2.5倍以上,而JTAG一般默認(rèn)在15MHZ,所以我們選擇clk_out2也是OK的,個人感覺時鐘域的選擇還是要在clk_gen給出的選擇里挑選,這樣的時鐘一般都是free clock,時鐘域選擇的越多,ila越多,布局布線的困難往往就會更大,所以個人覺得要控制ila的數(shù)量,不然很容易出錯。還有就是采樣深度的選擇,如果你的信號不多的話可以默認(rèn)1024,不然也會占用一定的FPGA資源,不過感覺影響也不大。還有Capture control和Advance trigger兩個感覺也是可勾選也可以不勾選。
之后我們看到,由于我們只選擇了一個時鐘域out2,所以它給我們分配了一個ila0以及1個時鐘域。之后就點(diǎn)擊finish就可以了。完成之后還需要進(jìn)行保存,保存之后xdc就會自動添加ila和debug hug的部分,將你所需要檢測的信號與ila上的探頭進(jìn)行連接:
在這里你可以檢查自己的xdc是否是準(zhǔn)確的,管腳對應(yīng)探頭的位置,同時可以看到u_ila_0已經(jīng)例化,并寫在了xdc里面。
2、修改調(diào)試信號的時鐘域
需要注意的是最后一行的debug_hub的時鐘,由于我只選擇了一個時鐘域out2,那么hub的時鐘就是默認(rèn)為out2(雖然它顯示的是Clk_user),當(dāng)有多個ila的時候,hub的時鐘往往默認(rèn)的都會出問題,可能它會與其他的ila時鐘默認(rèn)連接,如果此時的ila時鐘為0的話,那么就會出問題。例如現(xiàn)在有兩個ila_0和ila_1,分別對應(yīng)兩個時鐘clk_out1,clk_out2,然后同時連在一個hub上,默認(rèn)下,hub的clk是連到ila_1的clk_out2上,這對ila_0就有問題,不同的時鐘域,將會導(dǎo)致hub不工作。所以我們可以對hub的時鐘進(jìn)行更改:
a. 直接在xdc上進(jìn)行更改
可以直接在xdc上進(jìn)行更改,如上圖可以在get_nets后面的內(nèi)容進(jìn)行更改,比如我需要改為clk_gen里引出的clk_2,那么我們可以寫為get_nets clk_gen/CLK_OUT2,保存即可。不過修改之后的xdc可能還要需要重綜合,因為會顯示綜合過期,比較麻煩,所以我們可以用tcl命令去更改,就可以直接省去這一步,所以tcl的腳本還是很給力的,之后還要多加學(xué)習(xí)這方面。
b.采用tcl進(jìn)行更改或者圖形界面更改
直接在tcl的path里輸入命令后,xdc就會被自動更改。我們可以打開綜合設(shè)計里的Schematic里去查看代碼所生成的電路情況,包括各個走線的情況,可以找到對應(yīng)生成的hub和如下圖的ila_0。
可以看到u_ila_0中有引出的探頭,與所測的信號相連接。
把圖縮小,可以看到整體的情況,標(biāo)藍(lán)色的線就是ila_0和hub的clk共同連接到模塊gen_clk所引出的CLK_OUT2上,同時可以看出hub的輸入與輸出都是緊緊與ila_0相連接的,在我們分析debug哪些信號的的時候,可以觀察Schematic,判斷各個總線所連接的情況,往往比讀代碼更要直觀。
如上圖所示,我們還可以打開vivado頁面的Debug,里面會有生成好的ila和hub,包括探頭所連接的信號,還有他們的時鐘域。這里還應(yīng)該注意到有一個Unassigned Debug Nets,這個就是你有在代碼里標(biāo)注mark debug信號,但在最終選擇debug信號列表里刪除了,它可能是DDR的驅(qū)動信號,或者是你不需要看的信號。倒不是很重要,就是可以注意一下,所以說有很多地方都可以檢測你的ila生成的是否正確。每次更改debug的時候都記得要保存,同時還應(yīng)該檢查xdc是否刪除干凈并生成了新的ila。
在抓信號的的時候我曾經(jīng)出現(xiàn)過這種狀況,后來發(fā)現(xiàn)是xdc里有未刪除干凈的ila_1,這些問題都是需要注意的。
到這就完成了mark debug的工作,然后直接布局布線,并生成比特流,如果沒有問題那就能正常的生成比特流了。
3、生成比特流文件并下載抓取信號
完成比特流生成后,點(diǎn)擊Open Hardware Manager后,再點(diǎn)擊Auto Connect之后右鍵點(diǎn)擊Program Device.第一行是我們比特流生成的文件,第二行則是我們邏輯分析儀的探頭文件,也就是ltx文件。
如上圖所示,要在Waveform中添加相應(yīng)你想看到的信號,才會在ila窗口出現(xiàn)波形,同時要在右下角添加觸發(fā)信號,例如ctl,或者是mac里的dval(這些算是觸發(fā)信號,抓的時候要一同帶上,是用來指示當(dāng)前數(shù)據(jù)有效的信號)我剛開始沒有在waveform的頁面添加想看的信號,只在右下角添加了觸發(fā)信號ctl,然后怎么樣也看不到波形,以為自己哪里出了問題,后來才發(fā)現(xiàn)沒有添加想看的信號。
這里很重要的一點(diǎn)是在選號觸發(fā)條件之后(三個ctl都是等于1的時候觸發(fā)),一定要記得更改觸發(fā)條件,一開始我選擇的是AND(即當(dāng)三個同時為1的時候才滿足觸發(fā)條件),導(dǎo)致我的信號都是0
如圖所示,我所添加的信號都為0,就是因為觸發(fā)條件沒選對。后來我將AND改為OR,只要他們?nèi)齻€有一個為1,那么就滿足了觸發(fā)條件,之后點(diǎn)擊run進(jìn)行觸發(fā):
如圖所示,當(dāng)client的信號ctl拉高的時候,rgmii_rxd開始接收到4位二進(jìn)制的有效數(shù)據(jù),之后從CCD模塊的rxd_o里接收到了8位二進(jìn)制的有效數(shù)據(jù)。
如圖5變成了55,f變成了ff,同時ff前面還帶著一個d5,f前帶著一個d,那么d5就算是前導(dǎo)碼,然后是目的地址,源地址,那么半字節(jié)就是d??傊覀兊玫轿覀冏罱K想要的波形,就算是成功了。當(dāng)然我們注意到lower和upper的信號都是0。
應(yīng)該是Zedboard板子的網(wǎng)口只插上了1口,可能client剛好對應(yīng)在1口上,所以不是信號傳輸有什么問題,是網(wǎng)口沒接上。
當(dāng)然還應(yīng)該可以添加更多的信號進(jìn)行debug,還需要不斷地去嘗試,不過最主要的信號還是需要找出來debug的,這也需要對工程的代碼有一定的了解,借助Schematic網(wǎng)圖進(jìn)行不斷地分析。
總結(jié)
這里我還想說的就是,有一段時間我一直出現(xiàn)這種狀況,無論是改變debug信號,還是更改他們的時鐘域,最終Program device后都會出現(xiàn)沒有debug cores的情況,感覺很迷,最后我重新將這個ISE工程又導(dǎo)入一個新的文件,重新操作后就解決了,可能有時候一直弄不出來的話,可以考慮重新建工程,或者重新將工程導(dǎo)入。
再總結(jié)一下這次調(diào)試所遇到的一些問題
1、ere are no debugs core.
2、布線出現(xiàn)問題
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.
這些大部分還是時鐘域的問題,時鐘域?qū)е铝薲ebug失敗,所以在選擇時鐘域方面,我還要多加嘗試。
審核編輯:湯梓紅
-
信號
+關(guān)注
關(guān)注
11文章
2789瀏覽量
76727 -
調(diào)試
+關(guān)注
關(guān)注
7文章
578瀏覽量
33923 -
ISE
+關(guān)注
關(guān)注
1文章
100瀏覽量
36520 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66470 -
UCF
+關(guān)注
關(guān)注
0文章
9瀏覽量
9628
原文標(biāo)題:ISE工程升級到Vivado及板級信號調(diào)試
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論