跨时钟域-多bit信号处理方法
多bit信号同步
跨时钟域传递多比特信号的问题是,在同步多个信号到一个时钟域时将可能偶发数据变化歪斜(Skew),这种数据歪斜最终会在第二个时钟域的不同时钟上升沿上被采集。即便能够完美地控制和匹配这些多比特信号的走线长度,随着芯片衬底工艺不同,上升和下降的时间也会不一样,这些因素都会产生足够的歪斜导致在精心匹配的多条信号上采样失败。
解决方法:
1. 多比特信号合并成单比特信号。
2. MUX同步器
3. 多周期路径(Multi-Cycle path,MCP)同步法
4. 握手处理
5. 格雷码编码处理
6. 异步FIFO
一、多比特融合
适用于多个控制信号且控制信号之间有一定的逻辑关系,可以合并成单比特信号。
1、两个同步控制信号
解决办法---融合
将加载和使能两个控制信号融合成一个单比特控制信号
2、两个含相位差的控制信号
解决办法---融合后增加一个寄存器
二、MUX同步器
当数据在源触发器准备就绪时,在源时钟域中产生控制脉冲。然后根据源域和目标域的时钟比,使用两个触发器同步器或脉冲同步器 (触发或握手)来同步控制脉冲。 同步控制脉冲用于在目的域内对总线上的数据进行采样。
以下两种情况可以使用MUX同步器:
1. 当源时钟域比目的时钟域慢时,跨时钟域(CDC)位于数据总线上,且数据至少在m+1个目的时钟周器内保持稳定(m指目的时钟域同步器采用触发器的数量)。
2. 当源时钟域比目的时钟域快时,跨时钟域(CDC)位于数据总线上,且保证数据持续时间足够长。
**实现电路图**

MUX/DMUX同步器主要是用于带有数据有效标志信号的多比特数据跨时钟域问题,且多比特数据要保持一段时间。
上图红色虚线框内是主要是对数据有效标志信号的处理,可以发现其实就是对单比特的数据有效标志信号在bclk时钟域打了两拍,其实就是单比特从慢速时钟域到快速时钟域的处理方式。数据有效标志信号在时钟bclk下打两拍后就同步于该打拍的时钟域了,此时同步于aclk的数据依然保持有效,将同步后的数据有效标志信号作为多路选择器的选通信号,将数据也同步于bclk时钟域中。
此外,对adata_valid_rr在bclk还打了一拍主要是为了让数据有效标志信号和同步bclk的数据匹配。
在这里,需要注意的是,如果bclk的时钟速率小于aclk的时钟速率,我们只需要把上图红色虚线框内电路换成单比特从快速时钟域到慢速时钟域的处理方式即可。
module mux_sync(
input wire clk_a,
input wire clk_b,
input wire arst_n,
input wire brst_n,
input wire data_en,
input wire [3:0] data_in,
output reg [3:0] data_out
);
reg [3:0] data_in_reg;
reg a_data_en;
always@(posedge clk_a or negedge arst_n)
begin
if(!arst_n)
a_data_en <= 'd0;
else
a_data_en <= data_en;
end
always@(posedge clk_a or negedge arst_n)
begin
if(!arst_n)
data_in <= 'd0;
else
data_in_reg <= data_in;
end
always@(posedge clk_b or negedge brst_n)
begin
if(!brst_n)
begin
b_data_en_reg <= 'd0;
b_data_en <= 'd0;
end
else
begin
b_data_en_reg <= a_data_en;
b_data_en <= b_data_en_reg;
end
end
//b_data_en data_in_reg
always@(posedge clk_b or negedge brst_n)
begin
if(!brst_n)
data_out <= 'd0;
else
begin
data_out <= b_data_en?data_in_reg:data_out;
end
end
endmodule
若上面为:B时钟域(接收域)的时钟频率是A时钟域(发送域)的时钟频率的几十倍,甚至上百倍。且data_en为脉冲信号时,data_en在在快时钟域打完几拍的时间相对于慢时钟域是非常短暂的,此时慢时钟域中的多bit数据信号可能还处于冒险中间态,则此时选通进入快时钟域的数据就是“毛刺”。
可以在接收域使用边沿同步器,检测data_en的下降沿,以保证此时的多比特数据一定是稳定的。
三、多周期路径同步法
多周期路径规划是一种通用的安全传递多比特跨时钟域信号技术。多周期路径规划是指在传输非同步数据到接收时钟域时配上一个同步的控制信号,数据和控制信号被同时发送到接收时钟域,同时控制信号在接收时钟域使用两级寄存器同步到接收时钟域,使用此同步后的控制信号来加载数据,这样数据就可以在目的寄存器被安全加载。 使用这种技术有以下两个好处:
在时钟域之间发送数据的时候发送时钟域无须计算对应脉冲宽度。
发送时钟域只需切换一个使能到接收时钟域来显示数据已经被传递且已准备被加载。使能信号无须返回到其原始状态,
个人感觉多周期路径同步法包含MUX同步器和握手同步方式。其中MUX同步器相当于开环的多周期路径同步。而完全握手方式相当于带确认反馈的多周期路径同步,部分握手方式相当于带反馈的闭环多周期路径同步。
四、握手同步方式
完全握手同步方式
完全握手的特点是发送域和接收域两端在发送请求或者终止请求之前都需要等待对端的回应。完全握手在收发两侧都使用的是电平同步器。
部分握手同步方式
有两种部分握手方案,区别在于握手所采用的信号类型。一种所用的部分握手方法在发送侧使用电平信号来发送请求,在接收侧使用脉冲信号来发送响应;另一种所用的部分握手方法在发送侧与接收侧都使用脉冲信号。
1.部分握手同步方式1
2.部分握手同步方式2
总结

五、格雷码编码方式
六、异步FIFO

浙公网安备 33010602011771号