引言:本文我们简单介绍下Xilinx FPGA管脚物理约束,包括位置(管脚)约束和电气约束。
1. 普通I/O约束
管脚位置约束: set_property PAKAGE_PIN “管脚编号” [get_ports “端口名称”]
管脚电平约束: set_property IOSTANDARD “电压” [get_ports “端口名称”]
举例:
set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property PACKAGE_PIN U18 [get_ports sys_clk]
set_property PACKAGE_PIN M14 [get_ports {led[0]}
]set_property PACKAGE_PIN M15 [get_ports {led[1]}]
注意:
1)以上语法对大小写敏感;
2)端口名称为数组时,需要用{}括起来,端口名不能为关键字。
2. 差分信号约束
2.1 普通差分约束
差分信号约束语法和1节中相同。此处仅举例。
1)HR I/O Bank,VCCO = 3.3V,HDMI接口约束
set_property PACKAGE_PIN N18 [get_ports TMDS_clk_p]
set_property PACKAGE_PIN V20 [get_ports {TMDS_data_p[0]}]
set_property IOSTANDARD TMDS_33 [get_ports TMDS_clk_p]
set_property IOSTANDARD TMDS_33 [get_ports {TMDS_data_p[0]}]
2)HP I/O Bank,VCCO = 1.8V,HDMI接口约束
set_property PACKAGE_PIN N18 [get_ports TMDS_clk_p]
set_property PACKAGE_PIN V20 [get_ports {TMDS_data_p[0]}
]set_property IOSTANDARD LVDS [get_ports TMDS_clk_p]
set_property IOSTANDARD LVDS [get_ports {TMDS_data_p[0]}]
注意:
1)差分信号约束,只约束P管脚即可,系统自动匹配N管脚约束,当然_P和_N管脚都约束也没有问题;
2)差分信号电平要根据VCCO Bank电压进行相应的约束。
2.2收发器差分信号约束
1)收发器MGTREFCLK时钟约束管脚位置约束:
set_property LOC “管脚编号” [get_ports “端口名称”]
举例:
set_property LOC G7 [get_ports Q2_CLK0_GTREFCLK_PAD_N_IN ]
set_property LOC G8 [get_ports Q2_CLK0_GTREFCLK_PAD_P_IN ]
2)收发器MGT通道约束
对于GTXE2_CHANNEL通道约束:一种方法是可以利用7系列FPGAs收发器向导,在配置好收发器配置参数后,自动生成XDC模板,然后将该模板应用到自己的设计中;第二种方法是自己编写XDC约束文件,其位约束位置要参照具体原理图信号管脚来进行编写约束文件。举例:对于图1中四通道收发器对GTXE2_CHANNEL约束。
图1、四通道GTX收发器框图
收发器通道位置约束:
set_property LOC “ GTXE2_CHANNEL_X* Y * ” [get_cells “gtxe_2例化路径”]
举例:
图2、收发器通道位置约束
注意:gtxe_2例化路径参照图3所示,路径名称依据具体工程实现进行修改。
图3、gtxe_2例化路径参照图