题解 | #游戏机计费程序#
游戏机计费程序
http://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)
remain <= 0;
else if (set&&!boost)
remain <= money + remain-1'b1;
else if (set&&boost)
remain <= money + remain-'d2;
else if (remain==1&&!boost || (remain==2&&boost))
remain <= 0;
else
begin
if (!boost)
remain <= remain -1;
else if (boost)
remain <= remain -2;
else remain <= remain;
end
end
always @(posedge clk or negedge rst_n)
if(!rst_n)
begin
yellow <= 1'd0;
red <= 1'd0;
end
else if (remain <10 && remain != 0)
begin
yellow <= 1'd1;
red <= 1'd0;
end
else if ((remain == 1&&!boost) || (remain==2&&boost))
begin
yellow <= 1'd0;
red <= 1'd1;
end
else
begin
yellow <= 1'd0;
red <= 1'd0;
end
endmodule
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)
remain <= 0;
else if (set&&!boost)
remain <= money + remain-1'b1;
else if (set&&boost)
remain <= money + remain-'d2;
else if (remain==1&&!boost || (remain==2&&boost))
remain <= 0;
else
begin
if (!boost)
remain <= remain -1;
else if (boost)
remain <= remain -2;
else remain <= remain;
end
end
always @(posedge clk or negedge rst_n)
if(!rst_n)
begin
yellow <= 1'd0;
red <= 1'd0;
end
else if (remain <10 && remain != 0)
begin
yellow <= 1'd1;
red <= 1'd0;
end
else if ((remain == 1&&!boost) || (remain==2&&boost))
begin
yellow <= 1'd0;
red <= 1'd1;
end
else
begin
yellow <= 1'd0;
red <= 1'd0;
end
endmodule