我正在编写一个充当现金存款箱的程序。 一切都发生在时钟边缘。 如果enable为true且reset为true,则框中的值将重置为0。 如果enable为true且add为1,我们将金额添加到框中。 如果enable为true且add为0,则从框中减去。
这是我的代码和测试平台
module cashbox(output [15:0] value, input [15:0] amount, input add,enable, clock, reset);
reg value;
always @(posedge clock)
begin
if(enable) begin
if(reset)begin
value <= 0;
end
else begin
if(add)begin
value <= value + amount;
end
else begin
value <= value - amount;
end
end
end
end
endmodule
// cashbox testbench
module cashbox_tb;
reg [15:0] amt;
reg add, en, clk, rst;
wire [15:0] value;
cashbox cb(value, amt, add, en, clk, rst);
always
#50 clk = ~clk;
initial begin
$display("Amount in box %d", value);
clk = 1; en = 1; add = 1;
rst = 1; #10 rst = 0;
amt = 100; add = 1;
#170 en = 1; #100 en = 0; // 90
#20 amt = 50; add = 0;
#180 en = 1; #100 en = 0; // 290
#20 amt = 75; add = 1;
#180 en = 1; #100 en = 0; // 490
#20 amt = 35; add = 0;
#180 en = 1; #100 en = 0; // 690
#20 amt = 50; add = 0;
#180 en = 1; #100 en = 0;
#810 $finish;
end
endmodule
所有内容都会编译,但是当我运行它时,它会在框X中显示数量。它没有显示值
我改变了我的测试台 //钱箱测试台
module cashbox_tb;
reg [15:0] amt;
reg add, en, clk, rst;
wire [15:0] value;
cashbox cb(value, amt, add, en, clk, rst);
always
#50 clk = ~clk;
initial begin
$monitor("Amount in box %d",value);
clk = 0; en = 0; add = 0;
rst = 1; #10 rst = 0;
#10 amt = 100; add = 1;
#170 en = 1; #100 en = 0; // 90
#20 amt = 50; add = 0;
#180 en = 1; #100 en = 0; // 290
#20 amt = 75; add = 1;
#180 en = 1; #100 en = 0; // 490
#20 amt = 35; add = 0;
#180 en = 1; #100 en = 0; // 690
#20 amt = 50; add = 0;
#180 en = 1; #100 en = 0;
#810 $finish;
end
endmodule
现在我的输出又回到了X框中的金额
答案 0 :(得分:2)
$display
仅在时间0执行。将其更改为$monitor
,以便每次value
更改时都会显示消息:
$monitor("Amount in box %d", value);
以下是我使用VCS获得的输出:
Amount in box 0
Amount in box 1
Amount in box 0
请参阅IEEE Std 1800-2012,“21.2.3连续监测”部分。
我收到VCS的编译警告,我收到了Incisive的编译错误。
可以通过更改以下内容来清理:
module cashbox(output [15:0] value, input [15:0] amount, input add,enable, clock, reset);
reg value;
为:
module cashbox(output reg [15:0] value, input [15:0] amount, input add,enable, clock, reset);
在更改之后,这是我的输出:
Amount in box 0
Amount in box 100
Amount in box 200
Amount in box 150
Amount in box 225
Amount in box 190
Amount in box 140