题解 | #根据状态转移写状态机-二段式#

根据状态转移写状态机-二段式

http://www.nowcoder.com/practice/5b2ff27610d04993ae92374d51bfc2e6

看了一下评论区的题解 题目要求mealy型状态机,全部写的是moore型 ,用一个条件去判断他们的代码就能发现错误,
如果此时在状态4 (s4)data为0;输出是什么,应该是0,而不是1;但是网站给的测试代码是moore型所以我这个通过不了。他们的通过了。
如果有错误欢迎指正。谢谢!

`timescale 1ns/1ns

module fsm2(
    input wire clk  ,
    input wire rst  ,
    input wire data ,
    output reg flag
);

//*************code***********//
    reg [2:0] state ,next_state;
    parameter s0 = 0;
    parameter s1 = 1;
    parameter s2 = 2;
    parameter s3 = 3;
    parameter s4 = 4;
    
    always @ (posedge clk or negedge rst)begin
        if(!rst)
            state <= s0;
        else 
            state <= next_state;
    end
    
    always @ (*)begin
        if(!rst)begin
            next_state <= s0;
            flag <= 1'b0;
        end
        else begin
            case(state)
                s0 : begin 
                        flag <= 1'b0;
                    if(data)
                        next_state <= s1;
                    else
                        next_state <= s0;
                end
                
                s1 : begin 
                        flag <= 1'b0;
                    if(data)
                        next_state <= s2;
                    else
                        next_state <= s1;
                end
                
                s2 : begin 
                        flag <= 1'b0;
                    if(data)
                        next_state <= s3;
                    else
                        next_state <= s2;
                end
                
                s3 : begin 
                        flag <= 1'b0;
                    if(data)
                        next_state <= s4;
                    else
                        next_state <= s3;
                end
                s4 : begin 
                    if(data)begin
                        next_state <= s1;
                        flag <= 1'b1;
                    end
                    else begin
                        next_state <= s0;
                        flag <= 1'b0;
                    end
                end
                
                default : begin
                        next_state <= next_state;
                        flag <= 1'b0;
                end
            endcase
        end
    end
//*************code***********//
endmodule

全部评论
你现在写的这个状态机不就是Moore型的吗?
2 回复 分享
发布于 2022-06-07 09:17
如果此时在状态4 (s4)data为0;输出是什么,应该是0,而不是1;你这句话不对,看状态转移图,S4之后输入0,1输出都是1.网站测不出来你使用的是哪种状态机,极端点你根据给的testebench预先写一个序列输出,对上了输出结果它也会判你通过的。
点赞 回复 分享
发布于 2022-09-08 21:40 江苏

相关推荐

07-18 15:02
门头沟学院 Java
刚打开网申页面就不想填了,还是不要为难自己了
poppinzhan...:多益老行业毒瘤了,碰到徐波这种恶心的烂人,去了也是受罪。
点赞 评论 收藏
分享
07-15 12:15
门头沟学院 Java
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
找工作时遇到的神仙HR
点赞 评论 收藏
分享
07-17 11:56
门头沟学院 Java
感谢东子的收留
熬夜脱发码农:无敌了,这是我看到第二个京东的提前批大佬了我还在畏畏缩缩准备八股算法
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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