色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

深入探究Xilinx Multiboot實例

OpenFPGA ? 來源:OpenFPGA ? 作者:碎碎思 ? 2021-09-26 09:37 ? 次閱讀

原理

關于Multiboot的原理參考《Xilinx 7系列FPGA Multiboot介紹-遠程更新》,基本原理都在此文寫的很清楚,本文主要從實例出發演示Multiboot。

補充

FPGA SPI閃存配置接口

7系列FPGA和具有x1數據寬度的SPI閃存之間的基本連接。讀取和地址指令通過主輸出-從輸入(MOSI)引腳從FPGA發送到SPI閃存。數據通過主輸入從輸出(MISO)引腳從SPI閃存返回。SCK是時鐘引腳,SS是低電平從選擇引腳。

參考:UG470

Vivado工具流程(Multiboot大致流程)

為Multiboot程序準備bit流

本節概述了為多引導應用程序創建和更新比特流所需的比特流屬性。對于未指定的位流選項,請使用默認設置。

表1概述了用于生成和更新具有每個屬性描述的位流的基本多引導位流屬性。有關這些屬性的詳細說明,請參閱Vivado Design Suite用戶指南:編程和調試(UG908)。

7a9449d8-1111-11ec-8fb8-12bb97331649.png

具體含義如下:

7ade4cea-1111-11ec-8fb8-12bb97331649.png

啟用在配置嘗試失敗時加載默認位流
使用下一個配置映像的啟動地址設置熱啟動啟動啟動地址(WBSTAR[28:0]位)寄存器
指定啟用FPGA位流文件壓縮
在Vivado中打開黃金設計實現(Golden)的約束文件(.xdc)。將以下內容復制粘貼到約束文件中,然后保存對.xdc文件所做的更改:

set_propertyBITSTREAM.CONFIG.CONFIGFALLBACKENABLE[current_design]
set_propertyBITSTREAM.CONFIG.NEXT_CONFIG_ADDR0x0400000[current_design]
set_propertyBITSTREAM.GENERAL.COMPRESSTRUE[current_design]
set_propertyBITSTREAM.CONFIG.SPI_BUSWIDTH1[current_design]

上述不理解沒關系,后續實例會有使用教程
接下來,可以在更新設計(將要更新的文件)中打開約束文件(.xdc),并將以下比特流屬性添加到約束文件中,然后保存:

set_propertyBITSTREAM.CONFIG.CONFIGFALLBACKENABLE[current_design]
set_propertyBITSTREAM.GENERAL.COMPRESSTRUE[current_design]
set_propertyBITSTREAM.CONFIG.SPI_BUSWIDTH1[current_design]

注:默認情況下,SPI_BUS為x1,如果未使用默認x1模式,請確保設置此屬性。

生成SPI閃存編程文件

具體查看《【Vivado那些事】Vivado兩種生成、固化燒錄文件》。

使用write_cfgmem Tcl命令創建閃存編程文件(.mcs)。

write_cfgmem獲取FPGA位流(.bit)并生成可用于編程SPI閃存的閃存文件(.mcs)。

例如,生成包含兩個FPGA位流(.bit文件)的閃存編程文件(.mcs)文件,如下所示:

write_cfgmem-formatmcs-interfaceSPIX1-size16-loadbit"up0/golden.bitup
0x0400000/update.bit"/filename.mcs

注:地址值0x0400000是參考設計中使用的示例。應使用黃金圖像(更新圖像的起始地址)中設置的Addr A1值(見表1)。

請參閱Vivado Design Suite用戶指南:編程和調試(UG908或使用Vivado中的-help命令,以了解每個write_cfgmem命令選項的詳細說明:

write_cfgmem -help

硬件驗證

硬件驗證其實很簡單,我們分別建立兩個工程,兩個工程都是流水燈程序,分別從左到右和從右到左流水燈,這樣可以很清楚知道FPGA運行了哪個程序。接下來破壞golden程序,按照上述制作MCS文件后運行,看下運行哪個程序。

建立工程

詳細的Verilog文件如下:

golden工程

moduleTop_MultiBoot_Module_A(
inputCLK,
outputreg[3:0]LED_Out
);


////////////////////////////////////////////

wireRESET;

assignRESET=1'b1;

////////////////////////////////////////////
//
//首先定義一個時間計數寄存器counter,每當達到預定的100ms時,
//計數寄存器就清零,否則的話寄存器就加1??//然后計算計數器計數的最大值。時鐘頻率為12MHZ??//也就是周期為1/12M ??3ns,要計數的最大值為T100MS= 100ms/83ns-1 = 120_4818??//

reg[31:0]counter;
parameterT100MS=25'd920_4818;

always@(posedgeCLK)

if(counter==T100MS)

counter<=25'd0;

else

counter<=counter+1'b1;
////////////////////////////////////////////
always@(posedgeCLKornegedgeRESET)
if(!RESET)
LED_Out<=4'b0001;//初值,最低位led[0]燈亮
elseif(counter==T100MS)
begin
if(LED_Out==4'b0000)//當溢出最高位時
LED_Out<=4'b0001;//回到復位時的狀態
else
LED_Out<=LED_Out<<1;?????//循環左移一位?
?end

endmodule?//?Run_LED

update工程

moduleTop_MultiBoot_Module_B(
inputCLK,
outputreg[3:0]LED_Out
);


////////////////////////////////////////////


wireRESET;

assignRESET=1'b1;


////////////////////////////////////////////
//
//首先定義一個時間計數寄存器counter,每當達到預定的100ms時,
//計數寄存器就清零,否則的話寄存器就加1??//然后計算計數器計數的最大值。時鐘頻率為12MHZ??//也就是周期為1/12M ??3ns,要計數的最大值為T100MS= 100ms/83ns-1 = 120_4818??//

reg[31:0]counter;
parameterT100MS=25'd920_4818;

always@(posedgeCLK)

if(counter==T100MS)

counter<=25'd0;

else

counter<=counter+1'b1;
////////////////////////////////////////////
always@(posedgeCLKornegedgeRESET)
if(!RESET)
LED_Out<=4'b0001;//初值,最低位led[0]燈亮
elseif(counter==T100MS)
begin
if(LED_Out==4'b0000)//當溢出最高位時
LED_Out<=4'b0001;//回到復位時的狀態
else
LED_Out<=LED_Out<<1;?????//循環左移一位?
?end

endmodule?//?Run_LED

兩個工程基本一樣,流水的操作是在約束里實現的。

golden工程約束

#CLOCKS
#SYSCLK
set_propertyIOSTANDARDLVCMOS18[get_portsCLK]
set_propertyPACKAGE_PIND27[get_portsCLK]

#GPIOLEDs
#set_propertyPACKAGE_PINAB8[get_portsLED_REVXX[7]]
#set_propertyIOSTANDARDLVCMOS15[get_portsLED_REVXX[7]]
#set_propertyPACKAGE_PINAA8[get_portsLED_REVXX[6]]
#set_propertyIOSTANDARDLVCMOS15[get_portsLED_REVXX[6]]
#set_propertyPACKAGE_PINAC9[get_portsLED_REVXX[5]]
#set_propertyIOSTANDARDLVCMOS15[get_portsLED_REVXX[5]]
#set_propertyPACKAGE_PINAB9[get_portsLED_REVXX[4]]
#set_propertyIOSTANDARDLVCMOS15[get_portsLED_REVXX[4]]

#set_propertyPACKAGE_PINAE26[get_portsLED_Out[3]]
#set_propertyIOSTANDARDLVCMOS33[get_portsLED_Out[3]]
set_propertyPACKAGE_PINT21[get_portsLED_Out[2]]
set_propertyIOSTANDARDLVCMOS33[get_portsLED_Out[2]]
set_propertyPACKAGE_PINT20[get_portsLED_Out[1]]
set_propertyIOSTANDARDLVCMOS33[get_portsLED_Out[1]]
set_propertyPACKAGE_PINR24[get_portsLED_Out[0]]
set_propertyIOSTANDARDLVCMOS33[get_portsLED_Out[0]]

#CFGBVSandSPImodeproperties

set_propertyCFGBVSVCCO[current_design]
set_propertyCONFIG_VOLTAGE2.5[current_design]
set_propertyCONFIG_MODESPIX1[current_design]

#Compressthebitstreamtofiton128MQSPIoftheK7
set_propertyBITSTREAM.GENERAL.COMPRESSTRUE[current_design]

#BITSTREAMPROPERTIESREQUIREDFORGOLDENIMAGE:
set_propertyBITSTREAM.CONFIG.SPI_BUSWIDTH1[current_design]
set_propertyBITSTREAM.CONFIG.CONFIGFALLBACKENABLE[current_design]
set_propertyBITSTREAM.CONFIG.NEXT_CONFIG_ADDR0x0400000[current_design]

#(IftheSPIflashisequaltoorgreaterthan256Mb,uncommenttheconstraintbelow):
#set_propertyBITSTREAM.CONFIG.SPI_32BIT_ADDRYES[current_design]

這里解釋一下,前面物理約束不重要,因為“窮”,我的板子只有3顆LED,所以只進行了三個物理約束。

CFGBVS and SPI mode properties及Compress the bitstream to fit on 128M QSPI of the K7、BITSTREAM PROPERTIES REQUIRED FOR GOLDEN IMAGE是重點約束的對象,具體解釋看下表一。

set_propertyBITSTREAM.CONFIG.SPI_BUSWIDTH1[current_design]
set_propertyBITSTREAM.CONFIG.CONFIGFALLBACKENABLE[current_design]
set_propertyBITSTREAM.CONFIG.NEXT_CONFIG_ADDR0x0400000[current_design]

這三個約束是和UPDATE工程有關,一個是SPI的BUSWIDTH,一個是否開啟CONFIGFALLBACK,最后一個是地址,這是非常重要的。

接下來是update工程的約束文件

#CLOCKS
#SYSCLK
set_propertyIOSTANDARDLVCMOS18[get_portsCLK]
set_propertyPACKAGE_PIND27[get_portsCLK]

#GPIOLEDs
#set_propertyPACKAGE_PINAB8[get_portsLED_REVXX[7]]
#set_propertyIOSTANDARDLVCMOS15[get_portsLED_REVXX[7]]
#set_propertyPACKAGE_PINAA8[get_portsLED_REVXX[6]]
#set_propertyIOSTANDARDLVCMOS15[get_portsLED_REVXX[6]]
#set_propertyPACKAGE_PINAC9[get_portsLED_REVXX[5]]
#set_propertyIOSTANDARDLVCMOS15[get_portsLED_REVXX[5]]
#set_propertyPACKAGE_PINAB9[get_portsLED_REVXX[4]]
#set_propertyIOSTANDARDLVCMOS15[get_portsLED_REVXX[4]]

#set_propertyPACKAGE_PINAE26[get_portsLED_Out[3]]
#set_propertyIOSTANDARDLVCMOS33[get_portsLED_Out[3]]
set_propertyPACKAGE_PINR24[get_portsLED_Out[2]]
set_propertyIOSTANDARDLVCMOS33[get_portsLED_Out[2]]
set_propertyPACKAGE_PINT20[get_portsLED_Out[1]]
set_propertyIOSTANDARDLVCMOS33[get_portsLED_Out[1]]
set_propertyPACKAGE_PINT21[get_portsLED_Out[0]]
set_propertyIOSTANDARDLVCMOS33[get_portsLED_Out[0]]

#CFGBVSandSPImodeproperties

set_propertyCFGBVSVCCO[current_design]
set_propertyCONFIG_VOLTAGE2.5[current_design]
set_propertyCONFIG_MODESPIX1[current_design]

#Compressthebitstream
set_propertyBITSTREAM.GENERAL.COMPRESSTRUE[current_design]

#BITSTREAMPROPERTIESREQUIREDFORGOLDENIMAGE:
set_propertyBITSTREAM.CONFIG.SPI_BUSWIDTH1[current_design]
set_propertyBITSTREAM.CONFIG.CONFIGFALLBACKENABLE[current_design]

#(IftheSPIflashisequaltoorgreaterthan256Mb,uncommenttheconstraintbelow):
#set_propertyBITSTREAM.CONFIG.SPI_32BIT_ADDRYES[current_design]

物理約束同樣不重要,重要的還是下面的和multiboot相關的約束,具體解釋和上面一樣。

生成Bit流并運行

上述兩個工程分別生成Bit流并運行,查看兩個流水燈是否是兩個不同方向的。

合成MCS文件并運行

將兩個BIT流文件合成一個MCS文件,命令如下:

write_cfgmem-formatmcs-interfaceSPIX1-size16-loadbit"up0/golden.bitup
0x0400000/update.bit"/filename.mcs

兩個bit流文件位置;

filename: mcs文件名稱。

將上訴mcs文件下載到FPGA開發板上,可以看見update工程文件運行。

破壞Golden文件

回退到Golden可以通過不同的方式觸發。主要有以下幾種方式:

  1. ID Code錯誤
  2. CRC錯誤
  3. Watchdog超時
  4. BPI地址越界

有關更多信息,請參閱UG470中的重新配置和多引導章節。

本應用說明演示了由CRC錯誤觸發的回退。可以手動損壞更新位流以導致CRC錯誤。在RESET CRC命令和CRC命令之間有許多可以翻轉位的位置。下圖顯示了一個示例。

  • 1.使用十六進制編輯器(HxD Hex Editor)中打開更新(update)比特流(.bit),在比特流中間翻轉一些數據字節,例如從00到11,如圖所示。
7b097884-1111-11ec-8fb8-12bb97331649.png

為了保證破壞徹底,可以多更改幾處。

  1. 保存損壞的更新位流,并使用此損壞的位流生成新的閃存編程文件(.mcs)。
write_cfgmem-formatmcs-interfaceSPIX1-size16-loadbit"up0/golden.bitup
0x0400000/update.bit"/filename.mcs
  • 3.重新下載文件

觀察是Golden還是update文件運行,同理可以將上訴命令修改,將golden和update更換一下mcs文件位置,對比測試,上訴兩個情況本人都有親自測試過,都是golden文件運行,證明multiboot已經生效。

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

    關注

    1630

    文章

    21796

    瀏覽量

    605738
  • led
    led
    +關注

    關注

    242

    文章

    23347

    瀏覽量

    662913
  • 閃存編程
    +關注

    關注

    0

    文章

    11

    瀏覽量

    6684

原文標題:Xilinx Multiboot實例演示

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

收藏 人收藏

    評論

    相關推薦

    云服務器 Flexus X 實例:部署 Gitea,擁有自己的 Git 倉庫,管理本地代碼

    、零售、金融、游戲等眾多領域的通用工作負載需求。本文旨在詳細闡述如何高效利用“云服務器 Flexus X 實例”,包括如何在其中從零開始,通過安裝相關依賴、安裝 Docker、安裝 Gitea 等步驟,實現自己的 Git 倉庫,管理本地代碼。精彩內容,不容錯過,快來一探究
    的頭像 發表于 01-07 16:59 ?122次閱讀
    云服務器 Flexus X <b class='flag-5'>實例</b>:部署 Gitea,擁有自己的 Git 倉庫,管理本地代碼

    深入解析華為云 X 實例保障云上業務安全的關鍵策略

    。華為云作為全球領先的云服務提供商之一,在安全性方面為用戶提供了全面的保障。其華為云 X 實例憑借強大的性能和安全性,成為眾多企業業務部署的重要選擇。 本文將詳細解析華為云 X 實例的多層次安全策略,深入探討其如何通
    的頭像 發表于 01-03 09:25 ?202次閱讀
    <b class='flag-5'>深入</b>解析華為云 X <b class='flag-5'>實例</b>保障云上業務安全的關鍵策略

    一文搞懂軟核的固化、啟動和MultiBoot實現

    這也是《FPGA實現串口升級及MultiBoot》系列中的一篇文章,作為一個專題單獨出來說明。 本篇文章分為三個主題:固化、啟動和MultiBoot實現。 固化分為SPI和BPI FLASH兩種情況
    的頭像 發表于 12-07 11:23 ?671次閱讀
    一文搞懂軟核的固化、啟動和<b class='flag-5'>MultiBoot</b>實現

    如何申請xilinx IP核的license

    在使用FPGA的時候,有些IP核是需要申請后才能使用的,本文介紹如何申請xilinx IP核的license。
    的頭像 發表于 10-25 16:48 ?472次閱讀
    如何申請<b class='flag-5'>xilinx</b> IP核的license

    【AG32開發板體驗連載】AG32VF407啟動與探究

    AG32VF407啟動與探究 0. 申請理由 學術背景:山東大學集成電路學院碩士一年級在讀,具有扎實的理論基礎。 相關經驗:參與過RISC-V V擴展優化軟件性能的研究等。 研究目的:為山東大學軟件
    發表于 10-05 17:08

    深入探究石英可編程 DXO/VCXO 振蕩器 SWPQ201 系列(10MHz 至 1500 MHz)

    深入探究石英可編程 DXO/VCXO 振蕩器 SWPQ201 系列(10MHz 至 1500 MHz)
    的頭像 發表于 08-10 10:05 ?524次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>探究</b>石英可編程 DXO/VCXO 振蕩器 SWPQ201 系列(10MHz 至 1500 MHz)

    Python在AI中的應用實例

    Python在人工智能(AI)領域的應用極為廣泛且深入,從基礎的數據處理、模型訓練到高級的應用部署,Python都扮演著至關重要的角色。以下將詳細探討Python在AI中的幾個關鍵應用實例,包括機器學習、深度學習、自然語言處理、計算機視覺以及強化學習,每個部分將結合具體案
    的頭像 發表于 07-19 17:16 ?1328次閱讀

    深入探究 MEMS LVCMOS 振蕩器 SiT1602 系列 52 種標準頻率

    深入探究 MEMS LVCMOS 振蕩器 SiT1602 系列(52 種標準頻率)
    的頭像 發表于 07-19 16:16 ?395次閱讀

    神經網絡結構類型和應用實例

    神經網絡模型,作為深度學習領域的核心組成部分,近年來在圖像識別、自然語言處理、語音識別等多個領域取得了顯著進展。本文旨在深入解讀神經網絡的基本原理、結構類型、訓練過程以及應用實例,為初學者提供一份詳盡的入門指南。
    的頭像 發表于 07-02 11:33 ?536次閱讀

    步進電機的控制原理與應用實例

    步進電機,作為一種特殊的電機類型,在現代工業控制系統中占據著重要的地位。其獨特的控制方式和廣泛的應用領域,使得步進電機成為自動化控制領域中的關鍵組件。本文將從步進電機的控制原理出發,深入探討其工作原理、特點以及在不同領域中的應用實例,以期為讀者提供全面、
    的頭像 發表于 06-25 14:34 ?1102次閱讀

    飛天技術沙龍回顧:業務創新新選擇,倚天Arm架構深入探討

    日前,飛天技術沙龍《業務創新新選擇,倚天Arm架構深入探索》在上海成功舉行。來自阿里云、平頭哥及Arm的專家為現場觀眾深入解讀了Arm架構的核心優勢,并重點分享了基于倚天710的計算實例g8y在大數
    的頭像 發表于 05-21 16:48 ?631次閱讀
    飛天技術沙龍回顧:業務創新新選擇,倚天Arm架構<b class='flag-5'>深入</b>探討

    高效節能的DC電源模塊技術探究

    BOSHIDA ?高效節能的DC電源模塊技術探究 DC/DC 模塊電源是一種開關型的模塊式穩壓電源,以其體積小巧、性能卓異、使用方便的顯著特點,在通信、網絡、工控、鐵路、軍事等領域日益得到廣泛
    的頭像 發表于 03-29 13:32 ?571次閱讀
    高效節能的DC電源模塊技術<b class='flag-5'>探究</b>

    EMC技術:未來趨勢下的應用與發展探究

    EMC技術:未來趨勢下的應用與發展探究?|深圳比創達電子EMC
    的頭像 發表于 03-20 10:24 ?607次閱讀
    EMC技術:未來趨勢下的應用與發展<b class='flag-5'>探究</b>?

    Xilinx fpga芯片系列有哪些

    Xilinx FPGA芯片擁有多個系列和型號,以滿足不同應用領域的需求。以下是一些主要的Xilinx FPGA芯片系列及其特點。
    的頭像 發表于 03-14 16:24 ?3509次閱讀

    AMD Xilinx 7系列FPGA的Multiboot多bit配置

    Multiboot是一種在AMD Xilinx 7系列FPGA上實現雙鏡像(或多鏡像)切換的方案。它允許在FPGA中加載兩個不同的配置鏡像,并在需要時切換。
    的頭像 發表于 02-25 10:54 ?1364次閱讀
    AMD <b class='flag-5'>Xilinx</b> 7系列FPGA的<b class='flag-5'>Multiboot</b>多bit配置
    主站蜘蛛池模板: 国产精品99久久久久久动态图 | 美女不要啊 | 精品一区二区三区高清免费观看 | 国产麻豆精品人妻无码A片 国产麻豆精品久久一二三 国产麻豆精品传媒AV国产在线 | 在线免费视频国产 | 国产色精品久久人妻无码看片 | 亚洲免费综合色视频 | 在线观看国产人视频免费中国 | 年轻的母亲4线在线观看完整 | 果冻传媒mv国产陈若瑶主演 | 健身房被教练啪到腿软H | 黄色三级三级三级免费看 | 老年日本老年daddy | 久久国产精品免费A片蜜芽 久久国产精品萌白酱免费 久久国产精品麻豆AV影视 | 亚洲AV久久无码精品蜜桃 | 亚州中文字幕 | JK白丝校花爽到娇喘视频 | 无套内射CHINESEHD | 2019夜夜| 国产精品一区二区激情 | 91麻豆精品 | 鲁大师影院在线视频在线观看 | 国产午夜精品美女免费大片 | 2020年国产理论 | 99re久久热在线播放快 | 校花爽好大快深点h | 国产精品久久久久久久久齐齐 | 久草在线一免费新视频 | 在线播放国产视频 | 亚洲中文字幕在线第六区 | 荡公乱妇HD中文字幕 | 涩涩免费视频软件 | 麻豆高清区在线 | 毛片在线全部免费观看 | 校园全肉高h湿一女多男 | 女性BBWBBWBBWBBW| 偷拍国产精品在线播放 | 男人J放进女人屁股免费观看 | 日本老妇一级特黄aa大片 | 午夜视频无码国产在线观看 | 欧美xxxxx九色视频免费观看 |