gpt4 book ai didi

verilog - Verilog HDL 中的“始终”与“永远”

转载 作者:行者123 更新时间:2023-12-02 20:49:10 24 4
gpt4 key购买 nike

always 关键字(不是 always @ block )和 之间有什么区别Verilog HDL 中的forever 关键字?

always #1 a=!a;
forever #1 a=!a;

这是我的发现,但我仍然无法在两者之间划清界限:

来自Wikipedia :

The always keyword acts similar to the "C" construct while(1) {..} in the sense that it will execute forever.

来自electroSofts :

The forever instruction continuously repeats the statement that follows it. Therefore, it should be used with procedural timing controls (otherwise it hangs the simulation).

有人可以对此给出更清楚的解释吗?谢谢!

最佳答案

always可以在模块级别使用构造来创建始终触发的程序 block 。通常,它后面跟着一个事件控件,例如,您可以在模块内编写如下内容:

  • always @(posedge clk) <do stuff>

  • always @(en or d) <do stuff>

  • always @* <do stuff> ,也可以使用@(*)

这是编写锁存器、触发器等的典型方法。

forever相反,construct 是一种过程语句,通常只应在测试台代码中使用。它可以发生在always内和initial block 和其他语句,但不能直接出现在模块内。例如,您可以使用它来编写如下内容:

initial begin
if (do_random_testing)
begin
forever #100 input = $random(...);
end
else if (read_from_file)
begin
... read inputs from a file or whatever ...
end
end

写类似 forever #1 a=!a; 的内容是不合法的作为模块中的顶级构造。它必须放在例如 always 中 block ,一个initial block ,一个task ,或类似的。

关于verilog - Verilog HDL 中的“始终”与“永远”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27181187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com