请教一下,dc综合关于门控时钟的问题
这个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?是使能有效电平吗?
