12-同步状态机的结构以及Mealy和Moore状态机的区别,Verilog实现有限状态机的4种方式,以及总结有限状态机设计的一般步骤

由于寄存器传输级(RTL)描述的是以时序逻辑抽象所得到的有限状态机为依据,因此,把一个时序逻辑抽象成一个同步有限状态机是设计可综合风格的Verilog HDL模块的关键。

在本章节中,在了解状态机结构的基础上通过各种实例,由浅入深地介绍各种可综合风格的Verilog HDL模块,并把重点放在时序逻辑的可综合有限状态机的Verilog设计要点上。

1,介绍Mealy型状态机和Moore型状态机的两种结构

在这里插入图片描述
在这里插入图片描述
Mealy型状态机和Moore型状态机的区别:
1,Mealy型状态机的输出,与当前状态和输入函数有关;
2,Moore型状态机的输出,只与当前状态有关;

这两种电路结构除了在输出电路部分有些不同外,其他地方都是相同的。在实际设计工作中,其实大部分状态机都属于Mealy状态机,因为状态机的输出中或多或少有几个属于Mealy型输出,输出不但与当前状态有关还与输入有关;还有几个输出属于Moore型状态机,即只与当前状态有关。

2,设计高速电路的方法

在设计高速电路时,常常有必要使状态机的输出与时钟几乎完全同步。

1,有一个办法是把状态变量直接用作输出,为此在指定状态编码时需要多费一些脑力,也可能会多用几个寄存器。
这种设计思路,在高速状态机电路时常常使用,这称为输出编码的状态指定。

这种状态机属于 图2 的Moore型状态机

2,另一个办法,是如图3所示,在输出逻辑G后面再加一组与时钟同步的寄存器输出流水线寄存器,让G所有的输出信号在下一个时钟跳变沿同时存入寄存器组,即完全同步地输出,把这种输出称为流水线化的输出。

这种状态属于 图3 的带流水线输出的Mealy状态机

在这里插入图片描述

其实,在这几种状态机之间,只要做一些改变,便可以从一种形式转变为另一种形式。比如可以将图3所示的状态机中产生流水输出的寄存器省去,把这些寄存器用在状态记忆上,就可以很容易地得到一个把状态机变量用作输出信号的Moore型状态机。

状态机的分类不重要,重要的是设计者如何把握输出的结构能满足设计的整体目标,包括定时的准确性和灵活性。

3,用Verilog来描述可综合的状态机

在Verilog HDL中可以用许多种方法来描述有限状态机,最常用的方法是用always语句case语句。如3.1节所示的状态转移图表示了一个简单的有限状态机。

3.1,状态转移图

在这里插入图片描述

3.2,用可综合Verilog模块设计、用gray码表示状态机
3.2.1,RTL代码设计
//	用有限状态机编写可综合Verilog模块设计状态机,gray码
module	fsm1(
input				i_clk,
input				i_rst,
input				i_a,

output	reg	[1:0]	state,
output  reg         k2,
output  reg         k1
);

parameter			idle	= 2'b00;
parameter			start	= 2'b01;
parameter			stop	= 2'b10;
parameter			clear	= 2'b11;

always@(posedge i_clk)
	if(!i_rst)	begin
		state	<= idle;
		k2		<= 0;
		k1		<= 0;
		end
	else
		case(state)
			idle:	if(i_a)	begin
						state	<= start;
						k2		<= 0;
						k1		<= 0;
						end
					else	begin
						state	<= idle;
						k2		<= 0;
						k1		<= 0;
						end
			start:	if(!i_a)	begin
						state	<= stop;
						k2		<= 0;
						k1		<= 0;
						end
					else	begin
						state	<= start;
						k2		<= 0;
						k1		<= 0;
						end
			stop:
					if(i_a)	begin
						state	<= clear;
						k2		<= 1;
						k1		<= 0;
						end
					else	begin
						state	<= stop;
						k2		<= 0;
						k1		<= 0;
						end
			clear:
					if(!i_a)	begin
				
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值