1.3 UltraScale系列selectio之IO的约束原则(上)



这是介绍Xilinx官方手册的第6篇文章

内容简介

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、I/O标准


    有了引脚的位置约束,还需要做的是I/O标准的约束,也就是表示这个引脚承载的电信号的特性,包括了电平大小和电路连接关系等等,通过如下的IOSTANDARD约束可实现。


set_property IOSTANDARD value [get_ports port_name]


    具体约束因与外设电路对应,例如电灯和lvds通讯的不可能用相同的电平标准,高速串行通讯也不可能与低速串行通讯用一个标准,唯有指定了I/O标准,软件才能对芯片做正确的配置。


    xilinx支持的I/O标准即XXX文章中所表示内容。其中“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、IBUF_LOW_PWR 属性


    这是一个与功耗相关的约束,如果设为“TURE”使能该属性,则表示对应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。对于HR的斜率的设定有“SLOW”和“FAST”两种情况,HP多加了“MEDIUM”设定,但默认都是“SLOW”,约束格式为:


set_property SLEW value [get_ports port_name] 


    这有助于在非关键信号切换是最大程度江都电源总线瞬变的默认值。对于高性能应用,例如DDR这种,需指定斜率为FAST,但如果硬件电路设计不当,例如终端、传输线路阻抗连续性和交叉耦合设计不当,则更快的斜率也会导致反射或噪声问题。所以,一般来讲默认即可。


6、输出驱动强度 


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



约束为:

set_property DRIVE drive_value [get_ports port_name]


7、PULLTYPE属性


    xilinx对IO内置了上拉、下拉电阻,可针对输入BUF、输出BUF及双向BUF实现弱上拉、弱下拉和保持功能。其约束如下所示:


set_property PULLTYPE value [get_ports port_name]

value的值可选为如下四种之一:

• NONE

• PULLUP

• PULLDOWN

• KEEPER


8、片上终端 (ODT) 属性

    

    ODT是On-Die Termination的缩写,译为片上终端,也就是集成在IOB上的终端电阻。与片上终端对应的则是焊在PCB上的终端电阻,这会产生电阻到引脚的短截线影响信号的完整性,片上终端则完全没有这方面的顾虑,所以片上终端可以更好的提高信号的完整性。


    一般高频信号需要加终端电阻来减少反射波和干扰原信号,对于低频信号则不需要,在HSTL、 SSTL、 POD 和 HSUL 标准的输入上支持戴维南终端电阻或单端上拉终端电阻。I/O bank 的 VCCO 必须连接到对应I/O标准指定电压上,ODT 属性才能按预期执行,其约束如下图所示:


set_property ODT value [get_ports port_name]


value值可选为如下值,具体选择需根据I/O标准的支持情况以及设计电路的需求。其中RTT_40表示40Ω电阻。

• RTT_40

• RTT_48

• RTT_60

• RTT_120

• RTT_240

• RTT_NONE


9、源端接属性 (OUTPUT_IMPEDANCE)

    

    源短接即Source Termination,表示在信号的发起端添加的端接电阻,用于与信号线的特性阻抗匹配。


    UltraScale系列FPGA用OUTPUT_IMPEDANCE来对此进行约束,约束命令如下所示:


set_property OUTPUT_IMPEDANCE value [get_ports port_name]


value可设置值如下,数字表示对应的欧姆值。

• RDRV_40_40

• RDRV_48_48

• RDRV_60_60

• RDRV_NONE_NONE

    

    OUTPUT_IMPEDANCE一版支持的I/O标准有 HSTL、SSTL、 HSUL、LVDCI、 HSLVDCI 和 POD ,并支持带有DCI和不带有DCI的两种标准。具体值得选择需根据I/O标准得允许设置范围及实际电路来决定。


10、差分端接属性


    差分端接也就是Differential Termination,针对差分信号内置了100Ω的差分端接电阻,可以在片内进行终端匹配,避免了PCB上挂电阻的麻烦,也避免了因电阻到引脚的短截线所引发的问题。此外,与DCI相比功耗更低,且不用VRP引脚外接电阻做参考。


    对于HP BANK,VCCO必须接到1.8V,HR BANK的VCCO必须接到2.5V。且仅可应用于终端,不能用于源端。约束命令有两个即DIFF_TERM和DIFF_TERM_ADV,其中 DIFF_TERM_ADV可用于XDC文件的约束命令, DIFF_TERM是在调用原语是可配置的选项。这两个只需要用一个即可,应该是或的关系。约束命令如下所示:


set_property DIFF_TERM_ADV value [get_ports port_name]


    value值可为TERM_NONE或TERM_100,也就是是否使能端接电阻,默认是不使能的。





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

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

<