题解 | #含有无关项的序列检测#
含有无关项的序列检测
https://www.nowcoder.com/practice/cba67d06d6834a5d9b93e1087b56c8d8
这题再用state就不合适了,因为011xxx110要判断第三个x来决定接下来是什么状态。还是很简单。
`timescale 1ns/1ns
module sequence_detect(
input clk,
input rst_n,
input a,
output reg match
);
reg [8:0]shift_reg;
always@(posedge clk or negedge rst_n)
if(~rst_n)
shift_reg<=9'b0;
else
shift_reg<={shift_reg[7:0],a};
always@(posedge clk or negedge rst_n)
if(~rst_n)
match <= 1'b0;
else if(shift_reg[8:6]==3'b011 & shift_reg[2:0]==3'b110)
match <= 1'b1;
else
match <= 1'b0;
endmodule
再附上tb.v
`timescale 1ns/1ns
module testbench();
reg clk,rst_n;
reg a;
wire match;
parameter CLK_PERIOD =2;
initial begin
$dumpfile("out.vcd");
$dumpvars(0,testbench);
clk = 1;
forever begin
#(CLK_PERIOD/2) clk = ~clk;
end
end
initial begin
rst_n = 0;
#2
rst_n =1;
end
initial begin
#2 a = 0;
#2 a = 1;
#2 a = 1;
#2 a = 1;
#2 a = 0;
#2 a = 0;
#2 a = 1;
#2 a = 1;
#2 a=0;
#10 $finish;
end
sequence_detect dut(
.clk(clk),
.rst_n(rst_n),
.a(a),
.match(match)
);
endmodule
