xilinx 7系列fpga上电配置

一、前言

Xilinx FPGA通过加载比特流到内部存储单元来进行配置。

Xilinx FPGA存在两种数据配置路径,一种是满足最小引脚需求的串行路径,一种是可用8位、16位或32位来连接到行业的高性能通用接口,如处理器,8位或者16位并行的闪存。与处理器和处理器外围设备一样, FPGA可以在系统中按需无限次重新编程。

由于Xilinx FPGA 配置数据存储在 CMOS 配置锁存器 (CCL) 中,因此必须在断电后重新配置。比特流每次都通过特殊的配置引脚加载到器件中。常用的配置模式可以分为:

通过在输入引脚M[2:0]专用模式上设置适当的级别来选择特定的配置模式。M2、M1和M0模式引脚应通过上拉或下拉电阻(≤1kΩ),或直接连接到地或VCCO_0l来设置在恒定的DC电压电平,并且引脚不应在配置期间和配置之后变化。

此外,如果M[2:0]为101,则该FPGA只支持JTAG进行配置。处于其余配置模式下时,依旧可以使用JTAG模式进行调试,并且优先级最高。

主和从的概念于配置时钟(configuration clock,CCLK)的方向有关:

  • 在主配置模式下,7系列设备通过内部振荡器驱动CCLK。要选择所需的频率,使用比特流-g ConfigRate选项,具体可以参考UG628(ISE命令行工具用户指南)的BitGen部分和UG908 (Vivado编程和调试用户指南)的“设备配置比特流设置”部分。配置后,除非选择了持久选项或使用了SEU检测,否则CCLK将关闭。CCLK引脚为三态,上拉较弱。
  • 在从配置模式中,CCLK是一个输入。

FPGA 自加载配置模式,通常称为主模式,可用于串行或并行数据路径。主模式利用各种类型的非易失性存储器(如Flash、EEPROM等)来存储 FPGA 的配置信息。 FPGA 在驱动配置逻辑的内部振荡器中生成配置时钟信号,并在 CCLK 输出引脚上可见。

外部控制加载 FPGA 配置模式,通常称为从模式,也可用于串行或并行数据路径。在从模式下,处理器、微控制器、DSP 处理器或测试仪等外部“智能代理”将配置映像下载到 FPGA 中,从配置模式的优势在于 FPGA 比特流几乎可以驻留在整个系统中的任何位置。从串行模式非常简单,仅由时钟和串行数据输入组成。JTAG模式也是一种简单的串行配置模式,流行于原型设计,并高度用于板测试。Slave SelectMAP模式是一个简单的8位、16位或32位宽处理器外围接口,包括芯片选择输入和读/写控制输入。

二、FPGA 配置

一般必然存在的JTAG调试模式,另外使用较多的是主SPI模式和从串行配置模式,其余并行配置模式由于消耗引脚较多,一般不会使用,与这几种串行模式的区别仅在于数据引脚的区别。

2.1 配置信号

每个配置模式都有一组对应的接口引脚,这些引脚跨越7系列FPGA上的一个或多个I/O bank。bank 0包含专用配置引脚,并且始终是每个配置接口的一部分。bank 14 和 bank15包含涉及特定配置模式的多功能引脚。7系列FPGA数据表规定了在3.3V、2.5V、1.8V或1.5V下工作的bank中配置引脚的开关特性。

所有JTAG和专用配置引脚都位于一个单独的专用bank中,该bank具有专用电压电源(VCCO_0)。多功能配置针脚位于bank 14和15中。

CFGBVS(Configuration Banks Voltage Select)

CFGBVS决定专用配置bank0、bank14和bank15中多功能配置引脚的I/O电压操作范围。CFGBVS总是控制7系列FPGA的bank0电压,仅在配置期间控制bank14和bank15的电压。如果为bank0的VCCO_0电源提供2.5V或3.3V,则CFGBVS引脚必须连接为高电平(比如连接到VCCO_ 0)。仅当bank0的VCCO_0小于或等于1.8V,将CFGBVS连接到低电平(比如连接到GND)。在配置过程中,bank14和bank 15的电压应与施加到bank0的VCCO电平相匹配。

PROGRAM_B(program bar)

PROGRAM_B拉低(下降沿)时复位配置逻辑,PROGRAM_B低脉冲(下降沿)可以清除FPGA内部的所有配置信息,并初始化新的配置序列。注意在上电时把PROGRAM_B 保持为低电平不会使 FPGA 配置保持复位状态,延迟配置的时间需要使用INIT_B信号配合完成。PROGRAM_B 引脚外部需要通过小于等于4.7KΩ的电阻上拉至VCCO_0来确保稳定的高电平输入,推荐连接到GND来使能配置复位。

INIT_B(initialization bar)

低电平有效。当 FPGA 处于配置复位状态、FPGA 正在初始化(清除)其配置存储器或 FPGA 检测到配置错误时,FPGA 将该引脚驱动为低电平。

完成 FPGA 初始化过程后,INIT_B 被释放到高阻态,此时外部电阻器应将 INIT_B 拉高(将 INIT_B 连接到一个 ≤ 4.7 kΩ 的上拉电阻到VCCO_0)。当初始化过程完成后在 INIT_B 输入检测到高电平时,FPGA 继续执行由 M[2:0] 引脚设置指示的配置序列的其余部分。

Done

该信号高电平表示FPGA配置序列完成,默认情况下,该引脚为开漏输出,内部有一个大约10KΩ的上拉电阻,外部只需要通过一个330Ω的电阻上拉即可。

2.2 配置流程

配置流程包含三个大步骤(建立,加载程序,初始化启动),分为8个小步骤

对于所有配置模式,7系列的基本配置流程都是相同的,主要可以分为三个大块:设备启动,数据流加载,启动序列。

后面内容来源于:

谁说配置难?这篇文章让你轻松掌握xilinx 7系列FPGA配置技巧 - 知乎 (zhihu.com)

1.设备上电

配置流程的第一步自然是设备上电,这里也就解释了为何固化程序后需要下电再上电才能生效。配置涉及到的电源如下:

VCCO_0以及VCCO_14、VCCO_15在前文已经提及,其他的电源需要参照对应的数据手册推荐值进行配置,例如K7对应手册【DS182】:

FPGA在设备启动阶段(流程1-3)的时序关系:

TPOR :Power-on Reset (POR) ;TICCK :CCLK Output Delay

FPGA上电启动后电压达到VCCO后在10~50ms后INIT_B信号拉高,初始化完成,FPGA开始加载配置工作。

上电后可以通过拉低将 PROGRAM_B 引脚切换为低电平来重新配置器件:

INIT_B 在初始化期间被内部驱动为低电平,然后在上电情况下(第一次上电配置)在TPOR(图 5‑4)之后释放,在其他情况下(触发退回或者重配置等)在TPL之后释放。如果 INIT_B 引脚在外部保持低电平,则器件在初始化过程中的这一点等待,直到该引脚被释放,并且需要满足TPOR或TPL延迟。

FPGA上电第一次加载与PROGRAM_B没有关系,只要达到延迟时间,FPGA就会初始化完成,init_b信号拉高,直接进入配置数据过程。只有第二次重新配置才使用PROGRAM_B。

图中的时间参数可以在对应的FPGA数据手册中查看,如K7系列对应【DS182】:

2.清除配置寄存器

在器件上电后、PROGRAM_B 引脚脉冲低电平后、使用 JTAG JPROGRAM 指令或 IPROG 命令后或在回退重试配置序列期间,配置存储器会顺序清除。在此期间:

Block RAM 被重置为其初始状态,并且触发器通过全局设置重置 (GSR) 的断言重新初始化。除少数配置输出引脚外,I/O 通过使用全局三态 (GTS) 置于 High‑Z 状态,如果 PUDC_B 为低电平,则内部上拉。

PUDC_B用于设置配置期间的上拉,低电平有效,电路上通过直连或者 ≤ 1kΩ 连接到VCCO_14或GND,禁止悬空。

清除配置寄存器发生在INIT_B为低的这个阶段。通常这个时间为3ms。

3ms的时间来自于复旦微的手册中:JFM7K325T清除配置寄存器时间为20ms,而对标产品为3ms。在从模式中推荐等待INIT_B拉高再进行配置。

3.采样模式引脚

当 INIT_B 引脚转换为高电平时,器件对模式引脚 M[2:0] 进行采样并开始驱动 CCLK(如果处于主模式)。此时,器件开始在配置时钟的上升沿对配置数据输入引脚进行采样。

对于 BPI 和 SelectMAP 模式,总线宽度最初为 x8,可以在状态寄存器查看。在总线宽度检测序列之后,状态寄存器被更新。从串行、主串行、SPI 和 JTAG 模式忽略总线宽度检测模式。

只有在通过电源循环或PROGRAM_B置位进行重新配置时,才会再次对模式引脚进行采样。

4.同步

FPGA正常数据加载前,需要做一个FPGA与配置方(如FLASH)之间的同步检查。方法是将一个特殊的 32 位同步字 (0xAA995566) 发送到FPGA。同步字会提醒FPGA即将到来的配置数据并将配置数据与内部配置逻辑对齐。

除“总线宽度自动检测”序列外,同步之前配置输入引脚上的任何数据都将被忽略。

Xilinx在生成的.bit文件中已经自动加入了这个同步字。可以进行查看:

表5-19说明了bit流的定义:

5. 检测设备ID

设备同步后,必须通过设备 ID 检查才能加载配置数据帧。这可以防止配置具有针对不同设备格式化的比特流。如果在配置期间发生 ID 错误,设备会尝试执行回退重新配置。

设备 ID 检查内置于比特流中,器件 ID 检查是通过配置逻辑的比特流中的命令执行的,而不是通过 JTAG IDCODE 寄存器。ID可以在【UG470】的表1-1中查找到,例如7K325T对应3651093,可以在.bit文件中查找到:

6.加载配置数据

在准备工作完成后,FPGA开始加载配置数据。在这个过程中,FPGA的所有可配置I/O根据HSWAPEN引脚的设置变为弱上拉(HSWAPE=1)或者高阻态(HSWAPE=0)。这个阶段的I/O引脚还没有变为用户需要的状态,也最有可能影响到其他外围电路的上电时序和运行。

设计硬件电路时要特别注意并采取必要措施,如加入上下拉电阻或改变器件加电顺序来尽量避免或减少FPGA配置时对电路其他器件的影响。

7.CRC校验

加载配置数据帧时,器件会根据配置数据包计算循环冗余校验 (CRC) 值。加载配置数据帧后,配置比特流可以向设备发出校验 CRC指令,然后是预期的 CRC 值。如果设备计算的 CRC 值与比特流中的预期 CRC 值不匹配,则设备将 INIT_B 拉低并中止配置,此时用户必须把PROG-B引脚拉低,才能进行重新配置。

默认情况下,CRC 校验包含在配置比特流中,如果禁用 CRC 检查,则存在加载错误配置数据帧的风险,从而导致错误的设计行 为或损坏器件。

8.启动序列

加载配置帧后,FPGA不会马上执行用户的逻辑,比特流指示设备进入启动序列。启动顺序由 8 阶段(阶段 0‑7)顺序状态机控制。用户可以选择每个启动事件的特定阶段(见【UG628】):

可以强制启动序列等待 MMCM 锁定或等待 DCI 与适当的选项匹配。这些选项通常设置为在 MMCM 锁定和/或 DCI 匹配之前防止 DONE、GTS 和 GWE 被断言(防止设备操作)。

默认情况下,启动顺序:

与启动相关的信号:

信号名称描述
DONE表示配置完成。可以在外部保持低电平以与其他 FPGA 同步启动。
Release_DONE指示设备是否已停止将 DONE 引脚驱动为低电平。如果引脚在外部保持为低电平,Release_DONE 可能与 DONE 引脚上的实际值不同。
GWE全局写使能 (GWE)。置位后,GWE 启用 CLB 和 IOB 触发器以及FPGA 上的其他同步元件。
GTS全局三态 (GTS)。置位后,GTS 禁用所有 I/O 驱动程序,除了少数配置管脚。
EOS启动结束 (EOS)。 EOS 表示配置和启动过程的绝对结束。
DCI_MATCH指示所有数控阻抗 (DCI) 控制器何时将其内部电阻器与外部参考电阻器匹配。
MMCM_LOCK指示所有时钟管理块何时就绪。该信号默认置位。如果在MMCM 上使用了 LOCK_WAIT 选项并且在生成比特流时使用了LockCycle 选项,则它处于活动状态。

DONE信号可通过DONE 引脚或7 系列FPGA状态寄存器获取,其余只能通过7 系列FPGA状态寄存器获取。对应的信号时序如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/300176.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[问题记录] oracle问题汇总记录

plsql问题 1、oracle-initialization error could not locate OCI.dll 下载plsql客户端后,登录显示如图所示的错误 解决方法,点击下方链接,下载64位客户端 Instant Client for Microsoft Windows (x64) 64-bit (oracle.com) 2、显示中文乱…

影院座位选择简易实现(uniapp)

界面展示 主要使用到uniap中的movable-area&#xff0c;和movable-view组件实现。 代码逻辑分析 1、使用movable-area和movea-view组件&#xff0c;用于座位展示 <div class"ui-seat__box"><movable-area class"ui-movableArea"><movab…

Android 11属性系统初始化流程

在init进程启动的第二阶段&#xff0c;调用PropertyInit 对属性系统进行初始化 int SecondStageMain(int argc, char** argv) {//省略PropertyInit();//省略 }PropertyInit函数在system\core\init\property_service.cpp 中实现 void PropertyInit() {//省略mkdir("/dev/…

【Layui】------ layui实现table表格拖拽行、列位置的示例代码

一、完整的示例代码&#xff1a;&#xff08;请使用layui v2.8.3的版本&#xff09;看懂就能用、不要照搬、照搬会出错误、拷贝重要代码改改符合你自己的需求。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><…

File,IO流,递归详解

File类 介绍 java.io.File类是Java语言提供了用来描述文件和目录(文件夹)的 构造 方法 注意&#xff1a; 构造方法中通常用的是第一个方法文件和目录可以通过File封装成对象File封装的对象仅仅是一个路径名&#xff0c;它是可以存在的&#xff0c;也可以不存在 绝对路径…

Sketch是免费软件吗?这款软件支持导入!

Sketch 是一款针对网页、图标、插图等设计的矢量绘图软件。Sketch 的操作界面非常简单易懂&#xff0c;帮助全世界的设计师创作出许多不可思议的作品。但是同时&#xff0c;Sketch 也有一些痛点&#xff1a;使用 Sketch 需要安装 InVision、Abstract 、Zeplin 等插件&#xff0…

一网打尽计算机网络难题:100个问答助你轻松掌握【文末送书福利】

文章目录 一&#xff0c;物理层二&#xff0c;数据链路层三&#xff0c;网络层四&#xff0c;传输层五&#xff0c;应用层专栏推荐粉丝福利 欢迎订阅查看学习&#xff1a;Java编程基础教程系列&#xff08;零基础小白搬砖逆袭&#xff09; 一&#xff0c;物理层 题&#xff1a…

#QT项目实战(天气预报)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a; 3.记录&#xff1a; &#xff08;1&#xff09;调用API的Url a.调用API获取IP whois.pconline.com.cn/ipJson.jsp?iphttp://whois.pconline.com.cn/ipJson.jsp?ip if(window.IPCallBack) {IPCallBack({"ip":&quo…

【攻防世界】unseping (反序列化与Linux bash shell)

打开题目环境&#xff1a; 1、进行PHP代码审计&#xff0c;通过审计得知需要用到PHP反序列化。找到输出flag的位置为 ping()函数。通过使用 exec() 函数来执行 $ip 并将结果保存在 $result 中&#xff0c;最终输出 $result。 2、接着寻找给 $ip 传参的位置&#xff0c;发现通过…

stm32中断传输的状态信息

1、gState &#xff08;Tx&#xff09;发送的状态信息 2、RxState &#xff08;Rx&#xff09;接收的状态信息

STM32单片机智能电表交流电压电流程序设计(电流 电压互感器TV1005M+TA1005M)

资料下载地址&#xff1a;STM32单片机智能电表交流电压电流程序设计(电流 电压互感器TV1005MTA1005M) 1、摘要 5、基于STM32F103单片机智能电表交流电压电流设计 本设计由STM32单片机核心板电路交流电压电流检测模块电路WIFI模块电路指示灯电路组成。 1、通过电压互感器TV100…

6. Z 字形变换(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如…

[C语言][数据结构][动态内存空间的开辟]顺序表的实现!

目录 零.必备知识 a.顺序表的底层是数组. b.数组在内存中是连续存放的. c.动态内存空间的开辟(malloc,calloc,realloc). 一.顺序表的定义与实现 1.1 顺序表的定义 1.2 顺序表的初始化 1.3 顺序表的销毁 1.4 顺序表容量的检查与调整(最关键的部分) 1.5 顺序表的尾插 1.…

A First Course in the Finite Element Method【Daryl L.】|PDF电子书

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

idea的后端环境配置

首先&#xff0c;在你刚打开idea时红色箭头所指的是你进行配置的地方&#xff0c;接下来我把具体步骤说一下 1&#xff0c;直接点击箭头所指的地方就会出现如图界面&#xff0c;然后点击Tomcat server,使其展开点击第一个 第二步取消勾选&#xff0c;第三步选择bin的上一级然后…

用vscode仿制小米官网

html内容: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel&quo…

牛客NC93 设计LRU缓存结构【hard 链表,Map Java】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84 思路 双向链表map最新的数据放头结点&#xff0c;尾节点放最老的数据&#xff0c;没次移除尾巴节点本地考察链表的新增&#xff0c;删除&#xff0c;移动节点参考答案Java im…

UNITY实战进阶-BatchRendererGroup+Jobs+Burst+RVO2+GPUAnimation 实现万人团战(一)

研究思路&#xff1a;GPUAnimation把动画放入GPU中处理&#xff0c;BatchRendererGroup进行动态批量渲染处理&#xff0c;JobsBurst进行多线程处理逻辑&#xff08;移动、攻击等&#xff09;&#xff0c;RVO2采用Jobs的寻路导航。 准备工作&#xff1a; Editor > Project S…

PCI总线学习笔记:读写篇

前言 最近在写E1000网卡的驱动&#xff0c;这其中涉及到了PCI总线的相关内容。但是网上大部分关于PCI的文章都只局限在概念上的描述&#xff0c;并没有给出具体的例子来解释。这其实也是情理之中的&#xff0c;因为PCI总线规范就像是一个抽象的接口&#xff0c;其具体怎么实现…

正确使用@Autowired

目录 一、前言二、跟着官方文档&#xff0c;学习正确使用Autowired0、实验环境1、通过构造方法进行注入1.1 问题1&#xff1a;那万一没有这个CustomerPreferenceDao对象&#xff0c;会报错吗&#xff1f; 2、通过setter方法注入3、通过方法注入&#xff08;这个方法可以是任意名…