电平同步
电平同步一般用于由慢时钟域向快时钟域传输单bit信号,具体方法也很简单,就是打两拍。
如上图所示,慢时钟域CLOCK1的单bit信号经过慢时钟打一拍后(这很重要),输出到快时钟域,快时钟域通过DFF打两拍,得到同步后的单bit信号。
核心代码
复制代码
1
2
3
4
5
6
7
8
9logic 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、使得输出的脉冲宽度和第二个时钟的宽度一致
核心代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13logic 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、输入脉冲的最小间隔必须等于两个新时钟的时钟周期。
下面是脉冲同步电路的示意图
代码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53`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采样到,具体的做法如下:
复制代码
1
2
3
4
5
6
7
8
9
10logic 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信号同步。
最后
以上就是贪玩蜻蜓最近收集整理的关于电平同步、脉冲同步、边沿同步电平同步边沿同步脉冲同步的全部内容,更多相关电平同步、脉冲同步、边沿同步电平同步边沿同步脉冲同步内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复