Verilog asigna el resultado del módulo

0

Estoy intentando tomar el resultado de un módulo y asignarlo a una entrada de otro módulo, sin embargo, sigo recibiendo un error sobre la declaración de tipos de red. Siento que me estoy perdiendo parte de las reglas de sintaxis aquí, pero no he podido encontrar una solución. Cualquier ayuda muy apreciada!

Un código sin sentido para demostrar:

module m1(SW, LED);
  input SW;
  output LED;
  reg [3:0] out;
  reg [1:0] x;

  assign x = out[1:0];
  moduleA mA(.in(SW), .out(out));
  moduleA mB(.in(x), .out(LED));
    
pregunta DAnsermino

3 respuestas

1

Como dicen las otras respuestas, su problema es declarar x y out como tipo de registro.

Cuando asignas algo a una declaración assign , o conectándolo a un puerto de salida de una instancia de módulo, debes declararlo como un cable en lugar de un registro.

También agregaría que su variable out es redundante. Puede utilizar una variable para conectarse a la salida de un módulo y la entrada del otro:

   wire [1:0] x;

   moduleA mA(.in(SW), .out(x));
   moduleA mB(.in(x), .out(LED));

Te permite declarar y mantener un seguimiento de una variable adicional y una declaración de asignación adicional.

    
respondido por el The Photon
0

Usted no puede asignar a un registro utilizando la palabra clave assign

Usted puede sin embargo asignarlo a un cable .

wire [1:0] x;
assign x = out[1:0];

Pero es posible asignar de forma asíncrona dentro de un bloque siempre (es decir, sin un reloj) a un registro:

reg [1:0] x;
always @ * begin
    x <= out[1:0];
end

Dos reglas simples sobre tipos de redes:

  • wire = assign
  • reg = always (y / o initial )
respondido por el Tom Carpenter
0

El punto crucial que te falta es la diferencia entre los tipos net y los variables .

net es un cable de conexión, generalmente es la palabra clave wire pero hay otros tipos de redes para estados tripulados, cableados o cableados, y algunos otros casos. Utiliza tipos de red para la descripción estructural.

variable es "almacenamiento temporal de datos de programación", por lo general esta es la palabra clave reg pero también podría ser entero o real en un banco de pruebas. A menudo, reg termina sintetizándose con un registro D-flip-flop, pero no siempre.

Un recurso útil es Guía de referencia rápida Verilog HDL de Sutherland

    
respondido por el MarkU

Lea otras preguntas en las etiquetas