В чем разница между назначением переменной внутри начального и конечного блоков и вне его?

#system-verilog

#system-verilog

Вопрос:

Рассмотрим переменную проводного типа x. Присвоение значения внутри начального и конечного блоков. Например, begin x = 1’b0 end

И вне блока begin-end. Например

назначить x = 1’b0

В чем основное различие между ними?

Комментарии:

1. Вы не можете выполнить процедурное присвоение проводу

Ответ №1:

Verilog имеет два типа конструкций: структурную и процедурную.

Внутри модуля у вас могут быть объявления и структурные конструкции, например generate , экземпляры модуля, назначения. это то, что представляет собой часть схемы.

   input data
  wire a;
  wire b;
  assign a = data; // this is a wire connection in the circuit
  assign b = ~data; // this an inverted gate and b is connected to its output
 

И у вас есть процедурные контексты, где вы можете описать логику, больше похожую на программирование.

  // sequential logic
 always @(posedge clk or negedge rstn) begin
    // here you cannot assign
    if(~rstn) begin
      // here you reset your logic
    end
    else begin
      // here you write some logic that can be though
      // as an event handler
      // every variable here will be be store in a flop
      a <= data; 
      // the value of a is not updated at this point
      // only after the block execution ends
      // it is called non-blocking assignment

    end
 end
 
  input data;
 reg b;
 always @(data) begin
   b = data; // b is not a flop even though it was declared as a reg.
 end
 

Существует гораздо больше, если вы сделаете свой вопрос более конкретным, это может помочь в ответе.