Vivado使用技巧(16):IO延迟的约束方法

为了对设计外部的时序情况进行精确建模,设计者必须设定输入和输出端口的时序信息Vivado只能识别出FPGA器件范围内的时序,因此必须使用set_input_delay和set_output_delay命令来设置FPGA范围外的延迟值。两者在含义、约束命令等方面有很多地方是相似的,只不过一个是输入,一个是输出,本文还是分开对两者进行讲述;


输入延迟

 set_input_delay命令设定FPGA的输入端口上相对于上游芯片接口时钟边沿的输入路径延迟(不包括FPGA输入端口到第一个触发器数据输入端的延时;输入延迟既指数据从外部芯片经过板级传输到FPGA输入管脚间的相位差,也指相对参考板级时钟间的相位差;输入延迟值可以是正的,也可以是负的,由时钟和数据在FPGA接口处的相对相位决定;

约束时的相对时钟可以是一个设计时钟,也可以是一个虚拟时钟;输入延迟命令的选项包括:

  • -min和-max:-min设定的值用于最小延迟分析(保持时间、移除时间);-max设定的值用于最大延迟分析(建立时间、恢复时间);如果约束命令中没有使用这两个选项,输入延迟值会同时应用于min和max;
  • -clock_fall:用于指定由相对时钟的下降沿启动的时序路径上的输入延迟约束;如果没有这个选项,Vivado只假定使用相对时钟的上升沿;
  • -add_delay:该选项通常用于约束与多个时钟沿相关的输入端口(比如DDR接口),而且必须已经存在一个最大或最小输入延迟约束,设计者使用该命令为同一端口设置其它相对时钟沿的最大或最小输入延迟约束

 输入延迟约束只能应用于输入端口或双向端口(不包括时钟输入端口),不能用于设计内部的管脚,下面给出几个使用输入延迟约束的典型例子:

1.示例一

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 2 [get_ports DIN]

定义一个主时钟sysClk作为输入延迟的相对时钟,设定的值同时作为最小值(min)分析和最大值(max)分析;

2.示例二

create_clock -name clk_port_virt -period 10
set_input_delay -clock clk_port_virt 2 [get_ports DIN]

该例子约束目的与上例相同,只是相对时钟换为一个虚拟时钟;使用虚拟时钟的好处是可以在不改变内部设计时钟的情况下,设定任意的抖动和延迟 ;

3.示例三

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk -max 4 [get_ports DIN]
set_input_delay -clock sysClk -min 1 [get_ports DIN]

该例中最小值分析和最大值分析采用不同的输入延迟值;

4.示例四 

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 4 [get_ports DIN]
set_output_delay -clock sysClk 1 [get_ports DOUT]

如果两个I/O端口之间仅有组合逻辑路径,没有任何时序单元,必须相对于虚拟时钟为I/O端口定义输入与输出延迟。上例中DIN和DOUT之间的组合逻辑路径约束为5ns(10-1-4);

5.示例五 

create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_input_delay -clock clk_ddr -max 2.1 [get_ports DDR_IN]
set_input_delay -clock clk_ddr -max 1.9 [get_ports DDR_IN] -clock_fall -add_delay
set_input_delay -clock clk_ddr -min 0.9 [get_ports DDR_IN]
set_input_delay -clock clk_ddr -min 1.1 [get_ports DDR_IN] -clock_fall -add_delay

这里相对时钟为DDR的时钟,最小值分析和最大值分析采用不同的输入延迟值;约束的一端是器件外部时钟的上升沿和下降沿启动的数据,另一端是器件内部同时对上升沿和下降沿敏感的触发器的输入数据; 


输出延迟 

 set_output_delay命令设定数据从FPGA输出端口上(都是相对于数据源的时钟来说)到下一级芯片输入端口的输出路径延迟;输出延迟既指数据从FPGA的输出管脚通过板级传输到另一个器件间的相位差,也指相对参考板级时钟间的相位差;输出延迟值同样也可以是正的或负的,由时钟和数据在FPGA器件外的相对相位决定;

约束时的相对时钟可以是一个设计时钟,也可以是一个虚拟时钟;输出延迟命令的选项基本与输入延迟约束相同,还是陈列如下:

 同样,输出延迟约束只能应用于输出端口或双向端口,不能用于设计内部的管脚;下面给出几个使用输出延迟约束的典型例子:

 

  • -min和-max:-min设定的值用于最小延迟分析(保持时间、移除时间);-max设定的值用于最大延迟分析(建立时间、恢复时间);如果约束命令中没有使用这两个选项,输入延迟值会同时应用于min和max;
  • -clock_fall:用于指定由相对时钟的下降沿捕获的时序路径上的输出延迟约束;如果没有这个选项,Vivado只假定使用相对时钟的上升沿;
  • -add_delay:该选项通常用于约束与多个时钟沿相关的输出端口(比如DDR接口同时使用上升沿和下降沿,或者输出端口与几个使用不同时钟的器件相连),而且必须已经存在一个最大或最小输入延迟约束,设计者使用该命令为同一端口设置其它相对时钟沿的最大或最小输入延迟约束;
     

1.示例一

create_clock -name sysClk -period 10 [get_ports CLK0]
set_output_delay -clock sysClk 6 [get_ports DOUT]

定义一个主时钟sysClk作为输出延迟的相对时钟,设定的值同时作为最小值(min)分析和最大值(max)分析;

2.示例二 

create_clock -name clk_port_virt -period 10
set_output_delay -clock clk_port_virt 6 [get_ports DOUT]

该例子约束目的与上例相同,只是相对时钟换为一个虚拟时钟;使用虚拟时钟的好处是可以在不改变内部设计时钟的情况下,设定任意的抖动和延迟;

3.示例三 

create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_output_delay -clock clk_ddr -max 2.1 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -max 1.9 [get_ports DDR_OUT] -clock_fall -add_delay
set_output_delay -clock clk_ddr -min 0.9 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -min 1.1 [get_ports DDR_OUT] -clock_fall -add_delay

这里相对时钟为DDR的时钟,最小值分析和最大值分析采用不同的输出延迟值;约束的一端是器件外部时钟的上升沿和下降沿启动的数据,另一端是器件内部同时对上升沿和下降沿敏感的触发器的输出数据 ;

 

 

### 回答1: Vivado是一款由Xilinx公司开发的用于FPGA设计的综合工具,其中包含了强大的io约束技巧,用于确保设计的可靠性和性能。以下是一些使用Vivado io约束技巧的建议: 1. 使用正确的引脚约束: 在FPGA设计中,正确地分配引脚是非常重要的。Vivado提供了直观的引脚约束管理功能,可以确保信号正确地映射到引脚上。通过使用约束文件或者约束页面,我们可以指定每个信号应该连接到哪个引脚上。 2. 时序约束:时序约束是确保设计在给定的时钟频率下达到时序要求的关键。Vivado提供了多种时序约束方法,包括设置输入输出延迟、时钟频率、时钟约束等。通过正确设置时序约束,我们可以确保设计在时钟频率下正常工作。 3. 灵活使用时钟域:Vivado允许设计中有多个时钟域,每个时钟域具有不同的时钟频率和时钟边沿。在设计中合理划分时钟域可以提高时序性能并减少时序问题。Vivado可以帮助检测和修复时钟域之间的不一致性。 4. 约束分组:在Vivado中,我们可以将不同的约束分组到不同的组中,以便更好地管理约束。例如,我们可以将时序约束、引脚约束和时钟约束分别放入不同的组中。这样可以使约束更加模块化和易于管理。 总而言之,Vivado io约束技巧对于实现可靠的FPGA设计至关重要。正确地使用这些技巧可以帮助我们更好地管理引脚约束、时序约束和时钟域,并确保设计达到所需的性能和功能。 ### 回答2: Vivado是一款用于FPGA设计的综合工具,IO约束是在设计过程中对芯片引脚进行限定和规定的技巧。 首先,在Vivado中进行IO约束,可以通过使用XDC文件(Vivado设计约束文件)来实现。XDC文件是一种描述设计约束的文本文件,可以定义引脚的电气特性、约束时钟、时序和限制等信息。 其次,IO约束技巧中的一个重要方面是引脚分配。在设计过程中,需要根据设计需求合理地分配引脚,并将其与适当的电气特性和约束进行关联。这样可以确保引脚与其他逻辑电路元件之间的正确连接,并满足设计的时序要求。 另外,IO标准的选择也是IO约束技巧的一部分。不同的IO标准具有不同的电气特性和功耗特性,选择合适的IO标准可以提高设计的性能和可靠性。通过Vivado中的IO Planner工具,可以根据设计需求选择合适的IO标准,并对引脚进行相应的约束。 此外,时序约束也是IO约束技巧中的关键。通过在XDC文件中定义时序约束,可以确保设计在时钟和数据的传输过程中满足时序要求。时序约束包括设置输入信号的推荐时钟路径、时钟与数据的延迟要求、锁存器的约束等。 最后,IO约束技巧还包括对约束进行验证和优化。通过Vivado中的约束编辑和约束检查工具,可以对IO约束进行分析和验证,并优化设计以提高性能和可靠性。 总结来说,Vivado中的IO约束技巧包括使用XDC文件进行约束定义、合理的引脚分配、IO标准的选择、时序约束的设置以及约束的验证和优化。这些技巧能够帮助设计人员确保设计的正确性和性能,提高设计的可靠性和效率。 ### 回答3: Vivado是一款用于FPGA设计和开发的软件工具,它提供了丰富的工具和功能来帮助工程师完成设计任务。其中,io约束是在设计中非常重要的一部分,它可以确保FPGA与外部世界之间的正常通信和交互。 在Vivado中,我们可以使用一些技巧来有效地进行io约束。首先,我们需要明确每个io的功能和连接方式。我们可以通过参考芯片手册或数据手册来获取这些信息。然后,在Vivado中创建一个约束文件,以指定每个io约束条件。这些条件包括电气特性、引脚位置和约束等。 其次,我们可以使用Vivado约束编辑器来编辑和管理约束文件。约束编辑器提供了直观的界面,可以方便地添加、修改和删除约束条件。我们可以通过选择特定的约束类型,如时钟约束、距离约束和电路约束等,来定义io约束条件。 另外,我们还可以使用Vivado的自动约束生成工具来帮助我们自动生成约束条件。该工具会根据设计中的信号和约束指导进行分析,并生成相应的约束文件。这种自动化的方式可以大大简化约束过程,提高工程师的工作效率。 最后,我们需要进行约束的验证和分析。Vivado提供了一系列的工具和报告,可以帮助我们检查和验证约束条件的正确性。我们可以使用时序分析工具来检查时序约束是否满足,使用布局查看器来查看引脚位置和连接关系等。 总之,在进行FPGA设计时,io约束是一个非常重要且必要的步骤。通过合理的约束规划和使用Vivado提供的工具和技巧,我们可以确保io的正常工作,并提高设计的可靠性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值