- 跨时钟域的设计需要特别小心,以避免亚稳态问题。双触发器同步器(2-Flip-Flop Synchronizer) 是一种简单且广泛应用的 时钟域交叉(CDC) 同步方法,用于将一个时钟域中的信号同步到另一个时钟域中。它通过使用两个触发器级联,确保信号在跨越不同时钟域时,(以指数平方级别)降低因为时钟的不匹配导致不稳定或亚稳态(metastability)发生的概率。

双触发器同步器(Two-Flip-Flop Synchronizer)示例代码:
module nocdc (
input wire clk_dst, // 目标时钟域时钟
input wire async_signal, // 来自源时钟域的异步信号
input wire rst_n, // 异步复位信号,低电平有效
output reg sync_signal, // 同步后的信号
output reg [7:0] counter // 计数器输出
);
reg sync_ff1, sync_ff2;
// 使用双触发器进行同步
always @(posedge clk_dst or negedge rst_n) begin
if (!rst_n) begin
sync_ff1 <= 1'b0;
sync_ff2 <= 1'b0;
end else begin
sync_ff1 <= async_signal; // 第一阶段采样异步信号
sync_ff2 <= sync_ff1; // 第二阶段消除亚稳态
end
end
assign sync_signal = sync_ff2; // 输出同步后的信号
// 使用同步后的信号更新计数器
always @(posedge clk_dst or negedge rst_n) begin
if (!rst_n) begin
counter <= 8'b0;
end e