因为看到其他答案写的都比较复杂。所以这次将我完成比较简单的题解写一下。

完成这道题只需要注意两点。

(1)由300m快时钟到100m慢时钟同步,就只需要将sig_a单脉冲展宽为100m时钟的单脉冲就行。也就是将sig_a单脉冲扩充3倍,就是100m时钟里的单脉冲。

(2)扩充后的信号经过打两拍输出。就是最终需要的输出信号。

`timescale 100ps/100ps

module pulse_detect(
	input 				clka	, 
	input 				clkb	,   
	input 				rst_n		,
	input				sig_a		,

	output  		 	sig_b
);
reg [1:0] sig_a_cnt;
reg sig_a_syn;
reg sig_a_syn_reg0;
reg sig_a_syn_reg1;
wire sig_a_end;
assign sig_a_end = sig_a_cnt == 3 - 1;
always@(posedge clka or negedge rst_n)
begin
	if(!rst_n)
		sig_a_syn <= 0;
	else if(sig_a)
		sig_a_syn <= 1;
	else if(sig_a_end)
		sig_a_syn <= 0;
end

always@(posedge clka or negedge rst_n)
begin
	if(!rst_n)
		sig_a_cnt <= 0;
	else if(sig_a_cnt == 3 - 1)
		sig_a_cnt <= 0;
	else if(sig_a_syn)
		sig_a_cnt <= sig_a_cnt + 1;
end
always@(posedge clkb or negedge rst_n)
begin
	if(!rst_n)begin
		sig_a_syn_reg0 <= 0;
		sig_a_syn_reg1 <= 0;
	end
	else begin
		sig_a_syn_reg0 <= sig_a_syn;
		sig_a_syn_reg1 <= sig_a_syn_reg0;
	end
end
assign sig_b = sig_a_syn_reg1;

endmodule