收发器通道位置约束:set_property LOC "GTXE2_CHANNEL_X* Y*" [get_cells "gtxe_2 例化路径"]
##---------- Set placement for gt0_gtx_wrapper_i/GTXE2_CHANNEL ------
set_property LOC GTXE2_CHANNEL_X0Y8 [get_cells gtx_support_i/gtx_init_i/inst/gtx_i/gt0_gtx_i/gtxe2_i]
##---------- Set placement for gt1_gtx_wrapper_i/GTXE2_CHANNEL ------
set_property LOC GTXE2_CHANNEL_X0Y9 [get_cells gtx_support_i/gtx_init_i/inst/gtx_i/gt1_gtx_i/gtxe2_i]
##---------- Set placement for gt2_gtx_wrapper_i/GTXE2_CHANNEL ------
set_property LOC GTXE2_CHANNEL_X0Y10 [get_cells gtx_support_i/gtx_init_i/inst/gtx_i/gt2_gtx_i/gtxe2_i]
##---------- Set placement for gt3_gtx_wrapper_i/GTXE2_CHANNEL ------
set_property LOC GTXE2_CHANNEL_X0Y11 [get_cells gtx_support_i/gtx_init_i/inst/gtx_i/gt3_gtx_i/gtxe2_i]
Single - ended I/O standards (LVCMOS, LVTTL, HSTL, SSTL, PCI)
Differential I/O standards (LVDS, RSDS, TMDS, Differential HSTL and SSTL)
Differential and V REF dependent inputs are powered by V CCAUX
Vivado Error 问题警告(问题描述、可能导致的后果、纠正方法以及处理方式)如下所示:[DRC NSTD-1] Unspecified I/O Standard: 1 out of 9 logical ports use I/O standard (IOSTANDARD) value 'DEFAULT', instead of a user assigned specific value.
[DRC NSTD-1] 未指定的 I/O 标准:9 个逻辑端口中有 1 个使用 I/O 标准(IOSTANDARD)值 'DEFAULT',而不是用户指定的具体值。
This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or in extreme cases cause damage to the device or the components to which it is connected.
这可能会导致 I/O 冲突,或者与电路板电源或连接不兼容,进而影响性能、信号完整性,在极端情况下,还可能损坏设备或与其相连的组件。
To correct this violation, specify all I/O standards. This design will fail to generate a bitstream unless all logical ports have a user specified I/O standard value defined.
要纠正此违规问题,请指定所有的 I/O 标准。除非为所有逻辑端口定义了用户指定的 I/O 标准值,否则此设计将无法生成比特流。
To allow bitstream creation with unspecified I/O standard values (not recommended), use this command: set_property SEVERITY {Warning} [get_drc_checks NSTD-1]. NOTE: When using the Vivado Runs infrastructure (e.g. launch_runs Tcl command), add this command to a .tcl file and add that file as a pre-hook for write_bitstream step for the implementation run.
若要在未指定 I/O 标准值的情况下允许生成比特流(不推荐),请使用以下命令:set_property SEVERITY {Warning} [get_drc_checks NSTD-1]。注意:在使用 Vivado Runs 基础架构(例如 launch_runs Tcl 命令)时,将此命令添加到一个.tcl 文件中,并将该文件作为实现运行的写比特流步骤的预挂钩文件。
Problem ports: SYS_CLK.
问题端口:SYS_CLK
在 IO 设置界面如下所示:
由于 IO 工作电压未明确定义,因此需要进行以下操作。
2. 解决方法
新建一个 .tcl 文件,写入以下内容:
在 Vivado 设置中加入该文件:
重新编译后,错误警告消失。
Vivado 中关于管脚约束错误的一种解决方法
在 Vivado 设计环境中,部分 IP 核已预集成模块引脚配置功能,在设计约束文件编制过程中,对应引脚配置相关约束设置可省略。然而,在执行位码流生成操作时,系统可能产生以下错误提示信息:
16 out of 22 logical ports have no user-assigned specific location constraint (LOC).
22 个逻辑端口中有 16 个没有用户指定的具体位置约束(LOC)。
This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or, in extreme cases, cause damage to the device or the components to which it is connected.
这可能导致 IO 竞争、板卡电源或连接不兼容,从而影响性能、信号完整性,或者在极端情况下损坏设备或与其连接的组件。
To correct this violation, specify all pin locations.
为修正此违规,请指定所有引脚的位置。
This design will fail to generate a bitstream unless all logical ports have a user-specified site LOC constraint defined.
除非为所有逻辑端口定义了用户指定的站点位置约束,否则此设计将无法生成比特流文件。
To allow bitstream creation with unspecified pin locations (not recommended), use this command:
若要允许在未指定引脚位置的情况下生成比特流文件(不推荐),可以使用以下命令:
NOTE:
注意:**
When using the Vivado Runs infrastructure (e.g., launch_runs Tcl command), add this command to a .tcl file and add that file as a pre-hook for the write_bitstream step for the implementation run.
当使用 Vivado 的运行基础架构(例如,launch_runs Tcl 命令)时,需将此命令添加到一个 .tcl 文件中,并将该文件作为实现运行的 write_bitstream 步骤的前置钩子。
set_property LOC PLLE2_ADV_X0Y2 [get_cells -hier -filter {NAME =~ */u_ddr3_infrastructure/plle2_i}]
set_property LOC MMCME2_ADV_X0Y2 [get_cells -hier -filter {NAME =~ */u_ddr3_infrastructure/gen_mmcm.mmcm_i}]
set_property LOC BUFHCE_X0Y59 [get_cells -hier -filter {NAME =~ */u_ddr3_infrastructure//u_bufh_pll_clk3}]
SRIO 相关约束:
set_property LOC MMCME2_ADV_X0Y0 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/srio_mmcm_inst]
set_property LOC MMCME2_ADV_X0Y1 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/srio_mmcm_inst]
set_property LOC MMCME2_ADV_X0Y2 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/srio_mmcm_inst]
set_property LOC MMCME2_ADV_X0Y3 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/srio_mmcm_inst]
set_property LOC BUFHCE_X1Y0 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/gt_clk_bufh_inst]
set_property LOC BUFHCE_X1Y1 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/phy_clk_bufh_inst]
set_property LOC BUFHCE_X1Y2 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/drpclk_bufh_inst]
set_property LOC BUFHCE_X1Y3 [get_cells srio_ctrl_inst/u_srio_1x/SRIO_CORE_INST/srio_x1_clk_inst/gt_pcs_clk_bufh_inst]
set_property LOC BUFHCE_X1Y12 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_clk_inst]
set_property LOC BUFHCE_X1Y13 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/phy_clk_bufh_inst]
set_property LOC BUFHCE_X1Y14 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_drpclk_inst]
set_property LOC BUFHCE_X1Y15 [get_cells srio_ctrl_inst/u_srio_4x/u1_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_pcs_clk_inst]
set_property LOC BUFHCE_X1Y24 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_clk_inst]
set_property LOC BUFHCE_X1Y25 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/phy_clk_bufh_inst]
set_property LOC BUFHCE_X1Y26 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_drpclk_inst]
set_property LOC BUFHCE_X1Y27 [get_cells srio_ctrl_inst/u_srio_4x/u2_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_pcs_clk_inst]
set_property LOC BUFHCE_X1Y36 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_clk_inst]
set_property LOC BUFHCE_X1Y37 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/phy_clk_bufh_inst]
set_property LOC BUFHCE_X1Y38 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_drpclk_inst]
set_property LOC BUFHCE_X1Y39 [get_cells srio_ctrl_inst/u_srio_4x/u3_srio_4x_ctrl_1/SRIO_INST_4x/srio_clk_inst/BUFH_gt_pcs_clk_inst]
2. ADV7931 SDI 芯片 IIC 配置时序
发现问题:IIC 读寄存器数据时,一次对一次错。
排查问题:用 ILA 抓取 IIC 时序,发现有时 ACK 不能正确响应。
解决问题:该芯片时序要求比较严格。读取最后一个数据之后到读取停止之间必须为一个 No ACK,否则会导致下一次读取数据出错。
3. AD LTC2141 接口逻辑问题
发现问题:图像采集后噪点很多。
排查问题:用示波器在板上测试,波形良好;用 ILA 发现采集到的数据毛刺很多,且存在明显的时钟与数据不对齐现象。
解决问题:硬件上没有为 LVDS 信号的时钟和数据做终端匹配电阻,逻辑代码中增加终端匹配电阻。
读懂用好 Timing Constraints 窗口
随着设计复杂度和调用 IP 丰富度的增加,在调试时序约束的过程中,用户常常会对除顶层约束外所涉及的繁杂的时序约束感到困惑,不知如何下手。例如,XDC 文件中未指定 set_false_path,但某些路径在分析时却被忽略,如何定位这些约束的设定位置?
评估完成后,如果需要保存所作的修改,可以在 Close Design 时选择 Save Constraints,工具会自动选择标记为 Target 的 XDC 文件进行保存。如果不想改动原始约束或者不需要保存全部改动,可以在退出设计时忽略 Save Constraints,之后再手动修改设计中的约束文件,加入想要的改动。
总结
以上内容对 Vivado IDE 中的 Timing Constraints 窗口进行了介绍。与 write_xdc 命令相比,其最大的优势是能直观显示设计中所有约束的分组及来源,为时序约束的查看、验证及假设分析提供了比较方便的接口。结合其他调试手段,可以提升设计效率。
时序约束窗口下方的 All Constraints 按照 XDC 文件和 Tcl 脚本中的顺序,或者在 Tcl 控制台中输入约束的顺序显示时序约束。如果某些约束不能在该窗口中编辑,则会标记为 No Edit 状态,前面有一个 ? 图标。
时序约束窗口中显示了所有存在约束的详细信息,并且可以直接编辑。左边以目录的形式列出了各种约束类型。右边双击最后一行可以创建当前所选类型的一个新约束,弹出窗口中完善约束信息。点击 OK 即可将约束在内存中应用,但只有点击 Save Constraints 后才会保存到 XDC 文件中。例如,创建一个新的时钟约束,弹出窗口如下:
另外,IP 核约束是无法编辑或删除的。如果需要进行此类操作,可以禁用 IP 核发布的约束文件,将其中的内容复制粘贴到用户 XDC 中,即可进行编辑操作。
保持时间违规(hold time violation):
保持时间违规通常由时钟树的偏移(clock tree skew)导致。主要解决原则是增加前一级组合逻辑的延迟,例如添加缓冲器(buffer)。当保持时间不满足要求时,需使前一级的延迟足够大,至少比时钟周期(clock period)多出一个保持时间。此外,也可适当缩短时钟周期。然而,保持时间并非完全可控,处理起来较为棘手。