// ============================================================// File Name: cm_cdc_1bit// VERSION : V1.0// DATA : 2022/9/28// Author : FPGA干货分享// ============================================================// 功能:单bit慢变信号跨时钟域模块// ============================================================ `timescale 1ns/1psmodule cm_cdc_1bit ( input wire I_clk_a , ///输入时钟a input wire I_clk_b , ///输入时钟b input wire I_single_a , ///a时钟输入信号 output reg O_single_b ///b时钟输出信号 ); // ============================================================// wire reg// ============================================================reg S_clr_flag_a_d0 ;reg S_clr_flag_a_d1 ;reg S_clr_flag_a_all ; reg S_clr_flag_b_d0 ;reg S_clr_flag_b_d1 ;reg S_clr_flag_b_d2 ;reg S_clr_b_posedge ; // ============================================================// a时钟域// ============================================================ always @(posedge I_clk_a) begin S_clr_flag_a_d0 <= I_single_a; S_clr_flag_a_d1 <= S_clr_flag_a_d0; end ///跨时钟域之前先扩展always @(posedge I_clk_a) S_clr_flag_a_all <= I_single_a|S_clr_flag_a_d0|S_clr_flag_a_d1 ; // ============================================================// b时钟域// ============================================================///使用第二个时钟进行打拍always @(posedge I_clk_b) begin S_clr_flag_b_d0 <= S_clr_flag_a_all; S_clr_flag_b_d1 <= S_clr_flag_b_d0 ; S_clr_flag_b_d2 <= S_clr_flag_b_d1 ; end //打两拍之后的信号进行处理always @(posedge I_clk_b) O_single_b <= (!S_clr_flag_b_d2)&(S_clr_flag_b_d1); endmodule