因为看到其他答案写的都比较复杂。所以这次将我完成比较简单的题解写一下。
完成这道题只需要注意两点。
(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