序列检测器

一个简单的状态机设计--序列检测器
序列检测器的逻辑功能描述:序列检测指的就是将一个指定的序列从数字码流中识别出来。本例中,我们将设计一个“10010”序列的检测器。设X为数字码流输入,Z为检出标记输出,高电平表示“发现指定序列”,低电平表示“没有发
现指定序列”。考虑码流为“ 110010010000100101…” 则有下表:
在这里插入图片描述
在时钟2-6,码流X中出现指定序列“10010”,对应输出Z在第6个时钟变为高电平――“1”,表示“发现指定序列”。同样地,在时钟13-17码流,X中再次出现指定序列“10010”,Z输出“1”。注意,在时钟5-9还有一次检出,但它是与第一次检出的序列重叠的,即前者的前面两位同时也是后者的最后两位。

根据以上逻辑功能描述,我们可以分析得出状态转换图如下:
其中状态A-E表示5比特序列“10010”按顺序正确地出现在码流中。考虑到序列重叠的可能,转换图中
在这里插入图片描述
还有状态F、G。另外、电路的初始状态设为IDLE。
Verilog HDL代码。

module seqdet( x, z, clk, rst);
	input x,clk, rst;
	output z;
	reg [2:0] state;//状态寄存器
	wire z;
	parameter IDLE= 'd0, A='d1, B='d2,
				C='d3, D='d4,
				E='d5, F='d6,
				G='d7;
	assign z=(state==D && x==0) ? 1 :0;
	always @(posedge clk or negedge rst)
		if(!rst)
			begin
				state<=IDLE;
			end
		else
			casex( state)
				IDLE: if(x==1)
					begin
						state<=A;
					end
				A: if (x==0)
					begin
						state<=B;
					end
				B: if (x==0)
					begin
						state<=C;
					end
					else
					begin
						state<=F;
					end
				C: if(x==1)
					begin
						state<=D;
					end
					else
					begin
						state<=G;
					end
				D: if(x==0)
					begin
						state<=E;
					end
					else
					begin
						state<=A;
					end
				E: if(x==0)
					begin
						state<=C;
					end
					else
					begin
						state<=A;
					end
				F: if(x==1)
					begin
						state<=A;
					end
					else
					begin
						state<=B;
					end
				G: if(x==1)
					begin
						state<=F;
					end
			default: state<=IDLE;
		endcase
endmodule

测试用代码。

`timescale 1ns/1ns

	module t;
	reg clk, rst;
	reg [23:0] data;
	wire z,x;
	assign x=data[23];
	initial
		begin
			clk<=0;
			rst<=1;
			#2 rst<=0;
			#30 rst<=1; //复位信号
			data='b1100_1001_0000_1001_0100; //码流数据
		end
	always #10 clk=~clk; //时钟信号
	always @ (posedge clk) // 移位输出码流
		data={data[22:0],data[23]};
		seqdet m ( .x(x), .z(z), .clk(clk), .rst(rst)); //调用序列检测器模块
		// Enter fixture code here
endmodule // t

在这里插入图片描述这是用modelsim做的仿真,和功能一样

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值