当前位置:文档之家› 有限状态机

有限状态机

综合
可综合的设计中应注意
不使用初始化语句;不使用带有延时的描述; 不使用循环次数不确定的循环语句。
应尽量采用同步方式设计电路。
用always过程块描述组合逻辑,应在敏感 信号列表中列出块中出现的所有输入信号。
基于状态机的设计要点
3.状态编码的定义
在Verilog语言中,有两种方式可用于定义状态编码,分别用
parameter和'define语句实现,比如要为state0、state1、state2
、state3四个状态定义码字为:00、01、11、10,可采用下面
两种方式。
方式1:用parameter参数定义
采用一个always模块描述,状态编码用二进制编码:
• module fsm(clk,ina,out); input clk,ina; output out; reg out; parameter s0 = 3'b00,s1 =3'b01,s2 =3'b10,s3=3'b11; reg[0:1]state; always @ (posedge clk) begin state<=s0;out =0; case(state) s0: begin state<=(ina)?s1:s0;out=0; end s1:begin state<=(ina)?s2:s0;out=0; end s2:begin state<=(ina)?s3:s0;out=0; end s3:begin state<=(ina)?s3:s0;out=1; end endcase end endmodule
1、有限状态机
有限状态机的设计
什么是有限状态机( FSM ) FSM的种类和不同点 设计举例
什么是有限状态机?
• 有限状态机是由寄存器组和组合逻辑电路组成的时序 逻辑电路;
• 其状态的转变只能在同一时钟跳变沿的情况下才能 从一个状态转向另一个状态;
• 究竟转向哪一状态不但取决于各个输入值, 还取决于 当前状态 。
10.4 有限状态机(FSM)设计
有限状态机(FSM,Finite State Machine)是时序电路 设计中经常采用的一种方式,尤其适于设计数字系统的 控制模块。用Verilog的case、if-else等语句能很好地描 述基于状态机的设计。
有限状态机设计
用状态机设计一个二进制序列检测器,其功能是检测一 个4位二进制序列“1111”,即输入序列中如果有4个或4个 以上连续的“1”出现,输出为1,其它情况下,输出为0。
Ii



E
路k
CP 或 CP


存储电路 S m
电 路
j O
穆尔型电路
电路输出仅取决于各触发器的状态,而不受电路当时的输入 信号影响或没有输入变量,这类电路称为穆尔型电路。
Ii



E
路k
CP 或 CP


存储电路 S m
电 路
j O
好的状态机标准
好的状态机的标准很多,最重要的几个方面如下: 第一 状态机要安全,是指FSM不会进入死循环,特别是
1、状态机的一般结构
• 主控时序过程 • 主控组合过程 • 辅助过程
• 说明部分
状态机的分类:
• 摩尔(Moore)型状态机和米莉(Mealy)型状态 机。
• Moore型状态机的输出仅与现态有关; • Mealy型状态机的输出不仅与现态有关,而且
和输入也有关。
米利型和穆尔型时序电路
米利型电路:电路的输出是输入I及触发器输出Q1、 Q0 的函数。
其输入输出如下所示: 输入x:000 101 010 110 111 101 111 110 101 输出z:000 000 000 000 000 100 001 110 000
有限状态机设计
“1111”序列检测器状态转换图
“1111”序列检测器的Verilog描述
module fsm_seq(x,z,clk,reset,state); input x,clk,reset; output z; output[2:0] state; reg[2:0] state; reg z; parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4; always @(posedge clk) begin if(reset) begin state<=s0;z<=0; end else casex(state)
parameter
state1=2'b00,state2=2'b01,state3=2'b11,state4=2'b10;
……
case(state)
state1: …;
//调用
state2: …;
……
基于状态机的设计要点
状态编码的定义方式2:用'define语句定义
'define state1 2'b00
2.状态编码 状态编码主要有二进制编码、格雷编码和一位独热编码等方 式。 ◆二进制编码(Binary State Machine) ◆格雷编码(Gray Code State Machine) ◆一位热码编码(One-Hot State Machine Encoding) 一位热码编码即采用n位(或n个触发器)来编码具有n个状 态的状态机。比如对于state0、state1、state2、state3 四个 状态可用码字1000、0100、0010、0001来代表。
• 状态机可用于产生在时钟跳变沿时刻开关的复杂的 控制逻辑,是数字逻辑的控制核心。
Verilog状态机的一般形式
状态机的特点与优势
(1)高效的顺序控制模型。 (2)容易利用现成的EDA工具进行优化设计。 (3)系统性能稳定。 (4)设计实现效率高。 (5)高速性能。 (6)高可靠性能。
Verilog状态机的一般形式
2 、 设计的优化
第10章 设计的优化
主要 内容
10.1 设计的可综合性 10.2 流水线设计技术 10.3 资源共享 10.4 有限状态机设计 10.5 多层次结构电路的设计 10.6 进程 10.7 阻塞赋值与非阻塞赋值 10.8 FPGA设计中毛刺的消除
10.1 设计的可综合性
• 用FPGA/CPLD器件实现的设计中,综合就 是将Verilog或VHDL语言描述的行为级或功 能级电路模型转化为RTL级功能块或门级电 路网表的过程
不会进入非预知的状态,而且由于某些扰动进入非设计状 态,也能很快的恢复到正常的状态循环中来。这里面有两 层含义。其一要求该FSM的综合实现结果无毛刺等异常扰 动,其二要求FSM要完备,即使受到异常扰动进入非设计状 态,也能很快恢复到正常状态。
第二 状态机的设计要满足设计的面积和速度的要求。 第三 状态机的设计要清晰易懂、易维护。
• 综合的结果
图1 one always
采用两个always来描述,程序的模块声明、端口定义和信号类型部 分不变,只是改动逻辑功能描述部分,改动部分的程序如下:
• always @ (posedge dk) begin state fsm <=next_state; end
always @ (state_fsm or ina) begin state<=s0;out =0; case(state_fsm ) s0:begin next_state=(ina)?s1:s0;out=0; end s1:begin next state=(ina)?s2:s0;out=0;end s2:begin next_state=(ina)?s3:s0;out=0; end s3:begin next_state=(ina)?s3:s0;out=1; end endcase end endmodule
状态机的一般结构 •说明部分
举例
• 设计一个序列检测器,用于检测串行的二进制序列, 每当连续输入三个或三个以上的1时,序列检测器 的输出为1,其它情况下输出为0。 假设初始的状态为s0,输入一个1的状态记为s1, 连续输入二个1后的状态记为s2,输入三个或以上1 的状态记为s3,不论现态是何种状态一旦输入0的 话,就返回到初始状态。根据题意,可画出状态图如 图所示。
end
s2:
begin
if(x==0) begin state<=s0; z<=0; end
else begin state<=s3; z<=0; end
end
s3:
begin
if(x==0) begin state<=s0; z<=0; end
else begin state<=s4; z<=1; end
• 缺点:描述当前状态的输出用组合逻辑实 现,组合逻辑很容易产生毛刺,而且不利于约 束,不利于综合器和布局布线器实现高性能 的设计。
• Three always:一个always模块采用同步时 序描述状态转移,一个always采用组合逻辑判 断状态转移条件,描述状态转移规律,另一个 always模块描述状态的输出(可以用组合电路 输出,也可以时序电路输出)。
//不要加分号“;”
'define state2 2'b01
'define state3 2'b11
'define state4 2'b10
case(state)
'state1:
…;
//调用,不要漏掉符号“'”
'state2:
…;
……
4.状态转换的描述 一般使用case语句来描述状态之间的转换,用case语句表述比 用if-else语句更清晰明了。
相关主题