Loading

Design Compiler多时钟约束

这里的资料来源于《Synopsys® Timing Constraints and Optimization User Guide, Version P-2019.03-SP4, September 2019》

下面图中这几种情况都是我在实际项目中碰到过的,因此有必要单独做个说明。

第一个是同步派生时钟,即CK2是通过CK1的分频来产生的,我们之前的一个实际项目里的情况是射频接口给进来一个高速时钟,需要分频之后再给内部的数字模块使用,就碰到了这个约束场景,这里可以看到例子是CK1通过一个D触发器做二分频。一般来说我们会通过counter或者触发器链来进行分频操作,这里的关键命令是create_generated_clock,并且要把CK2通过get_pins约束到D触发器的Q端输出上。实际操作中,由于我们在RTL级写得代码可能并不知道具体的要约束的触发器是哪个,可以在不加CK2约束的情况下先对设计进行一次综合,看网表中连接到CK2上的触发器是哪个,然后再去重写约束。

第二个是异步时钟,这种情况是既有外部时钟,又有片上PLL给的时钟,并且两个输入都要作用到设计上,我们在项目里的实际情况是SoC的CPU部分使用内部PLL的时钟,同时还有外部的JTAG调试逻辑单独使用一个时钟,两个时钟异步,这种情况下直接单独创建两个时钟即可,另外注意时钟相互之间要set_false_path,或者使用这里的set_clock_groups -asynchronous

最后一种是互斥时钟,这种情况下有两个不同的时钟经过一个MUX选通到片内去。我们在项目里碰到的实际情况是除了射频接口提供的时钟外,我们希望能够再加入一个测试时钟,这样可以在不需要射频接口工作的情况下仍然可以提供时钟从而测试内部逻辑,那么这里提供的set_clock_groups -logically_exclusive是一个比较好的方案(我们当时的简单粗暴做法是只约束了一路时钟,因为两路时钟我们认为会是同频的)。

image

posted @ 2024-10-12 00:09  sasasatori  阅读(78)  评论(0编辑  收藏  举报