`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