0

这是场景:

我有一个启用的寄存器(称为 RegA)。RegA 的输入 put 被永久拉高。

同时,RegA 的使能线通过一些简单的组合逻辑连接到 RegB 的输出端。

现在在场景中,在下一个时钟脉冲上,RegB 的输出将仅在一个时钟周期内变高。

我的问题是,我会看到 RegA 的输出在 RegB 变高的同一个时钟周期内变高,还是 RegA 在下一个时钟周期变高,或者由于竞争条件它可能永远不会变高?

根据经验,我觉得 RegA 会在 RegB 变高的同一时钟周期内变高,但是,我想知道这是否是不好的做法并且不可靠。我认为在启用线路的信号和 RegA 变高的时钟沿之间可能存在竞争条件。由于使能线经过了一些组合逻辑,因此似乎每次都会失去竞争,因此 RegA 不会在 RegB 变高的同一时钟周期内识别出使能线为高电平。

4

2 回答 2

2

我假设您所说的启用是时钟启用?在这种情况下,如果我理解正确的话,在 RegA 变高之前你会得到一个时钟周期的延迟。解释:

仅当时钟到达时其使能输入处于活动状态时,RegA 才会对时钟周期做出反应。然而,由于 RegB 有一些内部延迟,并且由于从其输出到达到 RegA 使能甚至还有一些额外的组合延迟,所以在 RegA 已经忽略时钟周期之前,有效信号不会“进入”RegA。

不过,这是双向的,因此当第二个时钟周期到来时,活动使能信号也不会消失,从而使 RegA 看到时钟周期并对其做出反应。在下一个时钟周期内,使能将再次无效。

请记住,停用的时钟使能只会导致时钟输入被忽略,因此当时钟使能输入无效时,寄存器将保持其值。

这不是竞争条件(除非您有一个设计不佳的系统,例如有很多时钟偏差,但是您也有很多其他问题),并且可以可靠地使用 - 否则很多 FPGA 设计人员会采用想当然是不可能做到的。

于 2013-02-05T07:21:53.397 回答
0

只要您的时钟分布正常(例如,在 FPGA 中,这将由工具为您管理),那么您将获得明确定义的行为。

在第一个时钟脉冲上,RegB 的输出将在时钟边沿之后变为高电平。因此,RegA 将在时钟转换点“看到”其启用的低电平,因此它不会改变。

在下一个时钟周期,RegB 的输出将在时钟边沿之后变为低电平。然而,这对于 RegA 来说已经太晚了,因为它已经“查看”了使能信号(当时钟沿到来时)——它会看到它的使能信号为高电平,并将高输入传输到输出(经过很短的延迟)。

所以,是的,你会得到一个额外的周期延迟。

于 2013-02-05T14:23:26.517 回答