题解 | #脉冲同步电路#

脉冲同步电路

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

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务