题解 | #自动售卖机#

自动售卖机

http://www.nowcoder.com/practice/487953e6d3e3434988e0dd6960b6c9f8

`timescale 1ns/1ns

module sale(input clk,
            input rst_n,
            input sel,
            input [1:0] din,
            output reg [1:0] drinks_out,
            output    reg change_out);
    parameter idle = 3'b000;
    parameter s05  = 3'b001;
    parameter s10  = 3'b010;
    parameter s15  = 3'b100;
    reg [2:0] cs,ns;
    always@(posedge clk or negedge rst_n)
        cs <= ~rst_n?idle:ns;
    always@(*) begin
        ns = idle;
        case(cs)
            idle: ns    = din == 0?idle:din == 1?s05:din == 2?s10:idle;
            s05:  ns    = sel?(din == 0?s05:din == 1?s10:din == 2?s15:idle):(din == 0?idle:din == 1?s05:din == 2?s10:idle);
            s10:  ns    = din == 0?idle:din == 1?s05:din == 2?s10:idle;
            s15:  ns    = din == 0?idle:din == 1?s05:din == 2?s10:idle;
            default: ns = idle;
        endcase
    end
    always@(posedge clk or negedge rst_n) begin
        if (!rst_n)
            drinks_out <= 0;
        else
            drinks_out <= sel?((ns == s10 || ns == s15)?2:0):((ns == s05 || ns == s10 | cs == s15)?1:0);
    end
    always@(posedge clk or negedge rst_n) begin
        if (!rst_n)
            change_out <= 0;
        else
            change_out <= sel?((ns == s15)?1:0):((ns == s10 || ns == s15)?1:0);
    end
endmodule
全部评论
为什么s10状态,din = 'd1的时候,次态又回到s05了?而不是s15? 状态划分是以售卖机当前有多少钱划分的吗?
点赞 回复 分享
发布于 2023-01-12 22:35 山西
循环里头在套循环 套娃 套娃 套娃!!!
点赞 回复 分享
发布于 2022-09-06 13:52 四川

相关推荐

爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
04-19 11:59
门头沟学院 Java
卷不动辣24314:挂,看来不该投这个部门的
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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