FPGA程序加载方式
FPGA 配置模式
Vivado 设计过程中生成的 bit 流文件需要通过特定的配置引脚导入到 FPGA 中。专用配置引脚上的不同电压级别决定了不同的配置模式。可选的配置模式有:
- Master SPI x1/x2/x4
- Master Serial
- Slave Serial
- Master BPI-Up x8/x16
- Slave SelectMap x8/x16/x32
- JTAG/Boundary Scan
- Master SelectMap x8/16
不管是哪种配置模式,配置数据都是存储在 FPGA 中的 CMOS 锁存器中,每次掉电后数据都会丢失,上电之后重新配置。但是选择一个片外存储器如 SPI Flash 存储配置数据,并设置相应的配置模式,上电后可以自动配置 FPGA 。
Master Serial——最常用的 FPGA 配置模式
在主串模式下,由 FPGA 的 CCLK 管脚给 PROM 提供工作时钟,相应的 PROM 在 CCLK 的上升沿将数据。从 D0 管脚送到 FPGA 的 DIN 管脚。无论 PROM 芯片类型 ( 即使其支持并行配置 ),都只利用其串行配置功能。
Slave Serial——从串配置模式
在串行模式下,需要微处理器或微控制器等外部主机通过同步串行接口将配置数据串行写入 FPGA 芯片, 其模式选择信号 M[2:0]=3’b111。
DIN 输入管脚的串行配置数据需要在外部时钟CCLK 信号前有足够的建立时间。其中单片FPGA 芯片构成了完整的JTAG 链,仅用来测试芯片状态,以及支持 JTAG 在线调试模式,与从串配置模式没有关系。外部主机通过下拉 PROG_B启动配置并检测 INIT_B 电平,当 INIT_B 为高时,表明 FPGA 做好准备,开始接收数据。此时,主机开始提供 数据和时钟信号直到 FPGA 配置完毕且 DONE 管脚为高,或者 INIT_B 变低表明发生配置错误才停止。整个过程需要比配置文件大小更多的时钟周期,这是由于部分时钟用于时序建立,特别当 FPGA 被配置为等待 DCM锁存其时钟输入。
JTAG 配置模式
将模式配置管脚设置为 JTAG 模式,即 M[2:0]=3’b101时,FPGA 芯片上电后或者 PROG_B 管脚有低脉冲出现后,只能通过 JTAG 模式配置。JTAG 模式不需要额外的掉电非易失存储器,因此通过其配置的比特文件在 FPGA 断电后即丢失,每次上电后都需要重新配置。由于JTAG 模式已更改,配置效率高,是项目研发阶段必不可少的配置模式。
BPI 模式
该模式的时钟CCLK同样由FPGA提供,并行的数据比SPI模式的串行数据配置速度要快,但设计稍微复杂一点。
SelectMAP
SelectMAP 是早期的FPGA两类配置模式之一,相对于串行配置而言,与主串和从串模式相对应,有主并(Master SelectMAP)和从并(Slave SelectMAP)两种模式。对应Xilinx PlatformFlashPROM ,小容量的FPGA可以使用串行,大容量的FPGA一般为了加快速度,一般都是用并行。
从 SPARTEN-3E 开始,Xilinx 的 FPGA 增加了 SPI 和 BPI 接口第三方厂商的 FLash 两种模式。SelectMAP 模式FPGA没有地址线与 Flash 相连,Flash 内部使用 FPGA 提供的 CCLK 递增。而 BPI 模式下,FPGA 直接提供地址给 Flash。
参考链接
https://www.xilinx.com/support/documentation/user_guides/ug470_7Series_Config.pdf
https://www.xilinx.com/support/documentation/user_guides/ug570-ultrascale-configuration.pdf
https://blog.csdn.net/wordwarwordwar/article/details/53041088?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159895107819724843428906%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159895107819724843428906&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~rank_business_v1-8-53041088.ecpm_v3_rank_business_v1&utm_term=FPGA%E9%85%8D%E7%BD%AE%E6%A8%A1%E5%BC%8F&spm=1018.2118.3001.4187
扫码关注 一起畅聊
深耕在FPGA 扎根于视频领域
卓越于神经网络
- 1798: [Ahoi2009]Seq 维护序列seq
- 【LeetCode 389】 关关的刷题日记30 Find the Difference
- 1708: [Usaco2007 Oct]Money奶牛的硬币
- 1856: [Scoi2010]字符串
- 【LeetCode 409】 关关的刷题日记31Longest Palindrome
- Git的奇技淫巧?
- 3224: Tyvj 1728 普通平衡树
- 【LeetCode 136】 关关的刷题日记32 Single Number
- 1599: [Usaco2008 Oct]笨重的石子
- 【LeetCode 136】 关关的刷题日记33 Intersection of Two
- 1218: [HNOI2003]激光炸弹
- Java多线程高并发学习笔记(一)——Thread&Runnable
- 1257: [CQOI2007]余数之和sum
- 【LeetCode 136】 关关的刷题日记34 Intersection of Two Arrays II
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- django-模板之自定义模板路径(一)
- spring配置Bean之基于xml文件的方式
- django-模板之模板变量(二)
- 【猫狗数据集】计算数据集的平均值和方差
- django-模板之extends(三)
- django-模板之block(四)
- spring之添加后置处理器的bean的生命周期
- django-模板之URL标签(五)
- 【猫狗数据集】读取数据集的第二种方式
- django-模板之comment标签(六)
- 【猫狗数据集】对一张张图像进行预测(而不是测试集)
- 【猫狗数据集】pytorch训练猫狗数据集之创建数据集
- 【猫狗数据集】可视化resnet18的输出
- springmvc实例之修改雇员相关信息(四)
- 基于TypeScript封装Axios笔记(六)