1.6 7系列FPGA的IO约束无外乎这十条,来了解下



内容简介

2024-01-31

全文共2547字,阅读大约需要6分钟,Xilinx的引脚称为SelectIO,对于每个引脚都可以有不同的电气特点,例如IO标准、电压幅值、输出强度,也都可以有不同的使用方法,例如单端和差分,是否启用上拉下拉,这些都可以通过约束来实现,但也不是唯一的实现方法。


1、DCI_CASCADE约束


    这是关于DCI的级联约束,Xilinx允许同列多BANK级联共享VRP/VRN,下面这条约束就是确定主BANK和从BANK的,具体如何实现级联可参考相关文章。

 set_property DCI_CASCADE {slave_banks} [get_iobanks master_bank]  



2、位置约束


     位置约束也就是确定外设与FPGA进行数据交互的引脚,可以使用PACKAGE_PIN来进行约束,使用方式为如下。


set_property PACKAGE_PIN pin_name  [get_ports port_name]

    “pin_name”是xilinx对芯片引脚定义的名字。“port_name”是我们对该引脚应用起的名字。例如我们用P22引脚来连接led灯,则约束可描述为:

set_property PACKAGE_PIN P22 [get_ports led]



3、电平标准


有了引脚的位置约束,还需要做的是电平约束,这个因与外设电路对应,例如电灯和lvds通讯的不可能用相同的电平标准,高速串行通讯也不可能与低速串行通讯用一个标准,唯有指定了电平标准,软件才能对芯片做正确的配置,xdc约束原语如下:

set_property IOSTANDARD value [get_ports port_name]

其中“value”是我们约束的I标准,xilinx支持的范围非常广泛有70多种,例如我们熟悉的LVTTL、LVCMOS18,也有应用比较少的HSTL_I_DCI_12,当然并不是所有的芯片所有引脚都支持这么多种电平标准,例如HR和HP的bank是有区别的,A7和K7也是有区别的,但对于FPGA逻辑设计者来说,这到不用太过考虑用什么,硬件工程师早已在硬件设计时绑定好了,我们只需了解和正确的约束。“port_name”是我们对该引脚应用起的名字。例如我把绑定到led灯的引脚电平约束为LVTTL,则可描述为:

set_property IOSTANDARD LVTTL [get_ports led]



4、IObuf 的功耗


     这是一个与功耗相关的约束,如果使能该属性,则表示对应IO在低功耗下运行,如果不使能,则是在高功耗下运行,而低功耗和高功耗的带来的差别体现在性能上,性能的变化反应在通过I/O BUF的延迟上,使用方式如下:

set_property IBUF_LOW_PWR TRUE|FALSE [get_ports port_name]

例如对led灯对应引脚使能高性能

set_property IBUF_LOW_PWR  FALSE [get_ports led]

当然,这仅是一个例子,实际这样做事没有必要的,对于led秒级的电平编号,buf带来的延时可以忽略不计,也因此xilinx建议预期以 ≥1600 Mb/s 的数据速率运行的接收器,此属性应设置为 FALSE。

另外我们也可以通过XPE来分析关闭前后的功耗变化,也可以从静态时序报告中看出使能前后的区别。该属性主要应用于LVDS、HSTL等高速电平标准,对于LVTTL设置是无效的。


5、输出斜率 


“SLEW”该属性描述的是对于输出BUF提供可选的斜率,支持LVCMOS、LVTTL, SSTL、HSTL、MOBILE_DDR、HSUL和lvds的输出buf。斜率的设定有“SLOW”和“FAST”两种情况,默认的是“SLOW”,约束格式为:

set_property SLEW value [get_ports port_name]

其中“value”可为“SLOW”或“FAST”,默认为“SLOW”。这有助于在非关键信号切换是最大程度江都电源总线瞬变的默认值。

对于高性能应用,例如DDR这种,需指定斜率为FAST,但如果硬件电路设计不当,例如终端、传输线路阻抗连续性和交叉耦合设计不当,则更快的斜率也会导致反射或噪声问题。



6、输出驱动强度 


1.5.6 

对于 LVCMOS 和 LVTTL 输出缓存,可以使用 DRIVE 属性指定驱动能够安全地驱动到有效逻辑电平(以 mA 为单位)的负载。默认为12mA。



约束为:

set_property DRIVE drive_value [get_ports port_name]


7、PULLUP/PULLDOWN/KEEPER


1.5.7 

xilinx对IO内置了上拉、下拉电阻,可以实现弱上拉、弱下拉和保持功能。

set_property PULLUP true [get_ports]

set_property PULLDOWN true [get_ports]

set_property KEEPER true [get_ports]

1.5.8 

8、差分终端电阻


一般高频信号需要加终端电阻来减少反射波和干扰原信号,对于低频信号则不需要,xilinx的I/O内置了100Ω的终端电阻,可以支持以下这几种电平标准

• LVDS

• LVDS_25

• MINI_LVDS_25

• PPDS_25

• RSDS_25

其中VCCO必须连接到1.8V为LVDS,其他差分I/O标准为2.5V,以提供有效的差分终端电阻100Ω。

set_property DIFF_TERM value [get_ports port_name]

DIFF_TERM仅可用于输入,并且只能使用适当的VCCO电压。


9、Internal VREF


BANK上的IO有VERF这一多功能引脚,可以作为该BANK的输入引脚的参考电压来使用,例如SSTL IO标准就需要这样一个参考电压。而Xilinx为我们提供了可选方案,也就是内部通过INTERNAL_VREF约束来生成一个vref,它是由VCCAUX 供电,如果使用约束来获取VERF支持的电压值,对应的引脚则可作为普通IO引脚来正常使用。

例如BANK 14的HSTL_II(1.5V)需要0.75V的参考电压,则约束可以描述为:

set_property INTERNAL_VREF 0.75 [get_iobanks 14]

约束可以设置的值有0.60、0.675、0.75和0.9四种。

1.5.10 


10、VCCAUX_IO约束


首先,VCCAUX_IO是用于HP BANK的,约束规则如下所示。默认是DONTCARE,可以设置为HIGH,表示引脚接到了2V,也可以设置为NORMAL,表示接到了1.8V。

set_property VCCAUX_IO {NORMAL|HIGH|DONTCARE} [get_ports]

并且需要注意的是,如果某个BANK设置VCCAUX_IO为HIGH,则其他引脚只能设置为HIGH或DONTCARE。如果某个BANK设置VCCAUX_IO为NORMAL,则其他引脚只能设置为NORMAL或DONTCARE。






快来扫描下方二维码关注公众号,领取站内所有相关资料,所有哦~

有建议、有需求、有疑问、联系我

<