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

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

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

為什么回跳機(jī)制不起作用了呢?FPGA怎么掛死了呢

Hack電子 ? 來源:Ivy Guo ? 作者:Ivy Guo ? 2022-11-23 09:05 ? 次閱讀

MultiBoot是FPGA遠(yuǎn)程更新配置文件時(shí)一種非常普遍的應(yīng)用 ——為了確保安全,我們通常需要安排一個(gè)Golden Image,升級(jí)失敗后FPGA能回跳(Fallback)到此配置,從而使FPGA始終處于可被檢測的工作狀態(tài)。

很多客戶有同樣的問題:我在升級(jí)Update Image一半時(shí)突然掉電了,為什么回跳機(jī)制不起作用了呢?FPGA怎么掛死了呢?其實(shí)這個(gè)現(xiàn)象是‘符合預(yù)期’的,回跳機(jī)制不能應(yīng)付這種異常。

如果配置文件寫到一半突然中斷,嵌在配置數(shù)據(jù)流里面的指令序列同樣也沒有了,并且有可能中斷在任意位置。FPGA的控制邏輯此時(shí)就失去了工作方向,不知道下一步該做什么。https://docs.xilinx.com/v/u/en-US/xapp1247-multiboot-spi

Xapp1247, Appendix A提供了一個(gè)很好的解決方案。利用兩個(gè)timer或者稱之為barrier的小image,嵌在Golden和Update之間或附在Update之后,通過合理的給兩個(gè)timer賦值,可以解決Update Image刷新時(shí)同步字丟失或者半程掉電的情況。

但是同時(shí)又有客戶提出了問題:我的應(yīng)用對(duì)回跳時(shí)間要求很高,Xapp1247,Appendix A的方案對(duì)于半程掉電的場景,只有搜索完整個(gè)Update Image區(qū)域,看到Timer#2的設(shè)置才能完成回跳。有沒有辦法縮短這段時(shí)間呢?

MultiBoot的跳轉(zhuǎn)實(shí)際上是非常靈活的,我們這里就嘗試提供一種思路。

1. 去掉Timer#2,只保留Timer#1作為Golden和Update Image之間的barrier Image。

2. Update Image采取從后往前倒著燒錄的辦法。(在實(shí)際應(yīng)用中,燒寫flash都是用CPU/MCU/FPGA控制或者第三方編程器實(shí)現(xiàn)的,所以這一點(diǎn)也很容易實(shí)現(xiàn))。

3. 精確設(shè)定Timer#1的值,使其看到Update中的TIMER指令及賦值但不需更多。

工作原理如下:

Timer寄存器的值只有在Power-Cycle或者PROG_B過程中才能被清除,或者被新的Timer值覆蓋,或者在整個(gè)配置數(shù)據(jù)加載完畢后自動(dòng)失效。

我們通過精確設(shè)定Timer#1的值,使FPGA控制邏輯有足夠時(shí)間看到Update Image中新的Timer值。TIMER指令位于Image的頭部。因?yàn)閁pdate Image是倒著寫入的,能看到新的Timer值,說明Update Image基本已經(jīng)更新好了。由于新的timer值是足夠控制邏輯加載完整的配置數(shù)據(jù)的,Timer寄存器被新值更新后,Timer#1相當(dāng)于失效了。FPGA有充足時(shí)間可以順利讀入完整配置數(shù)據(jù),開啟正常工作。

如果由于斷電等原因,Update更新到一半就停止了,此時(shí)會(huì)缺失Update的同步字,TIMER指令等等位于頭部的信息。Timer#1在一個(gè)有限的時(shí)間內(nèi)搜索Update Timer但是沒有看到,timeout之后就會(huì)直接觸發(fā)回跳。因此不用等待搜索整個(gè)Update存儲(chǔ)空間完畢,依靠尾部的Timer#2才能觸發(fā)回跳了。

整個(gè)解決方案的重點(diǎn)就在于設(shè)定Timer#1的值。

這個(gè)其實(shí)很簡單,根據(jù)你自己生成的Timer#1和Update的MCS文件 (方法參考Xapp1247),計(jì)算一下Timer#1的指令到Update的TIMER之間的字節(jié)數(shù)即可。

以KU040的bit為例,觀察Update Image頭部的命令/數(shù)據(jù)序列,可以看到有3002 2001,這就是設(shè)置Timer寄存器的命令TIMER。我們想Timer#1的時(shí)間足夠看到Update中的3002 2001命令以及賦值,其他不需要了,隨意添加幾個(gè)cycle或者幾個(gè)字的裕量即可。

c239d6a4-6aca-11ed-8abf-dac502259ad0.png

比如我們設(shè)到3000 8001,多3個(gè)字的余量。

Timer的格式如下:

c25f8318-6aca-11ed-8abf-dac502259ad0.png

Barrier/Timer#1里從TIMER及賦值開始,后面有兩個(gè)NOOP 字,加上后續(xù)Update里從FFFFFFFF開始直到3000 8001有28個(gè)字,一共30個(gè)字,那么就是30*32=960 bit。SPIx1串行配置中,一個(gè)CCLK讀取一個(gè)bit,所以Timer#1的值設(shè)置為h‘3C0.

注意根據(jù)自己實(shí)際的Image來計(jì)算。假設(shè)說你的Timer#1和Update之間還有一些其他的Padding,那么這些字節(jié)也需要計(jì)算進(jìn)去。

如果使用了SPI x4, x8或BPI并行配置,同樣對(duì)應(yīng)計(jì)算一下:

c27a9086-6aca-11ed-8abf-dac502259ad0.png

如上圖,30 03 E0 01是把bus width從默認(rèn)的x1切到x4的命令。如果在讀入Timer#1之前中執(zhí)行了該命令(比如Golden里面),那么Timer#1的值需要按照一個(gè)CCLK cycle,讀取4個(gè)bit來計(jì)算。和Timer命令類似,在FPGA控制邏輯讀取數(shù)據(jù)的過程中,如果沒有碰到新的30 03 E0 01設(shè)定新的數(shù)據(jù)寬度,那么將一直按照之前設(shè)定的bus width來讀入數(shù)據(jù)或者指令。

假設(shè)Timer#1以及Update都是以x4讀取的,那么Timer#1需設(shè)為h’F0.

綜上,通過合理設(shè)定barrier#1中的Timer#1數(shù)值,我們可以極大地縮短升級(jí)掉電這種MultiBoot失效場景的回跳時(shí)間。




審核編輯:劉清

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

    關(guān)注

    1620

    文章

    21510

    瀏覽量

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

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119205
  • 編程器
    +關(guān)注

    關(guān)注

    9

    文章

    392

    瀏覽量

    42111

原文標(biāo)題:一個(gè)思路: 縮短MultiBoot流程中的回跳 (Fallback) 時(shí)間

文章出處:【微信號(hào):Hack電子,微信公眾號(hào):Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TPA3112D1為什么不起作用了?

    您好,我有一塊TPA3112D1模塊之前用著一直是好的,但是突然就不起作用了,我想知道友們有辦法測試一下我的芯片是好是壞,是否工作正常??謝謝
    發(fā)表于 09-06 07:45

    四軸的pid不起作用了,這是什么問題?

    用瑞薩的板子在線仿真PWM輸出正常,pid也起作用;斷開仿真,給MCU板單獨(dú)供電,PWM輸出也正常,但是pid不起作用了 ,這是什么問題?求大蝦幫忙看一下?。。?/div>
    發(fā)表于 08-07 11:23

    請(qǐng)問14本的怎么導(dǎo)入13版的元件庫,轉(zhuǎn)換不起作用。

    請(qǐng)問14本的怎么導(dǎo)入13版的元件庫,轉(zhuǎn)換不起作用。
    發(fā)表于 04-26 19:50

    static好像不起作用

    , j = 1;這個(gè) i 的值有點(diǎn)不理解,,這兒的static難道不起作用么麻煩哪位哥解釋下i 的這個(gè)static,不是全局變量的話,,是怎么處理的?這兒的靜態(tài)局部變量,,是怎么靜態(tài)的???
    發(fā)表于 03-13 03:26

    示例固件不起作用?

    示例固件不起作用?以上來自于谷歌翻譯以下為原文 Sample firmware not working?
    發(fā)表于 04-08 16:38

    我的EMIF讀寫設(shè)置不起作用是怎么回事?

    在使用6748作工程時(shí),發(fā)現(xiàn)EMIF異步接口設(shè)備是,設(shè)置的建立、選通、保持時(shí)間不起作用,發(fā)現(xiàn)w_strobe無論設(shè)置為多少,從示波器上看到WE信號(hào)低電平保持600ns,設(shè)置不起作用,用TL6748-EVM-A3的開發(fā)板跑EMI
    發(fā)表于 06-04 07:50

    能量收集不起作用

    你好, 我從核L476RG,MEMS和NFC02A1開始。我嘗試將MEMS數(shù)據(jù)寫入nfc標(biāo)簽及其工作。我的問題是當(dāng)我嘗試使用能量收集模式時(shí),它不起作用,我不知道為什么。我在nfc多維數(shù)據(jù)集中使用這個(gè)
    發(fā)表于 08-01 10:58

    CAD圖層匹配格式刷不起作用的原因及解決教程

    情況該如何處理?  CAD圖層匹配格式刷不起作用的解決方法:  在命令行輸入“特性設(shè)置”快捷鍵“ma”,然后提示選擇圖中的“源對(duì)象”(即要保留的特征對(duì)象),接著在命令行輸入“S”,此時(shí)彈出“特性設(shè)置
    發(fā)表于 08-01 22:40

    EPI訪問外設(shè)地址不起作用

    EPI通過8位總線模式和FPGA交換數(shù)據(jù),低地址位A0~A1不起作用,實(shí)際輸出的地址為想要的地址左移2位,請(qǐng)問是什么原因造成的?
    發(fā)表于 04-10 10:24

    在JTAG模型中使用icap回讀FPGA狀態(tài)寄存器不起作用的原因?

    你好我在JTAG模型中使用icap回讀FPGA(xc7a200t)狀態(tài)寄存器,但它不起作用。有人告訴我它有什么問題嗎?icap CLK有什么要求嗎?謝謝
    發(fā)表于 07-28 08:14

    while+事件結(jié)構(gòu)點(diǎn)擊開始測試后,停止測試不起作用了,幫忙看看怎么解決啊

    while+事件結(jié)構(gòu)點(diǎn)擊開始測試后,停止測試不起作用了
    發(fā)表于 03-14 15:24

    模型不起作用時(shí)的解決辦法

    你的團(tuán)隊(duì)幾個(gè)月來一直在收集數(shù)據(jù)、構(gòu)建預(yù)測模型、創(chuàng)建用戶界面,并與一些早期的用戶一起部署新的機(jī)器學(xué)習(xí)產(chǎn)品。但你現(xiàn)在聽到的并不是大家一起慶祝項(xiàng)目勝利的聲音,而是聽到產(chǎn)品經(jīng)理對(duì)那些早期用戶的抱怨,這些早期用戶對(duì)模型精度不滿意并開始認(rèn)為“模型不起作用”。所以你現(xiàn)在應(yīng)該做什么?
    的頭像 發(fā)表于 05-04 09:54 ?2804次閱讀

    時(shí)控開關(guān)為什么不起作用,其中的原因是什么

    時(shí)控開關(guān)不起作用:簡單解釋就是時(shí)控開關(guān)設(shè)置好了定時(shí)時(shí)間,但是到時(shí)間不工作,是怎么回事? 目前時(shí)控開關(guān)分為兩種:按鍵式時(shí)控開關(guān)和藍(lán)牙時(shí)控開關(guān),咱們分開來講解: 按鍵式時(shí)控開關(guān)不工作原因:1.校時(shí)(時(shí)間
    發(fā)表于 01-07 15:06 ?2w次閱讀

    解決西門子觸摸屏變量的數(shù)值更改事件有時(shí)不起作用

    為什么西門子觸摸屏變量的數(shù)值更改事件,有時(shí)不起作用。是因?yàn)椴杉J經(jīng)]有選擇,在菜單欄里右鍵屬性,勾上采集模式,然后選擇循環(huán)連續(xù)。
    的頭像 發(fā)表于 11-08 17:22 ?5726次閱讀

    KT142C語音芯片配置文件總是不起作用?配置文件的問題集中歸納

    KT142C語音芯片配置文件總是不起作用?配置文件的問題集中歸納
    的頭像 發(fā)表于 10-20 15:04 ?445次閱讀
    KT142C語音芯片配置文件總是<b class='flag-5'>不起作用</b>?配置文件的問題集中歸納