IC常用知识6-信号跨时钟同步
2021/4/16 10:55:33
本文主要是介绍IC常用知识6-信号跨时钟同步,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1. 单bit信号跨时钟域传输
- 1.1 电平同步器
- 1.2 边沿检测器
- 1.3 脉冲同步器
- 1.4 电平延展-快到慢
- 2. 多bit信号跨时钟域传输
- 2.1. 握手
- 2.2. 异步FIFO
- 2.3 使用异步双口RAM
- 2.4 DMUX
- 3. 相关题目
- 3.1 设计一个脉冲检测器
- 3.2 介绍一下各种同步设计的优缺点
- 3.3相关选择题
1. 单bit信号跨时钟域传输
按照信号用途将单bit跨时钟同步器分为:电平同步器,边沿检测器和脉冲同步器。
小结:
- 单bit信号传输我们要考虑它的实际用途,比如是串行数据信号,那么我们就需要知道比特率才能采样,如果是控制信号,我们需要是通过电平还是时钟沿进行控制。
- 单bit快到慢传输,快时钟需要时钟拓展;慢到快则直接打两拍的效果是电平同步
1.1 电平同步器
所谓电平同步器,顾名思义是将有用的电平信号同步至另一时钟域,电平信号需要在原时钟域保持至少两个时钟周期。其同步方法是将信号经过两个D触发器,即打两拍
1.2 边沿检测器
边沿检测器的原理是在电平同步器的输出加一个触发器(第一级可能存在亚稳态,利用二三级触发器结果判断信号是上升沿还是下降沿)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HyxsBLF7-1618539128392)(https://upload-images.jianshu.io/upload_images/9246563-fb1305938ad82022.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
1.3 脉冲同步器
脉冲同步器的作用是检测原时钟域的脉冲并在新时钟域上产生一个新的脉冲
以上是较为简单的脉冲同步器,此脉冲同步器对于某些情况下是不可靠的,若要可靠的完成脉冲的同步,可以引入握手机制。具体的握手机制如下:
若源时钟域脉冲来临,且同步器处于空闲状态,则向同步器发出同步请求;
同步请求信号到达目的时钟域,目的时钟域产生应该信号表示同步完成;
源时钟域检测到应答信号后清楚请求信号;
目标时钟域检测到源时钟域请求信号清除后清除应答信号;
同步器回到空闲状态,进行下一个脉冲的同步;
1.4 电平延展-快到慢
CLR高电平有效
module Sync_Pulse( input clka, input clkb, input rst_n, input pulse_ina, output pulse_outb, output signal_outb ); //------------------------------------------------------- reg signal_a; reg signal_b; reg signal_b_r; reg signal_b_rr; reg signal_a_r; reg signal_a_rr; //------------------------------------------------------- //在clka下,生成展宽信号signal_a always @(posedge clka or negedge rst_n)begin if(rst_n == 1'b0)begin signal_a <= 1'b0; end else if(pulse_ina == 1'b1)begin signal_a <= 1'b1; end else if(signal_a_rr == 1'b1) signal_a <= 1'b0; else signal_a <= signal_a; end //------------------------------------------------------- //在clkb下同步signal_a always @(posedge clkb or negedge rst_n)begin if(rst_n == 1'b0)begin signal_b <= 1'b0; end else begin signal_b <= signal_a; end end //------------------------------------------------------- //在clkb下生成脉冲信号和输出信号 always @(posedge clkb or negedge rst_n)begin if(rst_n == 1'b0)begin signal_b_r <= 'b0; signal_b_rr <= 'b0; end else begin signal_b_rr <= signal_b_r; signal_b_r <= signal_b; end end assign pulse_outb = ~signal_b_rr & signal_b_r; assign signal_outb = signal_b_rr; //------------------------------------------------------- //在clka下采集signal_b_rr,生成signal_a_rr用于反馈拉低signal_a always @(posedge clka or negedge rst_n)begin if(rst_n == 1'b0)begin signal_a_r <= 'b0; signal_a_rr <= 'b0; end else begin signal_a_rr <= signal_a_r; signal_a_r <= signal_b_rr; end end endmodule
两种电路图的功能一致。在参考链接2中也有一个设计,但是设计复杂,优点是每个触发器采取的是时钟触发。
参考链接:
https://blog.csdn.net/qq_21842097/article/details/88657046
https://blog.csdn.net/Reborn_Lee/article/details/96714098
https://www.cnblogs.com/iclearner/p/6579754.html
2. 多bit信号跨时钟域传输
2.1. 握手
2.2. 异步FIFO
2.3 使用异步双口RAM
2.4 DMUX
由图可见,DMUX有一个MUX和一个触发器构成,在数据输入使能有效的时候采样端口信号,数据输入使能无效的时候数据保持。在VCS综合中会综合成为低功耗设计,增加一个门控电路。
小结:DMUX的原理类似于脉冲检测器
3. 相关题目
3.1 设计一个脉冲检测器
根据这个时序图,d_req是根据d_in产生的,根据d_ack截止的。d_req从s到d,再从d_到s变为ack。
3.2 介绍一下各种同步设计的优缺点
- 双触发器同步法:它的根本目的是为了减少亚稳态的发生,它有很多局限性,比如快时钟向慢时钟传递有可能采样不到
- 双触发器+反馈回路:它的目的就是时钟展宽,然后在进行同步,它的缺点是如果源时钟数据变化太快,展宽后会被覆盖
- 握手法:其实单bit握手的电路就是法2,因此它的缺点一样是数据不能变化太快
- 异步FIFO:它都适用,目前没发现缺点。
3.3相关选择题
- 异步时钟数据采样方法错误的是()D
A 单bit高频时钟脉冲展宽后给低频时钟进行采样
B 握手信号后再采样
C 使用FIFO隔离进行多bit采样
D 高频时钟直接采样低频时钟的多bit数据 - 以下不能对多bit的数据总线的时钟异步处理的是()C
A. DMUX synchronizer
B. Gray_code
C. 寄存器同步
D. AFIFO - 高频时钟域的总线数据(每时钟周期都变化)传递给低频时钟域时,哪种同步方式正确()B
A. 使用握手信号进行同步
B. 使用异步FIFO
C. 使用同步FIFO
D. 使用打两拍进行同步
解析:握手的使用缺陷是数据不能变化太快,每次握手需要等待一定的时钟周期 - 对于双触发器异步处理电路说法正确的是 BCD
A. 对任何单bit信号都可以用此电路
B. 各个寄存器之间不能有组合逻辑
C. 需要考虑两个时钟的频率和信号的宽度
D. 无法绝对避免亚稳态 - 下面哪种异步处理的方法完全正确()C
A. 在对数据总线进行异步处理前转化为格雷码,然后打拍处理,同步后,再转化成源码
B. 在模块A,有两个控制信号通过正确的同步方法把两个信号进行同步到B时钟域,然后再在B时钟域对两个信号进行逻辑运算
C. 实现异步FIFO时,在地址穿越时钟域前转化为Gray-Code
D. 单bit信号在跨越时钟域前不需要寄存器输出
解析:数据总线是乱变的,而地址总线是递增的,而gray码在相邻状态机之间的跳变只有一位发生了变化 - 下列跨时钟域设计存在的问题是()B
A. FIFO设计地址跨时钟域,可以通过格雷码转换+打2拍的方式
B. 希望得到C=A&B,AB在clkx域,c在clky域,则单独用clky打A和B2拍产生Adly2, Bdly2,然后在进行组合逻辑
C. 单bit跨时钟域,在目的时钟域打3拍后使用,打拍过程中不带组合逻辑
D. 一组数据总线跨时钟域,如果数据有足够的持续不便时间,可以通过握手机制实现 - 150M时钟域的多bit信号A[63:0]需要同步到50MHz时钟域,可能使用的同步方式有()ABD
A. DMUX
B. 双向握手
C. 打拍
D. 异步FIFO - 假设一个3bit计数器(计数范围为0-6)工作在38M时钟域下,要把此计数器的值传递到100M的时钟域,以下方式不正确的是()C
A. 锁存+握手
B. 使用DMUX电路
C. 使用格雷码
D. 使用异步FIFO
解析:虽然格雷码可以裁剪,但它的要求是状态数必须是偶数,0-6有7个状态是不满足条件的。
以下关于跨时钟域信号处理描述不正确的是()
A. 并不是所有的跨时钟域信号都需要做异步处理
B. 当单比特脉冲信号需要跨时钟域进行同步时,只需在目标时钟将此信号同步两拍即可
C. 对与跨时钟阈的数据传输,通常可以采用异步FIFO的方法
D. 对于跨时钟域的多比特信号传输,可以采用握手信号来处理
这篇关于IC常用知识6-信号跨时钟同步的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03如何安装 App 并连接到飞牛 NAS?-icode9专业技术文章分享
- 2024-10-03如何安装飞牛 TV 并连接到影视服务器?-icode9专业技术文章分享
- 2024-10-03如何在PVE和ESXI上安装飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS安装系统异常情况处理-icode9专业技术文章分享
- 2024-10-03飞牛NAS如何创建存储空间?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS硬盘会自动休眠吗?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何安装飞牛影视和创建媒体库?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何为家人朋友开通影视账号?-icode9专业技术文章分享