题解 | #游戏机计费程序#逻辑清晰,不用状态机
游戏机计费程序
https://www.nowcoder.com/practice/50188fb7e23b4eee86f8c463c8284f5e
`timescale 1ns/1ns
module game_count
(
input rst_n, //异位复位信号,低电平有效
input clk, //时钟信号
input [9:0]money,
input set,
input boost,
output reg[9:0]remain,
output reg yellow,
output reg red
);
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
remain <= 10'd0;
end
else if(set)begin
remain <= remain + money;
end
else if(~boost && remain > 1'b0)begin // ~boost 0 费用不足
remain <= remain - 1'd1;
end
else if(boost && remain > 1'b1)begin //boost 0,1 均费用不足
remain <= remain - 2'd2;
end
else begin
remain <= remain;
end
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
yellow <= 1'b0;
end
else if(remain > 1'b0 && remain < 4'd10)begin
yellow <= 1'b1;
end
else begin
yellow <= 1'b0;
end
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
red <= 1'b0;
end
else if((~boost && remain == 1'b0) || (boost && remain <= 1'b1))begin
red <= 1'b1;
end
else begin
red <= 1'b0;
end
end
endmodule
