新闻中心

EEPW首页 > 嵌入式系统 > 牛人业话 > 零基础学FPGA(七)浅谈状态机

零基础学FPGA(七)浅谈状态机

—— 零基础学FPGA(八)浅谈状态机
作者:时间:2015-01-10来源:网络收藏

  今天我们来写

本文引用地址:http://www.eepw.com.cn/article/267960.htm

  关于呢,想必大家应该都接触过,通俗的讲就是数电里我们学的状态转换图。分为两中类型,一种叫型,一种叫型。前者就是说时序逻辑的输出不仅取决于当前的状态,还取决于输入,而后者就是时序逻辑的输出仅仅取决于当前的状态。下面两个图分别表示两种不同的状态机。

  

360桌面截图20140601211319.jpg

 

  

360桌面截图20140601211344.jpg

 

  下面我们就通过代码来写一下状态机,以下面的状态转换图为例

  

360桌面截图20140601205828.jpg

 

  首先,是一种典型的状态机写法,这种写法我们称为一段时状态机,用于一些简单的设计是可以的,但如果是复杂的状态机,不建议大家用这种写法。

  //***********************************************************

  //可综合的状态机设计的典型方法

  //实现典型的状态机设计

  //**********************************************

  module fsm (clk,rst_n,A,k1,k2,State);

  input clk;

  input rst_n;

  input A;

  output k1,k2;

  output [1:0] State;

  reg k1;

  reg k2;

  reg [1:0] State; //当前状态寄存器

  parameter Idle = 2'b00,

  Start = 2'b01,

  Stop = 2'b10,

  Clear = 2'b11; //编码 ,注意,只有在最后一句用分号,其他地方用逗号

  always @(posedge clk or negedge rst_n)

  if(!rst_n)

  begin

  State <= Idle;

  k1 <=1'b0;

  k2 <=1'b0;

  end

  else case (State) //状态判断与组合逻辑赋值

  Idle :if(A) begin

  State <= Start;

  k1 <= 0;

  end

  else begin

  State <= Idle;

  k1 <= 0;

  k2 <= 0;

  end

  Start :if(!A) State <= Stop;

  else State <= Start;

  Stop :if(A) begin

  State <=Clear;

  k2 <= 1;

  end

  else State <= Stop;

  Clear :if(!A) begin

  State <= Clear;

  k2 <= 0;

  k1 <= 1;

  end

  else State <= Clear;

  default : State <= 2'bxx; //告诉综合器 case语句已经指定了所有状态,这样综合器就会删除不需要的译码电路,使生成的电路简单

  endcase

  endmodule

fpga相关文章:fpga是什么



上一页 1 2 下一页

关键词: FPGA 状态机 Mealy Moore

评论


相关推荐

技术专区

关闭