设计背景:
状态机是描述各种复杂时序的时序行为,是使用hdl进行数学逻辑设计中非常重要的方法之一,状态机分为摩尔机和米粒机,当输出只和状态有关系的话称为摩尔机,当输出不仅和状态有关系也和输入信号有关系的时候称为米粒机,米粒机和摩尔机的电路原型我就不在这里给大家介绍了。
状态机是由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设计的状态进行状态的转移,是协调相关信号的动作,完成特定操作的控制中心。比如我们生活中遇到的问题,健康---感冒---健康,这个就是一个状态的转移图,从健康状态到感冒状态在到健康状态。
设计原理:
我认为对于我们初学者来说我们只要只要状态机就是当这个状态也就是当这个时钟来的时候发生这件事情,当下各时钟来的时候发生另一件事,也就是说发生这件事后,跳转下一个时钟发生另一件事情,两个事情发生没有关系。我们理解初学者理解这个就行了,不用理解高深的二段式,三段式。
我们会在下面的设计中用到简单的状态机让大家明白简单的状态机。
我们的设计也是一个流水灯,我们的设计是在复位的时候让4个等全熄灭,第一个上升沿点亮一个,第二个点亮下一个,依次类推。
我们的写法可以这样想,当第一个状态也就是一个上升沿点亮第一个灯,然后跳转下一个状态点亮第二个灯,第三个点亮下一个。。。。
设计架构图:
设计代码:
设计模块
0moduleled_run (clk,rst_n,led);
1
2 inputclk,rst_n; //定义输入输出
3
4 outputreg[3:0]led;
5
6 reg[10:0]count; //定义一个时间寄存器
7 regclk_1hz; //定义一个时钟
8 reg[1:0]state;//定义状态
9
10 always@(posedgeclk)
11 if(!rst_n)
12 begin
13 clk_1hz <=1;
14 count <=0;
15 end
16 elseif(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@(posedgeclk_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
51endmodule
测试模块
0`timescale1ns/1ps//例化时标
1
2moduletb();
3
4 regclk,rst_n;
5 wire[3:0]led;
6
7 initialbegin
8
9 clk =1;
10 rst_n =0;
11
12 #200.1rst_n =1;
13
14
八种硬件设计EDA工具对比分析(价格、难度、功能)
为什么要使用MPU?MPU实现内存保护原理分析
FPGA学习系列:27. VGA驱动设计
防烧电路中的MOS管控制
AMCOMRF晶体管GaAs FET的性能表现非常优异
FPGA学习系列:9.简单状态机设计
单站DMB-T 发射的移动数字电视项目如何实现?
AE看展:汽车电子碎片化的市场雷打不动的它们
电路板——覆铜箔层压板的三种类型
区块链功能是如何从业务角度和不同行业中成熟发展的
浅谈电瓶修复技术之蓄电池基础知识的讲解(一)
消防设备电源监控系统在某改造项目中的设计应用案例
汽车开发环境解决方案项目
学习Python的双重选择: 树莓派和行空板
为准备Android 11版本,谷歌继续开发 Android Beta项目
具有柔性自适应导电界面的超稳定可拉伸电极
冗余收发器RS-232链路,提供±40V过压保护
全新MR眼镜Rokid Vision发布 交互探索永不止步!
持续布局新基建推进超算商业化,并行科技助力产业转型的全新姿态
为什么需要5G?5G是否会产生新的安全问题?