您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制Verilog HDL设计之有限状态机的设计原理及其代码风格 正文
Verilog HDL设计之有限状态机的设计原理及其代码风格

Verilog HDL设计之有限状态机的设计原理及其代码风格

点击数:7180 次   录入时间:03-04 11:47:04   整理:http://www.55dianzi.com   电脑-单片机-自动控制

(5)按照方程得出逻辑图。

用Verilog HDL来描述有限状态机,可以充分发挥硬件描述语言的抽象建模能力,使用always块语句和case(if)等条件语句及赋值语句即可方便实现。具体的逻辑化简及逻辑电路到触发器映射均可由计算机自动完成。上述设计步骤中的第(2)、(4)、(5)步不再需要很多的人为干预,使电路设计工作得到简化,效率也有很大的提高。

 



www.55dianzi.com


4.4.2  FSM设计实例


例4.5:宇宙飞船控制器的状态机。

module  statmch1(  launch_shuttle, land_shuttle, start_countdown,
                      start_trip_meter, clk, all_systEMS_go,
                      just_launched, is_landed, cnt, abort_mission
                      );
      // I/O说明
      output launch_shuttle, land_shuttle, start_countdown,start_trip_meter;
      input  clk, just_launched, is_landed, abort_mission,all_systems_go;
      input  [3:0]  cnt;
      reg    launch_shuttle, land_shuttle, start_countdown,start_trip_meter;
      reg  [4:0]  present_state,  next_state;
      //设置独热码状态的参数
      parameter  HOLD=5'h1, SEQUENCE=5'h2, LAUNCH=5'h4;
      parameter  ON_MISSION=5'h8, LAND=5'h10;

      always @(negedge clk or posedge abort_mission) begin
            //把输出设置成某个缺省值,在下面的case语句中就不必再设置输出的缺省值
            {launch_shuttle, land_shuttle, start_trip_meter, start_countdown} = 4'b0;
            //检查异步reset的值,即abort_mission的值
            if(abort_mission)
                next_state = LAND;
            else begin
                //如果abort_mission为零,把next_state赋值为present_state
                next_state = present_state;
                //根据 present_state 和输入信号,设置 next_state和输出output
                case ( present_state )
                      HOLD:                              //HOLD状态
                            if(all_systems_go) begin
                                next_state = SEQUENCE;
                                start_countdown = 1;
                            end
                      SEQUENCE:                          //SEQUENCE状态
                            if(cnt==0)
                                next_state = LAUNCH;
                      LAUNCH: begin                    //LAUNCH状态
                            next_state = ON_MISSION;
                            launch_shuttle = 1;
                            end
                      ON_MISSION:                      //ON_MISSION状态
                            if(just_launched)
                                start_trip_meter = 1; //取消使命前,一直留在使命状态
                      LAND:                              //LAND状态
                          if(is_landed)
                                next_state = HOLD;
                          else land_shuttle = 1;
                      default:  next_state = 'bx;//把缺省状态设置为'bx(无关)或某种已
                                                    //知状态,使其在做仿真时,在复位前就
                                                    //与实际情况相一致
                endcase
          end                  // if-else语句结束
          present_state = next_state;        //把当前状态变量设置为下一状态,
                                                  //待下一有效时钟沿来到时,当前状
                                                    //态变量已设置了正确的状态值
    end                        //always块结束
endmodule


4.4.3  设计可综合状态机的指导原则
(1)独热码。
因为大多数FPGA内部的触发器数目相当多,又加上独热码状态机(one hot state machine)的译码逻辑最为简单,所以在设计采用FPGA实现的状态机时,往往采用独热码状态机(即每个状态只有一个寄存器置位的状态机)。

上一页  [1] [2] [3] [4] [5]  下一页


本文关键字:风格  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制