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

简析

输入:money[9:0], set, boost
输出:remain, yellow, red

工作模式
set==1时,进行投币,money会添加到余额remain上。boost==0是普通模式,每个时钟周期消耗1元;boost==0是畅玩模式,每个时钟周期消耗2元。当余额不足时停止计费(余额小于对应模式的要求)。

    always@(posedge clk or negedge rst_n) begin
        if(~rst_n)
            remain <= 0;
        else if(boost)
            remain <= set     ? remain+money:
                      remain<2? remain:
                      remain-2;
        else
            remain <= set     ? remain+money:
                      remain<1? remain:
                      remain-1;
    end
       

指示灯
黄灯yellow在余额小于10元时亮起,余额归零时灭掉;红灯red在余额不足时亮起。

    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) begin
            yellow <= 0;
            red    <= 0;
        end
        else begin
            yellow <= remain<10&&remain;
            red    <= boost? remain<2: remain<1;
        end
    end

代码

`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
            yellow <= 0;
            red    <= 0;
        end
        else begin
            yellow <= remain<10&&remain;
            red    <= boost? remain<2: remain<1;
        end
    end
    
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) 
            remain <= 0;
        else if(boost)
            remain <= set     ? remain+money:
                      remain<2? remain: 
                      remain-2;
        else
            remain <= set     ? remain+money:
                      remain<1? remain: 
                      remain-1;
    end
endmodule
Verilog篇题解 文章被收录于专栏

本人对牛客网verilog篇题目一些理解

全部评论
我觉得这个题目仿真的逻辑有点问题,就比如set置1的时候那个加钱的周期内,remain的值加上了money的值,但是在这个周期内,时间流逝了,游戏仍在继续,这个周期的钱就不扣除了吗?
4 回复 分享
发布于 2023-02-21 17:50 江西
如果红灯这么写的话,boost为1,余额为1就亮了,此时关机不符合逻辑,1块钱直接被吞了。。
1 回复 分享
发布于 2023-03-11 17:19 安徽
三星
校招火热招聘中
官网直投
red和yellow输出太奇怪了,当remain为9的时候,这个时钟内yellow还没有点亮,这后面几个题的时序怎么都是乱七八糟的。
1 回复 分享
发布于 2023-07-28 00:04 湖南
用时序写的话黄灯和红灯感觉都会慢一拍
点赞 回复 分享
发布于 2023-03-11 17:01 安徽
set类似按键,应该设计个防抖的,而且只是一个时钟周期有效吧,不然一直按一直加
点赞 回复 分享
发布于 2023-09-14 18:08 福建

相关推荐

16 3 评论
分享
牛客网
牛客企业服务