variable no debe usarse en la conexión del puerto de salida

1

Busqué en la jerarquía verilog aleatoria para comprender cómo instanciar correctamente los módulos. Encontré uno en enlace

Recibo un error que dice que "la variable 'intsig' no debe usarse en la conexión del puerto de salida"

module top_ver (q, p, r, out);
input     q, p, r;
output    reg out;
reg     intsig;

bottom1 u1(.a(q), .b(p), .c(intsig));
bottom2 u2(.l(intsig), .m(r), .n(out));

endmodule

editar 1

module top_ver (q, p, r, out, clk);

input     q, p, r ,clk;
output    reg out;
reg     intsig;
    always@(posedge clk) begin
        bottom1 u1(.a(q), .b(p), .c(intsig));
        bottom2 u2(.l(intsig), .m(r), .n(out));
    end
endmodule
    
pregunta Eris Drater

1 respuesta

0

Incluso si la salida c de bottom1 es producida por un flip-flop, en top_ver no está asignando intsig en un bloque de procedimiento (un bloque always o initial ).

Por lo tanto, debe declarar intsig como wire en lugar de reg .

Independientemente de si la señal es realmente producida por un flip-flop o una lógica combinatoria, en Verilog declara una señal como reg cuando la asignará en un bloque de procedimiento (nuevamente, always o initial ) y lo declara como wire (o una de las variantes como wor o wand ) cuando lo va a asignar en una declaración combinatoria ( assign o como la salida de un módulo instanciado).

    
respondido por el The Photon

Lea otras preguntas en las etiquetas