Dividir el puerto multibit en entradas para 2 puertas

1

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
    
pregunta Himanshu Bhatia

1 respuesta

3

Debe definir el puerto de entrada or16_new como

input [15:0] orin1,

Entonces tu primer intento debería funcionar.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas