0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Vivado調(diào)試ILA debug結(jié)果也許不對(duì)

汽車玩家 ? 來(lái)源:科學(xué)計(jì)算technomania ? 作者:貓叔 ? 2020-03-08 17:35 ? 次閱讀

FPGA的調(diào)試是個(gè)很蛋疼的事,即便Vivado已經(jīng)比ISE好用了很多,但調(diào)試起來(lái)依舊蛋疼。即便是同一個(gè)程序,F(xiàn)PGA每次重新綜合、實(shí)現(xiàn)后結(jié)果都多多少少會(huì)有所不同。而且加入到ila中的數(shù)據(jù)會(huì)占用RAM資源,影響布局布線的結(jié)果。

尤其是在時(shí)序緊張的情況下,ila占的資源越多,布線的難度就會(huì)越大。當(dāng)時(shí)序不收斂時(shí),就可能會(huì)導(dǎo)致一個(gè)問題,我們從ila中看到的信號(hào)可能不是真實(shí)的。

下面說(shuō)一下今天在調(diào)試中碰到的現(xiàn)象:

場(chǎng)景還原:

1. 程序中有4個(gè)主時(shí)鐘,而且一直處于在時(shí)序收斂的邊緣狀態(tài),也就是說(shuō)有時(shí)候Implementation后時(shí)序收斂,有時(shí)時(shí)序違規(guī),但我沒有去管,因?yàn)閳?bào)時(shí)序違規(guī)的地方并不是我當(dāng)時(shí)調(diào)試的代碼處。

2. 數(shù)據(jù)的位寬較大,為256bit,要對(duì)該數(shù)據(jù)做一系列的處理,比如原始數(shù)據(jù)為A[255:0],在數(shù)據(jù)處理過(guò)程中需要將A賦值給B[255:0],再將B賦值給C[255:0]。

3. 數(shù)據(jù)C最后通過(guò)PCIe傳給了上位機(jī),在上位機(jī)中看到C波形有時(shí)會(huì)有毛刺,但不確定是哪一步出了問題,于是將A、B和C都引入到ila中,又多抓了幾個(gè)相關(guān)的信號(hào),加起來(lái)總共有800多bits。

4. 總的BARM占用率不超過(guò)40%,LUT RAM沒超過(guò)10%,LUT和FF都沒有超過(guò)30%,BUFG用了47%。

出現(xiàn)的問題:

1. 在沒有加這么多的debug信號(hào)前,偶爾時(shí)序會(huì)報(bào)違規(guī),但都是個(gè)別的一兩處報(bào)的setup違規(guī)。但加了這些信號(hào)后,所有時(shí)鐘的Intra-Clock Paths的Hold-up Time都違規(guī)。如果是建立時(shí)間不過(guò),解決辦法有很多,但保持時(shí)間不過(guò),就有點(diǎn)麻煩了。但這肯定是增加了這么多的debug導(dǎo)致的,所以不用去理會(huì)。

2. 由于看到上位機(jī)中的波形有毛刺,首先確定C的數(shù)據(jù)是否有問題,排除PCIe傳輸中的錯(cuò)誤。對(duì)比發(fā)現(xiàn)C和上位機(jī)的數(shù)據(jù)完全一樣,因此毛刺肯定是出現(xiàn)在前面的邏輯中。

3. 發(fā)現(xiàn)A、B和C的數(shù)據(jù)都是不一致的,可能會(huì)出現(xiàn)下面的現(xiàn)象:

A的數(shù)據(jù)是xxxx10101010xxxx
B的數(shù)據(jù)是xxxx00101010xxxx
C的數(shù)據(jù)是xxxx10101011xxxx

也就是說(shuō),在B中發(fā)現(xiàn)數(shù)據(jù)出現(xiàn)了誤碼,1->0,但C中該bit依然是對(duì)的,跟原始數(shù)據(jù)的A是一樣的,由于我們的 賦值過(guò)程是A->B->C。

說(shuō)明可能有兩種原因:

1. 從B到C的傳輸過(guò)程中,剛好在這個(gè)bit處產(chǎn)生了誤碼
2. 數(shù)據(jù)B的這個(gè)bit其實(shí)是正確的,只是抓出來(lái)的數(shù)據(jù)有問題

由于程序中在很多地方都會(huì)出現(xiàn)這種情況,所以認(rèn)為第二種可能性更大一些。

總結(jié):

在時(shí)序不收斂的情況下,我們通過(guò)ila抓出來(lái)的數(shù)據(jù)可能并不是真實(shí)的,在碰到這種問題時(shí),可能需要我們先把時(shí)序調(diào)整后再進(jìn)行后續(xù)調(diào)試。

最后,碰到這種問題怎么解決呢?最根本的解決辦法當(dāng)然是修改設(shè)計(jì),使時(shí)序能夠收斂。還有一種笨辦法,由于程序Implementation后有時(shí)能收斂有時(shí)不能收斂,那我們就把時(shí)序收斂時(shí)的bit作Release即可,再對(duì)這個(gè)bit程序做詳細(xì)測(cè)試。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1624

    文章

    21568

    瀏覽量

    600622
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    803

    瀏覽量

    66141
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GD32用Embedded軟件debug在線調(diào)試失敗的原因?

    請(qǐng)問GD32用Embedded軟件debug在線調(diào)試失敗可能是什么原因?
    發(fā)表于 09-27 07:13

    Multi-Scaler IP的Linux示例以及Debug(上)

    本篇文章介紹了在 ZCU106 上創(chuàng)建 Video Multi-Scaler IP 的 AMD Vivado? Design Tool 和 Petalinux 工程;在 ZCU106 上 Run 生成的 Image,并測(cè)試生成的圖像文件,以及常見問題的 Debug。
    的頭像 發(fā)表于 09-18 10:03 ?272次閱讀
    Multi-Scaler IP的Linux示例以及<b class='flag-5'>Debug</b>(上)

    AGC VAC821仿真結(jié)果不對(duì)是什么原因?qū)е碌模?/a>

    AGC VAC821仿真結(jié)果不對(duì)
    發(fā)表于 08-14 06:18

    如何在服務(wù)器上調(diào)試本地FPGA板卡

    該板卡,直接使用Recent Targets,之前的配置應(yīng)該保存在列表中。如下圖所示。 如下圖所示連接后,即可正常使用 Vivado。FPGA 器件可以使用 ILA 內(nèi)核進(jìn)行編程和調(diào)試,就像在本地PC上操作一樣,同
    發(fā)表于 07-31 17:36

    使用Python提取ILA數(shù)據(jù)的流程

    ILA應(yīng)該是調(diào)試AMD-Xilinx FPGA最常用的IP。
    的頭像 發(fā)表于 05-01 10:43 ?613次閱讀
    使用Python提取<b class='flag-5'>ILA</b>數(shù)據(jù)的流程

    單片機(jī)開發(fā)環(huán)境中Release與Debug模式的對(duì)比分析

    Debug通常稱為調(diào)試版本。通過(guò)一系列編譯選項(xiàng)的配合,編譯的結(jié)果通常包含調(diào)試信息,而且不希望做優(yōu)化,便于程序員調(diào)試程序。
    發(fā)表于 04-30 11:22 ?951次閱讀
    單片機(jī)開發(fā)環(huán)境中Release與<b class='flag-5'>Debug</b>模式的對(duì)比分析

    STM32F769無(wú)法debug的原因?

    我最近在調(diào)試 STM32F769 使用RT Thread 系統(tǒng) 開始移植已經(jīng)成功 結(jié)果前幾天出了問題 現(xiàn)在無(wú)法debugdebug 連接 提示 端口號(hào)無(wú)效GDB 端口當(dāng)時(shí)是
    發(fā)表于 04-08 07:31

    如何在下載Bitstream后自動(dòng)觸發(fā)ILA采集

    在硬件調(diào)試時(shí),經(jīng)常需要用 ILA 采集一些 FPGA 內(nèi)部或者對(duì)外的初始化信號(hào),然而在下載完 Bitstream 后立即采集這些變化稍縱即逝的信號(hào),比如在 1uS 內(nèi)手動(dòng)觸發(fā) ILA 采集信號(hào),以
    的頭像 發(fā)表于 02-23 09:45 ?774次閱讀
    如何在下載Bitstream后自動(dòng)觸發(fā)<b class='flag-5'>ILA</b>采集

    詳解Java DEBUG的基本原理

    Debug 的時(shí)候,都遇到過(guò)手速太快,直接跳過(guò)了自己想調(diào)試的方法、代碼的時(shí)候吧……
    的頭像 發(fā)表于 01-05 10:10 ?1239次閱讀
    詳解Java <b class='flag-5'>DEBUG</b>的基本原理

    用CPLD接收AD7986數(shù)據(jù),轉(zhuǎn)換結(jié)果總是讀取不對(duì)怎么解決?

    小弟目前在調(diào)試使用CPLD接收AD7986數(shù)據(jù),轉(zhuǎn)換結(jié)果總是讀取不對(duì)。使用的VHDL語(yǔ)言,速率已經(jīng)降得很低了,還是讀不對(duì)。請(qǐng)大俠指點(diǎn)。
    發(fā)表于 12-22 08:09

    Vivado與ISE同時(shí)運(yùn)行出現(xiàn)的奇怪現(xiàn)象

    近幾天調(diào)試開發(fā)板,主芯片是XC7A100T,用Vivado給開發(fā)板下載bit文件,正常工作。
    的頭像 發(fā)表于 12-04 09:54 ?845次閱讀

    調(diào)試AD9136遇到的問題求解

    大佬好,小弟最近在調(diào)試AD9136芯片,遇到一個(gè)問題,如下: 1.我使用的是9136模式11,單鏈路模式,使用一個(gè)JESD204+一個(gè)JESD204 PHY,我將JESD204的tx_charisk
    發(fā)表于 12-04 07:14

    STM32WB55開發(fā)(4)----配置串口打印Debug調(diào)試信息

    在STM32WB55系列微控制器上進(jìn)行開發(fā)時(shí),實(shí)時(shí)監(jiān)控應(yīng)用程序的運(yùn)行情況和調(diào)試潛在問題是至關(guān)重要的。使用串口(USART/UART)進(jìn)行Debug信息打印是一種簡(jiǎn)便、高效的方法。下面是如何在STM32WB55上配置串口來(lái)打印調(diào)試
    的頭像 發(fā)表于 12-01 15:48 ?1103次閱讀
    STM32WB55開發(fā)(4)----配置串口打印<b class='flag-5'>Debug</b><b class='flag-5'>調(diào)試</b>信息

    如何實(shí)現(xiàn)ILA Cross Trigger

    ILA Cross Triggering功能使得ILA核心之間、以及ILA核心與處理器(例如,AMD Zynq 7000 SoC)之間可以進(jìn)行Cross Trigger。這個(gè)功能在你需要在不同時(shí)鐘域的兩個(gè)
    的頭像 發(fā)表于 11-30 10:17 ?1169次閱讀
    如何實(shí)現(xiàn)<b class='flag-5'>ILA</b> Cross Trigger

    在keil調(diào)試延時(shí),除了debug還有別的辦法嗎?

    在keil調(diào)試延時(shí),除了debug,還有別的辦法嗎,還有0.0000001s等于一微妙嗎?
    發(fā)表于 11-03 07:02