您的位置 首页 系统

零根底学FPGA(七)浅谈状态机

今天我们来写状态机。关于状态机呢,想必大家应该都接触过,通俗的讲就是数电里我们学的状态转换图。状态机分为两中类型,一种叫Mealy型,一种叫Moore型。前者就是说时序逻辑的输出不仅取决于

  今日咱们来写状况机

  关于状况机呢,想必咱们应该都触摸过,浅显的讲便是数电里咱们学的状况转化图。状况机分为两中类型,一种叫Mealy型,一种叫Moore型。前者便是说时序逻辑的输出不只取决于当时的状况,还取决于输入,而后者便是时序逻辑的输出只是取决于当时的状况。下面两个图别离表明两种不同的状况机。

  

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/117330.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部