针对使用组件模式原语的 Vivado 双向逻辑问题(IOBUF 与 IDDRE1、ISERDESE3、ODDRE1、OSERDESE3 或 FDCE/FDPE/FDRE/FDSE 配合使用,IOB=TRUE)

问题描述:

说明

该问题会影响在 Vivado 2017.1 的双向模式下使用组件模式逻辑的 UltraScale 和 UltraScale+ 设计。

对于这样的设计,应使用战术补丁确保正确的硬件功能性。不应用该补丁,设计可能会遇到硬件功能性及布线问题。

症状

该问题有两个不同的症状。
1. 硬件错误功能
2. 布线故障

确认

1. 在通过以下组件模式原语使用双向 I/O 缓冲器(IOBUF 类缓冲器与所有衍生产品)的设计中会出现错误的硬件功能性:IFD(FDCE/FDPE/FDRE/FDSE,IOB=TRUE)、IDDRE1 和 ISERDESE3。
输出为三态时,硬件中会出现该问题。输入逻辑(IFD、IDDRE1 和 ISERDESE3)数据将被输出逻辑(OFD、ODDRE1 和 OSERDESE3)错误地驱动,正确情况下应该由输入引脚的数据驱动。仿真过程中不会出现该问题。

2. 在通过以下组件模式原语使用双向 I/O 缓冲器(IOBUF 类缓冲器与所有衍生产品)的设计中会出现布线错误:OFD(FDCE/FDPE/FDRE/FDSE,IOB=TRUE)、ODDRE1 和 OSERDESE3。
Vivado 布线错误信息如下:
Checking all reachable nodes within 5 hops of driver and load

Unroute Type 1 : Site pin does not reach interconnect fabric
Type 1 : HPIOB.I->SLICEL.F5
-----Num Open nets: 1
-----Representative Net: Net[12] spi_din_io_IOBUF_inst/O
-----IOB_X2Y244/I -> SLICE_X96Y270/F5
-----Driver Term: spi_din_io_IOBUF_inst/IBUFCTRL_INST/O Load Term [49]: uart_rx_o_OBUF_inst_i_1/I0
Driver Pin does not reach Interconnect fabric within 5 hops.
Expansion wavefront from Driver was blocked by locked nodes at level: 1
Phase 3.1 Initial Routing Verification | Checksum: 1d0be91f0
...

Phase 8 Verifying routed nets
CRITICAL WARNING: [Route 35-54] Net: spi_din_io_IOBUF_inst/O is not completely routed.
Resolution: Run report_route_status for more information.

(1楼)解决方案

judyzhong 在 星期五, 08/04/2017 - 14:46 发表。

该问题将在 2017.2 版本中得到修复。已经创建了一个战术补丁,用于纠正 2017.1 版本的这种行为。

  • 不使用该补丁,就会出现布线及功能问题。
  • 使用该补丁,将纠正这一布线及功能问题。
  • 请注意:如果使用不打补丁的 Vivado 2017.1 创建设计检查点,这可能已经包含了错误的 BITSLICE 站点编程。

    使用该补丁,通过重新综合可纠正 BITSLICE 站点编程。

    安装及使用信息:

    方法 1:
    1. 引导至 $XILINX_VIVADO/patches directory(如果没有该目录,就需要创建)
    2. 将打包文档的内容解压缩至以 AR69152 名字开头的目录下
    注: 大多数提取工具都支持自动创建与打包文件同名的目录。
    3. 从原始安装位置运行 Vivado 软件工具。

    方法 2:
    1. 请为该补丁文件创建一个单独的目录
    2. 将打包文档的内容解压缩至所需的补丁目录位置。
    3. 将随点变化的 MYVIVADO 环境设置为该补丁目录下的 Vivado 目录:
    例如:set MYVIVADO=C:\MYVIVADO\vivado-patch-AR69152\vivado\
    4. 从原始安装位置运行 Vivado 软件工具。