`timescale 100ps/100ps
module pulse_detect(
input clka ,
input clkb ,
input rst_n ,
input sig_a ,
output sig_b
);
reg clka_sig;
always @(posedge clka or negedge rst_n)
begin
if(!rst_n) begin
clka_sig <= 1'b0;
end else if(sig_a) begin
clka_sig <= ~clka_sig;
end else if (!sig_a)begin
clka_sig <= clka_sig;
end
end
reg [1:0] sync_clkb_sig;
always @(posedge clkb or negedge rst_n)
begin
if(!rst_n) begin
sync_clkb_sig <= 2'b00;
end else begin
sync_clkb_sig <= {sync_clkb_sig[0],clka_sig};
end
end
reg clkb_sig_d;
always @(posedge clkb or negedge rst_n)
begin
if(!rst_n) begin
clkb_sig_d <= 1'b0;
end else begin
clkb_sig_d <= sync_clkb_sig[1];
end
end
wire clkb_sig_edge = sync_clkb_sig[1] ^ clkb_sig_d;
assign sig_b = clkb_sig_edge;
endmodule