控制信号(单脉冲信号)的跨时钟域传输问题
控制信号(单脉冲信号)的跨时钟域传输问题存在两种情况,一种是从快时钟域到慢时钟域传输,如果用慢时钟强行采样快时钟域内的控制信号,可能存在采样不到信号的情况,而且很大概率采不到信号;另一种情况是从慢时钟域到快时钟域的控制信号传输问题,这种情况,快时钟一定能采样到慢时钟域内的控制信号,但是可能出现亚稳态问题;
下面针对这两种情况进行处理:
快时钟到慢时钟
有两个时钟域A和B,脉冲a在时钟域A中保持一个时钟周期,现要把脉冲A同步到时钟域B中,试用D触发器、与门、或门、非门以及异或门画出电路图实现这个功能。(某发科IC现场笔试题)
先考虑从快时钟域到慢时钟域进行信号传输的问题(脉冲宽度小于一个时钟):
先通过Verilog来实现:(参考链接)
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)beginif(rst_n == 1'b0)beginsignal_a <= 1'b0;endelse if(pulse_ina == 1'b1)beginsignal_a <= 1'b1;endelse 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)beginif(rst_n == 1'b0)beginsignal_b <= 1'b0;endelse beginsignal_b <= signal_a;end
end
//-------------------------------------------------------
//在clkb下生成脉冲信号和输出信号
always @(posedge clkb or negedge rst_n)beginif(rst_n == 1'b0)beginsignal_b_r <= 'b0;signal_b_rr <= 'b0;endelse beginsignal_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)beginif(rst_n == 1'b0)beginsignal_a_r <= 'b0;signal_a_rr <= 'b0;endelse beginsignal_a_rr <= signal_a_r;signal_a_r <= signal_b_rr;end
end
endmodule
本题需要输出的信号其实是pulse_outb,这个信号在时钟域B中持续了一个时钟,通过边沿检测实现的。
经过Quartus生成的RTL原理图如下:
经过Vivado生成的RTL原理图如下:
可见,大同小异。
可是到这里并没有结束,这种电路图和题目要求的还不一样,人家没要求用多路选择器呀,所以需要将反馈后的多路选择器换成需要的器件。
参考图片来源
需要画出的原理图如下:
上面电路的实现,是快时钟域到慢时钟域的问题,我们通过反馈信号进行控制信号的延时来让慢时钟域充分采样得到控制信号,本质上是也是对控制信号的延时。这个延时的具体实现,需要对控制信号的产生逻辑进行处理,来满足延时的要求。
为什么上面的电路能实现,我们来仿真看看:
pulse_ina为快时钟域的控制信号,signal_a为pulse_ina的脉冲展宽信号,signal_b为慢时钟对脉冲展宽信号的采样,signal_b_r,signal_b_rr分别为signal_b的延迟,一拍,二拍。
signal_a_r为反馈信号,同理signal_a_rr是最直接的反馈信号,它决定pulse_ina的脉冲展宽的停止。
pulse_outb为慢时钟的控制脉冲输出,也是最后需要的结果。
给出测试文件:
`timescale 1ns/1psmodule CLK_Fast2Slow_TB();reg clka;reg clkb;reg rst_n;reg pulse_ina;wire pulse_outb;wire signal_outb;initial beginclka = 0;forever#2 clka = ~clka;endinitial beginclkb = 0;forever #4 clkb = ~clkb;endinitial beginrst_n = 0;pulse_ina = 0;# 10 rst_n = 1;#4pulse_ina = 1;#4pulse_ina = 0;endSync_Pulse INST_CLK_Fast2Slow(.clka(clka),.clkb(clkb),.rst_n(rst_n),.pulse_ina(pulse_ina),.pulse_outb(pulse_outb),.signal_outb(signal_outb));endmodule
慢时钟域到快时钟域
在慢时钟域到快时钟域传输的问题则不必如此麻烦,因为快时钟域总能采样到慢时钟域的脉冲信号,唯一需要注意的是,采样的信号会出现亚稳态的问题,如快时钟域信号的上升沿恰好对应慢时钟域脉冲的变化位置,导致建立时间不满足。
为了解决这个问题,我们只需要用快时钟对慢时钟域脉冲进行两级寄存器同步即可,这样基本就解决了亚稳态的问题了。
参考代码
module Sync_Pulse(input clkb,input rst_n,input pulse_ina,output pulse_outb);reg signal_r;reg signal_rr;always @ (posedge clkb or negedge rst_n)if (!rst_n) beginsignal_r <= 1'b0;signal_rr <= 1'b0;end else beginsignal_r <= pulse_ina;signal_rr <= signal_r;endassign pulse_outb = signal_rr;
endmodule
除了上面的参考链接外,在加几个可以参考:
https://mp.weixin.qq.com/s/QoLAV2NBi4_8mQ5bJ_4MAw
控制信号(单脉冲信号)的跨时钟域传输问题相关推荐
- 单bit控制信号的跨时钟域传输快到慢-----结绳法
本文对读到的两篇文章进行补充 文1:介绍了慢到快,快到慢的方法汇总FPGA--浅谈跨时钟域_three_yanlili的博客-CSDN博客_跨时钟域本篇文章仅用于个人学习,如有雷同,我抄他的.http ...
- 同步电路与跨时钟域电路设计1——单bit信号的跨时钟域传输(同步器)
同步电路与全局异步电路 同步电路 同步电路的定义 即电路中的所有受时钟控制的单元(如触发器Flip Flop.寄存器Register),全部由一个统一的全局时钟控制. 例子: 两个触发器都受同一个时钟 ...
- 跨时钟域传输和Verilog代码
文章目录 基本概念 一.单bit信号 1.慢时钟域信号同步到快时钟域 2.快时钟域信号同步到慢时钟域 3.结绳法处理单bit信号跨时钟域 二.多bit控制信号跨时钟域同步 三.多bit数据流跨时钟域同 ...
- FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输
博文目录 写在前面 正文 FPGA或ASIC中的传播延迟 建立和保持时间是什么? 建立和保持时间与传播延迟和时钟频率有何关系? 如果违反建立和保持时间会发生什么? FPGA中的亚稳定是什么? 亚稳态何 ...
- 跨时钟域传输——结绳法(芯动力mooc)
一.结绳法 1.原理 将快时钟信号的脉冲周期延长,等到慢时钟同步采样后再"解绳",还原为原来的脉冲周期宽度(三种结绳法) 2.结绳法小结 关键:将单脉冲延长 优点:可以解决快时钟域 ...
- 跨时钟域问题(二)(单bit信号跨时钟域 1. 电平同步器 2. 边沿同步器 3. 脉冲检测器)
- 漫谈时序设计(1)跨时钟域是设计出来的,而非约束出来的!
目录 亚稳态(Metastability) 单比特信号同步 慢时钟域到快时钟域 快时钟域到慢时钟域 多比特信号同步 Handshake Mechanism 异步FIFO 参考链接 写在最后 这篇博文在 ...
- 跨时钟域处理方法总结
目录 跨时钟域处理 1. 异步时序定义 2. 亚稳态 3. 同步策略 方法一:双锁存器 方法二:握手信号(结绳法) 方法三:异步双口RAM+格雷码 跨时钟域处理 为了彻底理解跨时钟域问题,多方搜集资料 ...
- 【数字IC基础】跨时钟域(CDC,Clock Domain Crossing)
文章目录 一.什么是跨时钟域? 二.跨时钟域传输的问题? 2.1 亚稳态(单bit:两级D触发器(双DFF)) 2.2 数据收敛(多bit亚稳态)(格雷码编码.握手协议.异步FIFO.DMUX) 2. ...
最新文章
- 研发效能改进的实践方法
- R构建列联表(Contingency Table or crosstabs)
- java聊天程序源代码_java聊天程序源代码
- 手机经常提示找不到服务器,经常出现找不到服务器是什么原因?什么网也打 – 手机爱问...
- sql server 之函数小技巧 整数类型为空是用空字符串替代实现
- 【面向对象】对象模型的七要素
- day10-包的定义和内部类
- Aizu ITP2_6_A 二分
- 解决Ubuntu下博通网卡驱动问题
- 如何制作流程图?流程图制作软件哪个好
- 自学云计算进度(2)-Linux基础命令
- 打上花火(打ち上げ花火) --罗马音歌词中文谐音歌词
- 微信云服务器发长视频朋友圈,今天才知道,微信朋友圈还能发5分钟长视频,超简单,一看就会...
- 做产品和运营必须深参这5大人性弱点
- tensorRT教程——tensor RT OP理解(实现自定义层,搭建网络)
- 瓜子二手车 翻页 csv
- 河南科技大学计算机信息安全技术考试,河南科技大学军事理论试题4
- 数据可视化工具(QBarSeries柱状图)
- oj 喵帕斯之天才算数少女
- Hadoop | MapReduce之 WordCount词频统计
热门文章
- windows 7作为微软对抗Google的秘密武器
- 在拓扑图上做标准ACL和扩展ACL(期末考试)
- mysql怎么测试事物_mysql事务简单测试
- python输入exit怎么退出了_Python 中的 exit() 和 sys.exit()
- python读取文件夹图片_读取文件夹里的图片,并且与标签对应
- 调用父级方法_通信:找到任意组件实例的findComponents系列方法,5个终极方案
- php 检测是否是微信浏览器,php判断是否是微信浏览器和是否是移动端代码
- linux文件删除指定内容,Linux bash删除文件中含“指定内容”的行功能示例
- 第十六届全国大学生智能车竞赛组委会第三次扩大会议
- 2020年人工神经网络第二次作业-参考答案第一题