前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >门控时钟和逻辑等价性检查

门控时钟和逻辑等价性检查

作者头像
ExASIC
发布2021-11-02 09:43:39
1K0
发布2021-11-02 09:43:39
举报
文章被收录于专栏:ExASICExASIC

每当问到“怎么降低动态功耗”,一般的答案就是插门控时钟。那为什么插门控时钟就能降低动态功耗呢?门控时钟一定能插得进去吗?对逻辑等价性检查(LEC)有什么影响?

先来看看门控时钟的原理。​

有下面的一段代码,当然data_en满足时才采数据。对应的门级电路如下图。

代码语言:javascript
复制
module top
  (
   input wire clk,
   input wire rst_n,
   input wire data_en,
   input wire data_in,
   output reg data_out
   ) ;

  always@(posedge clk, negedge rst_n)
    if(!rst_n)
      data_out <= 1'b0;
    else if(data_en)
      data_out <= data_in;

endmodule // noclkgate

插入门控时钟,就是把数据通路的条件不满足时的时钟停掉,去除不必要的采样。比如用一个与门来处理一下时钟,如下图。

为了让门控时钟的高低电平不变,也不产生毛刺,有一些办法。一个方法是把data_en用clk下降沿的DFF打一拍,然后再与。另一个方法是用latch来实现,如下图。

一般的工艺库里都一个stdcell把inv+latch+and打包在一起,叫做Integrated Clock Gate(ICG)单元。

为了方便,我们常常在RTL​直接例化库里的ICG,来做全局的门控时钟。也可以ICG包在一个module里,方便换不同的工艺。

代码语言:javascript
复制
module top
  (
   input wire clk,
   input wire rst_n,
   input wire data_en,
   input wire data_in,
   output reg data_out
   ) ;

  wire        gclk;

  TLATNTSCAW7T icg_0 ( .CK(clk), .E(data_en), .SE(1'b0), .ECK(gclk) );

  always@(posedge gclk, negedge rst_n)
    if(!rst_n)
      data_out <= 1'b0;
    else
      data_out <= data_in;

endmodule // noclkgate

​是不是所有的DFF都可以插入门控时钟呢?

不是的。只有带使能的DFF,就是数据保持不变的时刻才可以停时钟。例如信号打拍的DFF需要每个时钟都采样,每个时钟都在工作。 除了latch型门控时钟外,还有一种​自异或型门控时钟。就是根据数据有没变化判断要不要采样。数据翻转率小的DFF适合用这种门控时钟。

​插入门控时钟后,对逻辑等价性检查有什么影响?

在做逻辑等价性检查时,也需要对门控时钟进行设置,比如Cadence的LEC需要set flatten model -gated_clock,Synopsys的formality则需要set verification_clock_gate_edge_analysis true 。在做LEC时,需要把ICG的上的enable合成到数据通路上去。而一般的Latch则不需要,与DFF一样,Latch也是需要作为Keypoint进行逻辑锥对比的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ExASIC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档