通过SDC的ASIC时序约束:如何正确指定多路复用时钟?


10

介绍

在互联网上以及关于如何正确创建SDC格式的时序约束的一些培训课程中找到了多个,有时是冲突的或不完整的信息之后,我想向EE社区寻求有关我遇到的一些通用时钟生成结构的帮助。

我知道在ASIC或FPGA上实现某种功能的方式有所不同(我已经使用过两者),但是我认为应该有一种通用的正确方法来限制给定结构的时序,而与基础技术-如果我在这方面做错了,请告诉我。

用于不同供应商的实现和时序分析的不同工具之间也存在一些差异(尽管Synopsys提供了SDC解析器源代码),但我希望它们主要是一个语法问题,可以在文档中查找。

这与以下时钟多路复用器结构有关,它是clkgen模块的一部分,而clkgen模块又是较大设计的一部分: 时钟多路复用器原理图

虽然ext_clk假定输入是在设计外部生成的(通过输入引脚输入),但clkgen模块也会生成和使用clk0clk4信号(有关详细信息,请参阅我的相关纹波时钟问题),并且将相关的时钟约束命名为和,分别。baseclkdiv4clk

问题是如何指定约束,以便时序分析器

  1. 黄柏cpu_clk作为多路复用时钟,其可以是源时钟中的任一个(fast_clkslow_clkext_clk),同时通过不同的延迟AND和OR门考虑
  2. 同时不要中断设计中其他地方使用的源时钟之间的路径。

虽然片上时钟多路复用器的简单的情况下似乎需要只是set_clock_groupsSDC声明

set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk}

...在给定的结构中,由于clk0(通过fast_clk输出)和clk4(通过slow_clk)仍在设计中使用,即使cpu_clk配置为ext_clkuse_ext在断言时仍然如此,这使情况变得复杂。

如所描述的在这里,所述set_clock_groups命令如上述会导致以下:

此命令等效于从每个组中的每个时钟到每个其他组中的每个时钟调用set_false_path,反之亦然

...这将是不正确的,因为其他时钟仍在其他地方使用。

附加信息

use_clk0use_clk4并且use_ext输入以这样的方式,只有它们中的一个是高在任何给定时间生成。如果所有use_*输入都为低电平,则可以使用它来停止所有时钟,但这个问题的重点是该结构的时钟多路复用特性。

原理图中的X2实例(一个简单的缓冲区)只是一个占位符,以突出显示自动放置和布线工具的问题,该工具通常可以自由地将缓冲区放置在任何地方(例如and_cpu_1/zor_cpu1/in2引脚之间)。理想情况下,时序约束应不受此影响。


您是否可以通过将其缩小为一个非常具体,非常狭窄的问题来使其更加简洁?对于我来说,很难理解什么是重要的信息,以及您在这里真正想要的是什么。
travisbartley

@ trav1s:我重组了问题。如果您需要任何澄清,请告诉我。
FriendFX 2013年

Answers:


3

在and_ *网络上定义1个时钟分频,并声明它们在物理上是互斥的。Cadence RTL编译器通过为cpu_clk时钟控制的寄存器生成3个定时路径(每个时钟对应一个路径)来正确处理这种情况。由clk0,clk4和clk_ext直接驱动的寄存器具有自己的定时弧。

create_generated_clock -source [get_ports clk0] \
-divide_by 1 -name and_clk0    [get_pins and_cpu_1/Y]

create_generated_clock -source [get_ports clk4] \
-divide_by 1 -name and_clk4    [get_pins and_cpu_2/Y]

create_generated_clock -source [get_ports clk_ext] \
-divide_by 1 -name and_clk_ext [get_pins and_cpu_ext1/Y]

set_clock_groups \
-physically_exclusive \
-group [get_clocks and_clk0] \
-group [get_clocks and_clk4] \
-group [get_clocks and_clk_ext]

感谢您的建议。不幸的是,我目前无法证实这一点,但是您的想法对我来说很有希望。你可以检查是否之间的路径cast_clkcpu_clk并且slow_clk还在检查(即不例外,由于独特的时钟组),而在同一时间被它们各自的输入时钟的限制?最终,我正在寻找有关此问题的权威答案。
FriendFX

@FriendFX我已经在RTL编译器中测试了代码,并且可以正确推断出路径。
Revanth Kamaraj

只是让您知道,我添加了一些有关单单元时钟多路复用器的信息和一个解决方案(至少对于某些工具而言)。
FriendFX

1

尽管这是一个未解决的老话题...但它涵盖了同步与异步时钟的一些基本知识

  • 基本上,同步时钟必须保持相位同步,并添加最少的延迟,以使复用不会产生故障。
    • 这通常是通过以全速时钟对所有门控时钟源进行重采样来实现的。
  • 异步时钟对于定时并不重要,因此允许延迟。例如纹波计数器。

在此处输入图片说明


感谢您调查这个老问题。就我而言,我不(想要)将时钟与全速时钟重新同步,如电路所示。然而,我的问题的主要部分仍然缺失,即考虑到源时钟的同步性以及用于同一同步设计中的时钟的正确性,以约束该电路的正确SDC语句,因为提到的set_clock_groups示例链接声称错误地切断了这些时钟之间的路径。
FriendFX
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.