题解 | #脉冲同步电路#
脉冲同步电路
https://www.nowcoder.com/practice/b7f37e6c55e24478aef4ec2d738bbf07
`timescale 1ns/1ns module pulse_detect( input clk_fast , input clk_slow , input rst_n , input data_in , output dataout ); reg data_in_reg; reg [2:0] data_slow_reg; always@(posedge clk_fast or negedge rst_n) begin if(!rst_n) data_in_reg <= 1'b0; else if(data_in) data_in_reg <= ~data_in_reg; //只要信号来就跳转一次,即把其转换为电平信号,然后让slow时钟进行抓取 end always@(posedge clk_slow or negedge rst_n) begin if(!rst_n) data_slow_reg <= 3'b0; else data_slow_reg <= {data_slow_reg[1:0] , data_in_reg}; //这也是打两拍的方式,主要就是把打拍数据放一起, end //打三拍主要是怕第一个数据刚同步过来不稳定,所以选择三拍,特别是我们的输出是组合逻辑,所以必须三拍,两拍同步,一拍取稳定 assign dataout = data_slow_reg[2] ^ data_slow_reg[1]; //把第三拍数据和第二拍数据进行求异或就能得到信号的边沿,从而实现输出信号是一个脉冲 endmodule