题解 | #输入序列不连续的序列检测#

输入序列不连续的序列检测

https://www.nowcoder.com/practice/f96d0e94ec604592b502b0f1800ed8aa

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	input data_valid,
	output reg match
	);
// 0110
parameter S0 = 4'b1111;
parameter S1 = 4'b0000;
parameter S2 = 4'b0001;
parameter S3 = 4'b0011;
parameter S4 = 4'b0110;
reg [3:0] sta_now,sta_next;
always @(posedge clk or negedge rst_n) begin
	if (~rst_n) begin
		sta_now <= S0;
	end
	else
		sta_now <= sta_next;
end
always @(*) begin
	case(sta_now)
		S0: sta_next = (data_valid)?
						((~data)?S1:S0):S0;
		S1: sta_next = (data_valid)?
						((~data)?S1:S2):S1;
		S2: sta_next = (data_valid)?
						((data?S3:S1)):S2;
		S3: sta_next = (data_valid)?
						((~data)?S4:S0):S3;
		S4: sta_next = (data_valid)?
						(data?S0:S1):S4;
	endcase
end
always @(posedge clk or negedge rst_n) begin
	if (~rst_n)
		match <= 0;
	else begin
		if (sta_now==S3 && data == 0 && data_valid == 1)
			match <= 1;
		else
			match <= 0;
	end
end

endmodule

需要使match的时序提前一个时钟周期,判断是判断sta_now为S3状态且下一个时钟周期就变为S4状态。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务