quiero hacer un contador que aumente por el valor de sus entradas, pero hice el banco de pruebas y la salida es indeterminada, xxxx. ¿Alguien puede decirme si hay algo mal en este código?
//Count
module count(clk,
rst, val, coin
);
//Declaración entradas y salidas
input clk, rst;
input [3:0] coin;
output [3:0] val;
reg [3:0] val;
reg [3:0] nval;
always @(posedge clk, negedge rst)
if(rst == 0) val <= 4'b0000;
else val <= nval;
always @(val)
nval <= val + coin ;
endmodule
No está asignando un valor inicial a nval en ninguna parte, por lo que todos los valores adicionales dependen de esto, por lo tanto, val no está determinado.
Difícil estar seguro sin probar que no hay nada más, pero creo que es esto
always @(val)
nval <= val + coin ;
Como una asignación sin bloqueo, posiblemente tomará el valor antiguo de val (es decir, X) al reiniciar. Puede usar una asignación de bloqueo y completar la lista de sensibilidad correctamente:
always @(val or coin)
nval = val + coin;
o use una asignación:
wire [3:0] nval;
assign nval = val + coin;
Es probable que hacer cualquier otra cosa cause problemas (si no aquí, con otro código).
MAB
usuario_1818839
mel j