Vivado使用技巧(13):CSV文件定义IO Ports

定义I/O Ports信息

每个完整的FPGA设计必然包含I/O Ports定义与配置环节。I/O Ports包含了FPGA内部信号、管脚、PCB之间的连接关系。常用的设计方法有两种:

  • RTL工程:完成了RTL设计后,打开一个设计(如综合后设计)并换到I/O Planning View Layout,Vivado会自动从设计中读取I/O端口导入到I/O Ports窗口中,进行后续设置。
  • I/O Planning工程:可以在设计之前预先创建此工程,只定义I/O端口。此工程还可以读取包含I/O定义的CSVXDC文件,将I/O信息导入到I/O Ports窗口。此类工程的意义是在设计前就确定好管脚约束信息,保证硬件设计与RTL设计工作同步展开。

无论是哪种工程,都可以将设计好的I/O端口导出到CSV格式文件。CSV文件是FPGA设计工程师与PCB设计工程师之间交流的一种重要文件。本文将对该文件内容及使用方法做详细介绍。


导入CSV/XDC文件

创建I/O Planning工程时,会让设计者选择需要导入的包含I/O信息的文件:
Vivado使用技巧(13):CSV文件定义IO Ports_第1张图片
如果这时选择了“Do not import I/O ports at this time”,可以在File菜单下点击Import->Import I/O Ports:
Vivado使用技巧(13):CSV文件定义IO Ports_第2张图片
弹出的窗口中选择要导入的文件:
Vivado使用技巧(13):CSV文件定义IO Ports_第3张图片
CSV是一种用于FPGA和PCB设计者之间交换信息的标准文件格式。Vivado需要一种特定的CSV格式来导入与I/O管脚相关的数据,下文将做详细介绍,大概视图如下(可用Excel打开):
Vivado使用技巧(13):CSV文件定义IO Ports_第4张图片
Vivado会解析CSV文件中的数据,如果有不能识别的信息,会显示在Package Pins窗口的user columns中。如果需要修改或创建新的与I/O相关的用户信息,该窗口右键->Set User Column Values:
Vivado使用技巧(13):CSV文件定义IO Ports_第5张图片
除了CSV文件,也可以导入XDC文件(即为常见的物理约束信息),但是XDC文件不包含I/O管脚方向,因此I/O的direction属性会显示为undefined,需要人工修改。


导出I/O管脚与封装数据

I/O Planning工程和RTL工程都可以将I/O管脚和封装信息导出到文件中,可以完成如下目标:

  • I/O管脚信息:导出I/O Port到文件中,用于RTL代码编写,或者PCB原理图符号创建;
  • Package管脚信息:导出FPGA的所有管脚信息到CSV文件中,可以帮助设计者直接在CSV文件中完成I/O端口定义。

在File菜单下点击Export->Export I/O Ports,打开如下窗口:
Vivado使用技巧(13):CSV文件定义IO Ports_第6张图片
选择需要导出的文件格式,点击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文件中定义差分信号的几种方法:

  1. 直接定义,两个端口的DiffPair Signal属性分别指向对方的Signal Name,且二者的DiffPair Type属性互补,一个为P,一个为N。Vivado还会检查I/O Standard等属性是否与差分对兼容。

  2. 单向连接定义,两个端口有互补的DiffPair Type,一个为N,一个为P,但是只有一个端口的DiffPair Signal指向另一个端口的Signal Name。如果Vivado检查到其它属性都兼容,也会创建差分对。

  3. 单端口定义,CSV文件中定义了一个带有差分I/O标准、DiffPair Type、DiffPair Signal的端口,但是没有定义另一个端口。Vivado会创建与此属性相匹配、DiffPair Type互补的另一个差分端口。

  4. 推测法定义,两个端口带有差分I/O标准(如DIFF_HSTL、DIFF_SSTL),信号名称分别带有N和P,如果Vivado检查到其它属性都兼容,也会创建差分对。

你可能感兴趣的:(FPGA)