【问题标题】:How does clock gating in RTL design work?RTL 设计中的时钟门控如何工作?
【发布时间】:2016-08-23 23:11:53
【问题描述】:

我试图了解时钟门控在 RTL 设计中的工作原理。

我在这里有一个示例波:

说明:

1st signal is gated_clock
2nd signal is clock_enable
3rd signal is ungated_clock

因此,此波中有 3 个周期(假设周期 0、1、2)。在第 0 周期,clock_enable 为低电平,gated_clock 关闭。在周期 1 中,clock_enable 变为高电平,在下一个周期(周期 2)中,gated_clock 开启。

现在,在仿真过程中,我看到在周期 1 接收到的传入数据正确注册到由时钟门控的模块(使用gated_clock)的一些情况。这对我来说有点奇怪,我不太明白这怎么可能。

逻辑是这样的:

always_ff @(posedge gated_clock, negedge reset) begin
   if (~reset) begin
      some_val <= 1'b0;
   end else begin
      if (in_valid==1'b1 && in_ready==1'b1) begin
         some_val <= in_val;
      end else begin
         some_val <= 1'b0;
      end
   end
end

所以我看到如果in_validin_readycycle 1 中很高,那么some_val 将注册传入的in_val 数据,并且它将在cycle 2 中可用。但是在cycle 1 中,gated_clock 为零。那么 in_val 是如何在这里采样的呢?据我了解,如果我们想在 cycle 1 中击败 in_val,那么 posedge gated_clock 必须为 1。

我可能遗漏了一些核心电路级数字设计概念。我真的很感激任何帮助。

更新波:

1st signal is gated_clock
2nd signal is clock_enable
3rd signal is ungated_clock
4th signal is in_valid
5th signal is in_ready
6th signal is in_val
7th signal is some_val

所以在这里你会看到cycle 0gated_clock 处于关闭状态,但 in_valin_ready 处于高位。输入数据in_val 也很高。在下一个周期some_val 变高。所以看起来in_valcycle 0 中被捕获,即使gated_clock 已关闭。

【问题讨论】:

  • 你能分享gated_clock代的代码sn-p吗?
  • in_valin_validin_readysome_val 的波形以及gated_clock 的时钟会有所帮助(以及您希望看到的波形)。

标签: verilog system-verilog digital-logic register-transfer-level vlsi


【解决方案1】:

门控时钟上可能存在未显示在波形上的故障。您需要查看您正在使用的工具的用户手册,了解如何记录和显示故障。它也可能有助于查看门控时钟的逻辑。是否使用 NBA (

【讨论】:

  • 是的,clock_enable 失败了。
【解决方案2】:

您对 什么 的理解似乎有些不对劲。 in_val 没有计时(实际上,从 sn-p,我看不出它来自哪里)。它可以随意更改(再次,从这个 sn-p 的角度来看)。在gated_clock 变高时,无论in_val 的值现在将在some_val 中捕获,并且直到gated_clock 再次变高(此时我们将采样一个新值)。

【讨论】:

  • 嗨,戴夫,我添加了另一波。你能看一下吗?
  • @newbie:这些波证实了我的预期,我的答案是正确的。如果您不明白,请要求澄清。但先读几遍。我仍然不确定您希望看到什么而不是这种行为。
  • 嗨,戴夫,感谢您的反馈。我不确定为什么我们会从 cycle0 (新波)中翻转 some_val 信号的值,即使周期 0 的门控时钟的 pos 边缘为零。我认为我对 FF 的工作原理缺乏正确的理解。我的假设是从 cycle0 中翻转 some_val,gated_clock 的 posedge 在 cycle0 中也需要很高(而不是在周期 1 中)。
  • 我找到了一篇解释 FF 时序的好文章:edn.com/design/analog/4371393/…。因此,如果我理解正确,在我的示例中,当周期 0 的时钟为低电平时,some_val 将被 LHS 锁存电路锁存,最终当 gated_clock 在周期 1 变为高电平时,FF 内部的 RHS 锁存电路将驱动捕获的数据。我希望这是正确的。如果我又遗漏了什么,请纠正我。
【解决方案3】:

基于新波形some_val 正确生成到发布的 RTL。在gated_clock 的第一个边沿,信号in_validin_ready 都处于高位,因此some_val 在该周期中也处于高位。在下一个边缘它切换回低电平,因为in_valid 变低(顺便说一句in_val 也是)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-18
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多