数字集成电路设计-12-状态机的四种写法

引言

在实际的数字电路设计中,状态机是最常用的逻辑,而且往往是全部逻辑的核心部分,所以状态机的质量,会在比较大的程度上影响整个电路的质量。

本小节我们通过一个简单的例子(三进制脉动计数器)来说明一下状态机的4中写法。


1,模块功能

由于我们的目的在于说明状态机的写作方式,所以其逻辑越简单有利于理解。就是一个简单的脉动计数器,每个三个使能信号输出一个标示信号。


2,一段式

状态机的写法,一般有四种,即一段式,两段式,三段式,四段式。对于一段式的写法,整个状态机的状态转移、转移条件、对应状态的输出都写在一个always块里,故称‘一段式’。那么,脉动计数器状态机的一段式写法该怎么写呢?如下所示:


/*
* file	: fsm1.v
* author: Rill
* date	: 2014-05-11
*/

module Mfsm1
(
clk,
rst,

enable,
done
);

input wire clk;
input wire rst;
input wire enable;
output reg done;


parameter s_idle = 4'd0;
parameter s_1 = 4'd1;
parameter s_2 = 4'd2;
parameter s_3 = 4'd3;

reg [3:0] state;

always @(posedge clk)
begin
	if(rst)
		begin
			done <=1'b0;
			state <= s_idle;
		end
	else
		begin
			case(state)
			s_idle:
				begin
					if(enable)
						state <= s_1;
				
					done <= 1'b0;
				end	

				s_1:
				begin
					if(enable)
						state <= s_2;
				
					done <= 1'b0;
				end	
			
			s_2:
				begin
					if(enable)
						begin
							state <= s_3;
							done <= 1'b1;
						end
					else
						begin
							done <= 1'b0;
						end
					
				end
			
			s_3:
				begin
					state <= s_idle;
					done <= 1'b0;
				end
				
			default:
				begin
					state <= s_idle;
					done <= 1'b0;
				end
			endcase
		end
end

endmodule


3,两段式

状态机的另外一种写法是‘两段式’的。两段式的写法,整个状态机由两个always块组成,第一个块只负责状态转移,第二个块负责转移条件和对应状态的输出。其中第一个块是时序逻辑,第二个块是组合逻辑。脉动计数器状态机的两段式写法又是怎样的呢?


/*
* file	: fsm2.v
* author: Rill
* date	: 2014-05-11
*/

module Mfsm2
(
clk,
rst,

enable,
done
);

input wire clk;
  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值