基于FPGA的状态机的实现.docx
《基于FPGA的状态机的实现.docx》由会员分享,可在线阅读,更多相关《基于FPGA的状态机的实现.docx(8页珍藏版)》请在冰豆网上搜索。
基于FPGA的状态机的实现
序列检测有限状态机的实现
有限状态机
有限状态机是绝大部分控制电路的核心结构,是表示有限个状态以及在这些
状态之间转移和动作等行为的数学模型。
有限状态机是指输出取决于过去输入部
分和当前输入部分的时序逻辑电路。
一般来说,除了输入部分和输出部分外,有限状态机还含有一组具有记忆”功能的寄存器,这些寄存器的功能是记忆有限状
态机的内部状态,它们常被称为状态寄存器。
在有限状态机中,状态寄存器的的
下一个状态不仅与输入信号有关,而且还与该寄存器的当前状态有关,因此有限状态机又可以认为是组合逻辑和寄存器逻辑的一种组合。
在实际的应用中,根据有限状态机是否使用输入信号,可将其分为Moore型有限状态机和Mealy型有限状态机两种类型。
Moore型有限状态机其输出信号
仅与当前状态有关,即可以把Moore型有限状态的输出看成是当前状态的函数。
Mealy型有限状态机其输出信号不仅与当前状态有关,而且还与所有的输入信号有关,即可以把Mealy型有限状态机的输出看成是当前状态和所有输入信号的函数。
问题描述
1、Moore型序列检测状态机的设计
利用Verilog设计一个电路,对输入的一串二进制数用于检测序列中3个或者
3个以上的1,其状态描述如下表所示。
现态
现态
输入
次态
次态
输出
0
0
0
0
0
0
0
0
1
0
1
0
0
1
0
0
0
0
0
1
1
1
0
0
1
0
0
0
0
0
1
0
1
1
1
0
1
1
0
0
0
1
1
1
1
1
1
1
2、Mealy型序列检测状态机的设计
利用Verilog设计一个电路,对输入的一串二进制数用于检测序列中3个或者3个以上的1,当检测到第三个1出现的时候,输出立刻变1,否则输出为0。
设计准备
本设计通过ISE软件硬件描述语言方式设计。
定义一个输入端,一个清零端和一个时钟,输入端用来表示一串—进制数,清零端用来将状态机初始化,时钟
用来更新当前状态。
定义四个状态,分别表示当前无1输入、有一个1输入、有连续两个1输入以及连续三个或三个以上1输入。
定义一个输出,用于检测序列
中3个或者3个以上的1。
1、Moore型状态机源程序
moduleMoore(
inputdin.
inputelk,
inputrst,
outputregop
);
reg[1:
0]current,next;
parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;
always@(posedgeclkornegedgerst)
begin
if(!
rst)
current<=2'b00;
else
current<=next;
end
always@(currentordin)
begin
case(current)
SO:
begin
op=0;
if(din==0)
next=SO;
end
else
next=S1;
S1:
begin
op=0;
if(din==0)
next=S0;
else
next=S2;
end
S2:
begin
op=0;
if(din==0)
next=S0;
else
next=S3;
end
S3:
begin
op=1;
if(din==0)
next=S0;
else
default:
begin
op=0;
next=SO;
endendcaseend
endmodule
2、Mealy型状态机源程序
moduleMealy(
inputclk,
inputrst,
inputdin.
outputregop
);
reg[1:
0]current,next;
parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;
always@(posedgeclkornegedgerst)
begin
if(!
rst)
current<=2'b00;
else
current<=next;
end
always@(currentordin)
begin
case(current)
S0:
begin
op=0;
end
if(din==0)
else
S1:
begin
end
next=SO;
next=S1;
op=0;
if(din==0)
next=SO;
else
next=S2;
S2:
begin
if(din==0)
next=SO;
end
else
begin
end
S3:
begin
next=S3;
op=1;
if(din==0)
begin
next=S0;
op=0;
end
else
default:
begin
op=0;
next=SO;
end
endcase
end
endmodule
五、
功能仿真
在所建工程下添加test文件,用来进行逻辑功能验证。
试输入二进制数列
010*********进行逻辑功能验证。
并通过Modelsim软件与ISE联调生成对应的状态图,如图1、2、3、4所示。
14峠
审n
卜増cucenffl血
Irr
图2Moore型状态机状态转换图
图3Mealy型状态机仿真波形图
►如网1切
综合优化将Verilog设计输入翻译成基本逻辑单元,根据目标与要求优化所
生成的逻辑连接,最后输出标准格式的网表文件。
再利用软件以最优的方式对逻
辑软件进行逻辑元件布局,并准确实现元件间的互连。
图5及图6为ISE生成的
RTL仿真电路图。
图5Moore型状态机仿真电路图
图6Mealy型状态机仿真电路图
设计的源程序可以实现题目所提出的要求,并通过仿真进行验证。
从仿真结
果可以看出,Mealy型状态机的输出在输入变化的时候立刻发生变化,而Moore
型状态机在输入变化后,还必须的等待时钟的到来,时钟使状态发生变化时才导致输出的变化,所以比Mealy型状态机要多等待一个时钟周期。