如何选择 set_false_path、set_multicylce_path、set_max_skew
how to chose over set_false_path, set_multicylce_path, set_max_skew
这个问题困扰了我很久,据我了解:
- set_false_path是一个时序约束,不需要针对时序进行优化。我们可以将它用于两个触发器同步器,因为它不需要在有限的时间内被捕获。
- set_clock_groups 免得我们定义太多假路径
- set_multicylce_path 用于在默认最差要求过于严格时放宽路径要求。我们可以设置 set/hold clk 来固定时间。我们可以跨域使用它
- set_max_skew/set_max_delay -datapath_only 用于异步 FIFO 样式,将整个 read/write 指针从二进制转换为灰色。看起来 set_max_skew 有助于控制格雷码的多位与双触发器同步器之间的偏差。为什么需要“datapath_only”?只要使用 set_multicycle_path 也将通过计时检查。
所以总而言之,所有这些方法都可以在异步 fifo 中使用,对吗?
而 set_false_path 是最简单的方法。无需担心 mcp 周期或最大延迟。我想我们只有在 2 FF 之间的逻辑是“组合”时才使用它? 2个跨域FF之间有时序逻辑可以使用吗?
如果忽略所有使用 FP 的时序计算不好,那么什么时候使用它比较好?理论上我可以把所有的FP都换成MCP
为了选择最合适的约束,您需要考虑哪些因素?
你的 post:
中显然有 4 个问题
问题 1:综上所述,所有这些方法都可以在异步 fifo 中使用吗?
问题2:而set_false_path是最简单的方法。无需担心 mcp 周期或最大延迟。我想我们只有在 2 FF 之间的逻辑是“组合”时才使用它? 2个跨域FF之间有时序逻辑可以使用吗?
问题3:如果忽略所有使用FP的时序计算不好,什么时候使用它比较好?理论上我可以把所有的FP都换成MCP
问题4:选择最合适的约束需要考虑哪些因素?
以下是上述问题的 4 个答案:
回答1:如下图所示,使用异步FIFO,数据可以在发送端以任意时间间隔到达,接收端从中拉出数据队列,因为它有处理它的带宽。
因此,是,您可以将所有这些optimizations/constraints/methods用于异步 FIFO。
回答2:是的set_false_path可以说是最简单的一种了。而如下图所示,你是对的,我们在2个FF之间的逻辑是“组合”时使用的?
此外,根据我的理解,我们不使用顺序逻辑。
答案3:一个假路径类似于多循环路径,因为它不需要在单个时钟周期内传播信号。不同之处在于, 错误路径 在逻辑上是不可能的,正如设计所规定的那样。换句话说,即使时序分析工具通过一系列逻辑门看到了从一点到另一点的物理路径,但在正常操作期间信号在这两点之间传播在逻辑上是不可能的。具有许多可用循环(大 n)的 多循环路径 与 错误路径 之间的主要区别是多周期路径仍将根据设置和保持要求进行检查,并且仍将包含在时序分析中。 多循环路径有可能仍然
时序失败,但 错误路径 永远不会有任何相关的时序违规。
因此在以下情况下使用多循环路径代替假路径约束:
- 您的目的只是放宽对同步路径的时序要求;
但是
- 路径还是要定时验证优化的
回答4:
虽然这是一个非常有效的问题,但过于广泛。这完全取决于底层设计。大多数用于 FPGA 布局的实施工具都有大量的优化选项。显然并非所有步骤都使用所有约束
在编译流程中。根据我的经验并引用 Reference 1 必须 包含在每个设计中的约束包括所有时钟定义,
I/O 延迟、管脚放置和任何宽松的约束,包括 多周期
和 错误路径。
以下两个主要参考资料可以进一步说明您理解约束的使用:
这个问题困扰了我很久,据我了解:
- set_false_path是一个时序约束,不需要针对时序进行优化。我们可以将它用于两个触发器同步器,因为它不需要在有限的时间内被捕获。
- set_clock_groups 免得我们定义太多假路径
- set_multicylce_path 用于在默认最差要求过于严格时放宽路径要求。我们可以设置 set/hold clk 来固定时间。我们可以跨域使用它
- set_max_skew/set_max_delay -datapath_only 用于异步 FIFO 样式,将整个 read/write 指针从二进制转换为灰色。看起来 set_max_skew 有助于控制格雷码的多位与双触发器同步器之间的偏差。为什么需要“datapath_only”?只要使用 set_multicycle_path 也将通过计时检查。
所以总而言之,所有这些方法都可以在异步 fifo 中使用,对吗? 而 set_false_path 是最简单的方法。无需担心 mcp 周期或最大延迟。我想我们只有在 2 FF 之间的逻辑是“组合”时才使用它? 2个跨域FF之间有时序逻辑可以使用吗?
如果忽略所有使用 FP 的时序计算不好,那么什么时候使用它比较好?理论上我可以把所有的FP都换成MCP
为了选择最合适的约束,您需要考虑哪些因素?
你的 post:
中显然有 4 个问题问题 1:综上所述,所有这些方法都可以在异步 fifo 中使用吗?
问题2:而set_false_path是最简单的方法。无需担心 mcp 周期或最大延迟。我想我们只有在 2 FF 之间的逻辑是“组合”时才使用它? 2个跨域FF之间有时序逻辑可以使用吗?
问题3:如果忽略所有使用FP的时序计算不好,什么时候使用它比较好?理论上我可以把所有的FP都换成MCP
问题4:选择最合适的约束需要考虑哪些因素?
以下是上述问题的 4 个答案:
回答1:如下图所示,使用异步FIFO,数据可以在发送端以任意时间间隔到达,接收端从中拉出数据队列,因为它有处理它的带宽。
因此,是,您可以将所有这些optimizations/constraints/methods用于异步 FIFO。
回答2:是的set_false_path可以说是最简单的一种了。而如下图所示,你是对的,我们在2个FF之间的逻辑是“组合”时使用的?
此外,根据我的理解,我们不使用顺序逻辑。
答案3:一个假路径类似于多循环路径,因为它不需要在单个时钟周期内传播信号。不同之处在于, 错误路径 在逻辑上是不可能的,正如设计所规定的那样。换句话说,即使时序分析工具通过一系列逻辑门看到了从一点到另一点的物理路径,但在正常操作期间信号在这两点之间传播在逻辑上是不可能的。具有许多可用循环(大 n)的 多循环路径 与 错误路径 之间的主要区别是多周期路径仍将根据设置和保持要求进行检查,并且仍将包含在时序分析中。 多循环路径有可能仍然 时序失败,但 错误路径 永远不会有任何相关的时序违规。
因此在以下情况下使用多循环路径代替假路径约束:
- 您的目的只是放宽对同步路径的时序要求; 但是
- 路径还是要定时验证优化的
回答4: 虽然这是一个非常有效的问题,但过于广泛。这完全取决于底层设计。大多数用于 FPGA 布局的实施工具都有大量的优化选项。显然并非所有步骤都使用所有约束 在编译流程中。根据我的经验并引用 Reference 1 必须 包含在每个设计中的约束包括所有时钟定义, I/O 延迟、管脚放置和任何宽松的约束,包括 多周期 和 错误路径。
以下两个主要参考资料可以进一步说明您理解约束的使用: