一、导图概览

二、I/O约束

2.1 I/O约束的内容

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:上升沿和下降沿变化的快慢

2.2 I/O 类型

器件中可以布局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约束的方法

    设置I/O约束,有3中界面操作方式,I/O port表格中设置,port拖入Package中设置,port拖入Device中设置,三种方式都可以实现I/O port的位置约束,在设定位置约束后,其他属性的约束就只能在I/O port界面设置。

3.1 I/O ports中约束

     I/O ports界面入口:菜单栏中Window->I/O ports,位置设置为在Package Pin列输入需要设置的位置,点击单元格左下角的向下箭头打开下拉框,显示可选项。

除了设置位置约束,还可以设置其他属性

菜单栏Window->Package打开芯片的port分布图,按bank划分,横坐标为数字,纵坐标为字母,里面的单元格就可放置IO PORT,不是所有的单元格都可以放置port,下图中红框中带有橙色长方形标注的即是已约束的IO PORT。

3.2 Package中约束

上节说到修改I/O Ports中Package Pin列的值可设置约束,下面有一种更简单的方法,鼠标左键选中需要约束port,按住左键可将port直接拖入Package中,对于放置在不可约束的位置时,会有禁止的图标(带斜杠的圆圈)出现,也会出现提示语不能放置。

约束后如果要在Package中快速找到约束的位置,可在I/O Ports界面选中port,进行highlighth或mark进行指定颜色标记,mark将在目标位置标记指定颜色背景的菱形,highlight将对目标的边框进行指定颜色的标记。

如对KEY进行mark标记,颜色为黄色,下图package视图内,将能够轻易找到位置

3.3 Device中约束

   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

3.4 差分IO

差分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。

3.5 方法对比

I/O port:可以直接进行位置约束,并且在确定位置约束后,可以进行其他属性的约束

Package约束I/O:可以直观清楚的看到各个位置在芯片中所属的bank,以及port的类型,特定属性等

Device约束I/O:可以直观清楚看到各个位置在芯片的实际物理位置,方便约束I/O后对相关网表进行约束,也可以看到I/O PORT在芯片上的内部组成模块

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐