【问题标题】:Usage of Clocking Blocks in SystemverilogSystemverilog 中时钟块的使用
【发布时间】:2015-10-04 15:06:52
【问题描述】:

System Verilog 中 Clocking Blocks 的具体用法是什么,它与普通的 always @ (posedge clk) 块有何不同?

我知道的一些差异:

  1. Clocking Block 从 Preponed Region 采样输入数据,而在正常的 always 块中,总是存在竞争条件的机会。
  2. 时钟块不可合成,但通常 @ (posedge clk) 始终是可合成的。

不过,我还没有了解 Clocking Block 的具体用法,所以如果我提到了错误,请提供您的意见并纠正我。

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    虽然我对时钟块做的不多,但我可以基本了解它们的用途以及与 always 块构造的主要区别。

    重要的是要注意这些结构非常不同,解决的问题也非常不同。 always 块实际上是 Verilog 的核心,用作逻辑和寄存器的主要描述符(我有点将 always @*always_combalways_latchalways @(posedge clk)always_ff 放在一起,因为它们都做类似的事情,尽管适用于不同的用例并且有几个细微差别)。因此,always @(posedge clk) 用于描述寄存器,或者更准确地说,描述每次给定信号具有上升沿时要采取的动作(就像 FF/寄存器在实际电路中的行为一样)。因此,当时钟事件发生时,该块的代码就会执行。

    时钟块用于概括时钟事件周围的事件的时序应如何表现。在实际电路中,您通常对设计中的每个 FF 都有保持时间和建立时间限制。这些约束决定了对电路时钟频率的限制,并且在设计无危险逻辑电路时理解这一点很重要。然而,在 HDL 代码仿真中,重新创建这些时序范例可能很烦人且不可扩展,尤其是在处理测试台代码和设计代码之间的同步接口时。因此,SystemVerilog 包含时钟块结构,作为一种为测试平台提供一种方法,该方法可以轻松定义此类接口的时序,其中包含已定义的时钟、内置偏移和允许时钟以更好的方式定义测试平台中的激励的结构.

    当您定义一个时钟模块时,您正在定义一组信号以与所提供的时钟同步并具有已定义的偏移,因此,无论何时您尝试分配输入或从输出读取,这些信号都会自动偏移给定的数量(因此以更现实的方式表现)。此外,通过时钟,您可以在刺激和检查块中使用## 构造以将事件延迟一定数量的时钟周期(确实,您可以使用@(posedge clk); 来做到这一点,但## 语法更简洁。最终,时钟块允许您构建包含同步接口时序信息的可扩展测试平台(因为时序信息都在时钟块中)。您可以在此处找到更完整的时钟块解释和示例: https://www.doulos.com/knowhow/sysverilog/tutorial/clocking/

    重要的收获是: always @(posedge clk) 和时钟块的区别在于前者是描述寄存器,后者是描述 DUT 和测试台之间同步接口的时序。

    因此,您在问题中进行的直接比较并不合适。但是直接回答您的问题:

    1. 时钟模块在由输入偏差(即时钟事件之前的偏差时间)定义的时间步长的延迟区域中对其输入进行采样。由于默认为1step,因此样本在时钟事件之前的上一步的延迟区域中完成(与当前步骤的Preponed区域在值方面相同)。输出在时钟事件之后的 ReNBA 区域偏移时间步长中驱动(默认偏移为 0,因此输出在与时钟事件相同的时间步长的 ReNBA 中驱动)。

    2. 由于时钟模块用于定义 DUT 与其测试台之间的时序模型(用于同步线路),因此它们确实不可合成。它们是一个测试平台构造,很像initial(忽略少数情况)、final、断言和程序。

    要了解有关时钟模块的更多信息,请阅读 IEEE1800-2012 的第 14 章。 14.13 讨论输入偏差,14.16 讨论输出偏差。

    【讨论】:

    • 因此,据我了解,偏斜是时钟块和普通总是块之间的主要区别之一。如果可能的话,您能否举个例子说明这些偏差如何有助于同步 DUT 和 Testbench 或其他任何事情?
    • @MaheshShah 时钟块中的偏差允许测试台更好地模拟其自身与 DUT 之间的真实接口。因此,时钟块确实可以消除测试台中模拟偏斜所需的繁重和不可扩展的代码。例如,在为顺序设计编写 teshbench 时,您可以定义一个时钟块,该块将自动处理通过给定偏差延迟您的测试平台输出,以及通过某个偏差在时钟之前对您的输入进行采样。这些偏差允许测试台更好地模拟 DUT 的源。
    • 即,在实际系统中,设计的输入(仿真中 TB 的输出)将延迟一定的偏差,并且您的设计的输出应该在时钟之前准备好一定的偏差(输入到您的 TB)。这些是电路的建立和保持时间。时钟块允许您很好地模拟这些。请参阅我提供的链接中的第一个示例,以获得对此的真实演示。
    • 所以我从这些示例中了解到,使用时钟块主要是为了减少测试台中的计时工作。我说的对吗?
    • @MaheshShah 是的,完全正确。它们允许您收集与一组同步线路相关的所有时间并将其全部放在一个位置。然后,您可以使用该信息根据时钟块中定义的时钟和偏移编写干净的测试台刺激。
    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 2021-12-14
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多