FPGA学习系列:9.简单状态机设计

描述

设计背景:

 状态机是描述各种复杂时序的时序行为,是使用HDL进行数学逻辑设计中非常重要的方法之一,状态机分为摩尔机和米粒机,当输出只和状态有关系的话称为摩尔机,当输出不仅和状态有关系也和输入信号有关系的时候称为米粒机,米粒机和摩尔机的电路原型我就不在这里给大家介绍了。

 状态机是由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设计的状态进行状态的转移,是协调相关信号的动作,完成特定操作的控制中心。比如我们生活中遇到的问题,健康---感冒---健康,这个就是一个状态的转移图,从健康状态到感冒状态在到健康状态。

 

设计原理: 

 我认为对于我们初学者来说我们只要只要状态机就是当这个状态也就是当这个时钟来的时候发生这件事情,当下各时钟来的时候发生另一件事,也就是说发生这件事后,跳转下一个时钟发生另一件事情,两个事情发生没有关系。我们理解初学者理解这个就行了,不用理解高深的二段式,三段式。

我们会在下面的设计中用到简单的状态机让大家明白简单的状态机。

我们的设计也是一个流水灯,我们的设计是在复位的时候让4个等全熄灭,第一个上升沿点亮一个,第二个点亮下一个,依次类推。

我们的写法可以这样想,当第一个状态也就是一个上升沿点亮第一个灯,然后跳转下一个状态点亮第二个灯,第三个点亮下一个。。。。

 

设计架构图:

状态机 

 

设计代码:

设计模块

0 module led_run (clk, rst_n, led);

1 

2  input clk, rst_n;   //定义输入输出

3 

4  output reg [3:0] led;  

5 

6  reg [10:0] count;   //定义一个时间寄存器

7  reg clk_1hz;   //定义一个时钟

8  reg [1:0] state;    //定义状态

9 

10 always @ (posedge clk)    

11  if(!rst_n)

12   begin

13    clk_1hz <= 1;

14    count <= 0;

15   end

16  else if(count < (5 / 1 / 2  - 1))  //计数来产生一个时钟

17   count <= count + 1'd1;

18  else

19   begin

20    count <= 26'd0;

21    clk_1hz <= ~ clk_1hz;

22   end

23

24 always @ (posedge clk_1hz)

25  if(!rst_n)

26   led <= 4'b1111;   //复位熄灭4个灯

27  else

28   case (state)

29    0 : begin   //第一个状态点亮第一个灯,然后跳转下  一个状态

30       state <= 1;   

31       led <= 4'b1110;

32      end

33      

34    1 : begin   //2个状态点亮第2个灯,然后跳转下  一个状态

35       state <= 2;

36       led <= 4'b1101;

37      end

38    

39    2 : begin   //3个状态点亮第3个灯,然后跳转下  一个状态

40       state <= 3;

41       led <= 4'b1011;

42      end

43    3 : begin  //4个状态点亮第4个灯,然后跳转0状态

44       state <= 0;

45       led <= 4'b0111;

46      end

47    

48    default : state <= 0; //否则跳转0状态

49   endcase

50

51 endmodule 

 

测试模块

0 `timescale 1ns/1ps  //例化时标

1 

2 module tb();

3 

4  reg clk, rst_n;

5  wire [3:0] led;  

6 

7  initial begin

8 

9   clk = 1;

10  rst_n = 0;

11

12  #200.1 rst_n = 1;

13

14

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分