定义I/O Ports信息
每个完整的FPGA设计必然包含I/O Ports定义与配置环节。I/O Ports包含了FPGA内部信号、管脚、PCB之间的连接关系。常用的设计方法有两种:
1. RTL工程:完成了RTL设计后,打开一个设计(如综合后设计)并换到I/O Planning View Layout,Vivado会自动从设计中读取I/O端口导入到I/O Ports窗口中,进行后续设置。
2. I/O Planning工程:可以在设计之前预先创建此工程,只定义I/O端口。此工程还可以读取包含I/O定义的CSV或XDC文件,将I/O信息导入到I/O Ports窗口。此类工程的意义是在设计前就确定好管脚约束信息,保证硬件设计与RTL设计工作同步展开。
无论是哪种工程,都可以将设计好的I/O端口导出到CSV格式文件。CSV文件是FPGA设计工程师与PCB设计工程师之间交流的一种重要文件。本文将对该文件内容及使用方法做详细介绍。
导入CSV/XDC文件
创建I/O Planning工程时,会让设计者选择需要导入的包含I/O信息的文件:
如果这时选择了“Do not import I/O ports at this time”,可以在File菜单下点击Import->Import I/O Ports:
弹出的窗口中选择要导入的文件:
CSV是一种用于FPGA和PCB设计者之间交换信息的标准文件格式。Vivado需要一种特定的CSV格式来导入与I/O管脚相关的数据,下文将做详细介绍,大概视图如下(可用Excel打开):
Vivado会解析CSV文件中的数据,如果有不能识别的信息,会显示在Package Pins窗口的user columns中。如果需要修改或创建新的与I/O相关的用户信息,该窗口右键->Set User Column Values:
除了CSV文件,也可以导入XDC文件(即为常见的物理约束信息),但是XDC文件不包含I/O管脚方向,因此I/O的direction属性会显示为undefined,需要人工修改。
导出I/O管脚与封装数据
I/O Planning工程和RTL工程都可以将I/O管脚和封装信息导出到文件中,可以完成如下目标:
1. I/O管脚信息:导出I/O Port到文件中,用于RTL代码编写,或者PCB原理图符号创建;
2. Package管脚信息:导出FPGA的所有管脚信息到CSV文件中,可以帮助设计者直接在CSV文件中完成I/O端口定义。
在File菜单下点击Export->Export I/O Ports,打开如下窗口:
选择需要导出的文件格式,点击OK即可。
CSV文件格式
CSV文件中的每一列定义了与I/O端口和封装引脚相关的信息,下面给出具体介绍:
I/O Bank:规定了管脚所处的I/O bank。导出的CSV文件中,Vivado会为FPGA的所有管脚设置此值。导入的CSV文件中不需要此属性。
Pin Number:规定了封装管脚的位置。导出的CSV文件中,Vivado会为FPGA的所有管脚设置此值。导入的CSV文件中此属性用于定义I/O端口的布局。
Site:规定了封装管脚的可替代名称。该值由Vivado设置,导入的CSV文件中不需要此属性。2016.1之前的Vivado版本中该属性称作IOB Alias。
Site Type:规定了FPGA datasheet中的管脚名称。该值由Vivado设置,导入的CSV文件中不需要此属性。
Min/Max Trace Delay(ps):规定了钢模衬垫(pad site of the die)与封装球之间的延迟(ball on the package),以ps为单位。该值由Vivado设置,该属性只能出现在导出的CSV文件中。
Prohibit:I/O设置了Prohibit属性后,可以阻止用户I/O被赋值到该I/O。合理使用该属性可以有效地减少信号之间的交叉干扰、避免易犯的板级布线问题。
Interface:用户可以将任意用户I/O(包括总线)分为一组,称作接口(Interface)。比如可以将内存的数据、地址、使能信号放在一个接口内,建立之间的联系。
Signal Name:FPGA设计中使用的用户I/O名称。
Direction:信号的方向,输入IN、输出OUT、双向INOUT。
Diffpair Type:用于差分信号定义,值为P或N,指示了该管脚为差分对的P极还是N极。
Diffpair Signal:规定了该管脚在差分对中的另一个管脚的名称。
IO Standard:规定了用户I/O所使用的I/O标准。如果为空,Vivado会根据FPGA选择一个合适的默认值。
Drive:用户I/O在指定I/O标准下的驱动强度,不是所有的I/O标准都可以设置驱动强度。如果为空Vivado会使用默认值。
Slew Rate:用户I/O在指定I/O标准下的压摆率,不是所有的I/O标准都可以设置压摆率。如果为空Vivado会使用默认值。值可以选为FAST或SLOW,UltraScale系列还可以选择MEDIUM。
OUTPUT_IMPEDANCE:规定了用于匹配特征阻抗的驱动阻抗,定义了驱动器源端的端接值。只适用于UltraScale架构。
PER_EMPHASIS:允许一些I/O标准的预加强,通过减少码间干扰和最小化传输线损失影响,提高高频信号的信号完整性。只适用于UltraScale架构。
LVDS_PRE_EMPHASIS:允许LVDS I/O标准的预加强,通过减少码间干扰和最小化传输线损失影响,提高高频信号的信号完整性。只适用于UltraScale架构。
Pull Type:规定了端口的上下拉类型,当使用3态输出(OBUFT)或双向缓存器(IOBUF)时,输出可以配置一个弱上拉电阻、弱下拉电阻或弱保持电路。对于输入缓存器(IBUF),输入可以配置一个弱上拉电阻或弱下拉电阻。
IN_TERM/OUT_TERM:定义可选的IN_TERM或OUT_TERM驱动阻抗,大多数情况下此值为空,因为目前FPGA产品还不支持该属性的设置。只适用于7系列FPGA。
DQS_BIAS:定义伪差分输入和真差分IO标准输入的可选DC偏置。只适用于UltraScale结构。
DIFF_TERM:开启或关闭内部的差分端接。
OFFCHIP_TERM:规定了I/O外部PCB上用到的端接。设置此值主要为了用于SSN分析(参考本系列第16篇)。
Board Signal:规定了由PCB进入到FPGA I/O所使用的信号名称,Signal Name是FPGA内部设计所使用的名称,两者本质所指对象相同)。
Board Voltage:规定了由PCB进入到FPGA I/O的信号的电压等级。
ODT:报告了设计的可选片上端接,只适用于UltraScale架构。
接下来再介绍下在CSV文件中定义差分信号的几种方法:
直接定义,两个端口的DiffPair Signal属性分别指向对方的Signal Name,且二者的DiffPair Type属性互补,一个为P,一个为N。Vivado还会检查I/O Standard等属性是否与差分对兼容。
单向连接定义,两个端口有互补的DiffPair Type,一个为N,一个为P,但是只有一个端口的DiffPair Signal指向另一个端口的Signal Name。如果Vivado检查到其它属性都兼容,也会创建差分对。
单端口定义,CSV文件中定义了一个带有差分I/O标准、DiffPair Type、DiffPair Signal的端口,但是没有定义另一个端口。Vivado会创建与此属性相匹配、DiffPair Type互补的另一个差分端口。
推测法定义,两个端口带有差分I/O标准(如DIFF_HSTL、DIFF_SSTL),信号名称分别带有N和P,如果Vivado检查到其它属性都兼容,也会创建差分对。
文章来源:FPGADesigner的博客
*本文由作者授权转发,如需转载请联系作者本人