概述
一、状态机总结
状态机分为两种
一种称为Mealy状态机,它的时序逻辑输出不但取决于状态还取决于输入;
另外一种称为Moore状态机,它的输出只取决于当前的状态。实际的设计工作中大部分都是Mealy状态机。
有限状态机设计一般步骤:1、逻辑抽象,得出状态转换图;2、状态化简;3、状态分配;4、选定触发器的类型并求出状态方程、驱动方程和输出方程;5、按照方程得出逻辑图。
1、“111”序列检测器(米里型)
module fsm111 ( clk,rst,x,z) ;
input clk,rst,x; output reg z ;
reg[1:0] state;
parameter s0=2’b00,s1=2’b01,s2=2’b11;//状态转换图在心中,哈哈
always@(posedge clk or negedge rst)
begin if(!rst) state<=s0;
else case(state)
s0:begin if(x) state<=s1 ;
else state<=s0 ; end
s1:begin if(x) state<=s2;
else state<=s0 ; end
s2:begin if(x) state<=s2 ;
else state<=s0 ; end
defualt : state<=s0;
always @(state)
begin case(state)
s2: begin if(x) z=1’b1;
else z=1’b0;
defualt : z=1’b0;
end
endmodule
2、“101”序列检测器(摩尔型)
module fsm101 ( clk,rst,x,z) ;
input clk,rst,x; output reg z ;
reg[1:0] state,next_state;
parameter s0=2’b00,s1=2’b01,s2=2’b11,s3=2’b10;//状态编码,采用格雷码
always@(posedge clk or negedge rst)
begin if(!rst) state<=s0;
else state<=next_state;
end
always(state or x)
begin
case(state)
s0:begin if(x) next_state<=s1 ;
else next_state<=s0 ; end
s1:begin if(x) next_state<=s1;
else next_state<=s2 ; end
s2:begin if(x) next_state<=s3 ;
else next_state<=s0 ; end
s3:begin if(x) next_state<=s1 ;
else next_state<=s2 ; end
default : state<=s0;
endcase
end
always @(state)
begin case(state)
s3: z=1’b1;
default: z=1’b0;
endcase
end
endmodule
3、“1001”序列检测器
module fsm1001 ( clk,clr,x,z) ;
input clk,clr,x; output reg z ;
reg[1:0] state;
parameter s0=2’b00,s1=2’b01;
parameter s2=2’b11,s3=2’b10;
always @(posedge clk or posedge clr)
begin if(clr) state<=s0;
else case(state)
s0:begin if(x) state<=s1 ;
else state<=s0 ; end
s1:begin if(x) state<=s1;
else state<=s2 ; end
s2:begin if(x) state<=s1 ;
else state<=s3 ; end
s3:begin if(x) state<=s1;
else state<=s0 ; end
defualt : state<=s0;
always @(state)
begin case(state)
s3: begin if(x) z=1’b1;
else z=1’b0;
defualt : z=1’b0;
end
endmodule
二、Gray码基本概念
1、格雷码概念
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码;另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码;
2、优点:
若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100、1111等)。在特定情况下可能导致电路状态错误或输入错误,使用格雷码可以避免这种错误。
3.Gray码的编码形式(我们讨论四位Gray码,二位三位方法相同)
十进制数 | 4位二进制码 | 四位典型Gray码 |
---|---|---|
0 | 0000 | 0000 |
1 | 0001 | 0001 |
2 | 0010 | 0011 |
3 | 0011 | 0010 |
4 | 0100 | 0110 |
5 | 0101 | 0111 |
6 | 0110 | 0101 |
7 | 0111 | 0100 |
8 | 1000 | 1100 |
9 | 1001 | 1101 |
10 | 1010 | 1111 |
11 | 1011 | 1110 |
12 | 1100 | 1010 |
13 | 1101 | 1011 |
14 | 1110 | 1001 |
15 | 1111 | 1000 |
最后
以上就是外向羊为你收集整理的对于状态机的总结以及Gray码基本概念的全部内容,希望文章能够帮你解决对于状态机的总结以及Gray码基本概念所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复