题解 | #输入序列不连续的序列检测#
输入序列不连续的序列检测
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