序列检测器(实例代码)

题目:

用Moore型状态机实现序列“1101”从右到左的不重叠检测。

1、请画出状态转移图,其中状态用S1,S2,....来标识。

2、针对这个具体设计,如何衡量验证的完备性?


从右到左检测即检测的顺序为1、0、1、1,不重叠检测即1011011这种情况只检测到一次,10111011才是检测到两次。

在写代码前,一定要画出状态转换图,状态转换图画对了,代码才能写对。另外也给出了重叠检测的状态图,如下图(b)所示。

序列检测器(实例代码)_第1张图片

下面给出不重叠检测的实现代码:

`timescale 1ns/1ns

//检测1011序列,不重叠

module seq_detect(
			input 		clk,
			input		rst_n,
			input		seq_in,
			output	reg	detect_ok
);

	localparam [2:0] 	S1=3'd0,
						S2=3'd1,
						S3=3'd2,
						S4=3'd3,
						S5=3'd4;
	reg [4:0]CS,NS;
	
	always@(posedge clk,negedge rst_n)begin
		if(!rst_n)begin
			CS 		<= 5'd0;
			CS[S1] 	<= 1'b1;
		end
		else 
			CS<=NS;
	end
	always@(*)begin
		NS = 5'd0;
		case(1'b1)
			CS[S1]:if(seq_in)NS[S2]=1'b1;else NS[S1]=1'b1;
			CS[S2]:if(seq_in)NS[S2]=1'b1;else NS[S3]=1'b1;
			CS[S3]:if(seq_in)NS[S4]=1'b1;else NS[S1]=1'b1;
			CS[S4]:if(seq_in)NS[S5]=1'b1;else NS[S3]=1'b1;
			CS[S5]:if(seq_in)NS[S2]=1'b1;else NS[S1]=1'b1;
			default:NS[S1]=1'b1;
		endcase
	end
	always@(posedge clk,negedge rst_n)begin
		if(!rst_n)
			detect_ok<=1'b0;
		else if(NS[S5])
			detect_ok<=1'b1;
		else
			detect_ok<=1'b0;
	end
	
endmodule

测试策略:产生32个随机测试向量,每一个向量产生一个输入序列,测试代码如下

`timescale 1ns/1ns

module seq_detect_tb;
parameter 	cycle_time=10;
	integer i;
	reg 		clk;
	reg 		rst_n;
	reg [3:0]	data;
	reg			seq_in;
	wire		detect_ok;
	
	always #(cycle_time/2) clk = ~clk;
	initial begin
		clk     = 0;
		rst_n   = 0;
		#(2*cycle_time);
		rst_n   = 1;
		#(2*cycle_time);
		for(i=0;i<32;i=i+1)begin
			data = {$random}%16;			   //产生0到16的随机整数min+{$random}%(max-min+1) 
			seq_gen(data);
		end
		$stop;
	end
	task seq_gen;
	input [3:0]data_in;
	integer j;
		for(j=0;j<4;j=j+1)begin
			seq_in =data_in[0];
			data_in=data_in>>1;
			@(posedge clk);
		end
	endtask

seq_detect
	u_seq_detect(
			.clk(clk),
			.rst_n(rst_n),
			.seq_in(seq_in),
			.detect_ok(detect_ok)
);
endmodule

序列检测器(实例代码)_第2张图片

分析波形可知

(1)红圈1红圈2序列为10111011,则检测到两个匹配序列;

(2)红圈3红圈4序列为1011011,由于是不重叠检测,因此只检测到一个1011序列;

(3)红圈5序列为101101011,检测到两个1011序列;

(4)红圈6与7,序列为101110111010110,检测到三个匹配序列。

产生足够过的随机向量,便可验证完备设计的完备性。

你可能感兴趣的:(IC设计技巧,verilog,HDL高级数字设计)