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' на что-то отличное от 'Икс'.Инициализация этих переменных обычно выполняется в коде тестового стенда, скажем, в начальном блоке.Например,
initial #10 a = 1; // initialize 'a' to '1' after 10 time units.
Поскольку вы пришли из 'c', существует большая разница в концепции языка.Verilog - это параллельный язык программирования, это означает, что все процедурные блоки выполняются преимущественно параллельно. начальные блоки и всегда блоки являются процедурными блоками.Операции в стороне блока выполняются последовательно, но два разных блока выполняются параллельно.События и задержки вызывают упреждение.