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

FPGA multiboot 方案

FPGA multiboot 方案

  • 初版方案

初版方案不需要软件参与,只是为了验证flash启动。当前已完成。

使用jtag 通过vivaod harwaremanager去将fpga bit流文件加载到demo板flash中。

具体操作:

  1. 约束添加for golden bitstream

# 设置电源参考,1.8v为GND,3.3v为VCC

roperty CFGBVS GND [current_design]

set_property CONFIG_VOLTAGE 1.8 [current_design]

# 设置spi模式,x1,x2,x4

set_property CONFIG_MODE SPIx4 [current_design]

## Compress the bitstream to fit on 128M QSPI

#设置bit压缩

set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]

#设置fpga cclk时钟频率最大66MHz

set_property BITSTREAM.CONFIG.CONFIGRATE 66 [current_design]

#BITSTREAM PROPERTIES REQUIRED FOR GOLDEN IMAGE:

# 设置spi位宽,和上面的语句要对应

set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]

set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]

# 设置下一次bit加载的地址,当前flash为256Mb,取中间值

set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x01000000 [current_design]

 #This allows the Golden image to load upon power up rather than jumping to the multiboot #image in a multiboot setup.

set_property BITSTREAM.CONFIG.NEXT_CONFIG_REBOOT ENABLE [current_design]

# spi使用32bit address,默认24bit

set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]

# 设置spi配置超时时间

set_property BITSTREAM.CONFIG.TIMER_CFG 32'h0040000 [current_design]

#(If the SPI flash is equal to or greater than 256 Mb, uncomment the constraint below):

#set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]

  1. for update bitstream

# 设置电源参考,1.8v为GND,3.3v为VCC

set_property CFGBVS GND [current_design]

set_property CONFIG_VOLTAGE 1.8 [current_design]

# 设置spi模式,x1,x2,x4

set_property CONFIG_MODE SPIx4 [current_design]

## Compress the bitstream to fit on 128M QSPI

#Compress the bitstream

set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]

#BITSTREAM PROPERTIES REQUIRED FOR GOLDEN IMAGE:

set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]

set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]

set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design]

  1. 之后开始编译

生成bit文件;(注此处不需要额外的IO约束,每款FPGA spi pin脚通过jtag会自动识别)

  1. 生成mcs文件用于flash烧录

命令:

write_cfgmem -format mcs -interface SPIX4 -size 32 -loadbit "up 0 D:/multi_boot/bit_files/multi_boot_golden.bit up 0x1000000 D:/multi_boot/bit_files/multi_boot_update.bit" D:/multi_boot/bit_files/golden.mcs

上述命令中包含两个bit文件,以及最后生成得一个mcs文件,低0~0x1000_0000存放golden,高空间存放update bit。

  1. 使用hardware manager烧录mcs文件到flash中

这里选择正确得flash型号以及刚才生成得mcs文件导入,即可。

依据硬件所给的flash型号。

下一步点击ok,之后

把给定的mcs文件加入之后,烧录完成,fpga done信号拉高。

  1. 烧录完成后可以看到fpga program成功

Update bit被加载。

  1. 触发program_b(低有效)

或者将fpga 板卡断电之后。Done信号拉高,表示flash加载成功。

  1. 更改mcs文件高位地址内容

从新加载mcs文件之后发现加载得是golden bit内容。Multiboot出错回退验证成功。

  1. 关于vivado配置看门狗时间

查询ug470,ug570关于FPGA Configuration,有关于看门狗值计算方法,其中ug470在p149,ug570在p174分别有关于看门狗计数器的计算工作时钟的计算方法:

The Watchdog uses a divided version of a dedicated internal clock, CFGMCLK, which has a

nominal frequency of 65 MHz. The clock is predivided by 256, so that the Watchdog clock period is about 4,000 ns. Given the Watchdog counter is 30 bits wide, the maximum possible Watchdog value is about 4,230 seconds. The time value can be set via bitstream options.

看门狗时钟是一个250KHz,周期4000ns。该处设置为0x4_0000; 最大加载时间:1s左右。

  • 升级

使用上章方法,验证了multiboot方案可行。但是没有办法实现在线加载方式。

2.1 硬件

2.1.1 工程搭建

基本框图:

Host通过UART/pcie 等接口将待更新固件写入到flash中。之后内部MCU来控制flash文件的加载,在线更新fpga boot。

Block design

xadm--> spi IP.

Axi-quad-spi 详解

IP配置框图,当前配置模式为quad。当前不涉及xip启动。不使能performance mode,该mode下会将axi_lite变为axi_full。IP core内部框图。外部只支持一个slave,flash 设备厂商Micron。

IP核集成了IOBUF语句,将spi相关i,o,t均集成到IOBUF上。支持master,slave模式,我们例话为master模式。ext_spi_clk接100Mhz时钟在quad/dual模式下输出得sck为ext_spi_clk/2.配置中ratial固定,不可配。且在该模式下fifo深度固定为16.

支持startupe2 原语(后文解释)

Mode pin设置

M pin为fpga mode选择相关pin。

Mode pin在fpga中为固定位置,需要硬件同事直接配置,当前demo板为拨码开关。

M[2:0] == 3d’b001;

上图为program_b触发最小时间,必须大于250ns。低有效。

Startupe2 原语调用

因为需要用户手动操作flash。

外部存储器的时钟管脚一般与fpga的CCLK_0连接,当使用远程更新时,首先fpga内部有控制flash的驱动(即逻辑控制flash时序),当然flash时钟也需要控制了,但这时时钟管脚已经连接到CCLK_0,那该如何操作啊,你直接约束分配管脚试试,是通不过的

先进行startupe2 原语调用。必须使能startupe2原语(k7325t)

在内部使能了starupe2原语之后必须新增端口的IO约束。

为什么必须添加额外的timing约束:

1. startupe2 原语自带IO delay。作用到外部cclk pin。

2. ext_spi_clk 在dual/quad 模式下cclk输出的ratio比固定为2;

\

3. 外部sck驱动flash的data并不是按照上升沿驱动的。

4. 实际使用中从最后一级ff到sck pin上会有延迟

具体约束依据flash型号,fpga型号不同稍有区别。不在细述。(详见工程timing.xdc文件)

IO约束

添加顶层IO约束,SPI_IO*, PCIE_REF_CLK_P, CLK_IN,CLK_RST等。本例中使用到的IO均为特殊IO,需和硬件同事协商。不需要定义spi_cclk。

2.2 example示例

注:调用axi-quad-spi example示例时不能使能startupe2原语。

寄存器描述

复位

寄存器中的值根据不同的flash厂商,以及不同的用法会有些许区别。可查看flash手册。

擦除

2.3 硬件调试

Pcie link-up;

注:

  1. 调试时单bit文件推荐使用bin格式加载到flash中。
  2. 由于pcie link-up有时间要求,实际在host复位释放之后fpga应该在10ms内link-up;这样才会被建联。
  3. 单bit文件时不推荐加载multiboot相关的xdc约束;会导致上电复位之后找不到updaate

bit file位置。导致program卡死。识别不到pcie设备。flash加载不能带multiboot相关的xdc约束,当前我只有一个golden bit没有update bit。golden中带了multiboot相关的约束,host加载fpga子卡时不能识别到fpga pcie设备。

  1. 使用jtag调试加载完bin文件之后重启时应该把jtag盒子拔开。

对于u系或u+推荐使用Tandem configuration配置。这样可以先对pcie固件进行加载。

Mcs文件说明

关于mcs文件在multiboot中关键字的说明。

2.4 软件调试

软件参考

 Flash 型号参考手册:MT25QU256ABA1EW7.PDF

 参考文档 xapp586-spi-flash.pdf

 https://blog.csdn.net/2301_80127702/article/details/144824482

 参考文档 pg153-axi-quad-spi.pfg

 参考手册 xapp1280-us-post-cnfg-flash-startupe3.pdf

 Ug475_7series_pkg_pinout.pdf

 「教学」AXI Quad SPI 时序分析 - 杰哥的{运维,编程,调板子}小笔记

 https://adaptivesupport.amd.com/s/article/65171?language=en_US

 https://zhuanlan.zhihu.com/p/586346774

 参考文档 pg153-axi-quad-spi.pfg,ch2,register

 https://fpga.eetrend.com/content/2024/100584207.html

 https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/575209708/Axi-Quad+SPI


http://www.kler.cn/a/590564.html

相关文章:

  • 简述下npm,cnpm,yarn和pnpm的区别,以及跟在后面的-g,--save, --save-dev代表着什么
  • 前端性能优化回答思路
  • 【VUE】ant design vue实现表格table上下拖拽排序
  • 使用 LangGraph 构建智能客服代理系统(DeepSeek 版)
  • 如何启用 HTTPS 并配置免费的 SSL 证书
  • MySQL DBA 运维常用命令
  • STC89C52单片机学习——第22节: LED点阵屏显示图形动画
  • Spring Boot整合JWT 实现双Token机制
  • Maven核心包:maven-resolver-api
  • Netty基础—5.Netty的使用简介
  • 小程序主包方法迁移到分包-调用策略
  • HTB 学习笔记 【中/英】《前端 vs. 后端》P3
  • API接口自动化学习总结
  • 共享 IP 与独立 IP:长期邮件营销的优劣比较
  • 解决QT_Debug 调试信息不输出问题
  • 【笔记】SQL进阶教程(第二版)
  • SpringBoot3+SaToken+JWT:轻量化权限认证实战指南
  • Launcher3 Hotseat区域动态插入All Apps按钮实现方案
  • Elasticsearch搜索引擎 3(DSL)
  • 数学建模:模型求解方法