xilinx FPGA IOB约束使用以及注意事项

xilinx FPGA IOB约束使用以及注意事项

一、什么是IOB约束

在xilinx FPGA中,IOB是位于IO附近的寄存器,是FPGA上距离IO最近的寄存器,同时位置固定。当你输入或者输出采用了IOB约束,那么就可以保证从IO到达寄存器或者从寄存器到达IO之间的走线延迟最短,同时由于IO的位置是固定的,即存在于IO附近,所以每一次编译都不会造成输入或者输出的时序发生改变。

二、为什么要使用IOB约束

考虑一个场景,当你用FPGA写了一个spi模块,将时钟、片选和数据线绑定到FPGA的IO管脚,如果没有加IOB约束的话,综合工具在布局布线的时候直接将FPGA内部寄存器输出连到IO上,但是这样存在一定的问题,每次修改逻辑重新编译的时候,输出寄存器的位置有可能发生改变,那么从寄存器输出到IO之间的布线长度就会发生变化,造成寄存器输出到达IO之间的走线延迟发生改变,每一次编译都会使得spi的输出时序不确定。

为了解决这个问题,需要加入IOB约束,将模块输出端口的最后一级寄存器放在IOB上,这样最后一级输出的寄存器位置就固定下来了,每次编译都不会造成输出时序发生改变。

IOB约束使用方法如下:
1、在约束文件中加入下面约束:

set_property  IOB true [get_ports {port_name}]
set_property  IOB true [get_cells {cell_name}]

2、直接在代码中加约束,在寄存器前加入下面约束,需要注意的是,对于输入IOB约束,这里的寄存器是第一级寄存器,对于输出IOB约束,这里的寄存器是最后一级寄存器,且寄存器输出不能再作为组合逻辑输入。

(* IOB = "true" *) reg  O_data;

三、IOB约束使用注意事项

对于输出IOB约束,在使用的时候有一些限制:

1、约束的端口必需是寄存器输出,这点比较好理解,因为IOB约束本质上是约束最后一级寄存器的位置,将最后一级寄存器的位置放在IOB上,而不是增加一级寄存器。所以你必须要是寄存器输出,才能进行IOB约束,这是前提。

2、最后一级寄存器的输出不能再作为输入反馈到内部逻辑中,必需是开路的。举个例子,比如如下代码:

always @ (posedge clk)
	begin
		if(cnt == 2'b1 || cnt == 2'b3)
			spi_clk <= ~spi_clk;
		else
			spi_clk <= spi_clk;
	end

上面描述了一个分频器,当计数器cnt为1和3的时候spi_clk翻转,那这个时候spi_clk就是一个输出又作为输入反馈到内部的寄存器,得到的综合结果如下图:
在这里插入图片描述
由于需要将寄存器的输出作为输入其他逻辑的输入,这种情况下是无法将spi_clk寄存器放到IOB上的,因为IOB的输出直接对接IO,无法再作为输入反馈到内部逻辑。

所以可以将spi_clk输出再加一级寄存器,将加入的寄存器放到IOB上,相应的需要对时序做出一定的调整,和sip_clk有时序关系的都需要打一拍以保持同步。
在这里插入图片描述

  • 15
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
FPGA设计中,IOB(Input/Output Buffer)元件用于处理输入和输出信号,需要将其连接到芯片的引脚上。因此,在设计中需要进行引脚约束,以确保信号可以正确地引出到芯片外部。 约束IOB元件的方法如下: 1. 打开FPGA开发工具(如Vivado或Quartus II),进入约束编辑器。 2. 找到要约束IOB元件,确定其类型和引脚名称。 3. 在约束编辑器中,创建一个约束文件,指定IOB元件所连接的引脚和相应的约束条件。比如,指定IOB元件的电气特性、时序要求、电压等级等。 4. 在约束文件中,使用语法格式指定IOB元件所连接的引脚。语法格式通常是“set_property IOSTANDARD xxx [get_ports xxx]”,其中“IOSTANDARD”指定IOB元件的电气特性,“get_ports xxx”指定IOB元件所连接的引脚。 5. 在约束文件中,为IOB元件指定时序要求。比如,使用语法格式“create_clock -period xxx -name xxx [get_ports xxx]”指定时钟信号的周期和名称。 6. 在约束文件中,为IOB元件指定其他约束条件。比如,使用语法格式“set_output_delay -max xxx [get_ports xxx]”指定输出信号的最大延迟等。 需要注意的是,不同的FPGA芯片和开发工具可能有不同的约束语法和格式,需要根据具体的芯片和工具进行操作。同时,约束文件的编写需要特别仔细,因为约束文件中的错误可能会导致系统的功能异常或性能下降。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一醉千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值