在 VHDL 中,如何最好地等待测试台中的时钟沿

The*_*ell 0 vhdl

写测试台的时候,写的有没有问题

wait for 1 ns ; wait until rising_edge( clock ) ;
Run Code Online (Sandbox Code Playgroud)

每次我想等待下一个上升沿?

我想将此序列放入一个过程中,然后始终使用它。

我想等待 1 ns 的原因是,如果我只有 swait until并且其中两个之间没有信号分配,它们将合并为一个。

时钟周期时间为 10ns,因此 1 ns 应该不成问题。我真正想做的是等待一个增量,但我不知道该怎么做。是否可以?

这种方法是否存在隐藏的陷阱?

我们使用 VHDL 93 和 ISIM 模拟器。

Jim*_*wis 7

你不需要wait for 1 ns.

等待 5 个时钟的一种方法是:

wait until rising_edge( clock ) ;
wait until rising_edge( clock ) ;
wait until rising_edge( clock ) ;
wait until rising_edge( clock ) ;
wait until rising_edge( clock ) ;
Run Code Online (Sandbox Code Playgroud)

一个简化的规则是等待语句始终将进程挂起至少一个模拟/增量周期。

until对于没有显式提供的等待on sensitivity-list(例如上面的示例),存在一个隐含的子句on sensitivity-list中的每个信号until。因此,上式等价于:

wait on clock until rising_edge( clock ) ; 
wait on clock until rising_edge( clock ) ; 
wait on clock until rising_edge( clock ) ; 
wait on clock until rising_edge( clock ) ; 
wait on clock until rising_edge( clock ) ; 
Run Code Online (Sandbox Code Playgroud)

也许这个较长的形式更明显一点 - 当时钟发生变化并且 Riding_edge(clock) 为 true 时,等待语句将恢复并继续到下一个等待语句。下一个等待语句将暂停,直到时钟发生变化。

  • 是的,循环将等待 5 个周期。(可以放在子程序中多次使用) (2认同)