关于跨时钟域的设计与综合
大家好:
最近在设计一款MCU,这里面有太多的时钟切换,门控时钟和分频时钟,这些对于FPGA验证倒是没什么问题,可是到了综合时问题就来了,本人没有综合过多个时钟的电路,并且这些时钟很多都有联系,迷茫
我想问一下的是,资料中说的解决跨时钟域设计方法:双缓冲法,结绳法,FIFO法等等,我的设计里都有用,时钟选择我也有用,这些综合时需要如何加约束呢?
哪位大哥能稍微指点下!
补充:谢谢大家的回答!
1、比如我有个用mux做的时钟选择,假设选择的时钟为a和b,选择后的为c。c给一组寄存器赋值,而这组寄存器需要被时钟a进行采集送到另一组寄存器。如何设置set_false_path呢?我知道如果两个异步模块之间通信时要设置false_path,可是我这种情况呢?
2、比如外部输入的两个不相干的时钟a和b,综合应该是不会阻止问题的出现的(亚稳态,时钟毛刺等等),我们需要做的是不是只需要对他们之间的通信设置false_path,让DC不管他们,而防止问题的出现是通过双缓冲法,结绳法,FIFO法等等方法来解决的,我的理解对吗?
再次感谢!本人仅综合过单时钟的设计,对于多时钟,并且时钟之间联系复杂的设计真的是一头雾水啊!还望大神们指点一二!
不相关时钟都设置成false_path,DC会去掉这些时钟之间的时序检查。
异步时钟使用set_false _path;分频时钟使用create_gernerated_clock产生;
Place and route之后看静态时序分析报告,根据报告确认自己用的时钟方案没有问题,然后再约束文件里面去除这些报告
谢谢!要是对于两个不相干的时钟我做了时钟选择的话,有需要怎么约束呢?
请问如何才能知道时序方案没有问题呢,是看报告里的保持时间核建立时间违例吗?还是有其他方法?
set_false_path是让DC不分析,也就是不会优化,不让他优化岂不是不好。这种异步电路防止问题的出现是不是只能在RTL级解决啊?
set_generate_clock之后是不是就不用设置set_false_path了呢?
1. 异步路径要看综合后仿,布局布线后仿。
2. 功能要看formal。
3. 同步路径看Timing 报告。
异步路径DC本来就没办法优化,因为两个时钟完全不一样,综合器无法根据时序约束优化。
门控时钟之类的最好在设计中不要使用哦,否则出了问题 比较难定位
异步设计 对数据进行同步了哦
时钟选择有 PLL 可以使用的,这个可以有两个输入,通过配置选择的哦
小编您好,后两条我能看懂,第一条的意思是说布局布线后仿就可以发现异步电路可能存在的问题吗,还是什么?异步电路要看后仿能解释一下吗?
综合时对时钟的分析仅限于同步时钟,异步电路工具没法分析,所以对于跨时钟域的要设set_false_path告诉工具不要去费力气分析
谢谢!
MARK一下
对FPGA这些时序问题也同样存在。Quartus自带Timequest图形界面很好看,建议新手在Timequest调通后把SDC挪到DC去跑。
对第一个问题,在MUX输出端create generated clock(以打断b到c的传递),然后把a和c归为同一clock group,b为另一clock group即可
