vhdl中的事件和事务(时序图)
event and transaction in vhdl(timing diagram)
我试图解决这个问题,但我得到的 table 与 xilinx 显示的 table 不同。我附上了我的答案和真实答案。 Xilinx 显示 "out" 在 36ns 之前是 'U',在 36ns 之后,它是“1”。谁能帮我解释为什么 "out" 图形在 36ns 之前没有赋值?(我认为它应该在 20ns 时首先赋值)。
my answer
question
事实证明这是一个非常好的问题。我一开始以为你在模拟的时候做错了什么,但后来我运行我自己模拟得到了同样的结果。
事实证明,a <= b after x
分配默认使用称为 "inertial time model" 的东西。在此模式下,如果 b
在 x
时间过去之前再次更改,则计划的事件将被取消。目的是过滤短于指定延迟的脉冲。在您的情况下,模拟器将执行以下操作:
- 在 t=0 时,
out
计划在 t=20 时更改为 1。
- 在 t=12,
tem1 or tem2
更改为 0。计划在 t=20 的更改被取消,计划在 t=32 更改为 0。
- 在 t=16,
tem1 or tem2
变回 1。再次取消计划的更改,并在 t=36 安排新的更改。
- 此后
tem1 or tem2
仍为1,因此执行t=36处的变化,out
最终由U变化。
您可以使用 out <= transport tem1 or tem2 after 20 ns;
更改为 "transport delay model" 在这种情况下,您绘制的波形将与仿真匹配。
我试图解决这个问题,但我得到的 table 与 xilinx 显示的 table 不同。我附上了我的答案和真实答案。 Xilinx 显示 "out" 在 36ns 之前是 'U',在 36ns 之后,它是“1”。谁能帮我解释为什么 "out" 图形在 36ns 之前没有赋值?(我认为它应该在 20ns 时首先赋值)。 my answer question
事实证明这是一个非常好的问题。我一开始以为你在模拟的时候做错了什么,但后来我运行我自己模拟得到了同样的结果。
事实证明,a <= b after x
分配默认使用称为 "inertial time model" 的东西。在此模式下,如果 b
在 x
时间过去之前再次更改,则计划的事件将被取消。目的是过滤短于指定延迟的脉冲。在您的情况下,模拟器将执行以下操作:
- 在 t=0 时,
out
计划在 t=20 时更改为 1。 - 在 t=12,
tem1 or tem2
更改为 0。计划在 t=20 的更改被取消,计划在 t=32 更改为 0。 - 在 t=16,
tem1 or tem2
变回 1。再次取消计划的更改,并在 t=36 安排新的更改。 - 此后
tem1 or tem2
仍为1,因此执行t=36处的变化,out
最终由U变化。
您可以使用 out <= transport tem1 or tem2 after 20 ns;
更改为 "transport delay model" 在这种情况下,您绘制的波形将与仿真匹配。