Dividir el puerto multibit en entradas para 2 puertas

Estoy diseñando un circuito en el que debo conectar 32 salidas de 1 bit de 32 puertas NAND a la entrada de 2 puertas OR de 16 entradas. Estoy escribiendo Verilog para esto, pero no puedo averiguar cómo conectar los 16 bits iniciales ([15:0]) a la entrada del primer OR16 y los 16 bits restantes ([31:16]) a la entrada del segundo O puerta.

Intenté esto:

  or16_new o1(.orin1(xpow[15:0]), .or1out(or1w));
  or16_new o2(.orin1(xpow[31:16]), .or1out(or2w));

// donde orin1 es una entrada de 32 bits para OR16 y xpow es un cable de 32 bits conectado a la salida de 32 compuertas NAND. or1w y or2w son cables nuevamente, conectados a la salida de las 2 puertas OR16.

Compilar esto no devuelve ningún error en ModelSim, pero cuando se usa icarus, devuelve la siguiente advertencia:

*Port 1(orin1) of or16_new expects 32 bits, got 16. Padding 16 high bits of the port.*

Y de manera similar para la segunda instancia también.

así que lo intenté

or16_new o1(.orin1[15:0](xpow[15:0]), .or1out(or1w));
or16_new o2(.orin1[31:16](xpow[31:16]), .or1out(or2w));

Esto devuelve un error, tanto en ModelSim como en Icarus.

Si ayuda, así es como he definido el módulo or16_new:

module or16_new (

input [31:0] orin1,
output or1out);

wire w9, w10, w11, w12;

nor nr_1(w9, orin1[0], orin1[1], orin1[2], orin1[3]);
nor nr_2(w10, orin1[4], orin1[5], orin1[6], orin1[7]); 
nor nr_3(w11, orin1[8], orin1[9], orin1[10], orin1[11]);
nor nr_4(w12, orin1[12], orin1[13], orin1[14], orin1[15]);
nand (or1out,w9,w10,w11,w12);
endmodule
@Lan, he visto que intentaste responder editando la pregunta. No es así como funciona este sitio: escriba su respuesta en el campo debajo de la pregunta y evite las frases ingeniosas (agregue una breve explicación y/o un ejemplo de código).
El mensaje de error le dice exactamente dónde está el problema (como se describe en la respuesta a continuación)
¿Por qué la entrada orin1 se define como de 32 bits de ancho?
@ dave_59 No sabía que podía perder algo tan simple como el ancho del puerto. Y yo estaba tratando de depurarlo durante casi 2 días. Gracias. Definir orin1 como input [15:0] orin1;Y usar la primera forma de instanciación ayudó.

Respuestas (1)

Debe definir el or16_newpuerto de entrada como

input [15:0] orin1,

Entonces tu primer intento debería funcionar.