when din is same for 2 clock period, detect goes high
`timescale 1ns / 1ps
module pairDetect(
input clk,
input din,
input reset,
output reg detect
);
reg [1:0] state;
initial begin state=2'b00; end
always@(posedge clk, posedge reset)
begin
if(reset)
state<=2'b00;
else
begin
case (state)
2'b00:
begin
if(din) state<=2'b01;
else state<=2'b10;
end
2'b01:
begin
if(din) state<=2'b11;
else state<=2'b10;
end
2'b10:
begin
if(din) state<=2'b01;
else state<=2'b11;
end
2'b11:
begin
if(din) state<=2'b01;
else state<=2'b10;
end
endcase
end
end
always@(posedge clk, posedge reset)
begin
if (reset) detect<=2'b00;
else if (state==2'b11) detect<=1;
else detect<=0;
end
endmodule
-----------------------
//testbench.v
`timescale 1ns / 1ps
module testbench;
reg clk=1, din=0, reset=0;
wire detect;
pairDetect UUT(
.clk(clk),
.din(din),
.reset(reset),
.detect(detect)
);
initial begin
#15 reset=1;
#15 reset=0;
end
always #10 clk=~clk;
always begin
#20 din = 1;
#20 din = 0;
#20 din = 1;
#20 din = 1;
#20 din = 0;
#20 din = 0;
#20 din = 1;
#20 din = 1;
#20 din = 1;
#20 din = 1;
#20 din = 0;
#20 din = 0;
#20 din = 0;
#20 din = 1;
#20 din = 0;
#20 din = 1;
#20 din = 0;
#20 din = 0;
end
endmodule
No comments:
Post a Comment