等到rising_edge(clk)vs如果rising_edge(clk)

wah*_*hab 5 vhdl

我在VHDL中遇到了两种样式的流程声明。

process(clk)
begin
    if rising_edge(clk)
....do something....
Run Code Online (Sandbox Code Playgroud)

另一个是

process
begin    
    wait until rising_edge(clk)
    ....do something....
Run Code Online (Sandbox Code Playgroud)

每种方法的优缺点是什么。

wap*_*p26 4

假设...第二个示例的部分没有任何wait语句,则两种形式在语义上是等效的。

它们在模拟中的行为相同。

然而,第一种形式是推荐的综合风格,并且被许多人认为更具可读性。

  • @Wap26它们不是100%等效:根据LRM,敏感度列表相当于没有敏感度列表并且添加了“wait on <sensitivity-list>;”作为进程的**last**语句的同一进程,不是第一个。因此,您几乎正确地认为它们是等效的:在模拟期间,初始化是不同的。根据“...”的不同,差异可能是可观察到的,也可能是不可观察到的。 (3认同)
  • 谁推荐的?两种形式均受支持,请参阅已撤回的 IEEE Std 1076.6-2004,6.1.3.1 使用敏感列表和一个时钟的进程的边缘敏感存储和 6.1.3.2 使用单个等待语句的边缘敏感存储。区别在于进程是否具有敏感度列表,该列表暗示“wait on clk;”作为进程的最后一个顺序语句(IEEE Std 1076-2008 11.3 Process 语句)。哪种形式是纯粹的编码风格选择。, (2认同)