El error con referencia al 'restablecimiento' del cable escalar no es un registro legal o valor l variable

Recibo un error en Verilog con un parámetro de entrada que no se reconoce como un registro legal o un valor l variable. Tuve el mismo problema con la salida en el módulo, sin embargo, se solucionó al etiquetarlo como reg. Es el único error en mi código y ocurre solo en la variable de reinicio de entrada en el bloque siempre.

module lasersystem(input clk, input reset, output reg click
     );

reg [1:0] next_state = 2'b00;
localparam off = 2'b00, start = 2'b01, on = 2'b10;
reg [32:0] counter;


always @ (clk)
begin
case (next_state)

off: if (clk == 0) begin
        next_state = off;
        reset = 1;
        counter = 32'd0;
        click = 0;
        end

      else if (clk == 1) begin
        next_state = start;
        reset = 1;
        counter = 32'd0;
        click = 0;
        end

start: if (clk == 1) begin
          reset = 0;
          click = 0;
          counter = 32'd0;
          next_state = on;
        end

         else begin
          next_state = on;
          reset = 0;
          counter = 32'd0;
          click = 0;
         end

on: if (clk == 1) begin
        reset = 0;
        click = 1;
        if (counter == 32'd249999999) begin
            next_state = off;
        end
        else if (counter != 32'd249999999)
            next_state = on;
    end

default: next_state = off;
endcase
end

always @ (posedge clk) begin
case (reset)
    1: if (next_state == off) while (counter > 32'd0 && counter <     32'd250000000) counter = counter - 32'd1;

    0: if (next_state == on) while (counter > 32'd0 && counter < 32'd250000000) counter = counter + 32'd1;

default: counter = 32'd0;
endcase
end     
endmodule

¿Por qué pasó esto?

Ha etiquetado resetcomo inputpero luego intenta asignarle un valor ( reset = 1). Eso es lo que está marcando el error.

Respuestas (1)

Si su máquina de estado necesita configurarse reset, entonces debe especificarlo como parte output reg resetde su módulo. Las salidas predeterminadas son redes a menos que agregue un tipo de datos como reg. Luego, se tratan como variables que se pueden asignar de forma procesal desde el bloque ` always1.

Nunca he considerado el registro o el cable de reinicio como una salida. La mayoría de las veces veo en clase que el reinicio se usa como entrada, pero luego configuraré el código y veré si funcionó.
@ user548010, si no es una salida, ¿por qué su código lo establece en un valor específico? (Estoy preguntando principalmente porque tal vez no he entendido lo que se supone que debe hacer el código)