操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    彭習(xí)武,張 濤

    (武漢科技大學(xué) 信息科學(xué)與工程學(xué)院,湖北 武漢430081)

    針對(duì)計(jì)算機(jī)處理高清圖像或視頻的邊緣檢測(cè)時(shí)存在延時(shí)長(zhǎng)和數(shù)據(jù)存儲(chǔ)帶寬受限的缺點(diǎn),提出了用VivadoHLS將邊緣檢測(cè)軟件代碼轉(zhuǎn)換成RTL級(jí)硬件電路的硬件加速方法。硬件加速是將運(yùn)算量大的功能模塊由硬件電路實(shí)現(xiàn),根據(jù)硬件電路工作頻率高和數(shù)據(jù)位寬自定義,可以解決延時(shí)長(zhǎng)和數(shù)據(jù)寬度受限的缺點(diǎn)。實(shí)驗(yàn)結(jié)果表明,邊緣檢測(cè)硬件加速方法不僅使延時(shí)和數(shù)據(jù)帶寬都得到了改善,而且也縮短了邊緣檢測(cè)的開(kāi)發(fā)周期。

    HLS;邊緣檢測(cè);硬件加速;片上系統(tǒng)

    中圖分類(lèi)號(hào):TN919.82

    文獻(xiàn)標(biāo)識(shí)碼:A

    DOI:10.16157/j.issn.0258-7998.2017.05.017

    中文引用格式:彭習(xí)武,張濤. 基于Vivado HLS的邊緣檢測(cè)硬件加速應(yīng)用[J].電子技術(shù)應(yīng)用,2017,43(5):70-73.

    英文引用格式:Peng Xiwu,Zhang Tao. Edge detection hardware acceleration based on Vivado HLS[J].Application of Electronic Technique,2017,43(5):70-73.

    0 引言

    在計(jì)算機(jī)視覺(jué)和圖像處理領(lǐng)域中,圖像邊緣檢測(cè)技術(shù)起著重要的作用,其效果好壞直接影響整個(gè)系統(tǒng)的性能。由于圖像的邊緣蘊(yùn)含了豐富的內(nèi)在信息,是進(jìn)行圖像分割、特征值提取的重要依據(jù)。邊緣檢測(cè)不僅能減少處理數(shù)據(jù),又能保留圖像中物體的形狀信息,是實(shí)時(shí)圖像處理中的重要內(nèi)容之一[1]

    在現(xiàn)階段,主要采用軟件方式或者FPGA硬件方式來(lái)實(shí)現(xiàn)邊緣檢測(cè)。文獻(xiàn)[2]-[4]采用軟件方法實(shí)現(xiàn)圖像的邊緣檢測(cè),雖然邊緣檢測(cè)的效果得到了改善,但是不能在延時(shí)和數(shù)據(jù)帶寬方面做出改善。文獻(xiàn)[5]-[7]采用FPGA方法實(shí)現(xiàn)圖像的邊緣檢測(cè),此硬件方法雖然改善了邊緣檢測(cè)的延時(shí)長(zhǎng)和數(shù)據(jù)帶寬受限的不足,但是由于FPGA硬件設(shè)計(jì)的復(fù)雜性會(huì)導(dǎo)致整個(gè)電路開(kāi)發(fā)周期變長(zhǎng)。

    本文采用Xilinx公司的Vivado HLS將邊緣檢測(cè)的軟件代碼轉(zhuǎn)化為RTL硬件電路。這樣不僅解決了軟件方法所帶給系統(tǒng)延時(shí)長(zhǎng)和數(shù)據(jù)帶寬窄的缺點(diǎn),而且避免了FPGA硬件電路設(shè)計(jì)周期長(zhǎng)的不足。

    1 邊緣檢測(cè)算法設(shè)計(jì)

    基于Sobel算子的邊緣檢測(cè)具有算法簡(jiǎn)單、實(shí)現(xiàn)方便等優(yōu)勢(shì),但在處理圖像時(shí)會(huì)存在對(duì)噪聲敏感和邊緣界限模糊等不足,所以需要在Sobel算法的基礎(chǔ)上進(jìn)行優(yōu)化。優(yōu)化后的邊緣檢測(cè)由中值濾波、膨脹濾波、邊緣檢測(cè)模塊和腐蝕濾波模塊構(gòu)成,如圖1所示。在圖像輸入后,首先中值濾波器對(duì)輸入圖像進(jìn)行平滑圖像噪聲處理,然后由膨脹濾波器求出圖像的局部最大值,再由邊緣檢測(cè)模塊來(lái)提取圖像的邊緣信息,最后由腐蝕濾波器消除圖像中的“斑點(diǎn)”噪聲,從而得到最佳的圖像邊緣。

    2 邊緣檢測(cè)軟硬件協(xié)同設(shè)計(jì)

    邊緣檢測(cè)的軟硬件協(xié)同設(shè)計(jì)主要包括軟件應(yīng)用設(shè)計(jì)、硬件加速設(shè)計(jì)和SoC應(yīng)用設(shè)計(jì)。

    2.1 軟硬件協(xié)作開(kāi)發(fā)流程

    軟件應(yīng)用設(shè)計(jì)是將邊緣檢測(cè)的功能用OpenCV函數(shù)或者自定義功能函數(shù)實(shí)現(xiàn);硬件加速設(shè)計(jì)將軟件代碼轉(zhuǎn)換為RTL電路,其中不可綜合的函數(shù)或者語(yǔ)句需用Vivado HLS支持的函數(shù)替換;SoC應(yīng)用設(shè)計(jì)將Vivado HLS輸出的RTL電路應(yīng)用到實(shí)際的SoC系統(tǒng)[8]。圖2是邊緣檢測(cè)硬件加速流程圖。

    如圖2所示,首先完成軟件應(yīng)用的開(kāi)發(fā),然后將Vivado HLS不能綜合的OpenCV函數(shù)鏈替換成HLS視頻庫(kù)函數(shù)鏈,最后封裝成IP在FPGA中調(diào)用。

    2.2 邊緣檢測(cè)軟硬件協(xié)作實(shí)現(xiàn)

    在軟件實(shí)現(xiàn)階段使用OpenCV函數(shù)庫(kù)或者自定義的C語(yǔ)言函數(shù)實(shí)現(xiàn)邊緣檢測(cè)算法,但Vivado HLS不能綜合所有的軟件代碼。當(dāng)軟件代碼中存在Vivado HLS不能綜合的函數(shù)時(shí)就需要將這些函數(shù)展開(kāi)或者替換,如定點(diǎn)運(yùn)算、片上的行緩存和窗口緩存來(lái)完成動(dòng)態(tài)的內(nèi)存分配、浮點(diǎn)和圖像在外部存儲(chǔ)器中存放和修改的操作。

    硬件加速方案是在軟件應(yīng)用的基礎(chǔ)上實(shí)現(xiàn)的。在搭建SoC時(shí),使用的是芯片內(nèi)部的AXI互聯(lián)總線,其所支持的數(shù)據(jù)類(lèi)型是AXI4 video stream。在設(shè)計(jì)邊緣檢測(cè)IP接口時(shí)需要將AXI4 video stream與Vivado HLS所支持的hls::Mat類(lèi)型進(jìn)行相互轉(zhuǎn)換。數(shù)據(jù)的轉(zhuǎn)換模塊見(jiàn)圖2中AXIvideo2Mat和Mat2AXIvideo模塊。Vivado HLS將OpenCV函數(shù)鏈轉(zhuǎn)換成HLS視頻庫(kù)函數(shù)鏈。硬件加速階段包括邊緣檢測(cè)的仿真與優(yōu)化,只有在優(yōu)化和仿真通過(guò)之后才將RTL級(jí)電路封裝成IP核輸出。

    3 系統(tǒng)搭建與IP核優(yōu)化

    邊緣檢測(cè)的軟硬件協(xié)作應(yīng)用具有一定的局限性,只能在具備處理器和可編程邏輯陣列的SoC中應(yīng)用。本文是在Xilinx公司的zc7z020clg484-1系列芯片中進(jìn)行邊緣檢測(cè)的系統(tǒng)搭建與功能驗(yàn)證。

    3.1 SoC系統(tǒng)設(shè)計(jì)

    Vivado HLS將邊緣檢測(cè)IP輸出到Vivado的IP catalog,在SoC系統(tǒng)設(shè)計(jì)時(shí)調(diào)用邊緣檢測(cè)IP核即可。搭建的邊緣檢測(cè)SoC系統(tǒng)如圖3所示。

    在圖3中,粗箭頭表示圖像數(shù)據(jù)流的路徑,細(xì)箭頭表示控制信號(hào)的方向。圖3所示的陰影部分為可裁剪系統(tǒng)(PS),白色區(qū)域?yàn)榭删幊踢壿?PL)。由于Vivado HLS不支持指針訪問(wèn)幀緩存,需要用AXI VDMA來(lái)訪問(wèn)幀數(shù)據(jù)。

    視頻流經(jīng)過(guò)HDMI輸入到視頻輸入控制器,數(shù)據(jù)流通過(guò)AXI互聯(lián)總線存入到DDR3存儲(chǔ)器中,Cortex-A9通過(guò)AXI互聯(lián)總線控制AXI VDMA和邊緣檢測(cè)IP去存取圖像數(shù)據(jù),處理完的數(shù)據(jù)緩存到DDR3,最后 Cortex-A9將處理好的數(shù)據(jù)輸出到視頻顯示控制器。硬件加速是將Cortex-A9處理的運(yùn)算轉(zhuǎn)移到PL去完成,這樣會(huì)減少處理器的負(fù)載。

    3.2 HLS模塊優(yōu)化

    Vivado HLS有兩種優(yōu)化方式,一種是在Directive控制欄設(shè)置優(yōu)化變量和參數(shù),另一種方法是在代碼中使用#pragma命令來(lái)定義變量實(shí)現(xiàn)類(lèi)型和結(jié)構(gòu)。根據(jù)系統(tǒng)的需求對(duì)邊緣檢測(cè)進(jìn)行串行和并行實(shí)現(xiàn)策略。

    3.2.1 串行實(shí)現(xiàn)方案

    串行實(shí)現(xiàn)是保持軟件代碼的順序執(zhí)行結(jié)構(gòu),邊緣檢測(cè)模塊按照順序串行執(zhí)行。當(dāng)硬件電路工作在100 MHz頻率時(shí),處理像素為(1 080×1 092)的圖像速率為0.7幀/s。通過(guò)表1可知Sobel子模塊消耗了1 142 ms,導(dǎo)致了整個(gè)邊緣檢測(cè)功能塊的速率降低。當(dāng)邊緣檢測(cè)IP的數(shù)據(jù)的寬度為16 bit、像素深度為8 bit時(shí),邊緣檢測(cè)的處理速率為825.5 KB/s。

    3.2.2 并行實(shí)現(xiàn)方案

    并行實(shí)現(xiàn)是將for循環(huán)打平、替換數(shù)組和增加流水線操作來(lái)實(shí)現(xiàn)并行執(zhí)行。與串行實(shí)現(xiàn)對(duì)比可知,在速率方面提高68.5倍左右,在100 MHz的頻率下,處理像素為(1 080×1 092)的圖像速率為48幀/s。當(dāng)邊緣檢測(cè)IP的數(shù)據(jù)的寬度為16 bit、像素深度為8 bit時(shí),邊緣檢測(cè)的處理速率為56 609.28 KB/s。

    通過(guò)以上兩種實(shí)現(xiàn)可知,并行比串行實(shí)現(xiàn)的處理速率速度提高了68.5倍左右,與處理時(shí)間相對(duì)應(yīng)的數(shù)據(jù)吞吐率也提高了68.5倍。當(dāng)數(shù)據(jù)帶寬不滿(mǎn)足要求時(shí),可以通過(guò)修改軟件代碼中變量的位寬來(lái)增加IP數(shù)據(jù)端口的寬度,從而提高數(shù)據(jù)吞吐量。

    硬件電路所使用的資源往往也是算法考慮的因素之一。表2是兩種實(shí)現(xiàn)策略所需要的硬件資源。

    在資源使用方面,并行比串行實(shí)現(xiàn)所使用的資源多,占整個(gè)芯片的資源分別為BRAM_18K為10%,DSP48E為0,F(xiàn)F為3%,LUT為10%。可知資源滿(mǎn)足設(shè)計(jì)要求。

    4 結(jié)果分析

    通過(guò)三組公路真實(shí)場(chǎng)景來(lái)驗(yàn)證本文邊緣檢測(cè)的效果。第一組是在白天拍攝的公路場(chǎng)景,見(jiàn)圖4,圖4(a)為輸入的原始圖像,圖4(b)為OpenCV邊緣檢測(cè)的結(jié)果,圖4(c)為硬件加速邊緣檢測(cè)結(jié)果。第二組是在晚間拍攝的公路場(chǎng)景(曝光效果差),見(jiàn)圖5,圖5(a)為輸入的原始圖像,圖5(b)為OpenCV邊緣檢測(cè)的結(jié)果,圖5(c)為硬件加速邊緣檢測(cè)結(jié)果。第三組是在晚間拍攝的公路場(chǎng)景,見(jiàn)圖6,圖6(a)為輸入的原始圖像,圖6(b)為OpenCV邊緣檢測(cè)的結(jié)果,圖6(c)為硬件加速邊緣檢測(cè)結(jié)果。

    對(duì)圖4、圖5和圖6從橫縱兩個(gè)角度來(lái)分析硬件加速邊緣檢測(cè)的效果。橫向分析,與OpenCV邊緣檢測(cè)結(jié)果比較可知,硬件加速方案輸出邊緣圖像線條更加的明顯,在圖5曝光效果差的情況下OpenCV存在邊緣漏檢測(cè)的情形,而硬件加速方案則不存在漏檢的情況;縱向分析,在白天拍攝的場(chǎng)景邊緣檢測(cè)的結(jié)果要比晚上輸出的效果好些,在晚上拍攝的場(chǎng)景曝光好的邊緣檢測(cè)效果要比曝光差輸出的效果好。

    對(duì)三組場(chǎng)景下的硬件加速邊緣檢測(cè)效果分析可知,硬件加速邊緣檢測(cè)明效果顯優(yōu)于OpenCV邊緣檢測(cè),同時(shí)在相機(jī)曝光效果差或者外界環(huán)境復(fù)雜的情況下,硬件加速邊緣檢測(cè)都能進(jìn)行有效邊緣檢測(cè)。

    5 結(jié)論

    針對(duì)傳統(tǒng)OpenCV圖像處理存在延時(shí)長(zhǎng)和數(shù)據(jù)帶寬受限的缺點(diǎn),采用硬件加速可以彌此不足。采用Vivado HLS在軟件應(yīng)用的基礎(chǔ)上進(jìn)一步實(shí)現(xiàn)硬件電路設(shè)計(jì),大大縮短了系統(tǒng)的開(kāi)發(fā)周期。本文不僅提出邊緣檢測(cè)的硬件加速方案,同時(shí)提出了在數(shù)據(jù)處理量大和處理速度快的應(yīng)用中可以通過(guò)軟硬件結(jié)合來(lái)提供系統(tǒng)設(shè)計(jì)的方案。

    參考文獻(xiàn)

    [1] 關(guān)新平,趙立興,唐英干.圖像去噪混合濾波方法[J].中國(guó)圖象圖形學(xué)報(bào),2005,10(3):332-337.

    [2] 蔣婷,譚躍剛,劉泉.基于SOBEL算子的圖像清晰度評(píng)價(jià)函數(shù)研究[J].計(jì)算機(jī)與數(shù)字工程,2008(8):129-131,191.

    [3] 靳鵬飛.一種改進(jìn)的Sobel圖像邊緣檢測(cè)算法[J].應(yīng)用光學(xué),2008(4):625-628.

    [4] 白俊江,洪春勇.基于Sobel的邊緣檢測(cè)方法[J].電腦知識(shí)與技術(shù),2009(21):5847-5849.

    [5] 李錦明,閆曉俊,江旭東,等.Sobel圖像邊沿檢測(cè)算法的優(yōu)化設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2016,42(3):71-73.

    [6] 楊新華,寇為剛.基于FPGA的Sobel算子圖像邊緣檢測(cè)算法[J].儀表技術(shù)與傳感器,2013(1):102-104.

    [7] 寧賽男,朱明,孫宏海,等.一種改進(jìn)的Sobel自適應(yīng)邊緣檢測(cè)的FPGA實(shí)現(xiàn)[J].液晶與顯示,2014(3):395-402.

    [8] 郭豐收.Xilinx FPGA/Zynq設(shè)計(jì)中使用HLS實(shí)現(xiàn)OpenCV的開(kāi)發(fā)流程[J].電子產(chǎn)品世界,2014(2-3):50-52.

    由于疫情,大家最近都只能在家中進(jìn)行學(xué)習(xí)。同時(shí)實(shí)驗(yàn)室的研一同學(xué)也在通過(guò)Teamviewer進(jìn)行培訓(xùn)項(xiàng)目的實(shí)際操作。這次把兩位同學(xué)的研究成果給大家分享一下,老司機(jī)們可以重溫一下當(dāng)年自己新手時(shí)的情景,新司機(jī)們可以借鑒一下他人的經(jīng)驗(yàn)。本次實(shí)驗(yàn)操作包括:工程的版本遷移,板級(jí)測(cè)試時(shí)信號(hào)的抓取。


    ISE工程轉(zhuǎn)到Vivado2018.2環(huán)境下

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

    首先我們拿到的是一個(gè)ISE的工程,當(dāng)然是不能夠直接用Vivado軟件打開(kāi)的,所以我們要進(jìn)行第一步操作,將工程導(dǎo)入進(jìn)去:

    打開(kāi)Vivado2018.2后,點(diǎn)”Creat Project”后,再點(diǎn)擊Imported Project,勾選ISE后,尋找到ISE工程所放在的位置進(jìn)行添加,記得添加的是后綴為.xise的文件,因?yàn)橹拔尹c(diǎn)的是別的形式,就一直添加不了,這個(gè)小問(wèn)題要注意。操作如下列圖步驟所示。

    選擇好后點(diǎn)擊Next鍵繼續(xù),并選擇好自己的工程目錄。

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

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

    選擇好ISE工程之后就算成功將ISE導(dǎo)入vivado2018.2了,也就算完成了第一步工作。

    如上面兩張圖所示,進(jìn)入vivado2018.2頁(yè)面后,會(huì)顯示出這個(gè)界面,此時(shí)你的IP核在這里是處于過(guò)期的狀態(tài),因?yàn)樵趇se里的ip核到了vivado中不一定適用,不同軟件中的ip核是不兼容的,這里很簡(jiǎn)單,只需手動(dòng)升級(jí),即選中ip核并點(diǎn)擊右鍵,有一個(gè)upgrade up代表升級(jí),點(diǎn)擊之后會(huì)出現(xiàn)下面界面:

    點(diǎn)擊ok后進(jìn)行g(shù)enerate后,ip核就會(huì)自動(dòng)更新完成:

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

    1、手動(dòng)更改

    根據(jù)ucf的約束管腳,對(duì)應(yīng)著寫(xiě)一個(gè)xdc文件。

    逐行修改就是根據(jù)上圖的轉(zhuǎn)換規(guī)則,一行一行地把代碼改成xdc形式。下面放上部分一行行修改后的代碼。


    2. 圖形界面配置管腳

    而通過(guò)圖形界面修改就方便得多,鼠標(biāo)點(diǎn)點(diǎn)即可。在完成synthesis之后,打開(kāi)implement選項(xiàng):

    在I/O Ports窗口展開(kāi)管腳,對(duì)于每個(gè)輸入輸出信號(hào),在Site欄選擇對(duì)應(yīng)的管腳,注意確保Fixed欄處于勾選狀態(tài),I/O Std常選擇LVCMOS25。設(shè)置好后,Implemented Design窗口標(biāo)題欄會(huì)顯示一個(gè)*號(hào),表示設(shè)置發(fā)生了更改。按Ctrl+S快捷鍵保存設(shè)置,會(huì)彈出窗口如圖,提示保存constraints文件會(huì)導(dǎo)致綜合與實(shí)現(xiàn)過(guò)期。也就是說(shuō),修改了管腳分配設(shè)置后,需要重新進(jìn)行綜合、實(shí)現(xiàn)操作。

    隨后會(huì)彈出保存新文件的窗口,選擇Create a new file并輸入文件名,點(diǎn)擊OK即可。

    此時(shí)約束文件就已經(jīng)生成,保存之后就可以在vivado的約束部分看到自己的xdc了。

    個(gè)人認(rèn)為如果ucf文件不是特別多的話可以手動(dòng)更改,如果很多的話可能就需要在tcl輸入對(duì)應(yīng)的腳本去更改,這個(gè)我就還沒(méi)嘗試過(guò)。

    板級(jí)測(cè)試時(shí)信號(hào)的抓取

    1、添加調(diào)試的信號(hào)

    添加信號(hào)抓取要先進(jìn)行synthesis操作,然后open synthesis,點(diǎn)擊Set up debug。

    在這之前,你就應(yīng)該想好你要debug哪些信號(hào),抓哪些信號(hào)去看波形,當(dāng)你想用ila抓取哪些信號(hào)時(shí),你就可以在代碼前標(biāo)記出(*mark_debug="true"*)或者(*mark_debug="1"*).因?yàn)闃?biāo)記了之后,你點(diǎn)擊set up Debug之后就可以在信號(hào)列表中找到相應(yīng)的信號(hào)。

    上圖是我所標(biāo)記的部分信號(hào),當(dāng)然我們需要對(duì)代碼的功能進(jìn)行分析,你才好判斷。這里還要提及一點(diǎn),盡量不要抓頂層的信號(hào),因?yàn)轫攲拥男盘?hào)往往是沒(méi)有經(jīng)過(guò)處理的信號(hào),這樣子很有可能ila是抓不出來(lái)波形的。

    那么對(duì)于我的工程主要是rgmii轉(zhuǎn)gmii,即是一個(gè)4位數(shù)據(jù)轉(zhuǎn)換成8位數(shù)據(jù),再對(duì)接受的8位數(shù)據(jù)進(jìn)行一個(gè)CRC的校驗(yàn),那么我們當(dāng)然是想抓接收到4位的數(shù)據(jù)和接收8位的數(shù)據(jù),這樣你就有了目的,可以在代碼中尋找到輸入或者輸出位寬是4的數(shù)據(jù),再找位寬為8的數(shù)據(jù),進(jìn)行mark debug。

    如圖就是告訴你可以選擇對(duì)應(yīng)的信號(hào)進(jìn)行標(biāo)記,并且可以選擇他們的時(shí)鐘域,之后可以對(duì)你選擇的信號(hào)給予一定的值進(jìn)行觸發(fā)。

    你在代碼里標(biāo)記之后,就會(huì)在列表中出現(xiàn)對(duì)應(yīng)信號(hào),這里需要注意的地方有以下幾個(gè)點(diǎn):

    A.Clock Domain

    這個(gè)地方是時(shí)鐘域的選擇,這個(gè)是非常講究的,有時(shí)候你抓不到波形的原因就是因?yàn)閰⒖紩r(shí)鐘太慢,信號(hào)往往是從一個(gè)快時(shí)鐘域下來(lái)的,你拿慢時(shí)鐘去抓,就抓不到,而且時(shí)鐘域選擇不當(dāng)在布局布線的過(guò)程往往都會(huì)報(bào)錯(cuò)。報(bào)錯(cuò)的原因是因?yàn)槟闼x的時(shí)鐘和ila所連接的距離太遠(yuǎn),布局布線太困難,這時(shí)候你需要更改你的時(shí)鐘域。這里再說(shuō)一個(gè)概念叫free clock,free clock是要求上電無(wú)條件運(yùn)行的時(shí)鐘,一般直接用晶振時(shí)鐘,是比較穩(wěn)定的時(shí)鐘,給予電路永久的一種時(shí)鐘。所以在選擇時(shí)鐘的時(shí)候我們都需要考慮去選擇free clock。

    B.Driver cell

    對(duì)于DDR型的驅(qū)動(dòng)信號(hào)在布局布線過(guò)程中往往都會(huì)失敗的,像圖中的IDDR和ODDR,他們是一種原語(yǔ),由一個(gè)時(shí)鐘輸入,下降沿?cái)?shù)據(jù)由輸入時(shí)鐘的本地反轉(zhuǎn)來(lái)計(jì)時(shí)的,反饋到I/O塊的所有的時(shí)鐘被完全復(fù)用,總之在加入debug的時(shí)候,要把這兩種DDR型的驅(qū)動(dòng)信號(hào)刪除。個(gè)人感覺(jué)如果在這些信號(hào)再接一個(gè)IBUF,再將輸出試著添加debug,有可能能成功。

    C.ila的個(gè)數(shù)問(wèn)題

    當(dāng)你選擇了幾個(gè)時(shí)鐘域,你就會(huì)對(duì)應(yīng)有幾個(gè)ila,如果你選的時(shí)鐘都是一樣的,那么你就只有一個(gè)ila。

    如上圖所示,是我最終留下來(lái)的信號(hào),并將它們的時(shí)鐘都選擇了clk_out2,通過(guò)代碼里的clk_gen模塊可以知道clk_out2的時(shí)鐘是100MHZ,這里選擇100MHZ還有一個(gè)原因是debug hub也應(yīng)該選擇在100MHZ,至少在JTAG下載速率的2.5倍以上,而JTAG一般默認(rèn)在15MHZ,所以我們選擇clk_out2也是OK的,個(gè)人感覺(jué)時(shí)鐘域的選擇還是要在clk_gen給出的選擇里挑選,這樣的時(shí)鐘一般都是free clock,時(shí)鐘域選擇的越多,ila越多,布局布線的困難往往就會(huì)更大,所以個(gè)人覺(jué)得要控制ila的數(shù)量,不然很容易出錯(cuò)。還有就是采樣深度的選擇,如果你的信號(hào)不多的話可以默認(rèn)1024,不然也會(huì)占用一定的FPGA資源,不過(guò)感覺(jué)影響也不大。還有Capture control和Advance trigger兩個(gè)感覺(jué)也是可勾選也可以不勾選。


    之后我們看到,由于我們只選擇了一個(gè)時(shí)鐘域out2,所以它給我們分配了一個(gè)ila0以及1個(gè)時(shí)鐘域。之后就點(diǎn)擊finish就可以了。完成之后還需要進(jìn)行保存,保存之后xdc就會(huì)自動(dòng)添加ila和debug hug的部分,將你所需要檢測(cè)的信號(hào)與ila上的探頭進(jìn)行連接:

    在這里你可以檢查自己的xdc是否是準(zhǔn)確的,管腳對(duì)應(yīng)探頭的位置,同時(shí)可以看到u_ila_0已經(jīng)例化,并寫(xiě)在了xdc里面。

    2、修改調(diào)試信號(hào)的時(shí)鐘域

    需要注意的是最后一行的debug_hub的時(shí)鐘,由于我只選擇了一個(gè)時(shí)鐘域out2,那么hub的時(shí)鐘就是默認(rèn)為out2(雖然它顯示的是Clk_user),當(dāng)有多個(gè)ila的時(shí)候,hub的時(shí)鐘往往默認(rèn)的都會(huì)出問(wèn)題,可能它會(huì)與其他的ila時(shí)鐘默認(rèn)連接,如果此時(shí)的ila時(shí)鐘為0的話,那么就會(huì)出問(wèn)題。例如現(xiàn)在有兩個(gè)ila_0和ila_1,分別對(duì)應(yīng)兩個(gè)時(shí)鐘clk_out1,clk_out2,然后同時(shí)連在一個(gè)hub上,默認(rèn)下,hub的clk是連到ila_1的clk_out2上,這對(duì)ila_0就有問(wèn)題,不同的時(shí)鐘域,將會(huì)導(dǎo)致hub不工作。所以我們可以對(duì)hub的時(shí)鐘進(jìn)行更改:

    a. 直接在xdc上進(jìn)行更改

    可以直接在xdc上進(jìn)行更改,如上圖可以在get_nets后面的內(nèi)容進(jìn)行更改,比如我需要改為clk_gen里引出的clk_2,那么我們可以寫(xiě)為get_nets clk_gen/CLK_OUT2,保存即可。不過(guò)修改之后的xdc可能還要需要重綜合,因?yàn)闀?huì)顯示綜合過(guò)期,比較麻煩,所以我們可以用tcl命令去更改,就可以直接省去這一步,所以tcl的腳本還是很給力的,之后還要多加學(xué)習(xí)這方面。

    b.采用tcl進(jìn)行更改或者圖形界面更改

    直接在tcl的path里輸入命令后,xdc就會(huì)被自動(dòng)更改。

    我們可以打開(kāi)綜合設(shè)計(jì)里的Schematic里去查看代碼所生成的電路情況,包括各個(gè)走線的情況,可以找到對(duì)應(yīng)生成的hub和如下圖的ila_0。


    可以看到u_ila_0中有引出的探頭,與所測(cè)的信號(hào)相連接。

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

    如上圖所示,我們還可以打開(kāi)vivado頁(yè)面的Debug,里面會(huì)有生成好的ila和hub,包括探頭所連接的信號(hào),還有他們的時(shí)鐘域。這里還應(yīng)該注意到有一個(gè)Unassigned Debug Nets,這個(gè)就是你有在代碼里標(biāo)注mark debug信號(hào),但在最終選擇debug信號(hào)列表里刪除了,它可能是DDR的驅(qū)動(dòng)信號(hào),或者是你不需要看的信號(hào)。倒不是很重要,就是可以注意一下,所以說(shuō)有很多地方都可以檢測(cè)你的ila生成的是否正確。每次更改debug的時(shí)候都記得要保存,同時(shí)還應(yīng)該檢查xdc是否刪除干凈并生成了新的ila。


    在抓信號(hào)的的時(shí)候我曾經(jīng)出現(xiàn)過(guò)這種狀況,后來(lái)發(fā)現(xiàn)是xdc里有未刪除干凈的ila_1,這些問(wèn)題都是需要注意的。

    到這就完成了mark debug的工作,然后直接布局布線,并生成比特流,如果沒(méi)有問(wèn)題那就能正常的生成比特流了。

    3、生成比特流文件并下載抓取信號(hào)

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

    如上圖所示,要在Waveform中添加相應(yīng)你想看到的信號(hào),才會(huì)在ila窗口出現(xiàn)波形,同時(shí)要在右下角添加觸發(fā)信號(hào),例如ctl,或者是mac里的dval(這些算是觸發(fā)信號(hào),抓的時(shí)候要一同帶上,是用來(lái)指示當(dāng)前數(shù)據(jù)有效的信號(hào))我剛開(kāi)始沒(méi)有在waveform的頁(yè)面添加想看的信號(hào),只在右下角添加了觸發(fā)信號(hào)ctl,然后怎么樣也看不到波形,以為自己哪里出了問(wèn)題,后來(lái)才發(fā)現(xiàn)沒(méi)有添加想看的信號(hào)。

    這里很重要的一點(diǎn)是在選號(hào)觸發(fā)條件之后(三個(gè)ctl都是等于1的時(shí)候觸發(fā)),一定要記得更改觸發(fā)條件,一開(kāi)始我選擇的是AND(即當(dāng)三個(gè)同時(shí)為1的時(shí)候才滿(mǎn)足觸發(fā)條件),導(dǎo)致我的信號(hào)都是0

    如圖所示,我所添加的信號(hào)都為0,就是因?yàn)橛|發(fā)條件沒(méi)選對(duì)。

    后來(lái)我將AND改為OR,只要他們?nèi)齻€(gè)有一個(gè)為1,那么就滿(mǎn)足了觸發(fā)條件,之后點(diǎn)擊run進(jìn)行觸發(fā):

    如圖所示,當(dāng)client的信號(hào)ctl拉高的時(shí)候,rgmii_rxd開(kāi)始接收到4位二進(jìn)制的有效數(shù)據(jù),之后從CCD模塊的rxd_o里接收到了8位二進(jìn)制的有效數(shù)據(jù)。

    如圖5變成了55,f變成了ff,同時(shí)ff前面還帶著一個(gè)d5,f前帶著一個(gè)d,那么d5就算是前導(dǎo)碼,然后是目的地址,源地址,那么半字節(jié)就是d。總之我們得到我們最終想要的波形,就算是成功了。當(dāng)然我們注意到lower和upper的信號(hào)都是0。

    應(yīng)該是Zedboard板子的網(wǎng)口只插上了1口,可能client剛好對(duì)應(yīng)在1口上,所以不是信號(hào)傳輸有什么問(wèn)題,是網(wǎng)口沒(méi)接上。

    當(dāng)然還應(yīng)該可以添加更多的信號(hào)進(jìn)行debug,還需要不斷地去嘗試,不過(guò)最主要的信號(hào)還是需要找出來(lái)debug的,這也需要對(duì)工程的代碼有一定的了解,借助Schematic網(wǎng)圖進(jìn)行不斷地分析。

    實(shí)驗(yàn)總結(jié)

    這里我還想說(shuō)的就是,有一段時(shí)間我一直出現(xiàn)這種狀況,無(wú)論是改變debug信號(hào),還是更改他們的時(shí)鐘域,最終Program device后都會(huì)出現(xiàn)沒(méi)有debug cores的情況,感覺(jué)很迷,最后我重新將這個(gè)ISE工程又導(dǎo)入一個(gè)新的文件,重新操作后就解決了,可能有時(shí)候一直弄不出來(lái)的話,可以考慮重新建工程,或者重新將工程導(dǎo)入。

    再總結(jié)一下這次調(diào)試所遇到的一些問(wèn)題

    1、ere are no debugs core.

    2、布線出現(xiàn)問(wè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.

    這些大部分還是時(shí)鐘域的問(wèn)題,時(shí)鐘域?qū)е铝薲ebug失敗,所以在選擇時(shí)鐘域方面,我還要多加嘗試。


    全文完。

網(wǎng)站首頁(yè)   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶(hù)案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號(hào):冀ICP備2024067069號(hào)-3 北京科技有限公司版權(quán)所有