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

Xilinx 7系列FPGA的配置流程

目录

1.4配置流程

1.4.1  设备上电

​编辑1.4.2  清除配置寄存器

1.4.3  采样模式引脚

1.4.4  同步

​编辑1.4.5  检测设备ID

​编辑1.4.6  加载配置数据

1.4.7  CRC校验

1.4.8  启动序列


1.4配置流程


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

1.4.1  设备上电

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


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


FPGA在设备启动阶段的时序关系:


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

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

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


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

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

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


1.4.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拉高再进行配置。

1.4.3  采样模式引脚

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

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

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

1.4.4  同步


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

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

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


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


1.4.5  检测设备ID

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

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


1.4.6  加载配置数据

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

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

1.4.7  CRC校验

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

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

1.4.8  启动序列

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


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

       默认情况下,启动顺序:


与启动相关的信号:


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


从上图可以看出:

       FPGA最后的Startup过程有8个周期,其中DONE变高仅仅是第4个周期。因此,在DONE变高之后还需要再给3个CCLK。否则DONE虽然变高了,FPGA程序并没有正确运行。

ISE会在设计中搜索用户是否使用了DCI,如果是,FPGA会使用2个周期的Start UpPhase,等待DCI匹配上。即FPGA会在那儿等待,直到DCI匹配上。如果我们在上位机读取了配置文件,获得了文件大小,我们把它写到负责加载FPGA的Flash里,然后CCLK时钟就不给了。这就产生问题,因为DCI匹配需要时间,我们的问题就是,过了一段时间,DCI匹配完毕了,但是CCLK却没有了,因此FPGA一直处在Start UP的前2个Phase上,不会到DONE。导致无法配置成功。

相关文章:

  • QT----写完的程序打包为APK在自己的手机上运行
  • 设计MySQL数据表的几个注意点
  • python:布伊山德U检验(Buishand U test,BUT)突变点检测(以NDVI时间序列为例)
  • 「AI工程师」数据处理与分析-工作指导
  • c语言,大宗撮合交易中心系统核心模块代码
  • Toyota Programming Contest 2024#3(AtCoder Beginner Contest 344)(A~C)
  • 【C/C++】常量指针与指针常量的深入解析与区分(什么是const int * 与 int * const ?)
  • [渗透教程]-013-嗅探工具-wireshark操作
  • python脚本批量关闭exe文件
  • 数据分析-Pandas最简单的方法画矩阵散点图
  • 【leetcode】429. N 叉树的层序遍历
  • Excel转pdf
  • appium2的一些配置
  • 【Linux】线程同步与生产消费者问题
  • 【蓝桥杯】蓝桥杯算法复习(一)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【Leetcode】104. 二叉树的最大深度
  • 【剑指offer】让抽象问题具体化
  • 345-反转字符串中的元音字母
  • idea + plantuml 画流程图
  • IDEA 插件开发入门教程
  • JavaScript 基本功--面试宝典
  • Java编程基础24——递归练习
  • jdbc就是这么简单
  • JS变量作用域
  • mysql 数据库四种事务隔离级别
  • Spring Boot快速入门(一):Hello Spring Boot
  • STAR法则
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 跨域
  • 力扣(LeetCode)21
  • 日剧·日综资源集合(建议收藏)
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 仓管云——企业云erp功能有哪些?
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (09)Hive——CTE 公共表达式
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)http协议
  • (转)Mysql的优化设置
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET CORE Aws S3 使用
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net中间语言BeforeFieldInit
  • @在php中起什么作用?
  • [20171101]rman to destination.txt
  • [Android]一个简单使用Handler做Timer的例子