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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

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

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

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

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

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

MultiBoot的跳轉實際上是非常靈活的,我們這里就嘗試提供一種思路。

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

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

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

工作原理如下:

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

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

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

整個解決方案的重點就在于設定Timer#1的值。

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

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

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

比如我們設到3000 8001,多3個字的余量。

Timer的格式如下:

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

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

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

如果使用了SPI x4, x8或BPI并行配置,同樣對應計算一下:

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

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

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

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




審核編輯:劉清

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

    關注

    1624

    文章

    21568

    瀏覽量

    600611
  • 寄存器
    +關注

    關注

    31

    文章

    5273

    瀏覽量

    119661
  • 編程器
    +關注

    關注

    9

    文章

    393

    瀏覽量

    42209

原文標題:一個思路: 縮短MultiBoot流程中的回跳 (Fallback) 時間

文章出處:【微信號:Hack電子,微信公眾號:Hack電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TPA3112D1為什么不起作用了?

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

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

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

    請問14本的怎么導入13版的元件庫,轉換不起作用。

    請問14本的怎么導入13版的元件庫,轉換不起作用
    發(fā)表于 04-26 19:50

    static好像不起作用

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

    示例固件不起作用

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

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

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

    能量收集不起作用

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

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

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

    EPI訪問外設地址不起作用

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

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

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

    while+事件結構點擊開始測試后,停止測試不起作用了,幫忙看看怎么解決啊

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

    模型不起作用時的解決辦法

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

    時控開關為什么不起作用,其中的原因是什么

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

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

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

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

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