Estoy diseñando un circuito en el que debo conectar 32 salidas de 1 bit de 32 compuertas NAND a la entrada de 2 compuertas 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.
He intentado 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 al OR16 y xpow es un cable de 32 bits conectado a la salida de 32 puertas NAND. or1w y or2w son cables nuevamente, conectados a la salida de las 2 puertas OR16.
Al compilar esto, no se muestra ningún error en ModelSim, pero cuando se usa icarus, se muestra 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