xiaofei_327 2022-07-01 21:23 采纳率: 33.3%
浏览 17
已结题

HDLbits有限状态机写法

HDLbits里的状态机写法,下面这两种写法有什么不一样吗,为什么第一种就仿真结果错误

img

module top_module(
    input clk,
    input areset,    // Asynchronous reset to state B
    input in,
    output out);//  

    parameter A=0, B=1; 
    reg state, next_state;

    always @(*) begin    // This is a combinational always block
        // State transition logic
        case(state)
            A:begin
                if(in)begin
                next_state = A;
                out = 1'b0;
             end
               else begin
                next_state = B;
                out = 1'b1;
               end
            end
            B:begin
                if(in) begin
                next_state = B;
                out = 1'b1;
               end
               else begin
                next_state = A;
                out = 1'b0;
               end
            end
        endcase
    end

    always @(posedge clk, posedge areset) begin    // This is a sequential always block
        // State flip-flops with asynchronous reset
        if(areset)
            state <= B;
        else
            state <= next_state;
    end

    // Output logic
    //assign out = (state == B);// assign out = (state == ...);

endmodule

module top_module(
    input clk,
    input areset,    // Asynchronous reset to state B
    input in,
    output out);//  

    parameter A=0, B=1; 
    reg state, next_state;

    always @(*) begin    // This is a combinational always block
        case(state)
            A:begin
                if(in == 1'b1)begin
                    next_state <= A;
                end
                else begin
                    next_state <= B;
                end
            end
            B:begin
                if(in == 1'b1)begin
                    next_state <= B;
                end
                else begin
                    next_state <= A;
                end
            end
        endcase
    end

    always @(posedge clk, posedge areset) begin    // This is a sequential always block
        if(areset)begin
            state <= B;
        end
        else begin
            state <= next_state;
        end
    end

    // Output logic
    assign out = (state == B);

endmodule

  • 写回答

1条回答 默认 最新

  • 老皮芽子 2022-07-02 08:32
    关注

    第一种代码中
    out 的值与 in 有逻辑关联,这是不对的
    可以按如下更改,综合后的结果应该和第二种代码一样

    module top_module(
        input clk,
        input areset,    // Asynchronous reset to state B
        input in,
        output out);//  
     
        parameter A=0, B=1; 
        reg state, next_state;
     
        always @(*) begin    // This is a combinational always block
            // State transition logic
            case(state)
                A:begin
                    out = 1'b0;
                    if(in)begin
                    next_state = A;
                    end
                    else begin
                    next_state = B;
                   end
                end
                B:begin
                    out = 1'b1;
                    if(in) begin
                    next_state = B;
                    end
                    else begin
                    next_state = A;
                    end
                end
            endcase
        end
     
        always @(posedge clk, posedge areset) begin    // This is a sequential always block
            // State flip-flops with asynchronous reset
            if(areset)
                state <= B;
            else
                state <= next_state;
        end
     
        // Output logic
        //assign out = (state == B);// assign out = (state == ...);
     
    endmodule
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月10日
  • 已采纳回答 7月2日
  • 创建了问题 7月1日

悬赏问题

  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像