题解 | #脉冲同步器(快到慢)#
脉冲同步器(快到慢)
https://www.nowcoder.com/practice/9f7c92635b5f49579e8e38fd8c8450d7
`timescale 100ps/100ps module pulse_detect( input clka , input clkb , input rst_n , input sig_a , output sig_b ); //典型的慢采快问题,不能直接采集,需要展宽。 //展宽信号 wire sig_b; reg pluse_a; reg [1:0]pluse_r; always@(posedge clka or negedge rst_n)begin if(!rst_n) pluse_a<=0; else if(sig_a) pluse_a<=1; else if(pluse_r[1]) //B时钟域返回的信号 pluse_a<=0; else pluse_a<=pluse_a; end //传输到b时钟域 reg [2:0]pluse_b; always@(posedge clkb or negedge rst_n)begin if(!rst_n) pluse_b<=0; else pluse_b<={pluse_b[1],pluse_b[0],pluse_a}; end //产生反馈信号 always@(posedge clka or negedge rst_n)begin if(!rst_n) pluse_r<=0; else {pluse_r[1],pluse_r[0]}<={pluse_r[0],sig_b}; //用脉冲信号去反馈 end assign sig_b=(!pluse_b[2])&(pluse_b[1]); //assign sig_b=pluse_b[2]; endmodule