跨时钟域信号处理——专用握手信号
下图是一个基本的握手通信方式。所谓握手,意即通信双方使用了专用控制信号进行状态指示。这个控制信号既有发送域给接收域的,也有接收域给发送域的,有别于前面的单向控制信号检测方式
使用握手协议方式处理跨时钟域数据传输,只需要对双方的握手信号(req和ack)分别使用脉冲检测方法进行同步。在具体实现中,假设req、ack、data总线在初始化时都处于无效状态,发送域先把数据放入总线,随后发送有效的req信号给接收域。接收域在检测到有效的req信号后锁存数据总线,然后回送一个有效的ack信号表示读取完成应答。发送域在检测到有效ack信号后撤销当前的req信号,接收域在检测到req撤销(需要进行边沿检测)后也相应撤销ack信号,此时完成一次正常握手通信。此后,发送域可以继续开始下一次握手通信,如此循环。该方式能够使接收到的数据稳定可靠,有效的避免了亚稳态的出现,但控制信号握手检测会消耗通信双方较多的时间。以上所述的通信流程如下图所示:
module handshake(input clk, //50MHZ时钟input rst_n, //复位信号input req, //数据发送请求信号input [15:0]data_in, //数据输入output reg ack, //应答信号output [15:0]data_out
);reg req1,req2,req3; //req输入同步信号
reg [15:0]data_in_r; //输入数据寄存器
wire pos_req1,pos_req2;
//---------通过三级寄存器同步异步输入信号req--------
always@(posedge clk or negedge rst_n)beginif(!rst_n)beginreq1 <= 1'b0;req2 <= 1'b0;req3 <= 1'b0;endelse beginreq1 <= req;req2 <= req1;req3 <= req2;end
end
//--------------检测req1、req2的上升沿---------------
assign pos_req1 = req1 && ~req2;
assign pos_req2 = req2 && ~req3;
//----------在检测到pos_req1上升沿时,锁存数据-------
always@(posedge clk or negedge rst_n)beginif(!rst_n)begindata_in_r <= 16'd0;endelse beginif(pos_req1)begindata_in_r <= data_in;endend
end
assign data_out = data_in_r;
//----------在检测到pos_req2上升沿时,发出ack应答信号,表示数据已经锁存-------
//----------检测req信号,如果req信号取消,则ack也取消-----------------------
always@(posedge clk or negedge rst_n)beginif(!rst_n)beginack <= 1'b0;endelse beginif(pos_req2)beginack <= 1'b1;endelse if(!req)beginack <= 1'b0;endend
end
endmodule
跨时钟域信号处理——专用握手信号相关推荐
- 基于FPGA的跨时钟域信号处理——专用握手信号
转自:http://bbs.ednchina.com/BLOG_ARTICLE_253787.HTM 在逻辑设计领域,只涉及单个时钟域的设计并不多.尤其对于一些复杂的应用,FPGA往往需要和多个时钟域 ...
- FPGA跨时钟域信号处理之亚稳态问题
FPGA跨时钟域信号处理之亚稳态问题学习笔记 跨时钟域会导致"亚稳态"的问题,信号的上升沿和下降沿并不是瞬间被拉高或拉低的,而是有一个倾斜变化的过程,如图中的tx信号的上升沿和下降 ...
- 跨时钟域电路设计——多bit信号FIFO
多个bit信号的跨时钟域仅仅通过简单的同步器同步时不安全的. 如下图: 虽然信号都同步到目的时钟域,可完成的功能却与设计的初衷不相符. 解决方案之一为对信号进行格雷码编码,但此方案只适用于连续变化的信 ...
- 跨时钟域信号处理(二)——异步fifo的Verilog实现(附同步fifo的实现)
需要回答几个问题: 1.什么是异步FIFO,异步FIFO有什么功能? 跨时钟域的数据交换,防止亚稳态. 2.在产生写满与读空信号时需要进行跨时钟域如何做的,且如何能正确指示空满状态? 寄存器打两拍+格 ...
- 跨时钟域信号处理---脉冲同步器详解
在学习了原子哥的脉冲同步处理模块后,发现了诸多问题. 本文脉络:先对我哥的脉冲同步模块的代码进行一次测试,测试后发现问题,在对问题进行分析并提出解决方案. 这是一个典型的脉冲展宽同步器,实现的的功能是 ...
- 跨时钟域电路设计——单bit信号
前面提到了简单的双电平锁存器,下面是一些单bit同步电路. 一.慢时钟域向快时钟域 边沿检测同步器 将慢时钟域的脉冲搬移并缩小为快时钟域的脉冲. 既可以检测上升沿,也可以检测下降沿. 如上图,慢时钟下 ...
- 跨时钟域信号传输问题之握手同步
所谓握手,即通信双方使用了专用控制信号进行状态指示,这个控制信号既有发送域给接受域的也有接收域给控制域的,有别于单向控制信号方式. 使用握手协议方式处理跨时钟域数据传输时,只需要对双方的 ...
- 跨时钟域信号如何处理(一、单bit信号)
文章目录 背景 两级DFF同步器 脉冲展宽同步 握手协议 背景 一颗芯片上会有许多不同的信号工作在不同的时钟频率下.比如SOC芯片中的CPU通常会工作在一个频率上,总线信号(比如DRAM BUS)会工 ...
- 同步电路与跨时钟域电路设计1——单bit信号的跨时钟域传输(同步器)
同步电路与全局异步电路 同步电路 同步电路的定义 即电路中的所有受时钟控制的单元(如触发器Flip Flop.寄存器Register),全部由一个统一的全局时钟控制. 例子: 两个触发器都受同一个时钟 ...
最新文章
- 致谢 开源开发者的贡献_对开源做出的贡献如何使我成为更好的开发人员,以及如何做到这一点...
- PHP 字符串与数组间的相互转化
- [转载] Knowledge Management and Enginnering——02 知识表示方法
- jedis使用_Redis的三个框架:Jedis,Redisson,Lettuce
- ppt生成器_9款魔性#傻瓜生成器#,上班可以划水一天
- 合唱团算法(DP问题)
- Lazarus 日志工具 MultiLog
- STM32 IAP docs
- python爬虫实例(一) b站篇
- 微信小程序轮播图(详细)
- mysql怎么把两个表格的数据合并成一行_mysql中将多行数据合并成一行数据
- 怎么删除网络共享多余的计算机,win10系统删除网络共享中多余的计算机的图文教程...
- PAAS平台的理解及与LaaS,SaaS的关系
- 游戏客户端安全方案。
- koa2入门之使用koa-generator生成koa2项目
- geoserver离线地图服务搭建和图层发布
- python流量监控脚本
- Android端 WebP图片压缩与传输的一点探索
- Docker启动MySql容器Exited (1) 7 seconds ago问题解决
- 编玩边学——高新科技启蒙教育,让程序编写铸就高新科技能手