1. IO约束分类
- 管脚约束和延迟约束
2. 管脚约束
- 管脚约束就是指管脚分配
- 需要设置两个属性PACKAGE_PIN:管脚位置 和 IOSTANDARD:管脚的电平标准
- 在vivado中,在xdc中对管脚约束的例子
set_property -dict {PACKAGE_PIN AJ16 IOSTANDARD LVCMOS18} [get_ports "led[0]" ]
- 这里有一个注意点,对差分信号的约束:
- 管脚约束除了管脚位置和电平,还有端接,当使用IBUFDS来处理输入的差分信号时,可以指定端接为TRUE
I 和 IB 是差分输入信号IBUFDS #( .DIFF_TERM("TRUE"), // Differential Termination .IOSTANDARD("DEFAULT") // Specify the input I/O standard ) IBUFDS_inst ( .O(O), // Buffer output .I(I), // Diff_p buffer input (connect directly to top-level port) .IB(IB) // Diff_n buffer input (connect directly to top-level port) );
- 但在Ultrascale中的IBUFDS,却把端接这个选项去掉了,所以要在I/O Ports界面中,手动指定。
3. 延迟约束
- 延迟约束使用set_input_delay 和 set_output_delay
- 约束的时钟源可以是时钟输入管脚,也可以是虚拟时钟
- set_input_delay:
set_input_delay告诉的是输入信号和输入时钟之间的延迟关系,它属于FPGA外部的延迟,并不能
- set_output_delay: 与set_input_delay类似
- 如果想要调整输入信号的延迟,只能使用IDELAY