91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

【ALINX 教程】FPGA Multiboot 功能實現——基于 ALINX Artix US+ AXAU25 開發(fā)板

FPGA技術專欄 ? 來源:FPGA技術專欄 ? 作者:FPGA技術專欄 ? 2026-01-05 15:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

教程目的

本教程介紹如何在ALINX Artix US+ AXAU25 FPGA開發(fā)板上,通過Multiboot實現多個 bitstream 的存儲與動態(tài)切換,并在配置失敗時自動回退至安全鏡像(Golden Image)。

適用對象

已掌握 FPGA 基礎開發(fā)(會寫Verilog、會生成bitstream)

熟悉 Vivado 工程流程

對 FPGA 配置機制尚不深入,希望進入系統(tǒng)級設計階段的學習者

Multiboot 功能概述

在基礎實驗中,FPGA 通常通過 JTAG 下載 bitstream,這種方式掉電后配置就丟失,亦無法實現遠程升級。Multiboot 通過將多個配置鏡像存儲在外部 Flash 中,使 FPGA 能夠在上電或運行過程中,從不同地址加載不同的 bitstream,并在異常情況下自動回退,保證系統(tǒng)可恢復。

Golden Image:固定存放在 Flash 的 0 地址,功能最小、穩(wěn)定可靠,負責系統(tǒng)初始化與升級控制。

Multiboot Image:存放在 Flash 的其他地址,承載具體業(yè)務邏輯,可被升級或替換。

下圖展示了 FPGA Multiboot 機制的整體配置與啟動流程:FPGA 上電后默認從 Flash 0 地址加載 Golden Image,在滿足觸發(fā)條件后,通過 MultiBoot 機制嘗試從 Upper Address 加載 MultiBoot Image。當配置成功時運行 MultiBoot Image;若配置失敗,則觸發(fā) Fallback 機制,自動回退并重新加載 Golden Image,以保證系統(tǒng)仍可正常運行。


wKgZO2lbahSAVg0dAACC-up9_mM795.png(Multiboot 運行流程示意圖)

Multiboot 實現方式

wKgZPGlbai-AZjyZAAB-H9_SpZ8232.pngwKgZO2lbajWASX1ZAACeFdqikm4291.png

AMD FPGA 支持兩種 Multiboot 實現方式,一種是在生成 bitstream 時嵌入 IPROG,另一種是通過用戶邏輯控制 ICAP 接口觸發(fā)重配置,本教程采用ICAP+IPROG的動態(tài)方式,可在 FPGA 運行過程中靈活控制重配置行為,更符合實際工程需求。


Multiboot 功能實現

使用硬件

開發(fā)板:ALINX AXAU25

FPGA:AMD Artix UltraScale+(XCAU25P)

啟動方式:SPI Flash(x4 模式)

該平臺原生支持 MultiBoot 與 Fallback。


wKgZO2lLVX6Adu4eAAduQ1Q9weE145.png

(ALINX基于Artix UltraScale+ FPGA開發(fā)板AXAU25)


工程實現

Golden Image 設計

//===========================================================================
// Module name: led_test.v
//===========================================================================
`timescale 1ns / 1ps

module multiboot_top
(             
input  sys_clk_p,      // Difference system clock 200Mhz input on board
input  sys_clk_n,  
output reg  led            // LED,use for control the LED signal on board

 );
             
//define the time counter
reg [31:0]   timer;      
wire [31:0]   WBSTAR;      


//===========================================================================
//Differentia system clock to single end clock
//===========================================================================
wire        rst_n;
wire        sys_clk_buf;
wire        sys_clk;
wire        switch;
wire        switch_d0;
wire        switch_d1;
 IBUFGDS u_ibufg_sys_clk   //????????????????
     (
      .I  (sys_clk_p),
      .IB (sys_clk_n),
      .O  (sys_clk_buf  )
      ); 

  clk_wiz_0 syspll
   (
    // Clock out ports
    .clk_out1(sys_clk),     // output clk_out1
    // Status and control signals
    .locked(rst_n),       // output locked
   // Clock in ports
    .clk_in1(sys_clk_buf));               
    
    

vio_0 uu (
  .clk(sys_clk),                // input wire clk
  .probe_out0(switch),  // output wire [0 : 0] probe_out0
  .probe_out1(WBSTAR)  // output wire [31 : 0] probe_out1
);
//===========================================================================

//===========================================================================
  always @(posedge sys_clk)
    begin
      if (~rst_n)
          timer <= 32'd0;                     // when the reset signal valid,time counter clearing
      else if (timer == 32'd99_999_999)    //1 seconds count(200M-1=199999999) ?????200Mhz??????5ns??????0-199_999_999,??2*10^8??????
          timer <= 32'd0;                       //count done,clearing the time counter
      else
                    timer <= timer + 1'b1;            //timer counter = timer counter + 1????????????????
    end

//===========================================================================
// LED control
//===========================================================================
  always @(posedge sys_clk)
    begin
      if (~rst_n)
          led <= 0;                  //when the reset signal active
      else if (timer == 32'd99_999_999)   //time counter count to 1 sec,LED4 lighten
          led <= ~led;
    end

(* MARK_DEBUG="true" *)reg  ce ;
(* MARK_DEBUG="true" *)reg  write ;
(* MARK_DEBUG="true" *)reg [31:0]  icap_in ;
(* MARK_DEBUG="true" *)wire [31:0]  icap_in_wire ;

   ICAPE3 #(
      .DEVICE_ID(32'h04A64093),     // Specifies the pre-programmed Device ID value to be used for simulation
                                    // purposes.
      .ICAP_AUTO_SWITCH("DISABLE"), // Enable switch ICAP using sync word.
      .SIM_CFG_FILE_NAME("NONE")    // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation
                                    // model.
   )
   ICAPE3_inst (
      .AVAIL(),     // 1-bit output: Availability status of ICAP.
      .O(O),             // 32-bit output: Configuration data output bus.
      .PRDONE(),   // 1-bit output: Indicates completion of Partial Reconfiguration.
      .PRERROR(), // 1-bit output: Indicates error during Partial Reconfiguration.
      .CLK(sys_clk),         // 1-bit input: Clock input.
      .CSIB(ce),       // 1-bit input: Active-Low ICAP enable.
      .I(icap_in_wire),             // 32-bit input: Configuration data input bus.
      .RDWRB(write)      // 1-bit input: Read/Write Select input.
   );

localparam        [31:0]        DUMMY_WORD                = 32'hFFFFFFFF;
localparam        [31:0]        SYNC_WORD            = 32'hAA995566;
localparam        [31:0]        TYPE1_NOOP                = 32'h20000000;
localparam        [31:0]        TYPE1_WBSTAR        = 32'h30020001;
localparam        [31:0]        TYPE1_CMD                  = 32'h30008001;
localparam        [31:0]        IPROG_CMD                  = 32'h0000000F;

// localparam  [31:0]  WBSTAR        = 32'h04000000;

(* MARK_DEBUG="true" *)reg [3:0]  state ;


assign icap_in_wire = {icap_in[3*8+0],icap_in[3*8+1],icap_in[3*8+2],icap_in[3*8+3],icap_in[3*8+4],icap_in[3*8+5],icap_in[3*8+6],icap_in[3*8+7],
                      icap_in[2*8+0],icap_in[2*8+1],icap_in[2*8+2],icap_in[2*8+3],icap_in[2*8+4],icap_in[2*8+5],icap_in[2*8+6],icap_in[2*8+7],
                      icap_in[1*8+0],icap_in[1*8+1],icap_in[1*8+2],icap_in[1*8+3],icap_in[1*8+4],icap_in[1*8+5],icap_in[1*8+6],icap_in[1*8+7],
                      icap_in[0*8+0],icap_in[0*8+1],icap_in[0*8+2],icap_in[0*8+3],icap_in[0*8+4],icap_in[0*8+5],icap_in[0*8+6],icap_in[0*8+7]};


always @(posedge sys_clk ) begin
  if (~rst_n)  begin
    state <= 0 ;
    ce <= 0 ;
    write <= 0 ;
    icap_in <= DUMMY_WORD ;
  end
  else begin
    case (state)
      0: begin
        if (switch) begin
          state <= 1 ;
          icap_in <= DUMMY_WORD ;   //Dummy word
          write <= 0 ;
          ce <= 0 ;
        end
      end
      1: begin
        state <= 2 ;
        icap_in <= SYNC_WORD ;   //sync word
      end
      2: begin
        state <= 3 ;
        icap_in <= TYPE1_NOOP ;   //Type 1 NOOP
      end
      3: begin
        state <= 4 ;
        icap_in <= TYPE1_WBSTAR ;   //Type 1 Write 1 words to WBSTAR
      end
      4: begin
        state <= 5 ;
        icap_in <= WBSTAR ;   //Warm boot start address (Load the desired address)
      end
      5: begin
        state <= 6 ;
        icap_in <= TYPE1_CMD ;   //Type 1 Write 1 words to CMD
      end
      6: begin
        state <= 7 ;
        icap_in <= IPROG_CMD ;   //IPROG command
      end
      7: begin
        state <= 8 ;
        icap_in <= TYPE1_NOOP ;   //Type 1 NOOP
      end
      8: begin
        state <= 8 ;
        write <= 1 ;
        ce <= 1 ;
        icap_in <= 0 ;
      end
      default: begin
        state <= 0 ;
        ce <= 1 ;
        write <= 1 ;
        icap_in <= DUMMY_WORD ;
      end
    endcase
  end
end

    
endmodule

XDC 約束
############## clock define##################
create_clock -period 5.000 [get_ports sys_clk_p]
set_property PACKAGE_PIN T24 [get_ports sys_clk_p]
set_property PACKAGE_PIN U24 [get_ports sys_clk_n]
set_property IOSTANDARD DIFF_SSTL18_I [get_ports sys_clk_n]



##############LED define##################
set_property PACKAGE_PIN W21 [get_ports led]
set_property IOSTANDARD LVCMOS18 [get_ports led]


set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 85.0 [current_design]
set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE YES [current_design]
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]

set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]

Multiboot Image 設計

`timescale 1ns / 1ps 
module multiboot(
//Differential system clock
    input sys_clk_p,
    input sys_clk_n,
    input rst_n,
(* MARK_DEBUG="true" *)    output reg [1:0] led
    );
(* MARK_DEBUG="true" *)reg[31:0] timer_cnt;
wire sys_clk ;

IBUFDS IBUFDS_inst (
      .O(sys_clk),   // 1-bit output: Buffer output
      .I(sys_clk_p),   // 1-bit input: Diff_p buffer input (connect directly to top-level port)
      .IB(sys_clk_n)  // 1-bit input: Diff_n buffer input (connect directly to top-level port)
   );

always@(posedge sys_clk)
begin
    if (!rst_n)
    begin
      led <= 2'b0 ;
    end
    else if(timer_cnt <= 32'd100_000_000)
    begin
        led <= 2'b10;
    end
    else begin
         led <= 2'b01;
    end
end

always@(posedge sys_clk)begin
    if(!rst_n)begin
        timer_cnt <= 32'b0;
    end
    else if(timer_cnt >= 32'd199_999_999)   //1 second counter, 200M-1=199_999_999
    begin
        timer_cnt <= 32'd0;
    end
    else begin
        timer_cnt <= timer_cnt + 1;
    end
end


endmodule
xdc約束
set_property PACKAGE_PIN T24 [get_ports sys_clk_p]
set_property PACKAGE_PIN N26 [get_ports rst_n]
set_property PACKAGE_PIN W21 [get_ports led]
set_property IOSTANDARD LVCMOS18 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports rst_n]
set_property IOSTANDARD DIFF_SSTL18_I [get_ports sys_clk_p]

set_property PACKAGE_PIN AC16 [get_ports {led[0]}]
set_property PACKAGE_PIN W21 [get_ports {led[1]}]

create_clock -period 5.000 -name sys_clk_p -waveform {0.000 2.500} [get_ports sys_clk_p]

set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]

設備的 ID 是固定按照提供資料查詢相關操作設備 ID


wKgZO2lbauaATchbAAA_pBPgJzo249.png


下方列表是通過 ICAP 接口進行 IPROG 中需要執(zhí)行的命令


wKgZO2lbauqAZAbaAABv2bqzve0714.png


通過 Vivado 將需要固化的兩個 bit 文件合成一個燒寫文件,燒寫完成斷電重新上電即可。


wKgZPGlbau2Aff-9AACKkiDEJI0642.png


實驗結果


wKgZO2lbavaAAd_RAAAecm9O6Qw451.png


默認加載 Golden Image,LED 1閃爍

通過 VIO 設置

switch=1,WBSTAR=0x0080_0000(我們在 Flash 中存放的第二個 Multiboot Image 的初始地址),等待一段時間,LED 1、LED 2 交替閃爍,MultiBoot Image 切換成功。


參考文檔


UltraScale Architecture Configuration User Guide (UG570)

Vivado Design Suite 用戶指南: 編程和調試 (UG908)


歡迎您聯系我們,一起交流技術。

審核編輯 黃宇

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

    關注

    1660

    文章

    22406

    瀏覽量

    636108
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    ALINX選型】AMD Kintex UltraScale+ 系列 FPGA 開發(fā)板速選

    在中高端 FPGA 應用中,AMD Kintex UltraScale+ 系列通常用于對吞吐能力、接口規(guī)模和功耗控制都有高要求的系統(tǒng)。其中, XCKU15P ?是一個被廣泛采用的型號,它在資源規(guī)模
    的頭像 發(fā)表于 01-16 09:47 ?168次閱讀
    【<b class='flag-5'>ALINX</b>選型】AMD Kintex UltraScale+ 系列 <b class='flag-5'>FPGA</b> <b class='flag-5'>開發(fā)板</b>速選

    FPGA 專業(yè)級開發(fā)平臺性價比之選,ALINX Artix US+ PCle AXAU25

    。 ? ALINX AXAU25 的存在,就是為了解決這個痛點。 (ALINX AMD Artix US+
    的頭像 發(fā)表于 12-24 10:54 ?520次閱讀
    <b class='flag-5'>FPGA</b> 專業(yè)級<b class='flag-5'>開發(fā)</b>平臺性價比之選,<b class='flag-5'>ALINX</b> <b class='flag-5'>Artix</b> <b class='flag-5'>US+</b> PCle <b class='flag-5'>AXAU25</b>

    ALINX教程分享_Zynq UltraScale+ MPSoC PYNQ3.1.2移植

    本教程在 Ubuntu22.04.1 虛擬機中安裝了 Xilinx 2024.1 的開發(fā)環(huán)境,基于該環(huán)境從源碼編譯 PYNQ 3.1.2 工程,生成能夠在 ALINX AXU15EGB 開發(fā)板上運行的 PYNQ 系統(tǒng)鏡像。
    的頭像 發(fā)表于 11-30 16:06 ?5982次閱讀
    <b class='flag-5'>ALINX</b>教程分享_Zynq UltraScale+ MPSoC PYNQ3.1.2移植

    ALINX全球區(qū)域服務網絡介紹

    ALINX 作為全球頂級的 FPGA 板卡及解決方案提供商,既是 AMD 在中國唯一最高級別 Premier 合作伙伴;也是國內 FPGA 芯片龍頭企業(yè)紫光同創(chuàng)的官方合作伙伴。
    的頭像 發(fā)表于 11-13 09:18 ?955次閱讀

    fpga開發(fā)板 璞致Artix-7系列之PA-Starlite Artix7 A735T 75T 100T 200T開發(fā)板用戶手冊-學習

    Artix-7系列開發(fā)板是一款基于Xilinx XC7A35T/75T/100T/200T芯片的低成本FPGA開發(fā)平臺。該系列開發(fā)板具有功耗
    的頭像 發(fā)表于 10-14 14:59 ?2069次閱讀
    <b class='flag-5'>fpga</b><b class='flag-5'>開發(fā)板</b> 璞致<b class='flag-5'>Artix</b>-7系列之PA-Starlite <b class='flag-5'>Artix</b>7 A735T 75T 100T 200T<b class='flag-5'>開發(fā)板</b>用戶手冊-學習<b class='flag-5'>板</b>

    SCI 期刊驗證!蘇黎世大學使用 ALINX FPGA 開發(fā)板實現分子動力學模擬新方案

    AX7201開發(fā)板? 構建? 高性能分子動力學(MD)專用計算機? 的開創(chuàng)性研究。 ? 研究證明, 低成本 FPGA 集群 能夠有效應對計算化學領域長期存在的計算挑戰(zhàn),為科研人員提供了一種高性價比、高性能、高靈活性的分子動力學模擬新方案,讓普通研究機構也能負
    的頭像 發(fā)表于 09-22 10:43 ?639次閱讀
    SCI 期刊驗證!蘇黎世大學使用 <b class='flag-5'>ALINX</b> <b class='flag-5'>FPGA</b> <b class='flag-5'>開發(fā)板實現</b>分子動力學模擬新方案

    2025 ALINX入門競賽類FPGA開發(fā)板選型指南

    FPGA 開發(fā)板的核心芯片主要分為兩大類:純 FPGA 芯片和 SoC(System on Chip)芯片。
    的頭像 發(fā)表于 09-17 16:56 ?1837次閱讀
    2025 <b class='flag-5'>ALINX</b>入門競賽類<b class='flag-5'>FPGA</b><b class='flag-5'>開發(fā)板</b>選型指南

    ALINX 助力希臘 SpaceDot AcubeSAT 衛(wèi)星項目,2026 將入太空

    衛(wèi)星 時,采用了 SatNOGS 通信開發(fā)板,內集成了 ?ALINX AC7Z020 FPGA SoM 。 ? (ALINX 基于 AM
    的頭像 發(fā)表于 09-16 11:56 ?550次閱讀
    <b class='flag-5'>ALINX</b> 助力希臘 SpaceDot AcubeSAT 衛(wèi)星項目,2026 將入太空

    從應用場景看國產化FPGA潛力,紫光同創(chuàng)研討會武漢·北京站回顧

    八月,紫光同創(chuàng) FPGA 技術研討會先后在武漢、北京舉行。 ? 作為紫光同創(chuàng)官方合作伙伴,ALINX 攜紫光同創(chuàng) FPGA 開發(fā)板及行業(yè)解決方案亮相,與來自通信、工業(yè)控制、醫(yī)療、圖像視
    的頭像 發(fā)表于 08-15 10:09 ?1010次閱讀
    從應用場景看國產化<b class='flag-5'>FPGA</b>潛力,紫光同創(chuàng)研討會武漢·北京站回顧

    ALINX AMD RFSoC 射頻開發(fā)板選型全攻略!

    ALINX 作為 FPGA 開發(fā)板領域領先供應商,RFSoC 系列開發(fā)板精準定位于 雷達通信、5G 基站、衛(wèi)星通信、測試測量 等對性能要求嚴苛的高端射頻應用。 ? RFSoC 技術 是
    的頭像 發(fā)表于 08-05 10:49 ?1279次閱讀
    <b class='flag-5'>ALINX</b> AMD RFSoC 射頻<b class='flag-5'>開發(fā)板</b>選型全攻略!

    轉讓一塊ALINXFPGA開發(fā)板

    轉讓一塊ALINX的AXKU040開發(fā)板,成色非常新,買來基本沒用過
    發(fā)表于 08-02 16:53

    ALINX AMD RFSoC射頻開發(fā)板選型指南

    ALINX 作為 FPGA 開發(fā)板領域領先供應商,RFSoC 系列開發(fā)板精準定位于雷達通信、5G 基站、衛(wèi)星通信、測試測量等對性能要求嚴苛的高端射頻應用。
    的頭像 發(fā)表于 07-11 10:03 ?1626次閱讀
    <b class='flag-5'>ALINX</b> AMD RFSoC射頻<b class='flag-5'>開發(fā)板</b>選型指南

    高性能緊湊型 RFSoC FPGA 開發(fā)平臺 AXW22,重塑射頻開發(fā)體驗

    如果您正在煩惱如何在 有限的物理空間和預算內,依然實現卓越的射頻帶寬與處理能力 ,ALINX 基于 AMD RFSoC FPGA 開發(fā)板 AXW22 正是為您準備的。 ? (AMD Z
    的頭像 發(fā)表于 06-24 10:24 ?940次閱讀
    高性能緊湊型 RFSoC <b class='flag-5'>FPGA</b> <b class='flag-5'>開發(fā)</b>平臺 AXW22,重塑射頻<b class='flag-5'>開發(fā)</b>體驗

    使用ALINX VD100開發(fā)板實現圖像處理

    這是一塊基于 AMD Versal Edge AI 平臺的開發(fā)板功能特別強大,可以用來做圖像處理、人工智能等各種高階應用。
    的頭像 發(fā)表于 05-12 09:23 ?1143次閱讀
    使用<b class='flag-5'>ALINX</b> VD100<b class='flag-5'>開發(fā)板實現</b>圖像處理

    ALINX 邀您相聚 2025 慕尼黑上海電子展

    和超低延時的特性加速滲透各行各業(yè)。作為深耕 FPGA 領域十余年的技術方案領軍企業(yè),芯驛電子 ALINX 將再度亮相展會,帶來更多新品和 DEMO 展示!誠邀您蒞臨展位,一同探索 FPGA 在 醫(yī)療影像、軟件無線電、自動駕駛、A
    的頭像 發(fā)表于 04-01 09:21 ?1031次閱讀
    <b class='flag-5'>ALINX</b> 邀您相聚 2025 慕尼黑上海電子展