什么时候执行该块?

时间:2018-10-02 19:50:01

标签: verilog

1)该程序块何时执行?

输出a; reg a;

always@(a)
begin
// Do something...
end

在C中,当“ a”的值为非零时将执行此操作。

2)如果此if语句为真?

if(!a)
begin
// Do something...
end

我来自C语言,实际上对Verilog感到困惑。

1 个答案:

答案 0 :(得分:1)

verilog是4状态模拟器,这意味着变量中的任何位都可以具有4个值之一:0、1,x和z。 “ x”表示未知值,verilog中的所有变量在开始时都初始化为该值。

现在,如果将a初始化为x,则以下语句将始终失败:

if (a) -> because x cannot be true (in verilog)
if (!a) -> false, because !x is also unknown and is x;

您应该检查verilog 4状态模拟和算术规则。

另一方面,

始终阻止,直到'a'的值从'x'变为'0'为止。

always @(a) ...

因此,在您将a的值分配为'1'之前,'if'语句将失败,并且直到您将'a'的值更改为不同于'x'的值时,始终不会执行块。这些变量的初始化通常是在测试台代码中完成的,例如在初始块中。例如

 initial #10 a = 1; // initialize 'a' to '1' after 10 time units. 

由于您来自“ c”,所以语言概念存在很大差异。 Verilog是一种 parallel 编程语言,这意味着所有 procedural 块均抢先并行执行。 初始块和总是块是程序块。块中的语句顺序执行,但两个不同的块并行执行。事件和延迟会导致抢占。

相关问题