[转载]用FSM实现101101的序列检测模块

原文地址:http://blog.sina.com.cn/s/blog_65a8ca540100kwi4.html

 

module series_det(clk,rstn,a,b);
input clk,rstn;
input a;
output reg b;
parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5;
reg [2:0]s;
 
always@(posedge clk)
if(!rstn) begin s<=s0;b<=0; end
else case(s)
s0:
  if(a) begin s<=s1;b<=0;end
  else  begin s<=s0;b<=0;end
s1:
  if(a) begin s<=s1;b<=0;end
  else  begin s<=s2;b<=0;end
s2:
  if(a) begin s<=s3;b<=0;end
  else  begin s<=s0;b<=0;end
s3:
  if(a) begin s<=s4;b<=0;end
  else  begin s<=s2;b<=0;end
s4:
  if(a) begin s<=s1;b<=0;end
  else  begin s<=s5;b<=0;end
s5:
  if(a) begin s<=s3;b<=1;end
  else  begin s<=s0;b<=0;end
default:
  begin s<=s0;b<=0;end
endcase 
 
endmodule

 

 

 

 

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1011序列检测的有限状态机(FSM)代码如下: ```python state = 0 # 初始化状态 def fsm(input): global state if input == '1': if state == 0 or state == 2: state = 1 else: state = 0 elif input == '0': if state == 1 or state == 3: state = 2 else: state = 0 if state == 3: return True # 当状态为3时,1011序列检测成功 else: return False # 测试代码 input_sequence = "10001110101011" for input in input_sequence: if fsm(input): print(input, "序列检测成功") else: print(input, "序列检测失败") ``` 该代码使用了一个全局变量`state`来表示状态,初始状态为0。在`fsm`函数中,根据输入值和当前状态进行状态转移的判断。 当输入值为'1'时,如果当前状态为0或2,则状态转移到1,否则转移到0。当输入值为'0'时,如果当前状态为1或3,则状态转移到2,否则转移到0。 最后,如果状态为3,则表示检测到了1011序列,返回True,否则返回False。 测试代码中,按照输入序列的顺序依次调用`fsm`函数,根据返回结果输出序列检测成功或失败的信息。按照给定的输入序列"10001110101011"执行代码,输出结果为: ``` 1 序列检测失败 0 序列检测失败 0 序列检测失败 0 序列检测失败 1 序列检测失败 1 序列检测失败 1 序列检测失败 0 序列检测失败 1 序列检测失败 0 序列检测失败 1 序列检测失败 1 序列检测失败 1 序列检测成功 0 序列检测成功 1 序列检测失败 1 序列检测失败 ``` 其中,最后一行输出"1 序列检测成功"表示成功检测到了1011序列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值