题解 | #游戏机计费程序#

游戏机计费程序

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) remain<=0;
        else begin
            if(set)remain<=money+remain;
            else begin
                if(remain==0 | (remain==1&boost)) remain<=0;
                else begin
                    if(boost) remain<=remain-2;
                    else      remain<=remain-1;
                end
            end
        end
    end
    reg [2:0]cs,ns;
    parameter idle=0,s0=1,s1=2,s2=3,s3=4;

    always@(posedge clk or negedge rst_n)begin
        if(!rst_n)cs<=idle;
        else cs<=ns;
    end
    always@(*)begin
        if(!rst_n)ns=idle;
        else begin
            case(cs)
            idle:begin
                if(remain>=10)ns=s0;
                else if(remain==1 & boost)ns=s3;
                else if(remain>0 & remain<10)ns=s1;
                else ns=idle;
            end
            s0:begin
                if(remain>=10)ns=s0;
                else if(remain>0 & remain<10)ns=s1;
            end
            s1:begin
                if(remain>=10)ns=s0;
                else if(remain==0)ns=s2;
                else if(remain==1 & boost)ns=s3;
                else ns=s1;
            end
            s2:begin
                ns=idle;
            end
            s3: ns=idle;
            endcase
        end
    end
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            yellow<=0;
            red<=0;
        end
        else begin
            case(ns)
            idle:begin
                yellow<=0;
                red<=1;
            end
            s0:begin
                yellow<=0;
                red<=0;
            end
            s1:begin
                yellow<=1;
                red<=0;
            end
            s2:begin
                yellow<=0;
                red<=1;
            end
            s3:begin
                yellow<=1;
                red<=1;
            end
            endcase
        end
    end
endmodule

全部评论

相关推荐

MingoTree:看不出你你的技术栈,想找什么工作,然后课设项目别写上去了,自我评价删了,前后端你想好你要干啥,这种简历投上去秒挂的
点赞 评论 收藏
分享
许愿顺顺利利
牛客740257869号:两个百分之18 hh
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务