您的位置:首页 > 汽车 > 新车 > FPGA开发——状态机的使用

FPGA开发——状态机的使用

2024/11/16 2:59:23 来源:https://blog.csdn.net/weixin_63553972/article/details/140732413  浏览:    关键词:FPGA开发——状态机的使用

一、概述

我们在使用FPGA进行开发的过程当中,实现一个东西用得最多的实现方法就是状态机的实现方法,用一句话总结就是万物皆可状态机,这和我们在学习Linux时常说的在Linux中万物都是文件差不多,这里就主要就是突出状态机的应用范围很广。

二、相关理论

1、概念

2、状态机编码方式

在进行状态机编码时我们一般采用独热码进行编码,独热码想对于自然二进制编码和格雷码编码来说:组合逻辑较少,不易产生毛刺,使用范围广。缺点就是触发器个数较多,(二进制编码毛刺大,格雷码逻辑组合较多)

3、描述方式

在进行代码编写时我们通常采用三段式的编码方式进行编写。

三、代码编写

这里我们就简单使用状态机描述输入多个二进制数,当检测到1011时输出一个标志位的过程。

1、状态转移图

2、设计文件的编写

module test (input               clk     ,input               rst_n   ,input               din ,output      reg        dout  
);
//参数定义
parameter   IDLE =5'b00001,//0S1   =5'b00010,//检测到1S2   =5'b00100,//检测到10S3   =5'b01000,//检测到101S4   =5'b10000;//检测到1011
//内部信号
reg  [5:0]  state_c     ;//现态
reg  [5:0]  state_n     ;//次态//时序逻辑电路描述状态转移
always @(posedge clk or negedge rst_n)beginif(!rst_n)state_c = IDLE;elsestate_c = state_n; 
end
//使用组合逻辑描述状态转移条件
always @(*)begincase (state_c)IDLE :begin//0if(din==1)state_n = S1;elsestate_n = IDLE;endS1   :begin//1if(din==0)state_n = S2;elsestate_n = S1;endS2   :begin//10if(din==1)state_n = S3;elsestate_n = IDLE;endS3   :begin//101if(din==1)state_n = S4;elsestate_n = S2;endS4   :begin//1011state_n = IDLE;enddefault: state_n = IDLE;endcase
end //描述输出结果
always @(posedge clk or negedge rst_n)beginif(!rst_n)dout<=0;else if(state_c ==S4)dout<=1;elsedout<=0;
end
endmodule

3、测试文件的编写

//定义时间尺度
`timescale 1ns/1ns
module test_tb ;//输入信号定义
reg  clk  ;
reg  rst_n;
reg  din  ;
wire dout ;//模块例化
test test_inst(/*input             */  .clk     (clk  ),/*input             */  .rst_n   (rst_n),/*input             */  .din     (din  ),/*output      reg   */  .dout    (dout ) 
);
//时钟
parameter  CLK_CLY =20;
initial  clk=0;
always  #(CLK_CLY/2) clk=~clk;
//复位
initial begin
//初始化rst_n= 1'b0;#(CLK_CLY*2);#5;rst_n=1'b1;
end
//激励
initial begindin= 1'b0;#(CLK_CLY*3);#5;repeat (30)begindin= $random;#(CLK_CLY*1);end$stop;
end
endmodule

四、波形仿真

在波形图中我们可以看到当检测到输入的二进制数与状态转移条件就会发生变化,当检测到1011时,输出会产生一个高电平,代表检测到数据。通过总体观察,波形图中状态之间的转移和我们在前面画的状态转移条件一致没说明我们的状态机设置成功。 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com