I/O约束主要是对port的位置和电气特性进行设置,进入菜单栏Window的IO Ports,可以查看可约束的相关内容。
一些port的常用特性解释如下
Name: port的名称
Direction:port的输入输出类型,有三种,输入in,输出out,双向端口inout
Package Pin:port约束的位置
I/O Std:port的IO标准
Bank:port所属的时钟区域
Vcco:电源供电电压
Fixed:是否固定位置
Vref:参考信号电压
Driver strength:输出buffer的驱动强度,单位是mA,和I/O标准有关联关系
Slew type:上升沿和下降沿变化的快慢
器件中可以布局I/O的pin类型可以查看Package的设置界面,菜单栏Window->Package打开芯片的port分布图,点击右上角的红框内的设置图标,展开查看界面
在Pins组中,对Package的pin进行了分类
Power Supply Pins:电源供应引脚,如电源VCC和接地GND等
Transceiver Pins:高速收发器的引脚
I/O and Multi-Function Pins:放置I/O的引脚,用户使用频率最多的
Temperature Sensor Pins:温度传感器引脚
Dedicated Configuration Pins:降级配置引脚,在该位置,时钟端口不需要降级参数设置能不上时钟树到时钟load
Dedicated XADC Pins:降级的XADC引脚
设置I/O约束,有3中界面操作方式,I/O port表格中设置,port拖入Package中设置,port拖入Device中设置,三种方式都可以实现I/O port的位置约束,在设定位置约束后,其他属性的约束就只能在I/O port界面设置。
I/O ports界面入口:菜单栏中Window->I/O ports,位置设置为在Package Pin列输入需要设置的位置,点击单元格左下角的向下箭头打开下拉框,显示可选项。
除了设置位置约束,还可以设置其他属性
菜单栏Window->Package打开芯片的port分布图,按bank划分,横坐标为数字,纵坐标为字母,里面的单元格就可放置IO PORT,不是所有的单元格都可以放置port,下图中红框中带有橙色长方形标注的即是已约束的IO PORT。
上节说到修改I/O Ports中Package Pin列的值可设置约束,下面有一种更简单的方法,鼠标左键选中需要约束port,按住左键可将port直接拖入Package中,对于放置在不可约束的位置时,会有禁止的图标(带斜杠的圆圈)出现,也会出现提示语不能放置。
约束后如果要在Package中快速找到约束的位置,可在I/O Ports界面选中port,进行highlighth或mark进行指定颜色标记,mark将在目标位置标记指定颜色背景的菱形,highlight将对目标的边框进行指定颜色的标记。
如对KEY进行mark标记,颜色为黄色,下图package视图内,将能够轻易找到位置
I/O ports不仅可以在Package中进行位置约束,也可以在Device窗口中进行约束,I/O的约束位置即为左右两侧Banks的区域
操作:在I/O Ports中选中要约束的port,将Device图中BANK区域放大,可以看到各个位置的坐标。port中包含INBUF和OUTBUF说明即可以放置input port,也可以放置output port。
在Package pin列中输入要在Device放置的位置,放置后在Device中可以手动拖动进行位置修改。port原先约束在AA19,选中AA19中pad的位置,按照左键移动到W18,即可将其约束到W18
差分IO是一种比较特殊的IO,必须成对的使用,占用2个port的位置,约束时对位置有限制。
可以使用后缀带DS的原语进行例化出查分端口
示例代码
module lut_ff(clk,C,R,CE,out,I,IB);
input clk,C,CE,R,I,IB;
output out;
IBUFDS #(
.DIFF_TERM("TRUE"), // Differential Termination
.IBUF_LOW_PWR("TRUE"), // Low power="TRUE", Highest performance="FALSE"
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
) IBUFDS_inst (
.O(o_ibufds), // 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)
);
FDRE #(
.INIT(1'b1) // Initial value of register (1'b0 or 1'b1)
) FDRE_inst (
.Q(out), // 1-bit Data output
.C(C), // 1-bit Clock input
.CE(CE), // 1-bit Clock enable input
.R(R), // 1-bit Synchronous reset input
.D(o_ibufds) // 1-bit Data input
);
endmodule
差分IO中分为P端口和N端口,位置不能反。在I/O ports中,I对应的Neg Diff Pair有对应的端口IB。
将I和IB约束位置交换时,提示交换无效。
在Device界面中,可以看到I布局在IO_L21P位置,IB布局在IO_L21N位置。在其他位置也都存在名称后面带P,N支持放置差分端口的位置,而像左上角AG15,则只能放单端口的port。
I/O port:可以直接进行位置约束,并且在确定位置约束后,可以进行其他属性的约束
Package约束I/O:可以直观清楚的看到各个位置在芯片中所属的bank,以及port的类型,特定属性等
Device约束I/O:可以直观清楚看到各个位置在芯片的实际物理位置,方便约束I/O后对相关网表进行约束,也可以看到I/O PORT在芯片上的内部组成模块