当前位置: 首页 > news >正文

陇西做网站的公司店铺网页设计图片

陇西做网站的公司,店铺网页设计图片,建立网站要钱吗,电商网Xilinx 家的 FPGA 支持多重启动功能#xff08;Multiboot#xff09;#xff0c;即可以从多个 bin 文件中进行选择性加载#xff0c;从而实现对系统的动态更新#xff0c;或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…  Xilinx 家的 FPGA 支持多重启动功能Multiboot即可以从多个 bin 文件中进行选择性加载从而实现对系统的动态更新或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而同时 Xilinx 也提供了 ICAP 原语给用户提供了访问配置功能的权限对于 7 series 的芯片需要使用 ICAPE2 原语从而获得更加灵活的多重启动方式。 本文即介绍 Multiboot 以及这两种启动方式并对两种 Multiboot 进行实现。 文章目录 多重启动MultibootGolden Image Initial System SetupInitial MultiBoot Image System SetupIPROG 说明WBSTAR 寄存器Watchdog 计数器 从 ICAPE2 原语启动 Multiboot 介绍ICAPE2 原语 嵌入 IPROG 命令启动 Multiboot 介绍嵌入 IPROG 的操作流程ICAPE2 启动 Multiboot 代码示例Multiboot_ctrl.v测试 参考文献 多重启动Multiboot 首先对 Multiboot 的流程进行一下介绍 如图所示在实现多重启动时FLASH 中会保存多个 bin 文件其中保存在 0 地址的称为 Golden 镜像而其他的被称为 Multiboot 镜像也称为 Update 镜像这里就以 2 个 Image 为例进行说明。 一般地对于单个 bin 的情况可以直接向 FLASH 烧录 .bin 文件也可以烧录对应生成的 .mcs而如果要烧录多个版本的镜像则可以在生成 .mcs 时在不同地址载入多个不同的 bit 文件然后下载这个 .mcs 文件。 Golden Image Initial System Setup 在上图所示的 Golden Image Initial System Setup 启动模式下上电后 FPGA 会自动加载 Golden 镜像随后尝试加载 Multiboot 镜像以重新配置 FPGA实现代码的更新/功能的更替。 在这种启动方式下 IPROG 命令被嵌入在 Golden Image 里指将 IPROG 命令嵌在比特流文件里或者通过 Golden Image 里编写的 ICAPE2 原语程序启动对 Multiboot Image 的读取Multiboot Image 应当存储在热启动起始地址寄存器 Warm Boot Start Address Register, WBSTAR 指定的地址处应当启动 Watchdog 计时器以在编程失败的情况下执行恢复操作。 在回退fallback发生时嵌入的 IPROG 指令将被忽略因此不会陷入反复触发加载 Multiboot 的死循环。在回退完成后WBSTAR 将被 bitstream 重写。 Initial MultiBoot Image System Setup 也可以在上电后先启动 Multiboot 版本镜像在启动失败的情况下自动回退地址 0 的 Golden 镜像流程如下图所示 在在线更新功能的设计中Initial MultiBoot Image System Setup 模式是更加常用的。 在这种启动方式下对于 Golden Image WBSTAR 应当指向 Multiboot Image同时应当插入一个 IPROG 指令以在上电时触发对 Multiboot 的下载在比特流文件里插入 IPROG 命令需要启动 Configuration Timer如果 Golden Image 有能力修复 FLASH则也可以实现 ICAP 原语以重启启动 Multiboot 的加载对于 SPI 配置模式在回退 Golden 过程中始终采用 SPI x1 的模式。 对于 Multiboot Image 需要启动 Configuration TimerMultiboot Image 也可以实现 ICAP 原语以实现对其他 Multiboot Image 的重加载或对 Golden Image 的受控回退。 IPROG 说明 IPROGInternal PROGRAM命令是 PROGRAM_B 引脚功能的一个子集该命令可以从 ICAP 原语发出也可以直接嵌入到比特流里。当为后者时WBSTAR 和 IPROG 应当位于 Golden bit file 的开头此时在上电后会触发从新地址加载 multiboot Image 的事件如果加载失败则将返回地址 0 重新加载比特流此时会忽略 IPROG因此加载到的程序将是 Golden Image。 WBSTAR 寄存器 WBSTAR 寄存器保存了 IPROG 命令配置的启动地址该寄存器的值可以由嵌入在 bitstream 的 IPROG 配置也可以由 ICAPE2 发出的 IPROG 配置。如果 bitstream 中没有配置 WBSTAR则地址默认为 0因此如果从 Golden Image 触发了多重启动则在加载完 Multiboot Image 后WBSTAR 将被设置为 0。 上电后设备将从地址 0 开始读取 FLASH在加载了 WBSTAR 并发出 IPROG 后将重定向到 WBSTAR 指定地址读取 Imaeg。 Watchdog 计数器 看门狗有两种模式配置监视器模式、用户逻辑监视器模式。在配置监视器模式下Timer Register 通过比特流设置需要在所有 bit File 中启用这个计数器。Watchdog 由 FPGA 内部锁相环产生的 65MHz 时钟驱动这一描述和下表中的描述相悖当计数器回到 0 时将触发回退。该计数器从比特流起始开始计数在启动序列结束时被禁用。 从 ICAPE2 原语启动 Multiboot 介绍 当从 ICAPE2 原语触发 Multiboot 时命令序列为1. 发送同步码2. 设置 WBSTAR3. 发送 IPROG 命令。一个通过 ICAPE2 发送的命令序列如下 ICAPE2 原语 ICAPE2 原语接口如图调用格式如下 // 7 Series // Xilinx HDL Language Template, version 2023.2 ICAPE2 #(.DEVICE_ID (32h3651093), // Specifies the pre-programmed Device ID value to be used for simulation purposes..ICAP_WIDTH (X32), // Specifies the input and output data width..SIM_CFG_FILE_NAME (NONE) // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation model. ) ICAPE2_inst(.O (O), // 32-bit output: Configuration data output bus.CLK (CLK), // 1-bit input: Clock Input.CSIB (CSIB), // 1-bit input: Active-Low ICAP Enable.I (I), // 32-bit input: Configuration data input bus.RDWRB (RDWRB) // 1-bit input: Read/Write Select input );其中 DEVICE_ID 是设备 ID与芯片型号有关譬如对于 K7-325TID 如下 嵌入 IPROG 命令启动 Multiboot 介绍 WBSTAR 和 IPROG 命令可以嵌入到一个位流中如图所示。在 7 系列 FPGA 的 bitstream 中WBSTAR 默认填入空白同时保留了 IPROG 的占位符。我们打开一个 .bin 文件看看到底是如何组织的 可以看到在地址 0x30 开始的四个字节为同步码 AA995566随后是一个 NO OP20000000然后是一些其他的命令在 0x54 开始的 4 个字节为 Write 1 Word to WBSTAR 命令30020001随后四个字节为要写入 WBSTAR 的地址这里默认是 0随后紧跟着 Write 1 Word to CMD 命令30008001随后四字节为写入的命令这里默认是占位符 00000000可以修改为 IPROG 0000000F以实现 IPROG 命令的嵌入。 这里我们只是观察一下 .bin/.bit 文件中 IPROG 是如何嵌入的通过直接修改 .bit/.mcs 实现 Multiboot 理论上也是可行的但实际上我们不会这么做。在实际操作中我们可以通过在 xdc 中增加约束生成需要的 .bit然后再组合成 .mcs下一节就介绍如何通过添加约束实现这一过程。 嵌入 IPROG 的操作流程 在编译 Golden Image 时需要在 xdc 中增加如下约束 set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design] set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x01000000 [current_design] set_property CONFIG_MODE SPIX1 [current_design] set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 1 [current_design] #由于fallback使用SPIx1因此请确定一定有此配置# 如果 FLASH 大小大于等于 256Mb要增加如下约束否则高于24位的地址会被忽略导致无法启动对应的 update 镜像 set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]在编译 Multiboot Image 时需要在 xdc 中使用如下约束 set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design] set_property CONFIG_MODE SPIX1 [current_design] set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 1 [current_design] #由于fallback使用SPIx1因此请确定一定有此配置# 如果 FLASH 大小大于等于 256Mb要增加如下约束否则高于24位的地址会被忽略导致无法启动对应的 update 镜像 set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]上述约束中BITSTREAM.CONFIG.CONFIGFALLBACK 用于启用回退Fallback功能BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 用于设置 WBSTAR 寄存器由于 Fallback 要求 SPIx1因此 BITSTREAM.CONFIG.SPI_BUSWIDTH 要设为 1。 编译完成后我们还是打开 .bit 看一下Golden Image 的如下 可以看到 WBSTAR 和 IPROG 命令已经被嵌入比特流。 将两个 .bit 文件分别载入地址 0 和高位地址生成 .mcs注意 Multiboot Image 所载入的高位地址应当与前面 xdc 配置的 NEXT_CONFIG_ADDR 相同。烧录后可以看到 update Image 被启动。 ICAPE2 启动 Multiboot 代码示例 Multiboot_ctrl.v 对于 SPI 设备WBSTAR 地址有如下描述即 Master SPI 模式下WBSTAR 只会使用低 24 位这 24 位为 FLASH 地址的 31:8 bits在实现时应当注意 代码如下 /* * file : multiboot_ctrl.v* author : 今朝无言* Lab : WHU-EIS-LMSWE* date : 2023-11-30* version : v1.0* description : ICAP 原语实现程控 multiboot多重启动K7需要使用 ICAPE2 原语* Copyright © 2023 WHU-EIS-LMSWE, All Rights Reserved.*/ default_nettype none module multiboot_ctrl( input wire clk, input wire rst_n,input wire multiboot_start, //触发Multiboot, 上升沿有效 input wire [31:0] multiboot_addr, //要启动的Muliboot Image的起始地址output reg busy );//-------------------ICAPE2原语----------------------------- wire ICAPE2_CLK; wire [31:0] ICAPE2_O; reg ICAPE2_CSIB; wire [31:0] ICAPE2_I; reg ICAPE2_RDWRB;assign ICAPE2_CLK clk;ICAPE2 #(.DEVICE_ID (32h3651093), // Specifies the pre-programmed Device ID value to be used for simulation purposes. K7-325T的为32h3651093.ICAP_WIDTH (X32), // Specifies the input and output data width..SIM_CFG_FILE_NAME (NONE) // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation model. ) ICAPE2_inst(.O (ICAPE2_O), // 32-bit output: Configuration data output bus.CLK (ICAPE2_CLK), // 1-bit input: Clock Input.CSIB (ICAPE2_CSIB), // 1-bit input: Active-Low ICAP Enable.I (ICAPE2_I), // 32-bit input: Configuration data input bus.RDWRB (ICAPE2_RDWRB) // 1-bit input: Read/Write Select input 1对应rd0对应wr );wire [31:0] Dummy 32hFFFFFFFF; wire [31:0] Sync_Word 32hAA995566; wire [31:0] NOOP 32h20000000; wire [31:0] WR_WBSTAR 32h30020001;/*When using ICAPE2 to set the WBSTAR address, the 24 most significant address bits should be writtento WBSTAR[23:0]. For SPI 32-bit addressing mode, WBSTAR[23:0] are sent as address bits [31:8]. Thelower 8 bits of the address are undefined and the value could be as high as 0xFF. Any bitstreamat the WBSTAR address should contain 256 dummy bytes before the start of the bitstream.*/ wire [31:0] WBSTAR {3b000, 5h0, multiboot_addr[31:8]};wire [31:0] WR_CMD 32h30008001; wire [31:0] IPROG 32h0000000F;//ICAPE2位翻转 reg [31:0] wrdat; assign ICAPE2_I {wrdat[24], wrdat[25], wrdat[26], wrdat[27], wrdat[28], wrdat[29], wrdat[30], wrdat[31], wrdat[16], wrdat[17], wrdat[18], wrdat[19], wrdat[20], wrdat[21], wrdat[22], wrdat[23], wrdat[8], wrdat[9], wrdat[10], wrdat[11], wrdat[12], wrdat[13], wrdat[14], wrdat[15], wrdat[0], wrdat[1], wrdat[2], wrdat[3], wrdat[4], wrdat[5], wrdat[6], wrdat[7]};//------------------------FSM---------------------------------- localparam S_IDLE 16h0001; localparam S_DUMMY 16h0002; localparam S_SYN_WORD 16h0004; localparam S_NOOP1 16h0008; localparam S_WR_WBSTAR 16h0010; localparam S_WBSTAR 16h0020; localparam S_WR_CMD 16h0040; localparam S_IPROG 16h0080; localparam S_NOOP2 16h0100; localparam S_STOP 16h0200;wire multiboot_start_pe; reg multiboot_start_d0; reg multiboot_start_d1;assign multiboot_start_pe multiboot_start_d0 (~multiboot_start_d1);always (posedge clk) beginmultiboot_start_d0 multiboot_start;multiboot_start_d1 multiboot_start_d0; endreg [15:0] state S_IDLE; reg [15:0] next_state;always (posedge clk) beginif(~rst_n) beginstate S_IDLE;endelse beginstate next_state;end endalways (*) begincase(state)S_IDLE: beginif(multiboot_start_pe) beginnext_state S_DUMMY;endelse beginnext_state S_IDLE;endendS_DUMMY: next_state S_SYN_WORD;S_SYN_WORD: next_state S_NOOP1;S_NOOP1: next_state S_WR_WBSTAR;S_WR_WBSTAR: next_state S_WBSTAR;S_WBSTAR: next_state S_WR_CMD;S_WR_CMD: next_state S_IPROG;S_IPROG: next_state S_NOOP2;S_NOOP2: next_state S_STOP;S_STOP: next_state S_IDLE;default: next_state S_IDLE;endcase endalways (posedge clk) begincase(state)S_IDLE: beginwrdat 32d0;ICAPE2_CSIB 1b1;ICAPE2_RDWRB 1b1;endS_DUMMY: beginwrdat Dummy;ICAPE2_CSIB 1b0;ICAPE2_RDWRB 1b0;endS_SYN_WORD: beginwrdat Sync_Word;ICAPE2_CSIB 1b0;ICAPE2_RDWRB 1b0;endS_NOOP1: beginwrdat NOOP;ICAPE2_CSIB 1b0;ICAPE2_RDWRB 1b0;endS_WR_WBSTAR: beginwrdat WR_WBSTAR;ICAPE2_CSIB 1b0;ICAPE2_RDWRB 1b0;endS_WBSTAR: beginwrdat WBSTAR;ICAPE2_CSIB 1b0;ICAPE2_RDWRB 1b0;endS_WR_CMD: beginwrdat WR_CMD;ICAPE2_CSIB 1b0;ICAPE2_RDWRB 1b0;endS_IPROG: beginwrdat IPROG;ICAPE2_CSIB 1b0;ICAPE2_RDWRB 1b0;endS_NOOP2: beginwrdat NOOP;ICAPE2_CSIB 1b0;ICAPE2_RDWRB 1b0;endS_STOP: beginwrdat 32d0;ICAPE2_CSIB 1b1;ICAPE2_RDWRB 1b1;enddefault: beginwrdat 32d0;ICAPE2_CSIB 1b1;ICAPE2_RDWRB 1b1;endendcase endalways (*) begincase(state)S_IDLE: busy 1b0;default: busy 1b1;endcase endendmodule测试 创建两个工程如下 Prj_1 //生成2个点灯的程序使用ICAP来回切换这两个Image //本工程作为 Golden Image 存入地址 0 default_nettype none module Prj_1( input wire clk_sys, //OXCO_10Minput wire [3:0] Key, output wire [3:0] LED );assign LED 4b0001;multiboot_ctrl multiboot_ctrl_inst(.clk (clk_sys),.rst_n (1b1),.multiboot_start (~Key[0]),.multiboot_addr (32h01000000), //加载0x01000000处的Multiboot Image.busy () );endmodulePrj_2 //生成2个点灯的程序使用ICAP来回切换这两个Image //本工程作为 Update Image 存入高位地址 default_nettype none module Prj_2( input wire clk_sys, //OXCO_10Minput wire [3:0] Key, output wire [3:0] LED );assign LED 4b0010;multiboot_ctrl multiboot_ctrl_inst(.clk (clk_sys),.rst_n (1b1),.multiboot_start (~Key[1]),.multiboot_addr (32h00000000), //加载0x00000000处的Golden Image.busy () );endmodule烧录后通过按键可以来回切换两个工程读者可自行验证。 参考文献 ug470_Config.pdfug953-vivado-7series-libraries.pdf
http://www.pierceye.com/news/823312/

相关文章:

  • 广州做网站优化费用网站建设和制作
  • 修改网站域名网站收录低的原因
  • 网站登录页面模板下载做网站背景
  • 温州网站推广驭明电脑网站模版
  • 高端定制网站开发需要多少钱秦皇岛优化网站排名
  • 有网站源码怎么搭建网站南京网站制作设计公司
  • 做网站学什么专业建个什么网站赚钱
  • 衡阳手机网站设计世界上有几个空间站
  • 推荐个做淘宝主图视频的网站苍南最好的网站建设公司
  • 山东中迅网站建设wordpress固定链接翻页404
  • 网站 改版农业网站建设方案 ppt
  • 网关高性能 网站建设设计制作长方体形状的包装纸盒视频
  • 如何做游戏推广网站廊坊百度推广公司地址
  • 国产做爰网站wordpress wrapper
  • 专业论坛网站开发开发长沙网站建设+个人
  • 河南便宜网站建设费用wordpress 记录访问ip
  • 汽车网站建设代理加盟深圳网络制作公司
  • 国外的旅游网站做的如何织梦网站根目录在哪里
  • 网站建设建站在线建站专业网站建设机构
  • 西安市城乡建设网官方网站衡水移动网站建设报价
  • 禅城区企业网站建设微信公众号网页版入口
  • 网站开发概述多城市二手车网站源码
  • 网站建设的内容策略本人做静态网站开发
  • 网站建设到运营赚钱网站主体负责人邮箱
  • 国外有在线做设计方案的网站吗网站地址免费
  • 做谷歌网站使用什么统计代码吗公司流程建设的意义
  • 网站广告收入如何缴文化事业建设费东莞人才市场招聘信息2023
  • 各大网站网址目录云服务器是什么意思
  • 免费作文网站张家港做网站排名
  • 具有营销价值好的网站找网站建设需要问什么软件