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

关于门控时钟综合

时间:10-02 整理:3721RD 点击:
请问门控时钟在编写代码时用的是哪种形式啊?
1.
    always @(posedge  clk)
   begin
     if(enable)
      out<= in;
    else
      out <= out;
2.
  assign ckg = enable?clk:0;
   always @(posedge ckg)
  .....
我用第一种形式的可以综合成latch based门控的,用第二种怎么就综合不出来呢,还是与门形式的
有没有高手能指点一下啊

你是FPGA的rtl设计吗?如果是推荐使用dcm或PLL来实现门控时钟
里面有一个buff叫做enable buff
你只需要产生一个enable信号就可以了,pll 或dcm会产生一个门控时钟输出

不是fpga,是asic方面的

请教第二种描述的综合方法

asic的话直接 用latch,到库单元中找一个大小合适的latch,直接例化一个就行了

第一种是门控的默认风格,这种可以直接在dc中生成门控,默认的门控时钟风格就是base latch
第二种是rtl直接映射到门级的,根据你的逻辑就是与门的时钟输出,如果想增加latch,就在例化一个latch即可

你的第2种写法,本身就是一个AND
latch是需要定义成reg的吧

要使用门控的书写格式。

小编确信第一种描述方式能综合出latch来?我认为综合出的应该是mux+D触发器

第一种是mux+d flip-flop了, clock gating cell是integrated latch based cell,每个工艺库都有特定的cell,直接例化就行了,后端的时候再特殊处理一下。

第二钟时钟方式不正确

在ASIC设计中,门控时钟最好用cell来做,免得DC综合得很乱。

i prefer the first case...

第二种是门控时钟没错,但是这样的写法是会产生毛刺的。
建议采用以下的写法,不会有毛刺。
always @(negedge clk or posedge rst)
if(rst) en_r <= 0;
else en_r <= #1 enable;
wire clk_gate = en_r & clk;

门控时钟可以由工具用standard cel综合生成,也可以直接调用库里的icg cell。
一般情况下库里都有icg cell,它是基于latch的实现方法。

第一種由於電路必須將out的值保留
所以會出現latch
第二種由於您指定了clk在enable為0時,有default值為0
因此不會出現latch

man一下clock_gating_style这个变量,估计会对你有所帮助。

我用的就是这种方法:
always @(negedge clk or posedge rst)
if(rst) en_r <= 0;
else en_r <= #1 enable;
wire clk_gate = en_r & clk;

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

网站地图

Top