FPGA时序约束之伪路径和多周期路径

可编程逻辑

1340人已加入

描述

前面几篇FPGA时序约束进阶篇,介绍了常用主时钟约束、衍生时钟约束、时钟分组约束的设置,接下来介绍一下常用的另外两个时序约束语法“伪路径”和“多周期路径”。

一、伪路径

1、伪路径的定义

FPGA开发过程中软件的综合布线耗时很长,这块对FPGA产品开发的进度影响很大。

伪路径表示该路径实际存在,但该路径的电路功能无须考虑时序约束。

通过定义伪路径,通知vivado等FPGA开发软件无需对这些路径进行时序优化布线。

这样FPGA开发软件就会自动跳过这部分路径的优化,可以减少综合布线的优化时间。

使用伪路径命令可以有效地减少时序分析的复杂度,同时提高系统性能和可靠性。

2、伪路径的应用范围

伪路径主要应用于异步时钟或异步复位的情况下,例如:

  • 跨时钟域
  • 异步复位逻辑
  • 异步RAM

3、伪路径的约束的写法

伪路径约束语法为:

set_false_path [-setup] [-hold] [-from < node_list >] [-to < node_list >] [-through < node_list >]
参数 定义
-from 有效的起始点,例如时钟、寄存器
-to 有效的终结点
-through 路径中的节点,比如引脚、端口等等.

这里需要注意:伪路径约束是单向的,不是双向的,如果两个时钟域相互之间都有数据传输,则需要对两个方向的都做时序约束,如下所示:

set_false_path -from [get_clocks clk0] -to [get_clocks clk1]
set_false_path -from [get_clocks clk1] -to [get_clocks clk0]

或者这样写也是可以的:

set_clock_groups -async -group [get_clocks clk1] -to [get_clocks clk2]

二、多周期路径

默认情况下FPGA开发软件默认每条路径都是单周期路径,即从上一个寄存器到下一个寄存器的时间默认为一个周期内可达,并按照这个约定去布线优化。

其实我们写的代码基本默认就是单周期的,时序达不到就拆分代码逻辑,拆分成多个周期完成即可,则不需要做多周期路径约束。

但有时也存在需要多周期路径,设定这个路径从起点到终点需要1个周期以上才能到达,这时就要进行多周期约束,但这部分约束也用的少。

多周期约束语法:

set_multicycle_path < num_cycles > [-setup|-hold] [-start|-end]
                    [-from < startpoints >] [-to < endpoints >] [-through < pins|cells|nets >]
参数 含义
num_cycles [-setup -hold] 建立时间或保持时间的周期数
[-start -end] 参数时钟选取
-from 路径起点
-to 路径终点
-through 路径经过点

单时钟域下,数据经过N个周期从起点寄存器到达终点,约束如下:

set_multicycle_path N -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]
set_multicycle_path N-1 -hold  -from [get_pins data0_reg/C]  -to [get_pins data1_reg/D]

三、总结

本文介绍了伪路径和多周期路径的使用,但要注意的是伪路径约束不能滥用,只能用在一些异步时钟或异步复位这些对于时序要求不高的路径,对于关键路径,不能用这个约束命令,还是要从HDL代码来优化。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分