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

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

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
	);//观察时序图,先输入的在高位或低位都行
//观察时序图,先输入的在高位或低位都行
/*
reg [3:0] men;

always@(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        men <= 0;
    end
    else if(data_valid)begin
        men <= {men[2:0],data};
    end
end



always@(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        match <= 0;
    end
	else begin
		match <= men[2:0] == 3'b011 && data_valid == 1'b1 && data == 1'b0;
	end
end

*/

reg [1:0] cs,ns;
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cs <= 0;
    end
    else begin
        cs <= ns;
    end
end

always@(*)begin
    case(cs)
        2'b00 : ns = (data_valid) ? ((data==1'b0) ? 2'b01 : 2'b00) : cs;
        2'b01 : ns = (data_valid) ? ((data==1'b1) ? 2'b10 : 2'b01) : cs;
        2'b10 : ns = (data_valid) ? ((data==1'b1) ? 2'b11 : 2'b10) : cs;
        2'b11 : ns = (data_valid) ? ((data==1'b0) ? 2'b00 : 2'b11) : cs;
        default : ns = 2'd0;
    endcase
end
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        match <= 0;
    end
    else if(cs == 2'b11 && data == 1'b0 && data_valid == 1'b1)begin
        match <= 1;
    end
    else begin
        match <= 0;
    end
end





  
endmodule

全部评论

相关推荐

06-28 22:48
已编辑
广东金融学院 Java
小浪_Coding:学院本+这俩项目不是buff叠满了嘛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务