题解 | #根据状态转移图实现时序电路#

根据状态转移图实现时序电路

https://www.nowcoder.com/practice/e405fe8975e844c3ab843d72f168f9f4

`timescale 1ns/1ns

module seq_circuit(
   input                C   ,
   input                clk ,
   input                rst_n,
 
   output   wire        Y   
);

parameter s1 = 4'b0001;
parameter s2 = 4'b0010;
parameter s3 = 4'b0100;
parameter s4 = 4'b1000;

reg  [3:0]statue;
reg       y_reg;

always@(posedge clk or negedge rst_n)
    if (rst_n == 1'b0)
        statue <= s1;
    else 
        case(statue)
            s1 : if (C == 1'b1)
                        statue <= s2;
                else if(C == 1'b0)
                        statue <= s1;
            s2 : if(C == 1'b1)
                        statue <= s2;
                else if(C == 1'b0)
                        statue <= s3;
            s3 : if (C == 1'b1)
                        statue <= s4;
                else if(C == 1'b0)
                        statue <= s3;
            s4 : if (C == 1'b1)
                        statue <= s4;
                else if(C == 1'b0)
                        statue <= s1;
            default : statue <= s1;
        endcase

always@(*)
    if (rst_n == 1'b0)
        y_reg <= 1'b0;
    else if (statue == s3)
        y_reg <= 1'b1;
    else if (statue == s4 && C == 1'b1)
        y_reg <= 1'b1;
    else 
        y_reg <= 1'b0;

assign Y = y_reg;

endmodule

这里采用二段式状态机进行解题,第一段为状态赋值块,第二段是输出赋值块。

(个人认为二段式比三段式好理解一点)

全部评论

相关推荐

字节一直是我的白月光,考虑到转正还是拒了日常实习。
从明天开始狠狠卷JV...:为什么你释放的offer没流到我头上
点赞 评论 收藏
分享
点赞 评论 收藏
分享
06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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