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