FPGA上电后IO默认状态

旧时模样 提交于 2021-02-14 12:57:33

问题来源:fpga配置时的管脚状态 关于这个问题,好像网络上面有很多人问,但是eetop这个话题不多。大多数的回答是:配置的时候所有的管脚默认是Z态。这个说法到底对不对呢?
下面我谈谈自己使用的几款新品的情况。项目背景:开关信号发射机。初始状态要求IO信号都是低电平,来自控制DSP的发射控制信号触发IO开关信号的产生。上电的时候不能有高电平,否则引起发射机状态不稳,会产生问题。
(1)VirtexII1000 设作IO的信号在上电配置的过程中用示波器测量时高电平,大约在90ms左右,和配置时间基本一致。在管脚配置栏设置 pull-down后,这个现象消失。未使用管脚没有这个现象。未使用管脚的处理是float。
(2)virtex5-xc5vsx50t 设作IO的信号在上电配置的过程中发现有和配置时间基本一致的一段大约在0.2V左右的凸起。基本可以认为是没有信号。管脚配置没有做特殊设置。
(3)EP3C25的fpga,在配置的时候,能够发现编程应用的IO脚和未使用的管脚都有大约300ms左右的(EPCS16)高电平。和配置时间完全一致。使用外接的下拉电阻6k左右下拉到1V左右,使用1k下拉到0.2V左右。
谈谈我的理解:无论altera还是xilinx的fpga,IO脚的基本结构都差不多,输出都是推拉mos管,能够实现三态、可编程的上下拉电阻等等。在默认配置下,我认为cad工具可能设定了配置状态时 IO模块的三态功能和弱上拉功能同时起作用,所以会有上述现象。altera cyclone3的EP3C25的fpga,我在网络上查了很久,测试过powerup no 什么的指示, io feature设定等,都没有作用,最好 只好外加下拉电阻了。不知道哪位高手遇到类似问题,是否在q软件里面可以设定,麻烦告知,不胜感激!

概述

电源供电线路上电之前,I/O管脚的状态为“未知”。所以在进行FPGA硬件设计时,引脚分配是非常重要的一个环节,特别是在硬件电路上需要与其他芯片通行的引脚。

Xilinx FPGA从上电之后到正常工作整个过程中各个阶段引脚的状态,会对硬件设计、引脚分配产生非常重要的影响。这篇文章就针对FPGA从上电开始 ,配置程序,到正常工作整个过程中所有IO的状态进行分析。

从时间阶段可以分为两部分,第一阶段是从FPGA上电开始直到配置(Configuration)完成之前。第二个阶段是配置完成之后,FPGA开始正常工作开始。

从引脚类型上分,可以分为三大类:

  • 第一类是普通的IO,其中又分为程序设计中使用到的IO和程序设计中没有使用的IO(即在ucf或者XDC文件中没有进行约束的IO);

  • 第二类是专用下载配置引脚(Dedicated Pins),这类引脚只用于专用的功能,包括有M[2:0]、TCK、TMS、PROGRAM_B、INIT_B等。

  • 第三类为功能复用引脚,这类引脚在使用特定的功能时使用,例如在使用BPI配置模式时,D[00-31]和A[00-28]需要使用。如果使用SYSMON时,I2C_SDA和I2C_SCL需要使用。但在当前没有使用该功能的情况下,功能复用引脚可以看成普通IO。

FPGA IO的基本结构

在《IO输入输出的各种模式》介绍了处理器IO的各种输入输出模式以及原理,那么FPGA的IO是什么样的结构和原理?图 1为Xilinx文档中提供的IOB的内部结构,可以看出:

  1. 在FPGA IOB内部,Pad输出之前,内置上下拉电阻。且可以通过Passive Pull-up/Pull-down模块控制两个MOS管的导通与否来控制是否使能上下拉电阻。

  2. 内部连接Pad的分别有一个Input Buffer和Output Buffer。其中Input Buffer对外应该始终呈现高阻状态,同时可以将Pad上的电平通过Input Buffer传到I1和I2,或者是下部的FF。Output Buffer有两个控制信号,分别是Slew Rate Control,用来控制输出信号的Slew Rate;另一个是三态控制信号T,可以控制Output Buffer输出高阻。

  3. 内部输出信号Out,可以通过上半部分的FF,经Output Clock同步后打出,也可以直接连接到Output buffer的输入端,直接输出。

  4. 同样Input Buffer的输出,可以直接连接到I1和I2,也可以经过下半部分的FF,经过input clock的同步之后输出到内部总线上。

  5. 上下两个MOS并不是推挽输出的两个MOS管,因为并不受到互补信号的控制,并不一定一个导通另一个闭合。

图1

这里介绍一下输入缓存器的结构和原理,其结构如图 2所示,其原理与推挽输出电路非常类似,只是输入端信号作为了两个互补MOS管的控制端,控制着输出端的电平。由于输入缓冲器有自己的供电电压,所以输入电平必须与缓冲器的电源电压相匹配。D1和D2两个钳位二极管用于防治输入电压过低或者过高,损坏输入缓冲器。

图2

普通IO

配置完成之前

在FPGA上电到配置完成之前,由于当前FPGA还没有下载程序,无法区分哪些引脚被设计所使用,哪些引脚没有被使用。此时的普通IO包括两部分:

  1. 该封装中所有的通用IO引脚。

  2. 当前所选择的模式下没有使用到的所有功能复用管脚。

在Spartan6系列以及之前的器件中这些引脚的状态是根据HSWAPEN的状态决定的。

图3

在7系列以后的器件,包括Ultrascale器件中,这些引脚的状态是根据PUDC_B(Pull-Up During Configuration)引脚

图4

这两个引脚的功能是相似的,都是用来控制在Configuration完成之前,所有普通IO的上拉电阻是否使能的。对应到图1中,

即Output Buffer输出高阻,Input Buffer对外始终为高阻,此时选择是否连接上拉电阻。

配置完成之后

在配置完成之后,FPGA就进入正常工作的模式了。在配置完成之后,普通引脚可以分为以下两种:

  1. 工程设计中使用的IO,即在UCF或者XDC中有明确约束的IO。

  2. 其余没有使用,也没有约束的IO。(称为Unassigned Pins)

首先,对于第一种情况,由于已经在设计中明确设定了这些引脚的设置,包括方向、电平、驱动能力等等,所以在配置完成之后,这些引脚的状态已经被设置为了预设的状态。

对于没有约束的IO,又复杂一些了。在ISE开发环境下,工程完成Implement之后,在Processà Process properties àConfiguration Options中有"-g UnusedPin Unused IOB Pins"属性,可以选择Pull Down、Pull Up或者Floating。默认状态是Pull-Down。对应到图 1中,是高阻输出,导通下拉电阻。另两个设置就是高阻加上上拉电阻或者只是上下拉电阻均不导通。

在Vivado中也有相同的设置,必须在实现完成之后,打开Implementation Design之后选择bitstream Settings,其中在"Configure additional bitstream settings"中的Configuration栏中,有如下属性选择项。

图5

专用IO

所有的专用配置引脚全部位于Bank0,包括CFGBVS、M[2:0]、TCK、TMS、TDI、TDO、PRORAM_B、INIT_B、DONE以及CCLK。专用引脚的含义就是无论在配置过程中还是配置完成之后,这些引脚无论在什么阶段都只用于配置。

所以对于这些引脚考虑相对比较简单,分为输入信号和输出信号。输入信号的状态始终保持LVCMOS电平标准,电压值为VCCO(输入信号为什么也有电平标准要求,需要与Input buffer的供电电压相匹配,见图 2)。输出信号的状态始终保持LVCMOS电平标准,电压为VCCO,12mA drive,fast slew rate。

功能复用IO

相比于其他引脚,功能复用引脚的情况是最复杂的,这些管脚包括与配置相关的PUDC_B、EMCCLK、CSI_B、CSO_B、DOUT、RDWR_B、D00_MOSI、D01_DIN、D[00-31]、A[00-28]、FCS_B、FOE_B、FEW_B、ADV_B、RS0以及RS1;以及与System Monitor相关的AD0P至AD15P、AD0N至AD15N,I2C_SDA以及I2C_SCLK。

为了说清楚功能复用管脚在不同阶段的状态,将复用管脚分为以下几类:

  1. 在当前所选择的功能中使用到的功能复用管脚,例如在选择BPI配置时的D[00-31]和A[00-28]。

  2. 在当前所选择的功能中没有使用到的功能复用管脚。例如在选择SPI配置时的D[00-31]和A[00-28]。

  3. 在完成配置之前需要作为输出或者双向,总之有可能向外输出信号的管脚,例如I2C_SDA和I2C_SCLK。

实例

Pull-Up During Configuration (bar) Active-Low PUDC_B input enables internal pull-up resistors on the SelectIO pins after power-up and during configuration.

• When PUDC_B is Low, internal pull-up resistors are enabled on each SelectIO pin.

• When PUDC_B is High, internal pull-up resistors are disabled on each SelectIO pin.

PUDC_B must be tied either directly, or via a ≤ 1kΩ to VCCO_14 or GND.

Caution! Do not allow this pin to float before and during configuration.

这是什么意思呢?如下图所示,小编在xilinx VC709开发板原理图上找到的PUDC_B引脚,以后参考使用即可。

7系列的FPGA都包括一个 “PUDC_B”引脚。

  • 当“PUDC_B”为低电平时,每个“SelectIO”引脚的内置上拉电阻都被开启。

  • 当“PUDC_B”为高电平时,每个“SelectIO” 引脚的内置上拉电阻被关闭。自上电后,此引脚的电平状态一致影响I/O状态,直至配置完成。因此,上电之后,当PUDC为高电平时,I/O管脚一直保持三态。

参考链接

问题链接:
https://blog.csdn.net/fsFengQingYangheihei/article/details/51879078?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

原文参考链接:
https://blog.csdn.net/techexchangeischeap/article/details/72698529

xilinx 6系列参考手册 UG380:
chrome-extension://ibllepbpahcoppkjjllbabhnigcbffpi/https://www.xilinx.com/support/documentation/user_guides/ug380.pdf

xilinx 7系列参考手册 UG470:
chrome-extension://ibllepbpahcoppkjjllbabhnigcbffpi/https://www.xilinx.com/support/documentation/user_guides/ug470_7Series_Config.pdf

xilinx Ultra系列参考手册 UG580:
chrome-extension://ibllepbpahcoppkjjllbabhnigcbffpi/https://www.xilinx.com/support/documentation/user_guides/ug580-ultrascale-sysmon.pdf



 

FPGA   

本文分享自微信公众号 - 瓜大三哥(xiguazai_tortoise)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!