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

游戏机计费程序

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,//切换为畅玩模式,boost==0为普通模式,boost==1为畅玩模式
        output reg[9:0]remain,//剩余费用
        output reg yellow,//剩余费用小于10元
        output reg red//费用不足,关闭电脑
    ); 
//黄灯
    always@(posedge clk or negedge rst_n) 
        begin
            if(!rst_n)
                yellow <= 1'b0;
            else if(remain < 10&&remain)
                yellow <= 1'b1;
            else
                yellow <= yellow;
        end
//红灯
    always@(posedge clk or negedge rst_n)
        begin
            if(!rst_n)
                red <= 1'b0;
            else if((boost==0&&remain < 10'b1)||(boost==1&&remain < 10'd2))
                red <= 1'b1;
            else
                red <= 1'b0;
        end
//剩余费用
    always@(posedge clk or negedge rst_n)
        begin
            if(!rst_n)
                remain <= 10'b0;
            else if(set)
                remain <= remain + money;
            else if(boost == 0)
                remain <= remain - 1;
            else if(boost == 1)
                remain <= remain - 2;
            else
                remain <= remain;
        end
endmodule
`timescale 1ns/1ns

module game_count
    (
		input rst_n, //异位复位信号,低电平有效
        input clk, 	//时钟信号
        input [9:0]money,//预付费用
        input set,//续费
		input boost,//切换为畅玩模式,boost==0为普通模式,boost==1为畅玩模式
        output reg[9:0]remain,//剩余费用
		output reg yellow,//剩余费用小于10元
		output reg red//费用不足,关闭电脑
    ); 
//黄灯
    always@(posedge clk or negedge rst_n) 
        begin
            if(!rst_n)
                yellow <= 1'b0;
            else if(remain < 10&&remain)
                yellow <= 1'b1;
            else
                yellow <= yellow;
        end
//红灯
    always@(posedge clk or negedge rst_n)
        begin
            if(!rst_n)
                red <= 1'b0;
            else if((boost==0&&remain < 10'b1)||(boost==1&&remain < 10'd2))
                red <= 1'b1;
            else
                red <= 1'b0;
        end
//剩余费用
    always@(posedge clk or negedge rst_n)
        begin
            if(!rst_n)
                remain <= 10'b0;
            else if(set)
                remain <= remain + money;
            else if(boost == 0)
                remain <= remain - 1;
            else if(boost == 1)
                remain <= remain - 2;
            else
                remain <= remain;
        end
endmodule

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 17:00
点赞 评论 收藏
分享
05-22 17:07
已编辑
门头沟学院 Java
程序员牛肉:都啥时候了还jb打蓝桥杯呢,有限找实习。
点赞 评论 收藏
分享
酷酷我灵儿帅:这去不去和线不线下面说实话没啥关系
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务