题解 | #自动贩售机1#
自动贩售机1
http://www.nowcoder.com/practice/dcf59e6c51f6489093495acb1bc34dd8
- 将所投入的货币数目用最小单位(五毛钱)以寄存器Five_cnt记录,由于测试用例最多出现3元,所以Five_cnt的范围0~6,定义其大小[2:0]。
- 需注意 根据输出波形知道在输入货币的下一个时钟才会输出信号,而不是当前时钟。
完整代码:
`timescale 1ns/1ns
module seller1(
input wire clk ,
input wire rst ,
input wire d1 ,
input wire d2 ,
input wire d3 ,
output reg out1,
output reg [1:0]out2
);
//*************code***********//
reg[2:0]Five_cnt;
always@(negedge rst or posedge clk)begin
if(~rst) begin
out1 <= 0;
out2 <= 0;
end
else if(Five_cnt >= 3) begin
out2 <= Five_cnt - 3;
out1 <= 1;
end
else begin
out1 <= 0;
out2 <= 0;
end
end
always@(negedge rst or posedge clk)begin
if(~rst)
Five_cnt <= 0;
else if(d1)
Five_cnt <= Five_cnt + 1;
else if(d2)
Five_cnt <= Five_cnt + 2;
else if(d3)
Five_cnt <= Five_cnt + 4;
else
Five_cnt <= Five_cnt>=3? 0: Five_cnt;
end
//*************code***********//
endmodule