分频器时序约束问题
现有如下图分频器:
源clk和分频产生的clk_div都会驱动很多寄存器,现在要设定两个时钟为异步时钟
create_clock -name clk……
create_generated_clock -name clk_div reg1/Q……
set_clock_groups -logic_exclusive -group [get_clocks clk] -group [get_clocks clk_div]……
这样设定的话,从reg1/Q→reg1/D的组合路径上没有约束,而这条路径上需要有约束。
如下设置false path也不行
set_false_path -from [get_clocks clk] -to [get_clocks clk_div]
set_false_path -from [get_clocks clk_div] -to [get_clocks clk]
reg1/Q→reg1/D依然没有约束。
请问这种分频器该如何加约束?
多谢多谢!
另外,为了约束正确,在分频器后面加了一级触发器,如下图:
这级触发器没有从Q到D的反馈路径,因此,分频的时钟定义在这个点上,按照如下方法约束时序不会造成约束错误:
create_clock -name clk……
create_generated_clock -name clk_div reg2/Q……
set_clock_groups -logic_exclusive -group [get_clocks clk] -group [get_clocks clk_div]……但是从逻辑上讲,这个触发器完全是没必要的
又没有比这更好地办法?不加触发器该如何加约束?
谢谢了先
这两个时钟永远都是同步时钟。
created_generated_clock (-edges {} or divide_by xx).这就算约束了,工具会自动帮你去满足timing.
或许两个时钟永远都是同步时钟,但是如果我不想让 穿行于两个时钟域的组合逻辑有时序约束(比如clk_div驱动的寄存器输出地数据经过组逻辑后被clk驱动的寄存器采集),该如何设置?谢谢!
balance 这2个clock啊,只要他们的latency一样, timing就能满足
第一种path是loop path吧,
一般master clock和他的generated clock都是要balance的, CTS的时候
多谢小编回答,可能我没有说清楚,我是说在第一种情况下该如何加约束以保证分频器之外master clock和generated clock驱动的寄存器之间不检查timing约束(即false path),但是这个分频器中的寄存器反馈路径(即图上reg1/Q→组合逻辑→reg1/D)要检查timing约束(即由master clock约束)?好长啊~
多谢多谢!
要是path很具体的话,你直接 set_max_delay/set_min_delay/set_data_check 指定好了,
控制下delay
有一个非常简单的解决方法
在你1#贴的clk_div之后,加一个clock buffer,
create_generated_clock 从那个clock buffer的输出端开始,
这样,reg1 Q到D的时序就不会被挤掉了
多谢二位小编和nicholas08的的热情回复。
请问在综合之前单元的例化名不知道,怎么使用内部的pin?
学习了
直接引用库里面的clk buf,直接定义instance name,再设置dont_touch
以前我在设计中用过这招,貌似不奏效哇?
小编,我想知道,你分频器是怎么约束的?可以详细把每一句写给我吗?lizhaohong520@126.com我的邮箱,谢谢!
因为我遇到这个问题是我的分频clk_div进入和clk域的组合电路,组合电路它的delay是很大的(小编你的呢?),导致reg1 setup time是无法满足(DC),不过CTS后··它会自动加一个buffer,这时候你再检查这个setup time是没有问题的!不过我想问一下你的clk_div扇出超过1000没有?因为我觉得可能是因为我的clk_net超过了1000才有这个组合电路很大的delay!我解决的方法是把它设置成ideal net。你有更好的办法吗?
小编,你好,你分频器clk_div create_generaed_clock后必然存在一个ideal_network属性,你这个存在一个反馈回路
那么肯定ideal_network属性肯定会传播到reg1的D输入端,就是说你的reg1 D输入端也拥有这个ideal_network属性
我想问一下你··P&r的时候是在placementremove这个reg1 D的ideal_network属性吗?还是怎么处理?CTS后这个属性肯定是存在的
因为是只是reg1的D输入端。求解!
1.陈小编,如果按照你的方法,在reg的Q端加上一个clkBuf之后定义divClk在Buf的输出端,那么divClk的起点就是Buf的输出端了。而实际的divClk的起点,应该是reg/Q.那么两个不同的时序起点会不会导致不同的data arrival time对timing的分析结果不同?
2.定义clkBuf后,clkBuf的输出是应该如何的,比如如下两个图,哪个图才是正确的buf插入点
3.pr的时候工具可能会优化掉这个clkBuf,因此我加上了dont touch属性,一直到pt结束都保留这个属性,是否合理?
2问中:定义点2是正确的
3问中:选择驱动能力合适的CLOCK BUFFER的话,是合理的
PR一般会自动移除net的ideal network属性的,因为真实的物理环境是不存在ideal network的
你好,请问,如果采用加上clkBuf的方式,那么如下的分频技术系,应该在rtl级上如何加上这个clkBuf。
reg [4:0] count
always @ (posedge clk) begin
count <= count + 1'b1 ;
end
clk2 = count[0] ;
clk32 = count[4] ;
1.请问,我应该在rtl中加上clkBuf?我明白要例化一个clkBuf的inst。但是我不知道怎么样从rtl中确定这个inst的连接关系?是否应该是用综合后的netlist中去例化clkBuf。然后重新综合一遍?
1) 自己用report_timing看看报告就知道了
2) 2
3) 可以
这个问题不错,不知道是不是应该在综合之后在加上这个buf?
created_generated_clock (-edges {} or divide_by xx)
请问这个buffer是何时加?怎么加?
代码里加或综合后网表加均可,代码加的话综合时设置该buffer为dont touch
你好 对于(2) 我想问一下 你是如何通过命令 来控制“定义点”的位置的呢
学习了,谢谢
我是新手,跟大生门学习