【问题标题】:Delta Cycles and WaveformsDelta 周期和波形
【发布时间】:2017-04-27 08:32:38
【问题描述】:

谁能解释增量周期如何影响 VHDL 模拟的波形?我知道这与 VHDL 如何确定优先级有关,但我不确定如何确定。

【问题讨论】:

标签: vhdl


【解决方案1】:

您不会在 VHDL 标准(IEEE Std 1076-2008)中找到相关信息,并且 delta 循环的作用并未得到广泛理解(此处提示您作为语言用户实际需要了解多少,抽象的知识就足够了)。

Delta 周期先于 VHDL。您可以在 Internet 上找到可追溯到 1971 年的参考资料。VHDL 从 CONLAN BCL 时间模型中获得它的增量周期,它们被称为步骤(请注意,我们今天看到交互式模拟器命令要步进,请参阅On the Origin of VHDL's Delta Delays , SUMIT GHOSH, Int. J. Engng Ed. Vol. 20, No. 4, pp. 638-645, 2004 和 CONLAN 报告, R. Piloty, M. Barbacci, D. Borrione, D. Dietmeyer, F. Hill, P. Skelly, Springer-Verlag 1983)。

Ishiura Nagisa 的博士论文Studies on Logic Simulation and Hardware Description Languages 中有一个简单的参考解释了这个概念,其中第 7 章描述了 NES:硬件描述语言的非确定性行为模型。

7.2.2 零延迟建模

在设计硬件时,事件之间的时序关系非常重要。 HDL 必须有一个时序规范的框架 关系。因此,开发硬件行为模型的最重要问题之一是如何对时间建模

可能最简单的时间建模方法之一是用一系列符号来表示波形,每个符号都与离散时间的最小单位相关联。

在 VHDL 术语中,这些符号是一种类型的值,离散时间由模拟时间的值表示。

...然后硬件组件的行为由符号集上的顺序机器表示。这种建模虽然实现了简单的数学处理,但缺乏表达单位时间内同一地点发生的多个事件的能力。因此很难解释包含由零延迟组件组成的环路的电路的行为。

仿真 VHDL 模型会在仿真时间内产生一系列波形事件。 VHDL 实际上根本不会处理具有零延迟分量的反馈回路。第 7 章的重点是描述如何使用替代的 HDL 来做到这一点。

... 这里,零延迟是指小于单位时间的延迟。它是时间量化的产物。如果一个组件的延迟时间小于时间的最小单位,则指定为0。当我们以一个时钟周期为单位时间时,也会出现零延迟。在这种情况下,门的延迟被视为零延迟,因为它不是按单位时间测量的。零延迟表示前后关系因果关系,其延迟时间以单位时间为0,

在 VHDL 模拟周期中,没有增加模拟时间的情况下发生的增量周期是由默认增量延迟为 0 的信号分配产生的增量周期。我们可以看到 Jayaram Bhasker 在A VHDL Primer中对增量周期的描述(AT&T) 受到这段话的影响。 VHDL Primer 对 delta 循环的描述被广泛引用,但仍然没有启发性,因此需要搜索计算机科学家关于该主题的著作。

请注意,VHDL 模型通过等待语句中进程的恢复和随后的重新暂停来操作(具有敏感性列表的进程具有带有敏感性列表的隐式等待语句,作为进程的最后一条语句)。不指定进程执行恢复的顺序,VHDL可以模拟并行运行的进程。

为了处理这个信号,更新被调度并且直到所有进程都被挂起才生效。如果为当前仿真时间安排了任何更新,则下一个仿真周期是一个增量周期,否则仿真时间提前到下一次为下一个仿真周期发生计划的信号更新时。当没有安排进一步的事件时,模拟时间提前到 time'HIGH 并且模拟结束。

这些增量周期允许模型执行中的确定性,其中进程可以通过使用具有历史的信号并行执行。信号在流程执行期间不会改变,每个流程每次都会以相同的方式执行。 VHDL 是形式表示法,旨在支持对其综合合格子集的形式验证,确定性在这里很重要。

为了处理零延迟,bcl(Conlan)[Pi183]和VHDL[Coe89]的时间模型是在一个名为step和Δ-delay的子单位时间的基础上设计的, 分别。单位时间内的信号值是一步或Δ延迟无限重复计算的最终结果。由于这些模型是为了计算最终结果而发明的

单位时间内,不注意单位时间内的计算顺序。实际上,在单位延迟模型下,步长或 Δ 延迟与仿真相关。在某些情况下,最终结果取决于计算的顺序。例如,在图 7.2 中,虽然电路不切实际,但 D 上可能存在危险,它会改变 Q 上的信号值。通过使用 bcl 和 VHDL 模型,我们永远不会得到 这个结果。这又是因为这些语言是基于 确定性计算模型。

这不是很清楚。连续增量周期内的执行顺序由对当前仿真时间的信号更新决定。增量循环将以确定的顺序发生。

作者继续阐述了作为替代方案的非确定性行为模型的优点,此处剩余的叙述与 VHDL 关系不大。

除了图 7.2 所示的全理论模型的非确定性。 VHDL 不能处理零延迟反馈回路。为了捕捉这些情况,VHDL 仿真器实现了在仿真停止之前允许的最大增量周期数。虽然这个数字有时可以通过命令行选项设置,但 [Coe89] 参考(The VHDL Handbook by Vantage Analysis Systems 的 David R. Coelho 在 1989 年)是在作者的模拟器刚起步的时代增量循环最大值为 127,反映了更简单的模型,并且随着时间的推移必然会增加。在现代模拟器中,默认最大值通常为 5,000 或 10,000,反映了模型的复杂性。这个想法是允许足够的增量循环来克服模型复杂性,而不会让零延迟循环肆无忌惮地运行。

在图 7.2 中,如果 A、B、C 和 D 是 VHDL 中的信号,其中反相器、缓冲器和与门表示具有一个增量延迟的信号分配(零延迟模型),信号 D 将没有单个增量周期脉冲(一个小故障,小于可测量的时间)。如果你想要一个脉冲,你需要延迟,依靠逆变器和缓冲器的不同下降时间。

当使用 0 延迟建模时,VHDL 可能需要额外的信号作为缓冲区,以提供增量延迟或补偿由于逻辑路径中信号分配数量不同而具有增量延迟的信号。另一方面,延迟会被综合忽略(除了偶尔提供警告的工具)。

因此,使用信号更新的增量周期为零延迟模型提供了确定性 - 基于所有进程暂停后发生的信号更新的正确结果。如果没有这种确定性,您将依赖于赋值顺序,就像使用变量一样。使用信号可以让您在任意边界上分解设计。可以不考虑它们之间的顺序来描述进程和其他并发语句。

优先级在标准中具有特定含义(运算符优先级),说“确定性”更安全。您每次都会得到相同的答案,因为即使对于零延迟分配,在流程执行期间也不会发生信号更新。

【讨论】:

    【解决方案2】:

    作为硬件描述语言的 VHDL 本质上是并行的,即同时一个信号可以改变其值。但是所描述的硬件行为的模拟是在 CPU 上完成的,并且 CPU 按顺序执行命令,因此需要引入解释这种并行信号分配的机制,即 Delta 周期。

    当某个信号改变它的值时, 实时停止并且信号的值发生变化,并且实时仍然停止,仿真继续进行增量周期并改变受此变化影响的所有其他信号的值。如果任何信号受到影响,则仿真会继续进行另一个增量周期,检查所有其他受影响的信号,并且只要所有受影响信号的值都变为静态,该过程就会以这种方式继续进行。只有这样才能继续进行实时模拟。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多