Depuración del multiplexor Verilog a nivel de puerta

-1

He construido un multiplexor 4-1 usando tres multiplexores 2-1, pero tengo muchos problemas para depurar mi código. He intentado usar las declaraciones $display como métodos de depuración rudimentarios, pero no parece estar ayudando. Aquí está mi código:

module multiplex4_to_1(S, C, O); //S[0] is and, S[1] is or
    input [3:0] S;               //S[2] is add, S[3] is less
    input [1:0] C;               //C[0] picks and/or + add/less
                                 //C[1] picks m1 or m2
    output O;

    wire m1_out, m2_out;


    multiplex m1(S[1], S[0], C[0], m1_out),
              m2(S[3], S[2], C[0], m2_out),
              m3(m2_out, m1_out, C[1], O);

endmodule

module multiplex(A, B, C, D);
   input A, B, C;
   output D;

   wire x, y, z;

   not n1(x, A);

   and a1(y, A, C),
       a2(z, x, B);
   or o1(D, z, y);

endmodule

Mi banco de pruebas es:

module test_adder;
   reg [3:0] S;
   reg [1:0] C;

   wire O;
   multiplex4_to_1 m(S, C, O);
   initial
     begin
       $monitor("%b %b %b %b OUTPUT: %b", S[3], S[2], S[1], S[0], O);
       S = 4'b0011; C = 2'b01;
       #1 S = 4'b0001; C = 2'b01;
       #1 S = 4'b0010; C = 2'b01;
     end
endmodule

El multiplexor 2-1 funciona bien, pero parece que cuando los pongo juntos, algo se rompe.

La salida esperada serían las dos, dado un C = 2'b01' , generaría S[0] . El bit menos significativo de C elige entre S[0:1] y S[2:3] , y C[1] elige entre estas dos opciones.

La salida para el código anterior es

0 0 1 1 OUTPUT: 1
0 0 0 1 OUTPUT: 1
0 0 1 0 OUTPUT: 1

Pero espero:

0 0 1 1 OUTPUT: 1
0 0 0 1 OUTPUT: 0
0 0 1 0 OUTPUT: 1
    
pregunta Astrum

1 respuesta

0

Si A y B son sus entradas de las cuales C selecciona (a juzgar por su orden de pines de mux de 4 a 1), su mux de 2 a 1 está definitivamente mal. Tu salida D es $$ D = \ bar {A} B + AC $$ Tu salida D es verdadera para A = 0, B = 1 independientemente de C. Eso es no es correcto.

    
respondido por el Kevin Kruse

Lea otras preguntas en las etiquetas