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

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

点击数:7180 次   录入时间:03-04 11:47:04   整理:http://www.55dianzi.com   电脑-单片机-自动控制
          Idle    = 4’b1000, 
          Start    = 4’b0100, 
          Stop    = 4’b0010,
          Clear    = 4’b0001;

      always @(posedge clock)
          if (!Reset) begin
                state <= Idle;  F<=0; G<=0;    //默认状态
          end
          else case (state)
                Idle:  begin                      //Idel状态
                      if (A)  begin
                            state <= Start;
                            G<=0;
                            end
                      else state <= Idle;
                end
                Start:                            //Start状态
                      if (!A)  state <= Stop;
                            else  state <= Start;
                Stop:  begin                      //Stop状态
                      if (A) begin
                                  state <= Clear;
                                  F <= 1;
                            end
                      else  state <= Stop;
                end
                Clear: begin                      //Clear状态
                      if (!A)  begin 
                            state <=Idle;
                            F<=0;  G<=1;
                      end
                      else  state <= Clear;
                end
                default:  state <=Idle;        //默认状态
            endcase
endmodule


例4.2与例4.1的主要不同点是状态编码方式。例4.2采用了独热编码,而例4.1则采用Gray码,究竟采用哪一种编码好要看具体情况而定。



www.55dianzi.com


对于用FPGA实现的有限状态机建议采用独热码。因为虽然采用独热编码多用了两个触发器,但所用组合电路可省下许多,因而使电路的速度和可靠性有显著提高,而总的单元数并无显著增加。


采用了独热码后有了多余的状态,就有一些不可到达的状态,为此在CASE语句的最后需要增加default分支项,以确保多余状态能回到Idle状态。


另外还可以用另一种风格的Verilog HDL模型来表示同一个有限状态。在这个模型中,我们用always语句和连续赋值语句把状态机的触发器部分和组合逻辑部分分成两部分来描述,如下所示。


例4.3:有限状态机模型3

module  fsm (CLOCk, Reset, A,  F, G);              //模块声明
      input Clock, Reset, A;
      output F,G;
      reg [1:0] state ;
      wire [1:0] Nextstate;

      parameter                                        //状态声明
          Idle  = 2’b00,  Start = 2’b01, 
          Stop = 2’b10,  Clear = 2’b11;

      always @(posedge Clock)
          if (!Reset) begin
                state <= Idle;                        //复位状态
          end
          else
                state <= Nextstate;                  //状态转换

      assign Nextstate =                              //状态变换条件
          (state == Idle ) ?  (A ?  Start : Idle):
          (state==Start ) ?  (!A ?  Stop  : Start ):
          (state== Stop ) ?  (A ?  Clear : Stop ):
          (state== Clear) ?  (!A ?  Idle  : Clear) : Idle;

      assign  F  = (( state == Stop) && A );      //状态输出
      assign  G =  (( state == Clear) && (!A || !Reset)) //状态输出
endmodule

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


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