¿Por qué la salida de este código de verilog es siempre 1? [cerrado]

-3

Estoy intentando implementar la siguiente lógica:

f (A, B, C, D) = ~ C ~ D + ~ ABD + ~ ACD + A ~ BD + A ~ C

He escrito el siguiente código:

module q1(a,b,c,d,out);

input a,b,c,d;

output out;

assign x1 = (~c & ~d);

assign x2 = (~a & b & d);

assign x3 = (~a & c & d);

assign x4 = (a & ~b & d);

assign x5 = (a & ~c);

assign out = x1|x2|x3|x4|x5;

endmodule

Pero cuando creé el banco de pruebas, la salida siempre resulta ser 1, independientemente de la entrada. ¿Hay algún error en mi código? (Sé que podría haber escrito un código más conciso pero, por favor, respóndalo)

    
pregunta Sherry

1 respuesta

2

Quizás haya un error en tu banco de pruebas o en tu simulador. Salgo = 0 para algunas entradas:

module tb;

wire out;
reg a,b,c,d;
q1 q1 (a,b,c,d,out);

initial begin
    $monitor($time, " abcd=%b out=", {a,b,c,d}, out);
    for (int i=0; i<16; i++) #5 {a,b,c,d} = i;
    #5 $finish;
end

endmodule

module q1(a,b,c,d,out);

input a,b,c,d;

output out;

assign x1 = (~c & ~d);

assign x2 = (~a & b & d);

assign x3 = (~a & c & d);

assign x4 = (a & ~b & d);

assign x5 = (a & ~c);

assign out = x1|x2|x3|x4|x5;

endmodule

/*

Prints out:

 0 abcd=xxxx out=x
 5 abcd=0000 out=1
10 abcd=0001 out=0
15 abcd=0010 out=0
20 abcd=0011 out=1
25 abcd=0100 out=1
30 abcd=0101 out=1
35 abcd=0110 out=0
40 abcd=0111 out=1
45 abcd=1000 out=1
50 abcd=1001 out=1
55 abcd=1010 out=0
60 abcd=1011 out=1
65 abcd=1100 out=1
70 abcd=1101 out=1
75 abcd=1110 out=0
80 abcd=1111 out=0

*/

Probé esto en 2 simuladores diferentes. Puedes probarlo en edaplayground.

    
respondido por el toolic

Lea otras preguntas en las etiquetas