在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

淺談FPGA配置狀態(tài)字寄存器Status Register的調(diào)試

電子設(shè)計 ? 來源:xilinx_inc ? 作者:xilinx_inc ? 2020-12-01 12:20 ? 次閱讀

Xilinx的FPGA有多種配置接口,如SPI,BPI,SeletMAP,Serial,JTAG等;如果從時鐘發(fā)送者的角度分,還可以分為主動Master(即由FPGA自己發(fā)送配置時鐘信號CCLK)和被動Slave(即由外部器件提供配置所需要的時鐘信號);另外還可由板上穩(wěn)定晶振提供時鐘信號,經(jīng)由FPGA的EMCCLK接口,再從CCLK端口送出。

如此多的配置形式,一旦發(fā)生配置失敗怎么辦?大家都知道先要查看一下板子上FPGA的DONE管腳。但絕大多數(shù)情況下,DONE管腳此時會是低電平,只能證明配置確實失敗了。但是失敗的原因到底是什么呢?調(diào)試到底應(yīng)該如何入手呢?

答案是:

第一步要做的,永遠(yuǎn)都是拉出FPGA的狀態(tài)字寄存器Status Register看,它能直接告訴你或者極大地輔助判斷失敗的原因!不管FPGA的型號是哪個,不管用的下載工具是Vivado HW Manager還是ISE的iMPACT,不管軟件的版本如何,永遠(yuǎn)都是這個。

Xilinx FPGA的狀態(tài)字,在賽靈思所有器件系列中都基本保持一致的定義(個別位由于系列特性不同可能有細(xì)微區(qū)別,這些不是最重要的,不在我們今天討論的范圍內(nèi))。

以UltraScale/UltraScale+系列為例,我們看看UG570上對狀態(tài)字的完整定義:



表格里面已經(jīng)很清楚地解釋了每一個bit位代表的意義。下面學(xué)習(xí)如何讀出狀態(tài)字并從其具體值中判斷失敗原因。

我們先來讀一下一片未作配置的FPGA的狀態(tài)字看看。首先,用下載線連接好板子和電腦,板子上好電。打開Vivado硬件管理器,掃描板子上的JTAG鏈 (Open target -Auto Connect), 板子上的JTAG鏈中的器件會顯示在Hardware窗口中:

鼠標(biāo)選中掃描出的FPGA器件,在下方的Hardware Device Properties窗口中,選擇Properties項,會出現(xiàn)該FPGA的一系列屬性。找到其中的REGISTER分類,展開,第二個寄存器CONFIG_STATUS, 即是我們要討論的狀態(tài)字了。

注意FPGA此時的狀態(tài)是Not Programmed, 那么對應(yīng)的狀態(tài)字展開如下:

這里可以看到的是一個配置前的狀態(tài)字的標(biāo)準(zhǔn)狀態(tài):

只有BIT02 PLL_LOCK, BIT03 DCI_MATCH, BIT11 INIT_B_INTERNAL, BIT12 INIT_B_PIN的值必須是1;

BIT08-10 MODE PINS,BIT21 SECURITY_STATUS, BIT25-26 BUS_WIDTH,BIT28 PUDC_B根據(jù)FPGA和板子具體的設(shè)定,可以為1或者0,其他都必須是0。

如果一上電,狀態(tài)字就表現(xiàn)出了非典型值,那么大概率硬件上就有錯誤或者不合理的地方了。比較典型的幾個例子:

1. 狀態(tài)字全0

REGISTER.CONFIG_STATUS 00000000000000000000000000000000

這種情況,說明FPGA被強(qiáng)行控制在全局復(fù)位狀態(tài)了。一般是硬件上PROGRAM_B管腳,或者INIT_B管腳被錯誤的拉到了地上,兩個管腳上的有效電平為0.

非常偶爾的情況下,當(dāng)DONE管腳被錯誤拉為0電平時也能出現(xiàn)此種狀態(tài)字。

2. 狀態(tài)字全1,或者一串1后面跟著一個到數(shù)個0(一般不超過4個)

REGISTER.CONFIG_STATUS 11111111111111111111111111111111

REGISTER.CONFIG_STATUS 11111111111111111111111111111110

REGISTER.CONFIG_STATUS 11111111111111111111111111111100

這種一般是板子上設(shè)計的JTAG鏈里面不只一個FPGA器件,比如是Xilinx的FPGA和一個第三方的CPLD串聯(lián)等。

由于Vivado里面并沒有第三方器件的BSDL文件,那么在掃描整個JTAG鏈時,它無法識別鏈中各器件的型號以及數(shù)目,所以往往從TDO管腳中移位出一串1來。如果Xilinx的FPGA位于鏈的末端(接近TDO的位置),那么有時可以識別出正確的FPGA型號。但是這種情況仍然無法正確進(jìn)行將要進(jìn)行的配置操作。另外很多例子中則是FPGA的型號也被識別錯誤了。

解決方案如下:

https://www.xilinx.com/support/answers/61312.html

3. Unknown Device/Many Unknow Devices

此時,不要說狀態(tài)字無法檢測了,整個JTAG已經(jīng)無法正確掃描,Vivado里面無法識別出任何器件。這一般是板子上的JTAG接口的TDO或者鏈中最后一個器件的輸出管腳TDO,被短接到了地平面上。

除了上述典型情況,當(dāng)然還有很多一上電就無法繼續(xù)配置的情況,原因不勝枚舉。這種情況下請詳細(xì)描述你的JTAG鏈構(gòu)成,讀出當(dāng)前的狀體字(如何還能夠讀的話),在論壇上發(fā)貼問問Xilinx的專家吧:

https://forums.xilinx.com/t5/%E8%B5%9B%E7%81%B5%E6%80%9D%E4%B8%AD%E6%96%...

如果狀態(tài)字正常,可以接下來進(jìn)行配置操作。或者是在你的配置失敗后,保留失敗現(xiàn)場再連接好板子和電腦繼續(xù)讀出狀態(tài)字。

如果你的板子已經(jīng)重新上下電了,那么當(dāng)時失敗的場景也就消失了。這也就是我們一再強(qiáng)調(diào)失敗后要保留現(xiàn)場,板子上要保留JTAG接口的原因。當(dāng)然在設(shè)計成熟后,或者實驗室調(diào)試工作結(jié)束后,可以去掉JTAG接口以期得到產(chǎn)品更高的安全性。

配置完成后,得到的狀態(tài)字如下:

REGISTER.CONFIG_STATUS 00010010100100000111110111111100

注意其中的:

BIT02 PLL_LOCK, BIT03 DCI_MATCH, 絕大多數(shù)情況已經(jīng)變?yōu)?;

BIT04 EOS,BIT05 GTS, BIT06 GWE, BIT07 GHITH,以及BIT11 INIT_BINTERNAL, BIT12 INIT_B_PIN,BIT13 DONE_INTERNAL, BIT14 DONE_PIN必然是1;

BIT18-20 STARTUP_STATTE應(yīng)該是100;

BIT25-26 BUS_WIDTH應(yīng)該是檢測出了正確的配置位寬,或者在serial的情況下,保持默認(rèn)的01值;

其他BIT01 DECRYPTOR, BIT09-10 MODE_PINS, BIT21-23 SECURITY_STATUS, BIT28 PUDC_B, BIT30CFGBVS_PIN, 根據(jù)你的使用,有可能是其他的0或者1組合。

RESERVED的不用管。

如果不是這種結(jié)果,那么就要看看出什么問題了。

在一些相對簡單,典型的情況下,只看某一位就可以直接得到想要的答案。

1) BIT00, CRC error為1

在不是狀態(tài)字全1的情況下CRC error位為1,說明配置出現(xiàn)了CRC錯誤。這是一種很常見,但比較難修復(fù)的錯誤,因為CRC錯誤的原因一般是因為板子上的信號質(zhì)量(SI, Signal Integrity)不行,傳輸數(shù)據(jù)的過程中0/1電平判決錯誤,導(dǎo)致配置數(shù)據(jù)寫入失敗。

如何確定真的是SI問題呢?看失敗概率。CRC錯誤一般是隨機(jī)出錯的,并不一定100%失敗(除非板子的信號差得沒法用了,這個一般不會)。那么配置文件中01翻轉(zhuǎn)的次數(shù)越少,出錯的概率越小。你可以生成一個只點亮板上一盞LED的小測試設(shè)計,此時bit文件中有效數(shù)據(jù)(1)非常少,試著下載該bit看看,是不是配置失敗率降低了?如果是,那么基本可以確定了。

一旦出現(xiàn)這種情況,可以嘗試的辦法有:

1. 降低CCLK頻率

2. 在CCLK的輸入端(以及輸出端),加入合適的端接電路

3. 換用更高質(zhì)量的配置時鐘(比如使用質(zhì)量較好的晶振通過EMCCLK提供時鐘)

4. 改善數(shù)據(jù)鏈路的信號質(zhì)量,如果對待CCLK,同樣在數(shù)據(jù)通路上加入合適的端接匹配電路。

總而言之,要做的就是改善板上的信號質(zhì)量。如果板子SI實在太差,那只有改板,或者嘗試下其他配置方式了。

2) 其他位都正常,BIT13 DONE_INTERNAL也為1了,但是BIT14 DONE_PIN為0,F(xiàn)PGA不工作!

這種情況,其實配置數(shù)據(jù)已經(jīng)完整、正確的送入FPGA并且被接收了,但是FPGA的DONE管腳連接不正確,導(dǎo)致DONE沒有或者沒有在規(guī)定時間內(nèi)上拉到要求的電平,從而導(dǎo)致FPGA最終的啟動失敗。

Xilinx的FPGA,一般要求DONE管腳上外加一個上拉電阻(330 ohm, 4.7K ohm等,不同系列要求不同,請參照對應(yīng)的Configuration User Guide)。如果這個上拉電阻沒有加,或者加的阻值過大或過小,那么DONE管腳無法在規(guī)定的時間里面達(dá)到高電平,此時內(nèi)部配置控制器會認(rèn)為配置失敗了,典型情況就是DONE internal為高(內(nèi)部數(shù)據(jù)接收完畢,內(nèi)部釋放了),但是DONE外部管腳為低。

此時需要做的,就是檢查PCB上DONE部分的設(shè)計,看看是不是有和其他管腳相連的情況,被其他管腳強(qiáng)行拉低了。或者是設(shè)計的DONE點亮LED燈電路不合理, LED通電后把DONE管腳的電平降為低電平。

如果你不清楚如何設(shè)計這部分電路,從 www.xilinx.com 上,找到一款和你使用的FPGA型號相同或者同系列的開發(fā)板,參考它的原理圖設(shè)計。

3) BIT29 BAD PACKET error

Bit29為1,大概率也是CRC錯誤。這不過這個CRC錯誤比較特殊,出錯位跑到了配置文件里面的命令上,導(dǎo)致配置命令變成了一個無效無意義的指令。此時狀態(tài)字會報出bad packet error。

和CRC錯誤的隨機(jī)性一樣,多次重復(fù)加載過程,大概率出錯的數(shù)據(jù)位下次落到其他的數(shù)據(jù)上。由于配置數(shù)據(jù)的數(shù)量遠(yuǎn)遠(yuǎn)大于配置命令,那么很有可能下次出錯看到的是BIT00 CRC ERROR為1.

如果每次都是BAD PACKET error,更要懷疑使用的配置文件已經(jīng)損壞。比如進(jìn)行了非法改寫。Xilinx的任何配置文件,都是禁止手工修改的。

4) BIT15 IDCODE Error為1.

配置文件下載時,都要先經(jīng)過FPGA的IDCODE校驗。如果這一步通不過,那么后續(xù)的配置不會進(jìn)行。這種情況下,看看配置文件的bit/bin/mcs是不是給錯了。或者FPGA器件有silicon revision的變化。舉個例子,有的系列ES芯片和Production芯片的配置文件是不能兼容的。這種錯誤情況,如果是用JTAG通過Vivado下載,那么log里面也會有相應(yīng)的提示。

5) BIT13 DONE_INTERNAL+ BIT14 DONE_PIN均為0

這也是一種較常見的錯誤。此時要重點檢查一下BIT07 GHIGH位,看看它是不是1。如果是,那么大概率是,你的CCLK時鐘給的不夠多。FPGA在接收完所有的配置數(shù)據(jù)后,還需要一定數(shù)量的CCLK時鐘去完成內(nèi)部的初始化。如果發(fā)送端,此時常常是一個CPU用Slave模式加載,認(rèn)為有效數(shù)據(jù)結(jié)束,強(qiáng)行停止了進(jìn)一步的時鐘發(fā)送,那么有時可以觀測到此種狀況。此時去檢查BIT18-20 STARTUP_STATE,根據(jù)具體的情況,也有一定概率看到不是預(yù)期的100.

標(biāo)準(zhǔn)的做法是,在默認(rèn)設(shè)置下持續(xù)發(fā)送CCLK時鐘,直至檢測到DONE管腳已經(jīng)拉高,然后再多發(fā)送至少64個時鐘信號。如果修改了配置默認(rèn)設(shè)置,比如選擇了wait for PLL to lock,那么需要更多的時鐘信號。

6) 狀態(tài)字看起來和沒有發(fā)出配置數(shù)據(jù),即和剛上電的表現(xiàn)一樣。

這種情況,說明所有發(fā)出的配置數(shù)據(jù)都被FPGA忽略掉了,因為它不認(rèn)為你發(fā)送過來的是有效配置數(shù)據(jù)。

FPGA的配置文件里面,有一個數(shù)據(jù)同步頭,一般是AA 99 55 66。如果由于某種原因,這個同步頭FPGA都沒有認(rèn)出來,那么后續(xù)的數(shù)據(jù)會被它全部忽略。

一般的原因是:

1. 在非serial配置模式中,沒有正確的做Byte Swap;

2. 配置文件生成時,BPI數(shù)據(jù)線寬設(shè)置不對(x8, x16, x32選錯了)

3. SPI的x1, x2, x4選擇錯誤;

4. 嚴(yán)重的板級SI問題導(dǎo)致的CRC錯誤;

以上列舉了常見的一些配置錯誤和其狀態(tài)字的相應(yīng)表現(xiàn)。需要注意的是,狀態(tài)字寄存器有32位,其組合可以說是相當(dāng)多的。除了上述情況,配置失敗定位還可能需要結(jié)合狀態(tài)字,加載過程中l(wèi)og文件,硬件設(shè)計原理圖和工具版本信息,以及通過其他一些配置接口在不同條件下去對比測試才能逐步定位。

編輯:hfy


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

    關(guān)注

    1644

    文章

    21989

    瀏覽量

    615220
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5426

    瀏覽量

    123679
  • Xilinx
    +關(guān)注

    關(guān)注

    73

    文章

    2184

    瀏覽量

    124569
  • 時鐘信號
    +關(guān)注

    關(guān)注

    4

    文章

    466

    瀏覽量

    29118
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    FPGA調(diào)試方式之VIO/ILA的使用

    在Vivado中,VIO(Virtual Input/Output)是一種用于調(diào)試和測試FPGA設(shè)計的IP核,它允許設(shè)計者通過JTAG接口實時讀取和寫入FPGA內(nèi)部的寄存器,從而檢查設(shè)
    的頭像 發(fā)表于 06-09 09:32 ?655次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>調(diào)試</b>方式之VIO/ILA的使用

    在APP FPGA 中通過IIC接口對DLPC910寄存器進(jìn)行配置遇到的兩個問題求解

    在APP FPGA 中通過IIC接口對DLPC910寄存器進(jìn)行配置,有兩個問題想要請教: 1、DLPC910被封裝成了FPGA,通過IIC改變它的
    發(fā)表于 02-25 06:47

    配置ADS1256的STATUS狀態(tài)寄存器的值為0xF7,然后去讀這個狀態(tài)寄存器的值,結(jié)果為0x30,為什么?

    ), the buffer must be turned off during self gain calibration.*/ } 配置ADS1256的STATUS狀態(tài)寄存器的值為
    發(fā)表于 01-09 07:19

    ADS1115采樣返回Conversion Register寄存器值為0x1FFF,是什么原因?qū)е碌模?/a>

    你好,最近在調(diào)試ADS1115.。輸入電壓在1.5V以時,Conversion Register寄存器值經(jīng)計算與輸入電壓值相符。當(dāng)輸入電壓小于1.5V時,Conversion Registe
    發(fā)表于 12-06 08:00

    ADS1298使用雙電源供電,當(dāng)N端有導(dǎo)聯(lián)脫落時,寄存器LOFF_STATN讀到的值始終為0x00,為什么嘛?

    ADS1298使用雙電源供電,當(dāng)N端有導(dǎo)聯(lián)脫落時,寄存器LOFF_STATN讀到的值始終為0x00,換為單電源供電讀取到的狀態(tài)正常,配置 相關(guān)通道的LOFF_FLIP寄存器讓導(dǎo)聯(lián)脫落
    發(fā)表于 11-21 07:47

    調(diào)試ads1192、ads1198等系列的芯片中,發(fā)現(xiàn)寄存器上報的導(dǎo)聯(lián)狀態(tài)一直處于不穩(wěn)定狀態(tài),為什么?

    我們在調(diào)試ads1192、ads1198等系列的芯片中,發(fā)現(xiàn)寄存器上報的導(dǎo)聯(lián)狀態(tài)一直處于不穩(wěn)定狀態(tài)。導(dǎo)聯(lián)連上時,寄存器可以上報穩(wěn)定的連上
    發(fā)表于 11-20 06:25

    TLV320AIC3105輸出寄存器寫入上電,但是電源狀態(tài)寄存器Page 0/Register 94顯示電源未上電,為什么?

    TLV320AIC3105輸出寄存器寫入上電,但是電源狀態(tài)寄存器Page 0/Register 94顯示電源未上電。這是什么原因?
    發(fā)表于 11-01 07:40

    請問寄存器register31-33 :Secondary Audio Interface Control,這是配置哪里的?

    請問寄存器register31-33 :Secondary Audio Interface Control,這是配置哪里的?在數(shù)據(jù)手冊里找不到關(guān)于Sceondary的描述,Secondary 是指跟ADC3101后級的code
    發(fā)表于 10-22 07:28

    接口的控制與狀態(tài)寄存器什么作用

    接口的控制與狀態(tài)寄存器(Control and Status Registers,簡稱CSR)是計算機(jī)系統(tǒng)中用于控制和監(jiān)控硬件設(shè)備操作的寄存器。它們是硬件設(shè)備與其驅(qū)動程序之間的橋梁,允
    的頭像 發(fā)表于 10-17 10:42 ?1447次閱讀

    寄存器的類型和作用

    在計算機(jī)科學(xué)中,寄存器Register)是一種高速存儲單元,它位于CPU內(nèi)部,與CPU的運算單元和邏輯控制單元緊密相連。寄存器的主要作用是暫時存儲指令、操作數(shù)和地址等臨時數(shù)據(jù),以便CPU快速訪問和處理。由于
    的頭像 發(fā)表于 09-05 14:11 ?4548次閱讀

    Jacinto7 DDRSS寄存器配置工具

    電子發(fā)燒友網(wǎng)站提供《Jacinto7 DDRSS寄存器配置工具.pdf》資料免費下載
    發(fā)表于 08-27 10:11 ?0次下載
    Jacinto7 DDRSS<b class='flag-5'>寄存器</b><b class='flag-5'>配置</b>工具

    寄存器是什么意思?寄存器是如何構(gòu)成的?

    在計算機(jī)科學(xué)中,寄存器Register)是一個高速存儲單元,它位于中央處理(CPU)內(nèi)部,用于存儲計算機(jī)程序執(zhí)行過程中所需要的數(shù)據(jù)、指令地址或狀態(tài)信息。
    的頭像 發(fā)表于 08-02 18:23 ?7093次閱讀
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何構(gòu)成的?

    寄存器分為基本寄存器和什么兩種

    寄存器是計算機(jī)中用于存儲數(shù)據(jù)的高速存儲單元,它們是CPU內(nèi)部的重要組成部分。寄存器可以分為基本寄存器和擴(kuò)展寄存器兩種類型。 一、基本寄存器
    的頭像 發(fā)表于 07-12 10:31 ?2141次閱讀

    移位寄存器中Dsr有什么用

    移位寄存器(Shift Register)是一種數(shù)字電路,用于存儲和傳輸數(shù)字信號。在數(shù)字電子學(xué)中,它廣泛應(yīng)用于數(shù)據(jù)存儲、信號處理和時序控制等領(lǐng)域。DSR(Data Shift Register
    的頭像 發(fā)表于 07-12 10:15 ?1295次閱讀

    第5章_Modbus通訊協(xié)議

    作為初學(xué)者,你閱讀Modbus協(xié)議時會發(fā)現(xiàn)它的概念別扭、重復(fù)、不易區(qū)分,比如線圈狀態(tài)(Coil Status)、離散輸入狀態(tài)(Discrete Input Status)、保持
    的頭像 發(fā)表于 06-29 14:35 ?6362次閱讀
    第5章_Modbus通訊協(xié)議
    主站蜘蛛池模板: 国产精品欧美一区二区三区 | 国产视频黄色 | 精品国产中文一级毛片在线看 | 啪啪国产视频 | 午夜剧| 很黄很污的视频网站 | 国产美女一区 | 黄视频国产 | 美女免费毛片 | 狠狠干激情 | 一级特黄色片 | 久久精品综合 | 欧美成人aaaa免费高清 | 久久久福利 | 美女操出水 | jlzzjlzz亚洲大全 | 国产日韩欧美一区二区 | 六月色播 | 操碰人人 | 国产成人精品日本亚洲专 | 午夜在线视频网站 | 福利毛片 | 完全免费在线视频 | 操人视频网站 | 国产成人啪精品午夜在线观看 | 天天艹天天射 | 国产成年网站v片在线观看 国产成人91青青草原精品 | 亚洲一区二区三区四区五区六区 | 国产色视频一区 | 欧美系列在线观看 | 久久久鲁| 窝窝午夜在线观看免费观看 | 韩国三级无遮挡床戏视频 | 欧美黑人5o厘米全进去 | 伊人久久大香线蕉综合爱婷婷 | 亚洲成人精品 | 亚洲成a人一区二区三区 | 第四色男人天堂 | 免费一级特黄 欧美大片 | 狠狠干狠狠操视频 | 神马影院午夜dy888 |