微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教一下,dc综合关于门控时钟的问题

请教一下,dc综合关于门控时钟的问题

时间:10-02 整理:3721RD 点击:
是这样的,在我的设计中有一个模块是用门控时钟来驱动的,相当于assign CLK1 = gate & CLK,  CLK是主时钟, CLK1是门控之后的时钟,将这个时钟送给需要门控的模块,但发现综合之后对网表仿真这个CLK1一直是没有输出的,modelsim中CLK1信号是红的, 即使把gate信号置1也不行,综合的网表里将这个与的操作用二选一来实现的,即MUX( CLK, 0,gate, CLK1),例化了这么一个模块,我想问下这是怎么回事,是门控的时钟要在dc里特殊声明么?如果前仿的话这么写是没问题的,但是综合后CLK1信号就没输出了,请各路大神指点一二,小弟感激不尽。对了,我是用的smic 18的库

这个MUX的输入都正常吗?
把库里默认的delay去掉了吗?



   MUX的输入是正常的,因为一个是标准时钟,另一个是外部输入,没懂库里默认的delay是什么

自己顶一下

你找个懂的人帮你现场看看吧。要具体问题具体解决了。
不行你就把网表、仿真平台打包发上来吧。
或者再多提供点线索。
如果你前仿没问题的话,我估计是后仿设置上问题的可能性比较大。

你前仿如果不过的话,看看是不是你CLK1给接错了。CLK1要是接到不该接的地方,那也会变红的

建议直接实例化SMIC库中门控时钟的单元,否则后端做时钟树也可能会有问题的。


那SMIC库中的门控单元是哪些呢,其实就是一个与门的作用,是例化了这个门然后综合的时候就不动它了么



   前仿可以通过



   好的,主要是assign clk1 = enable:clk?1'b0 这句话可能综合的时候会有问题,因为设定clk是时钟,这样选择之后clk1就不是标准的时钟了。



根据我的经验,这句话综合的结果就是一个与门,结果就是
and(clk1,enable,clk)
dc不会改变你的RTL功能。
clk1是不是标准时钟,只影响时序,不影响功能。至少clk1的时钟应该是能出来的。


门控时钟不是直接这样处理的,这样会出现毛刺。
以下是用DC综合时自动出门控时钟,可以参考:
  SMIC 0.35库对应如下:
    module SNPS_CLOCK_GATE_HIGH_ ( CLK, EN, ENCLK)
      input CLK, EN;
      output ENCLK ;
      wire net8591;
      lanlq1 latch ( .D(EN), .EN(CLK), .Q(net8591) ):
      an02d1 main_gate ( .A1(net8591), .A2(CLK), .Z(ENCLK) );
    endmodule
  HJ 0.18库对应如下:
    module SNPS_CLOCK_GATE_HIGH_ ( CLK, EN, ENCLK, TE)
      input CLK, EN, TE;      //调用时TE 接0
      output ENCLK ;
      GCKSF latch ( .E(EN), .TE(TE), .CK(CLK), .Q(ENCLK) );
    endmodule

  SMIC 0.18没有找到
并且上面的EN控制信号如果和CLK是异步的,还需要用CLK同步后使用。

看下网标,对应SDF看看延迟是不是太大了,时钟没了



   对,综合出来确实是个与门,奇怪的是放到modelsim里仿真这个与门的输出就是红色的,关键是时钟作为与门输入才会这样,普通信号是不影响的。



    是不是你的时钟频率太快了,过不了与门的时序检查?
建议你看看log里有没有timing violation之类的warning。
还有就是仿真时要把时序检查、反标时序之类的选项全部禁用。
在vcs里是+notimingcheck +delay_mode_distributed,我不知道你用的modelsim里该怎么加,应该差不多也有类似参数可以加。



   好的,谢谢,不过我的RTL代码就是按照这个逻辑写的always @(iCLK or ClkEn)
    if (iCLK == 1'b0)
      ClkEnT2 <= ClkEn;
  assign iGatedClk = iCLK & ClkEnT2;

上面的always块是一个LATCH,下面的assign是个与门,综合出来和你列的0.35库网表是一样的,可是仿真经过与门的输出信号就是红色的了。
不知道咋回事


   
   时钟频率不快啊,而且如果是普通的与门可以过的,在modelsim里倒是没有跟这个有关的timing voilation。



   好的, 我回去看看



从前面你的描述来看,应该是仿真的问题,你可以不带SDF仿真,单独看一下门控时钟的输出。
为什么我说用门控时钟单元实例化,是为了在后端布局布线方便,不用去查门控时钟时序,如Latch的borrow timing , 与门的门控时间检查。

综合工具好像还不能把你写的代码综合成直接调用门控时钟单元,倒是综合时自动插入的门控时钟会。

兄弟,我也有这个问题,clk_1飘红的,你解决了么?能说一下么


DC中对门控时钟没有对应的约束以及分析吗?
PT中会识别简单的门控时钟,并加以分析,而且对于稍微复杂的门控,只要设置了set_clock_gating_check -high/-low,也会执行时序分析。

估计原因是你的系统复位后,门控输入前的CLK信号停留在高电平,此时即使gate=1,门控后的输出也是红X,导致后面推动的DFF仿真全部变红。仿真解决办法是force CLK为0一段时间再释放。这个问题只会影响你的仿真,实际IC工作不会有问题。
当然好的办法还是设计时,复位尽量让时钟停留在0电平。再者,最好调用库里的gating cell。


你好,我不明白你的意思,你能详细说一下么?还有如何调用那个cell啊?


按照你们写的RTL实现:    if (iCLK == 1'b0)
      ClkEnT2 <= ClkEn;
  assign iGatedClk = iCLK & ClkEnT2;

你想想如果iCLK一直不翻转而且停留在高电平,ClkEnT2是不是为X?那得到的 iGatedClk是不是也为X?

库里的gating cell可以在你网表仿真时调用的std cell模型文件里找到

请教一下怎么选择set_clock_gating_check -high/set_clock_gating_check -low?是使能有效电平吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top