单bit脉冲信号跨时钟域处理——展宽信号 + 握手协议
对于单比特数据,在慢时钟域到快时钟域
的数据传输中,可以使用两级触发器
进行同步,以此来解决跨时钟域问题。
但在快时钟域到慢时钟域的数据传输中,只有当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脉冲信号跨时钟域处理——展宽信号 + 握手协议相关推荐
- 跨时钟域信号传输问题之握手同步
所谓握手,即通信双方使用了专用控制信号进行状态指示,这个控制信号既有发送域给接受域的也有接收域给控制域的,有别于单向控制信号方式. 使用握手协议方式处理跨时钟域数据传输时,只需要对双方的 ...
- 【数字IC基础】跨时钟域(CDC,Clock Domain Crossing)
文章目录 一.什么是跨时钟域? 二.跨时钟域传输的问题? 2.1 亚稳态(单bit:两级D触发器(双DFF)) 2.2 数据收敛(多bit亚稳态)(格雷码编码.握手协议.异步FIFO.DMUX) 2. ...
- 同步电路与跨时钟域电路设计1——单bit信号的跨时钟域传输(同步器)
同步电路与全局异步电路 同步电路 同步电路的定义 即电路中的所有受时钟控制的单元(如触发器Flip Flop.寄存器Register),全部由一个统一的全局时钟控制. 例子: 两个触发器都受同一个时钟 ...
- FPGA知识点汇总(verilog、数字电路、时序分析、跨时钟域、亚稳态)
FPGA十分擅长同时做简单且重复的工作(并行计算)人工智能就有许多重复性.需要并行计算的工作如模式识别.图像处理,在通信领域,FPGA的低延时.可编程.低功耗的特点 开发流程:RTL设计,仿真验证,逻 ...
- 跨时钟域(CDC)设计方法之多bit信号篇(一)
写在前面 本博客所有CDC相关的内容:跨时钟域(CDC)设计汇总 1.跨时钟域处理方法的分类 信号的跨时钟域传输可能会引入亚稳态问题,那么就需要想办法对其进行处理,从而降低亚稳态发生的概率(即提高MT ...
- 跨时钟域方法(同步器、异步FIFO、边沿检测器、脉冲同步器、同步FIFO)
目录 1.跨时钟域方法的原因 2.跨时钟处理的两种思路 3.跨时钟域分类--单比特信号跨时钟 3.1.1慢时钟---快时钟.(满足三边沿准则,有效事件可以被安全采样) 3.1.2慢时钟---快时钟.( ...
- 3位格雷码的顺序编码_一种优化格雷码编码方式实现跨时钟域的装置的制作方法...
本发明属于信号处理技术领域,尤其是涉及一种优化格雷码编码方式实现跨时钟域的装置. 背景技术: 随着时间的推移,集成电路行业发展至今,已有类似如intel这样先进的foundry,提出迈入10nm制程的 ...
- 控制信号(单脉冲信号)的跨时钟域传输问题
控制信号(单脉冲信号)的跨时钟域传输问题存在两种情况,一种是从快时钟域到慢时钟域传输,如果用慢时钟强行采样快时钟域内的控制信号,可能存在采样不到信号的情况,而且很大概率采不到信号:另一种情况是从慢时钟 ...
- 脉冲信号转电平信号(如何展宽一个信号,跨时钟域中快时域到慢时域)
在跨时钟域处理单bit信号时,快时钟域的信号由于频率较快,信号的脉宽如果不足时,不能被慢时钟采样到,因此需要将快时钟产生的信号进行展宽,然后再进行打两拍来处理亚稳态. 设脉冲信号为pulse: 假设在 ...
最新文章
- R语言dplyr包对数据进行超前或者之后处理(lead、lag)实战
- Message LongText(消息的详细长文本)
- 实现div在固定区域跟随鼠标移动点击拖动而产生的变化
- 计算机桌面显示本地磁盘c,开机自动打开本地磁盘C的解决办法
- 优化技巧:提前if判断帮助CPU分支预测
- NSCharacterSet 去除NSString中的空格
- SpringMVC中@RequestMapping参数设置
- pytorch和python一样吗_PyTorch可以和TensorFlow一样快,有时甚至比TensorFlow更快了?...
- esp连接服务器的协议,【零知ESP8266教程】WIFI TCP协议通信 TCP服务器示例
- python3.7爬取墨菲定律保存在本地txt
- jQuery插件-Slider轮播图
- GBase 8a Mpp Cluster集群产品性能优化篇之行列混存优化
- OK3399设置GPIO默认低电平
- java文件存储系统_分布式小文件存储系统
- 1--MySQL基础知识内容
- python爬取付费直播的视频_教你用20行代码爬取直播平台弹幕(附源码)
- python版 1032 挖掘机技术哪家强 (20分)
- MOOS-ivp 多社区 系列停更
- 核高基项目应该支持谁?
- 系出阿里“同门”的盒马鲜生要怎么走?