下图是一个基本的握手通信方式。所谓握手,意即通信双方使用了专用控制信号进行状态指示。这个控制信号既有发送域给接收域的,也有接收域给发送域的,有别于前面的单向控制信号检测方式

使用握手协议方式处理跨时钟域数据传输,只需要对双方的握手信号(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

跨时钟域信号处理——专用握手信号相关推荐

  1. 基于FPGA的跨时钟域信号处理——专用握手信号

    转自:http://bbs.ednchina.com/BLOG_ARTICLE_253787.HTM 在逻辑设计领域,只涉及单个时钟域的设计并不多.尤其对于一些复杂的应用,FPGA往往需要和多个时钟域 ...

  2. FPGA跨时钟域信号处理之亚稳态问题

    FPGA跨时钟域信号处理之亚稳态问题学习笔记 跨时钟域会导致"亚稳态"的问题,信号的上升沿和下降沿并不是瞬间被拉高或拉低的,而是有一个倾斜变化的过程,如图中的tx信号的上升沿和下降 ...

  3. 跨时钟域电路设计——多bit信号FIFO

    多个bit信号的跨时钟域仅仅通过简单的同步器同步时不安全的. 如下图: 虽然信号都同步到目的时钟域,可完成的功能却与设计的初衷不相符. 解决方案之一为对信号进行格雷码编码,但此方案只适用于连续变化的信 ...

  4. 跨时钟域信号处理(二)——异步fifo的Verilog实现(附同步fifo的实现)

    需要回答几个问题: 1.什么是异步FIFO,异步FIFO有什么功能? 跨时钟域的数据交换,防止亚稳态. 2.在产生写满与读空信号时需要进行跨时钟域如何做的,且如何能正确指示空满状态? 寄存器打两拍+格 ...

  5. 跨时钟域信号处理---脉冲同步器详解

    在学习了原子哥的脉冲同步处理模块后,发现了诸多问题. 本文脉络:先对我哥的脉冲同步模块的代码进行一次测试,测试后发现问题,在对问题进行分析并提出解决方案. 这是一个典型的脉冲展宽同步器,实现的的功能是 ...

  6. 跨时钟域电路设计——单bit信号

    前面提到了简单的双电平锁存器,下面是一些单bit同步电路. 一.慢时钟域向快时钟域 边沿检测同步器 将慢时钟域的脉冲搬移并缩小为快时钟域的脉冲. 既可以检测上升沿,也可以检测下降沿. 如上图,慢时钟下 ...

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

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

  8. 跨时钟域信号如何处理(一、单bit信号)

    文章目录 背景 两级DFF同步器 脉冲展宽同步 握手协议 背景 一颗芯片上会有许多不同的信号工作在不同的时钟频率下.比如SOC芯片中的CPU通常会工作在一个频率上,总线信号(比如DRAM BUS)会工 ...

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

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

最新文章

  1. 致谢 开源开发者的贡献_对开源做出的贡献如何使我成为更好的开发人员,以及如何做到这一点...
  2. PHP 字符串与数组间的相互转化
  3. [转载] Knowledge Management and Enginnering——02 知识表示方法
  4. jedis使用_Redis的三个框架:Jedis,Redisson,Lettuce
  5. ppt生成器_9款魔性#傻瓜生成器#,上班可以划水一天
  6. 合唱团算法(DP问题)
  7. Lazarus 日志工具 MultiLog
  8. STM32 IAP docs
  9. python爬虫实例(一) b站篇
  10. 微信小程序轮播图(详细)
  11. mysql怎么把两个表格的数据合并成一行_mysql中将多行数据合并成一行数据
  12. 怎么删除网络共享多余的计算机,win10系统删除网络共享中多余的计算机的图文教程...
  13. PAAS平台的理解及与LaaS,SaaS的关系
  14. 游戏客户端安全方案。
  15. koa2入门之使用koa-generator生成koa2项目
  16. geoserver离线地图服务搭建和图层发布
  17. python流量监控脚本
  18. Android端 WebP图片压缩与传输的一点探索
  19. Docker启动MySql容器Exited (1) 7 seconds ago问题解决
  20. 编玩边学——高新科技启蒙教育,让程序编写铸就高新科技能手

热门文章

  1. 穗康码json数据_平安白云防疫通行证与穗康码数据互通怎么申请?
  2. Flutter 文件选择选择器 文件选择、选择word、pdf、excel等文件 fget_file
  3. 企鹅安卓客户端联系人列表数据解密分析及Java实现
  4. 第三章面向对象编程思想
  5. 3DMAX移动点的方法(包括点、中心点、移动问题)
  6. 上班不迟到如何从快乐变成痛苦
  7. 你和阿里巴巴员工的编程水平差几个等级?
  8. RAP 在线接口部署
  9. 淘宝店铺装修 免费扶植版教程
  10. 微信小程序的商城类系统的完整设计思路