Documente Academic
Documente Profesional
Documente Cultură
module tb();
reg clk,reset,in;
wire detect;
reg [8:0] data=9`b001101000;
initial
begin
clk=0;
reset=0;
#2 reset=1;
in=0;
#10;
in=0;
#10;
in=1;
#10;
in=1;
#10;
in=0;
#10;
in=1;
#10;
in=0;
#10;
in=1;
#10;
in=1;
#10;
in=0;
#10;
in=1;
#20;
$finish;
end
end
always #5 clk=~clk;
endmodule
endcase
end
end
endmodule
////////////////////////////////////
module fm_onehot (input clk,reset,in,
output reg detect);
parameter WAIT_1=0,
WAIT_11=1,
WAIT_110=2,
WAIT_1101=3;
reg [3:0] state,next;
always@(posedge clk or negedge reset)
begin
if(!reset) begin
state<=0;
state[WAIT_1]<=1;
end
else begin
state<=next;
end
end
always@(*)
begin
next=0;
case(1'b1)
state[WAIT_1] : if(in) next[WAIT_11]=1;
else next[WAIT_1]=1;
state[WAIT_11]: if(in) next[WAIT_110]=1;
else next[WAIT_1]=1;
state[WAIT_110]: if(in) next[WAIT_110]=1;
else next[WAIT_1101]=1;
state[WAIT_1101]: if(in) next[WAIT_11]=1;
else next[WAIT_1]=1;
endcase
end
always@(posedge clk or negedge reset)
begin
if(!reset) begin
detect<=0;
end
else begin
detect<=0;
case(1'b1)
next[WAIT_1],next[WAIT_11],next[WAIT_110] : ;//default
next[WAIT_1101] : if(in) detect<=1;
else detect<=0;
endcase
end
end
endmodule