Ich möchte einen Zähler erstellen, der sich um den Wert seiner Eingaben erhöht, aber ich habe die Testbench erstellt und die Ausgabe ist unbestimmt, xxxx. Kann mir jemand sagen, ob in diesem Code etwas falsch ist?
//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
Sie weisen nval nirgendwo einen Anfangswert zu , daher hängen alle weiteren Werte davon ab, daher ist val unbestimmt.
Ohne Tests ist es schwer sicher zu sein, dass es nichts anderes gibt, aber ich denke, es ist das
always @(val)
nval <= val + coin ;
Als nicht=blockierende Zuweisung nimmt es beim Zurücksetzen möglicherweise den alten Wert von val (dh X) an. Sie könnten eine Sperrzuweisung verwenden und die Vertraulichkeitsliste richtig ausfüllen:
always @(val or coin)
nval = val + coin;
oder verwenden Sie eine Zuweisung:
wire [3:0] nval;
assign nval = val + coin;
Alles andere führt wahrscheinlich zu Problemen (wenn nicht hier, dann mit anderem Code).
MAB
user_1818839
Mel J