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日

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题