秋月白xixi 2023-12-03 09:52 采纳率: 58.3%
浏览 10
已结题

怎么根据书上的例子完成这个问题呢?

这是书上的一个例子,怎么模仿这个例子,根据下图完成代码呢?

img

FSM_EXP(clk,reset,state_inputs,comb_outputs);
input clk,reset;
input[0:1]state_inputs;
output[3:0]comb_outputs;
reg[3:0]comb_outputs;
parameter s0=0,s1=1,s2=2,s3=3,s4=4;
reg[4:0]c_st,next_state;
  always@(posedge clk, negedge reset)begin
   if(!reset) c_st<=s0;
     else c_st<=next_state; end
  always@(c_st,state_inputs)begin
    case(c_st)
    s0:begin comb_outputs<=5;
        if (state_inputs==2'b00) next_state<=s0;
           else next_state<=s1;end
    s1:begin comb_outputs<=8;
        if (state_inputs==2'b01) next_state<=s1;
           else next_state<=s2;end
    s2:begin comb_outputs<=12;
        if (state_inputs==2'b10) next_state<=s0;
           else next_state<=s3;end
    s3:begin comb_outputs<=14;
        if (state_inputs==2'b11) next_state<=s3;
           else next_state<=s4;end
    s4:begin comb_outputs<=9; next_state<=s0;end
    default: next_state<=s0;
    endcase 
   end
endmodule

这是要完成的题目:

img


书上的那个代码有点没看懂,

  s0:begin comb_outputs<=5;
        if (state_inputs==2'b00) next_state<=s0;
           else next_state<=s1;end

这一段为什么s0的下一个状态就是5了,怎么得到的啊?

  • 写回答

9条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-12-03 09:58
    关注

    引自强大而免费的微信小程序:皆我百晓生

    根据给出的状态转换图,可以用以下代码实现相关功能:

    module state_machine(
      input clk,         // 时钟信号
      input reset,       // 复位信号
      input A,           // 输入A信号
      input B,           // 输入B信号
      output reg[3:0] out // 输出信号
    );
    
    // 定义状态
    parameter S0 = 0;
    parameter S1 = 1;
    parameter S2 = 2;
    parameter S3 = 3;
    
    reg[1:0] state;
    reg[1:0] next_state;
    
    // 初始化状态
    initial begin
      state <= S0;
    end
    
    // 状态转换逻辑
    always @(posedge clk, negedge reset) begin
      if (!reset) begin
        state <= S0;
      end else begin
        state <= next_state;
      end
    end
    
    // 输出逻辑
    always @(state, A, B) begin
      case (state)
        S0: begin
          out <= 6;
          if (A == 1)
            next_state <= S1;
          else
            next_state <= S0;
        end
        S1: begin
          out <= 8;
          if (A == 0)
            next_state <= S2;
          else
            next_state <= S1;
        end
        S2: begin
          out <= 10;
          if (B == 1)
            next_state <= S3;
          else
            next_state <= S2;
        end
        S3: begin
          out <= 9;
          next_state <= S0;
        end
        default: begin
          next_state <= S0;
        end
      endcase
    end
    
    endmodule
    

    上述代码中,我们定义了四个状态S0、S1、S2和S3,并且设置了输入信号A和B以及时钟信号clk、复位信号reset和输出信号out。
    在状态转换逻辑中,根据输入信号和当前状态,确定下一个状态next_state。
    然后在输出逻辑中,根据当前状态,设置输出信号out的值。每个状态对应不同的输出值,并且根据输入信号和状态,进一步确定下一个状态。
    最后,在主模块中实例化上述状态机模块state_machine,并根据实际情况连接各个信号。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 已采纳回答 12月4日
  • 赞助了问题酬金15元 12月3日
  • 创建了问题 12月3日

悬赏问题

  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥15 配置hadoop时start-all.sh老是启动失败
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题