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

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

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


输入数据序列的生成,应该放在时序电路中,但是数据序列是否等于target序列不能放在时序模块中检测,因为这样会慢上一个时钟周期,万一下一个时钟周期的data_valid为低,那么即使序列符合,也没办法拉高,因为题目这边虽然没写但是要求data_valid为低时,match为低。

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	input data_valid,
	output reg match
	);
    
    parameter TARGET = 4'b0110;
    reg [3:0] tmp;
    
    
    always@(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
            match <= 0;
            tmp[3:0] <= 4'b0;
        end else if(data_valid) begin        
            tmp <= {tmp[2:0], data};
            
        end else begin
            tmp <= tmp; 
        end
        
//         if(tmp == TARGET) begin
//                 match <= 1; 
//             end else begin
//                 match <= 0;  
//             end
        

    end
    always@(*) begin
        if(!data_valid)
            match = 0;
        else if(tmp == TARGET)
            match = 1;
        else
            match = 0;
    end

  
endmodule


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务