对于单比特数据,在慢时钟域到快时钟域的数据传输中,可以使用两级触发器进行同步,以此来解决跨时钟域问题。

但在快时钟域到慢时钟域的数据传输中,只有当in 在很长一段时间内为1或0时,才能确保一定可以被clkb采样到,从而才能用两级触发器同步的方式来处理;
如果快时钟域的输入脉冲信号in的宽度小于慢时钟的周期,那么慢时钟很可能无法采样到(如下图),为了防止漏采样情况的出现,采用展宽信号的方式进行处理。

方法:
1、在clka快时钟域中,对其中的脉冲信号 pulse_ina 进行展宽 signal_a —— 通过握手来确定展宽信号时候什么拉低

注:在握手协议中,展宽信号相当于req,signal_a_r2相当于应答ack信号,来回应展宽信号req可以拉低了。

2、有了展宽信号signal_a 后,将其同步到clkb慢时钟域中(打两拍以防止亚稳态),最终得到signal_b_r1。(通过上升沿检测,取一个周期的pulse_outb,此时则完成了数据从快时钟到慢时钟的传递)

到此还没结束,因为握手任务还没完成,展宽信号的拉低(下降沿)还没确定

3、将clkb慢时钟域中的signal_b_r1信号,同步到clka快时钟域中,以此作为快时钟域的反馈回应,也就是步骤1展宽信号拉低的使能。

4、将clkb慢时钟域采样到的脉冲展宽信号 pulse_outb 输出。

5、将clkb慢时钟域采样到的展宽信号 signal_outb 输出,等于signal_b_r1。


verilog代码:

module Sync_Pulse
(input   clka,//快时钟input   clkb,//慢时钟input   Rst_n,input   Pulse_a,      //快时钟域中的脉冲信号output  pulse_outb,     //脉冲信号output  signal_outb     //电平信号
);reg signal_a;
reg signal_b;
reg signal_b_r1;
reg signal_a_r1;
reg signal_a_r2;//展宽信号
always @ (posedge clka or negedge Rst_n)if(!Rst_n)signal_a <= 1'b0;else if(Pulse_a)signal_a <= 1'b1;else if(signal_a_r2)signal_a <= 1'b0;elsesignal_a <= signal_a;//将展宽信号同步到慢时钟域,两拍
always @ (posedge clkb or negedge Rst_n)if(!Rst_n) beginsignal_b <= 1'b0;signal_b_r1 <= 1'b0;endelse beginsignal_b <= signal_a;signal_b_r1 <= signal_b;end//将慢时钟域采集到的展宽信号,同步到快时钟域中
//作为展宽信号结束的一个反馈always @ (posedge clka or negedge Rst_n)if(!Rst_n) beginsignal_a_r1 <= 1'b0;signal_a_r2 <= 1'b0;endelse beginsignal_a_r1 <= signal_b_r1;signal_a_r2 <= signal_a_r1;end    //检测上升沿,得到慢时钟域的输出脉冲信号assign  pulse_outb =  signal_b & ~signal_b_r1;//输出电平信号,慢时钟域的展宽信号assign  signal_outb =  signal_b_r1;endmodule

tb测试代码:
tb中快时钟域为100Mhz,慢时钟域为50Mhz的展宽信号测试与波形分析,以此和上面手画波形图进行分析

`timescale 1ns/1ns
`define clock_period 20module Sync_Pulse_tb;reg  clka = 1;//快时钟reg  clkb = 1;//慢时钟reg  Rst_n;reg  Pulse_a;      //快时钟域中的脉冲信号wire  pulse_outb;    //脉冲信号wire  signal_outb;     //电平信号Sync_Pulse u1(.clka(clka),//快时钟.clkb(clkb),//慢时钟.Rst_n(Rst_n),.Pulse_a(Pulse_a),      //快时钟域中的脉冲信号.pulse_outb(pulse_outb),     //脉冲信号.signal_outb(signal_outb)     //电平信号
);always #(`clock_period/4) clka = ~clka;  //时钟周期是10ns,100MHZalways #(`clock_period/2) clkb = ~clkb;  //时钟周期是20ns,50MHZinitial beginRst_n=0;Pulse_a=0;#(`clock_period*20)Rst_n=1;#(`clock_period*5)Pulse_a = 1 ;#(`clock_period/2) Pulse_a = 0 ;#(`clock_period*30)$stop;endendmodule

波形仿真:


给出如下题目:300Mhz到100Mhz,考察快时钟域到慢时钟域的单时钟脉冲信号传输。


不同在于clka和clkb,仅需要修改tb中生成的时钟,其余都相同,为保证精度,选用ps单位。

`timescale 1ps/1psalways #1666  clka = ~clka;  //时钟周期是3ns,300MHZalways #5000 clkb = ~clkb;  //时钟周期是10ns,100MHZ

波形如下,和之前同样分析即可。

总结:

展宽的目的?
防止漏采样。快时钟域中脉冲信号宽度可能小于慢时钟域的周期,因为慢时钟域可能采不到该脉冲信号。

展宽到什么时候?
首先在快时钟域进行展宽,将输入脉冲信号拉高,下降沿需要重点分析,下降沿需要根据 应答信号signal_a_r2 来确定。

由于快时钟域的展宽信号到了慢时钟域中,防止亚稳态打两拍,此时即采样到了慢时钟域中的展宽信号 signal_b_r1,然后即可告知快时钟域,我已经采样到了脉冲信号,于是将 signal_b_r1,同步到快时钟域中(打两拍以防止亚稳态),来作为一个反馈应答signal_a_r2,用该信号告知请求展宽可以拉低了,得到展宽信号下降沿。

最终得到的信号?
慢时钟域的脉冲信号:对在慢时钟域打拍的两个展宽信号进行上升沿检测,即可得到慢时钟域的脉冲信号。
慢时钟域的电平信号:也就是signal_b_r1。


如有错误请指正!

单bit脉冲信号跨时钟域处理——展宽信号 + 握手协议相关推荐

  1. 跨时钟域信号传输问题之握手同步

    所谓握手,即通信双方使用了专用控制信号进行状态指示,这个控制信号既有发送域给接受域的也有接收域给控制域的,有别于单向控制信号方式.        使用握手协议方式处理跨时钟域数据传输时,只需要对双方的 ...

  2. 【数字IC基础】跨时钟域(CDC,Clock Domain Crossing)

    文章目录 一.什么是跨时钟域? 二.跨时钟域传输的问题? 2.1 亚稳态(单bit:两级D触发器(双DFF)) 2.2 数据收敛(多bit亚稳态)(格雷码编码.握手协议.异步FIFO.DMUX) 2. ...

  3. 同步电路与跨时钟域电路设计1——单bit信号的跨时钟域传输(同步器)

    同步电路与全局异步电路 同步电路 同步电路的定义 即电路中的所有受时钟控制的单元(如触发器Flip Flop.寄存器Register),全部由一个统一的全局时钟控制. 例子: 两个触发器都受同一个时钟 ...

  4. FPGA知识点汇总(verilog、数字电路、时序分析、跨时钟域、亚稳态)

    FPGA十分擅长同时做简单且重复的工作(并行计算)人工智能就有许多重复性.需要并行计算的工作如模式识别.图像处理,在通信领域,FPGA的低延时.可编程.低功耗的特点 开发流程:RTL设计,仿真验证,逻 ...

  5. 跨时钟域(CDC)设计方法之多bit信号篇(一)

    写在前面 本博客所有CDC相关的内容:跨时钟域(CDC)设计汇总 1.跨时钟域处理方法的分类 信号的跨时钟域传输可能会引入亚稳态问题,那么就需要想办法对其进行处理,从而降低亚稳态发生的概率(即提高MT ...

  6. 跨时钟域方法(同步器、异步FIFO、边沿检测器、脉冲同步器、同步FIFO)

    目录 1.跨时钟域方法的原因 2.跨时钟处理的两种思路 3.跨时钟域分类--单比特信号跨时钟 3.1.1慢时钟---快时钟.(满足三边沿准则,有效事件可以被安全采样) 3.1.2慢时钟---快时钟.( ...

  7. 3位格雷码的顺序编码_一种优化格雷码编码方式实现跨时钟域的装置的制作方法...

    本发明属于信号处理技术领域,尤其是涉及一种优化格雷码编码方式实现跨时钟域的装置. 背景技术: 随着时间的推移,集成电路行业发展至今,已有类似如intel这样先进的foundry,提出迈入10nm制程的 ...

  8. 控制信号(单脉冲信号)的跨时钟域传输问题

    控制信号(单脉冲信号)的跨时钟域传输问题存在两种情况,一种是从快时钟域到慢时钟域传输,如果用慢时钟强行采样快时钟域内的控制信号,可能存在采样不到信号的情况,而且很大概率采不到信号:另一种情况是从慢时钟 ...

  9. 脉冲信号转电平信号(如何展宽一个信号,跨时钟域中快时域到慢时域)

    在跨时钟域处理单bit信号时,快时钟域的信号由于频率较快,信号的脉宽如果不足时,不能被慢时钟采样到,因此需要将快时钟产生的信号进行展宽,然后再进行打两拍来处理亚稳态. 设脉冲信号为pulse: 假设在 ...

最新文章

  1. R语言dplyr包对数据进行超前或者之后处理(lead、lag)实战
  2. Message LongText(消息的详细长文本)
  3. 实现div在固定区域跟随鼠标移动点击拖动而产生的变化
  4. 计算机桌面显示本地磁盘c,开机自动打开本地磁盘C的解决办法
  5. 优化技巧:提前if判断帮助CPU分支预测
  6. NSCharacterSet 去除NSString中的空格
  7. SpringMVC中@RequestMapping参数设置
  8. pytorch和python一样吗_PyTorch可以和TensorFlow一样快,有时甚至比TensorFlow更快了?...
  9. esp连接服务器的协议,【零知ESP8266教程】WIFI TCP协议通信 TCP服务器示例
  10. python3.7爬取墨菲定律保存在本地txt
  11. jQuery插件-Slider轮播图
  12. GBase 8a Mpp Cluster集群产品性能优化篇之行列混存优化
  13. OK3399设置GPIO默认低电平
  14. java文件存储系统_分布式小文件存储系统
  15. 1--MySQL基础知识内容
  16. python爬取付费直播的视频_教你用20行代码爬取直播平台弹幕(附源码)
  17. python版 1032 挖掘机技术哪家强 (20分)
  18. MOOS-ivp 多社区 系列停更
  19. 核高基项目应该支持谁?
  20. 系出阿里“同门”的盒马鲜生要怎么走?

热门文章

  1. 腾讯云服务器免费证书验证,免费申请腾讯云https证书方法
  2. 华为数通笔记-ospf扩展
  3. DataMining学习2_数据挖掘十大经典算法
  4. Gradle安装步骤
  5. iNFTnews|沉浸式人工智能可能会重塑一切
  6. 关于保险,我把近期的研究成果都免费和盘托出
  7. vue 签署文件两张图合并成一张图 h5页面转换成图片并长按保存在本地
  8. MDK报错:SVDConv returned with an error
  9. I hate it (线段树)
  10. 如何避免FFT(matlab)计算傅里叶级数与傅里叶变换时存在的混叠(aliasing)和泄露(leakage)问题