欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

实战攻略:Verilog RTL 级低功耗设计(下)

最编程 2024-01-19 10:18:30
...
      //(2) jitter at the end of read
      #985;
      addr      = 4'h3 ;
      clken     = 1 ;
      repeat(9) begin
         @(negedge clk) ;
         addr   = addr + 1 ;
      end
      @(negedge clk) ;
      clken     = 0 ;
      #20 clken = 1 ;
      #21 clken = 0 ;
      #31 clken = 1 ;
      #13 clken = 0 ;

读 ram 的仿真结果如下。

由图可知,因为信号 clken 的异步或抖动问题,导致输入到 ram 的时钟已经出现了毛刺。地址为 0x3 的数据被遗漏(和使能信号时序有关),地址为 0xC 的数据读了 2 次。显然该门控时钟的逻辑设计非常的危险。

为解决此类问题,需要使用 latch 结构来消除毛刺。

2、使用 latch

在 《Verilog 教程》章节《6.5 Verilog 避免 Latch》中讲到,数字设计中应当避免 Latch 的产生,但 clock gating 是个例外。所以在进行时序分析时,不用关心 clock gating 部分产生的 Latch。

使用 latch 消除门控时钟毛刺的电路图如下所示。

在时钟下降沿对时钟使能信号进行锁存,并保持一个时钟周期内不变。锁存后的信号再与时钟进行"与"逻辑操作,可将门控时钟中的毛刺消除掉。

将仿真例程钟直接"与"操作的门控时钟逻辑部分,改写为使用 latch 逻辑,修改如下: