在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 10817|回复: 21

[求助] 请教,关于分频时钟综合时出现A non-unate path in clock network for clock

[复制链接]
发表于 2019-3-30 20:32:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
版主以及各位前辈好,我的设计里包含分频时钟,所以我在DC中这样来约束:

create_generated_clock  -name clk  -source [get_ports RF_CLK] -divide_by 128  [get_pins inst_dec_top/inst_clk_div/clk_reg/Q]

create_generated_clock  -name mclk  -source [get_ports RF_CLK] -divide_by 4   [get_pins inst_dec_top/inst_clk_div/mclk_reg/Q]


然后在综合时报出下述warning:
Warning: A non-unate path in clock network for clock 'clk'
from pin 'inst_dec_top/inst_clk_div/U6/Y' is detected. (TIM-052)
Warning: A non-unate path in clock network for clock 'mclk'
from pin 'inst_dec_top/inst_clk_div/U3/Y' is detected. (TIM-052)
......

我的源代码是
always @(posedge rf_clk or negedge rst_n)
  if(!rst_n)            clk <= 1'b0;
  else if(counter==6'd63) begin
    if(cur_state==SOF)  clk <= 1'b0;
    else                clk <= ~clk;
  end
  
always @(posedge rf_clk or negedge rst_n)
  if(!rst_n)  mclk <= 1'b0;     
  else if(counter[1:0]==2'b10)   
                  mclk <= ~mclk;

counter是一个6位计数器

请问,我这样约束是否合理呢?然后分频器的RTL代码这样写是否合理呢?我该如何修改才是正确的呢?谢谢大家了,急......
 楼主| 发表于 2019-3-30 20:40:57 | 显示全部楼层
我有试过这样修改
always @(posedge rf_clk or negedge dec_rst_n)
  if(!dec_rst_n)  counter <= 6'd0;
  else            counter <= counter + 1'b1;

assign clk = counter[5];
assign mclk = counter[1];

然后这样约束:
create_generated_clock  -name clk  -source [get_ports RF_CLK] -divide_by 128 [get_pins inst_dec_top/inst_clk_div/counter_reg[5]/Q]
但还是有上述警告。

但像这样约束后,警告才消失:
create_generated_clock  -name clk  -source [get_ports RF_CLK] -divide_by 128 [get_pins inst_dec_top/inst_clk_div/clk]
但这种约束是否合理呢?大家都是怎么做的呀

 楼主| 发表于 2019-4-2 11:22:45 | 显示全部楼层
顶顶,求大佬帮忙啊
发表于 2019-4-7 13:54:55 | 显示全部楼层
1、因为你的时钟路径上出现了正向和反向时钟同时出现的情况,U6和U3两个cell应该是两个mux,mux的输入一个clkX,另外一个应该是clkX的取反。这个问题可以不用管
2、之所以你换一种方式约束没有问题,应该是你定义的那个时钟pin  inst_dec_top/inst_clk_div/clk是一个hierarchical pin,这种方式是不允许的,时钟应该定义在leaf pin上,否则会影响时钟无法正常propagate
发表于 2019-4-7 16:05:43 | 显示全部楼层
1,这个可以不用管,如果要处理好像要通过set_clock_sense 来设置。
2.  上面提到的,由于propagate不正常,所以dc并没有trace完全,虽然没报错,但在pt,pr时还是要修改
 楼主| 发表于 2019-4-7 16:40:49 | 显示全部楼层
本帖最后由 cfh123 于 2019-4-7 16:51 编辑


huangjiajun1213 发表于 2019-4-7 13:54
1、因为你的时钟路径上出现了正向和反向时钟同时出现的情况,U6和U3两个cell应该是两个mux,mux的输入一个c ...


你好,谢谢您的回答,那么请问一般分频时钟的RTL代码要怎样写,才是推荐的做法,才不会出现non-unate呢?比如实现一个4分频的时钟,
然后,create_generate_clock的source定位到port端是不是就可以啦?要不要定义到寄存器的CK端呢?非常感谢!
 楼主| 发表于 2019-4-7 16:46:48 | 显示全部楼层


mandrake 发表于 2019-4-7 16:05
1,这个可以不用管,如果要处理好像要通过set_clock_sense 来设置。
2.  上面提到的,由于propagate不正常 ...


嗯嗯谢谢您,在p&r阶段也是频繁出现这些warning,但是最后pt没有时序的违例(几个时钟间做了同步处理,设成了false path),关于您说的暂时不用管,那为什么p&r阶段还要修改呢?修改指的是哪一方面呢?
发表于 2019-4-7 22:11:43 | 显示全部楼层
综合对这个实际不是很关心
如果有clock mux,clock 不知道trace那条路径,所以会报这个waring,
通过设置 case analysis就解决了。
即使有这个warning,一般pr后的结果也没不会出多大问题。
只是在这段分频电路中有些不准确,由于这些电路逻辑并不多,实际的timing影响还是
很小的。
发表于 2019-4-7 22:31:31 | 显示全部楼层
你的描述是rtl,你定义的clock要定义到一个instance的pin上,rtl中的register还没实例化,所以问题也可能是出在这里
发表于 2019-4-8 09:59:54 | 显示全部楼层


cfh123 发表于 2019-4-7 16:40
你好,谢谢您的回答,那么请问一般分频时钟的RTL代码要怎样写,才是推荐的做法,才不会出现non-unate呢? ...


级联分频的方式应该就不会有这个问题,二分频再二分频,你目前这种方式是counter分频,但是级联分频会导致时钟树很长。source端可以一般会定义在mater clock的source上,但是定义在clock tree上其它点也可以,只要保证你的div clk的waveform和你的source点关系是匹配的就可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-13 03:35 , Processed in 0.021721 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表