EDA技术实用教程 | 复习十二 | 序列检测器

序列检测器的设计

序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。

以检测6位序列数“110100”为例,介绍序列检测器的设计。
根据序列检测器原理,可以得出序列检测器的状态转换图如下。
在这里插入图片描述

module SCHK_6B(CLK_DIV_OUT_1HZ,RST,din,sout,q);
	input CLK_DIV_OUT_1HZ;
	input RST;
	input din;
	
	output sout;
	output[3:0] q;
	
	reg[3:0] q;
	
	parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6;
	reg[6:0]cst,nst;
	
	always@(posedge CLK_DIV_OUT_1HZ, negedge RST)
		begin
				if(!RST)
					cst <= s0;
				else
					cst <= nst;
		end
		
	always@(cst,din)
		begin
				case(cst)
					s0: if(din)  nst <= s1; else nst <= s0;
					s1: if(din)  nst <= s2; else nst <= s0;
					s2: if(!din) nst <= s3; else nst <= s2;
					s3: if(din)  nst <= s4; else nst <= s0;//s0
					s4: if(!din) nst <= s5; else nst <= s2;
					s5: if(!din) nst <= s6; else nst <= s1;
					s6: if(din)  nst <= s1; else nst <= s0;
					default: nst <= s0;
				endcase
		end
	assign sout = (cst == s6) ? 1 : 0;
	
	always@(cst)
		begin
				case(cst)
					s0: q = 4'd0;
					s1: q = 4'd1;
					s2: q = 4'd2;
					s3: q = 4'd3;
					s4: q = 4'd4;
					s5: q = 4'd5;
					s6: q = 4'd6;
					default: q = 4'd0;
				endcase
		end
endmodule

时序仿真如下图所示:
在这里插入图片描述

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值