注册启用

时间:2013-02-05 06:31:26

标签: vhdl fpga

以下是该方案:

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

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

现在在这种情况下,在下一个时钟脉冲上,RegB的输出将在<一个时钟周期<<>>时变为高

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

从经验来看,我觉得RegA会在RegB高的同一时钟周期内走高,但是,我想知道这是不好的做法和不可靠的。我想在启用线的信号和RegA的时钟边缘之间可能存在竞争条件。由于使能线经过一些组合逻辑,看起来它每次都会松动该比赛,因此RegA不会认识到在RegB变高的同一时钟周期内使能线为高电平。

2 个答案:

答案 0 :(得分:2)

我假设您正在谈论的启用是时钟启用?在这种情况下,如果我理解正确,您将在RegA变高之前获得一个时钟周期延迟。说明:

当时钟到达时,如果其使能输入有效,则RegA仅对时钟周期作出反应。但是,由于RegB有一些内部延迟,并且由于在输出到达RegA使能之前甚至还有一些额外的组合延迟,因此在RegA已经忽略了时钟周期之前,有效信号不会“接收”到RegA。 / p>

这两种方式都有效,因此当第二个时钟周期到来时,有效使能信号也会消失,从而使RegA看到时钟周期并对其作出反应。在下一个时钟周期内,启用将再次处于非活动状态。

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

这不是一种竞争条件(除非你的设计设计很差,例如时钟偏差很多,但你也有很多其他问题),并且可以可靠地使用 - 否则很多东西FPGA设计者认为理所当然是不可能的。

答案 1 :(得分:0)

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

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

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

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