电平同步、脉冲同步、边沿同步

本文详细介绍了时钟域同步中的电平同步、边沿同步和脉冲同步方法,包括其工作原理、代码实现及仿真波形分析。针对不同时钟速度差异,探讨了各种同步策略的适用场景和限制,并指出了在快时钟到慢时钟域同步中的挑战和解决方案。

电平同步

电平同步一般用于由慢时钟域向快时钟域传输单bit信号,具体方法也很简单,就是打两拍
在这里插入图片描述
如上图所示,慢时钟域CLOCK1的单bit信号经过慢时钟打一拍后(这很重要),输出到快时钟域,快时钟域通过DFF打两拍,得到同步后的单bit信号。
核心代码

logic a_ff1;
logic a_ff2;
always@(posedge clkb,negedge rst_n)
if(~rst_n)
    {a_ff2,a_ff1}<=2'b00;
else
    {a_ff2,a_ff1}<={a_ff1,a};

边沿同步

即检测边沿,边沿同步具有以下两个特点:
1、适用于慢到快时钟(同电平同步)
2、使得输出的脉冲宽度和第二个时钟的宽度一致
核心代码

logic a_ff3;
logic a_ff2;
logic a_ff1;
always@(posedge clk2,negedge rst_n)
if(~rst_n)
    {a_ff3,a_ff2,a_ff1}<=3'b000;
else
    {a_ff3,a_ff2,a_ff1}<={a_ff2,a_ff1,a};
assign up_edge=a_ff2&~a_ff3;   //检测上升沿
assign down_edge=~a_ff2&a_ff3; //检测下降沿
assign edge=a_ff2^a_ff3;       //检测跳变沿 

脉冲同步

脉冲同步,即从快时钟域取出一个单时钟宽度脉冲,在慢时钟域建立新的单时钟宽度脉冲。具有以下两个特点:
1、可以实现快到慢时钟域
2、输入脉冲的最小间隔必须等于两个新时钟的时钟周期。
下面是脉冲同步电路的示意图
在这里插入图片描述
代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/18 21:37:17
// Design Name: 
// Module Name: demo
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module demo
(
    input logic clka,           //快时钟
    input logic clkb,           //慢时钟
    input logic rst,
    input logic pulse_a,        //快时钟域脉冲
    output logic pulse_b
);

logic data_a;                //电平信号
logic a_ff1;
logic a_ff2;
logic a_ff3;
//data_a
always_ff@(posedge clka,posedge rst)
if(rst)
    data_a<=0;
else 
    data_a<=data_a^pulse_a;                //也可以改为当检测到pulse_a脉冲时,data_a翻转
//
always_ff@(posedge clkb,posedge rst)
if(rst)
    {a_ff3,a_ff2,a_ff1}<=0;
else
    {a_ff3,a_ff2,a_ff1}<={a_ff2,a_ff1,data_a};
//
assign pulse_b=a_ff2^a_ff3;
endmodule


仿真波形
在这里插入图片描述
从上图中可以看到,当两个脉冲的间隔小于两个clkb周期时,会发生混叠,而间隔大于两个clkb周期时,能够正确检测。这也是脉冲同步法的一个缺陷。
另一个快时钟域到慢时钟域的方法是将信号展宽,例如,clka=10ns,clkb=25ns,那么我们需要将clka展宽三倍,才能保证被clkb采样到,具体的做法如下:

logic a_ff1;
logic a_ff2;
always@(posedge clka,posedge rst)
if(rst)
    {a_ff2,a_ff1}<=2'b00;
else
    {a_ff2,a_ff1}<={a_ff1,a};
assign wide_a=a|a_ff1|a_ff2;

但是这种方法仅限于两个时钟速度相差不是很大的情况下,因此也有局限性。
当然,当这两种方法都不太奏效时,最万能的方法就是通过握手来进行快时钟域到慢时钟域的单bit信号同步。

### 电平同步边沿同步脉冲同步的概念及其区别 #### 概念定义 **电平同步**是指在不时钟域之间传输一个稳定的电平信号(高电平或低电平)。该信号在目标时钟域中保持稳定,直到被确认接收完毕。电平同步通常用于慢时钟域到快时钟域的信号转换,因为快时钟域能够更容易地捕获慢信号的状态[^1]。 **边沿同步**用于检测信号的上升沿或下降沿,并将这些边沿信息传递到目标时钟域。边沿同步常用于慢时钟域到快时钟域的信号转换,且输出信号的脉冲宽度与目标时钟域的周期一致。这种同步方式可以确保边沿信息的准确传递,避免信号抖动或竞争条件[^2]。 **脉冲同步**则用于将一个单周期脉冲信号从快时钟域传递到慢时钟域。由于慢时钟域的周期较长,目标时钟可能无法直接捕获到短脉冲信号,因此需要通过脉冲同步机制来确保信号的正确传递。该方法适用于快时钟域到慢时钟域的信号转换,且输入信号为单周期脉冲的情况。 --- #### 工作原理 **电平同步**的工作原理是通过在目标时钟域中使用两级或三级触发器来对输入信号进行同步。由于电平信号是稳定的,因此可以在目标时钟域中保持足够长的时间以确保被正确采样。这种同步方式的核心在于避免亚稳态的发生,并确保信号在目标时钟域中被稳定捕获[^1]。 **边沿同步**则是通过在目标时钟域中对输入信号进行延迟采样,并通过异或(XOR)操作来检测边沿的变化。例如,通过将前一个采样值与当前采样值进行比较,可以判断是否发生了上升沿或下降沿。该机制确保了边沿信息能够在目标时钟域中被准确识别,并且输出信号的脉冲宽度与目标时钟一致[^2]。 **脉冲同步**的工作原理是将快时钟域中的单周期脉冲信号通过握手机制转换为慢时钟域中的有效信号。常见的实现方式包括使用FIFO(先进先出)缓冲器或握手信号(如请求/应答机制)。通过这种方式,即使目标时钟域的频率较低,也能确保脉冲信号不会丢失,并且在目标时钟域中被正确识别。 --- #### 区别分析 | 特性 | 电平同步 | 边沿同步 | 脉冲同步 | |--------------------|--------------------------|----------------------------|---------------------------| | **应用场景** | 慢时钟到快时钟 | 慢时钟到快时钟 | 快时钟到慢时钟 | | **信号类型** | 稳定电平信号 | 上升沿/下降沿检测 | 单周期脉冲信号 | | **输出特性** | 稳定输出 | 输出脉冲宽度与目标时钟一致 | 输出信号需通过握手机制 | | **同步机制** | 多级触发器同步 | 延迟采样+异或检测边沿 | 握手信号或FIFO缓冲 | | **主要目的** | 避免亚稳态 | 检测边沿变化 | 保证脉冲信号不丢失 | --- #### 示例代码 以下是一个实现**边沿同步**的Verilog代码示例: ```verilog module edge_sync ( input clk2, input rst_n, input a, output reg up_edge, output reg down_edge, output edge ); logic a_ff1, a_ff2, a_ff3; always @(posedge clk2 or negedge rst_n) begin if (!rst_n) begin {a_ff3, a_ff2, a_ff1} <= 3'b000; end else begin {a_ff3, a_ff2, a_ff1} <= {a_ff2, a_ff1, a}; end end assign up_edge = a_ff2 & ~a_ff3; // 上升沿检测 assign down_edge = ~a_ff2 & a_ff3; // 下降沿检测 assign edge = a_ff2 ^ a_ff3; // 跳变沿检测 endmodule ``` --- #### 总结 电平同步边沿同步脉冲同步是跨时钟域信号传输中常见的三种同步机制。它们各自适用于不的应用场景,并通过不的技术手段确保信号在目标时钟域中被正确采样和处理。理解它们的原理和区别对于设计可靠的同步电路具有重要意义。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值