【发布时间】:2015-04-15 18:28:15
【问题描述】:
我正在编写一个充当现金存款箱的程序。 一切都发生在时钟边缘。 如果 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 中显示 Amount。它不显示值
我把我的测试台改成了这个 // 钱箱测试台
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 框中的金额
【问题讨论】:
-
我在 tutorialspoint.com 上使用在线编译器
标签: variable-assignment verilog