本文来源于网络,感谢网友无私分享

文章参考:http://tech.ic5.cn/News_1228.html

文章参考:https://blog.csdn.net/qq_15026001/article/details/99689876

文章参考:https://www.cnblogs.com/digital-wei/p/6014450.html(*典型异步电路设计-脉冲同步(2))

由于信号在不同时钟域之间传输,容易发生亚稳态的问题导致,不同时钟域之间得到的信号不同。处理亚稳态常用打两拍的处理方法。多时钟域的处理方法很多,最有效的方法异步fifo,具体可以参考博主的verilog异步fifo设计,仿真(代码供参考)异步fifo适合处理不同时钟域之间传输的数据组,但有时不同时钟域之间仅仅传递脉冲,异步fifo就显的有点大材小用的,因此单信号的跨时钟域处理通常有,

两级寄存器串联。
        脉冲同步器。
        结绳法。
        采用握手。

        我们像主要讨论一下跨时钟域的同步:

我们将问题分解为2部分,来自同步时钟域信号的处理和来自异步时钟域信号的处理。前者要简单许多,所以先讨论前者,再讨论后者。

    1.同步时钟域信号的处理

一般来说,在全同步设计中,如果信号来自同一时钟域,各模块的输入不需要寄存。只要满足建立时间,保持时间的约束,可以保证在时钟上升沿到来时,输入信号已经稳定,可以采样得到正确的值。但是如果模块需要使用输入信号的跳变沿(比如帧同步信号),千万不要直接这样哦。

always @ (posedge inputs)

begin

...

end

因为这个时钟inputs很有问题。如果begin ... end语句段涉及到多个D触发器,你无法保证这些触发器时钟输入的跳变沿到达的时刻处于同一时刻(准确的说是相差在一个很小的可接受的范围)。因此,如果写出这样的语句,EDA工具多半会报clock skew > data delay,造成建立/保持时间的冲突。本人曾经也写出过这样的语句,当时是为了做分频,受大二学的数字电路的影响,直接拿计数器的输出做了后面模块的时钟。当初用的开发工具是max+plusII,编译也通过了,烧到板子上跑倒也能跑起来(估计是因为时钟频率较低, 6M :lol:),但后来拿到QuartusII中编译就报clock skew > data delay。大家可能会说分频电路很常见的啊,分频输出该怎么用呢。我一直用的方法是采用边沿检测电路,用HDL语言描述大概是这样:

always @ (posedge Clk)

begin

inputs_reg <= inputs;

if (inputs_reg == 1'b0 && inputs == 1'b1)

begin

...

end

...

end

这是上跳沿检测的电路,下跳沿电路大家依此类推。

      2.异步时钟域信号的处理

这个问题也得分单一信号和总线信号来讨论

      2.1单一信号(如控制信号)的处理

如果这个输入信号来自异步时钟域(比如FPGA芯片外部的输入),一般采用同步器进行同步。最基本的结构是两个紧密相连的触发器,第一拍将输入信号同步化,同步化后的输出可能带来建立/保持时间的冲突,产生亚稳态。需要再寄存一拍,减少(注意是减少)亚稳态带来的影响。这种最基本的结构叫做电平同步器。

如果我们需要用跳变沿而不是电平又该怎样处理呢,还记得1里面讲的边沿检测电路么?在电平同步器之后再加一级触发器,用第二级触发器的输出和第三级触发器的输出来进行操作。这种结构叫做边沿同步器。

always @ (posedge Clk)

begin

inputs_reg1 <= inputs;

inputs_reg2 <= inputs_reg1;

inputs_reg3 <= inputs_reg2;

if (inputs_reg2 == 1'b1 && inputs_reg3 == 1'b0)

begin

...

end

...

end

 以上两种同步器在慢时钟域信号同步入快时钟域时工作的很好,但是反过来的话,可能就工作不正常了。举一个很简单的例子,如果被同步的信号脉冲只有一个快时钟周期宽,且位于慢时钟的两个相邻跳变沿之间,那么是采不到的。这时就需要采用脉冲同步器。这种同步器也是由3个触发器组成。

   脉冲同步器

由于脉冲在快时钟域传递到慢时钟域时,慢时钟有时无法采样的信号奈奎是特采样定理,因此需要对信号进行处理,可以让慢信号采样到。脉冲同步器的结果如图:

脉冲同步详细代码参考文档上传

2.2总线信号的处理

如果简单的对异步时钟域过来的一组信号分别用同步器的话,那么对这一组信号整体而言,亚稳态出现的几率将大大上升。基于这一观点,对于总线信号的处理可以有两种方式。

如果这组信号只是顺序变化的话(如存储器的地址),可以将其转换为格雷码后再发送,由于格雷码相邻码字只相差一个比特,上面说的同步器可以很好的发挥作用

但是如果信号的变化是随机的(如存储器的数据),这种方法便失效了,这时可以采用握手的方式或者采用FIFO或DPRAM进行缓存。RAM缓存的方式在突发数据传输中优势比较明显,现在高档一点的FPGA中都有不少的BlockRAM资源,且支持配置为DPRAM或FIFO,这种处理方法在通信电路中非常常用。

FPGA——同步转换——FPGA对输入信号的处理相关推荐

  1. skew算法_一种基于FPGA的多通道高速输入信号自动de‑skew算法的制作方法

    本发明涉及高速数据采集技术,更具体的涉及一种基于FPGA的多通道高速输入信号自动de-skew算法. 背景技术: 随着对精度和速率要求越来越高,目前数据采集系统向着多通道和超高速两个方向发展.多通道高 ...

  2. 【FPGA】FPGA中的缓冲与驱动那些事

    目录 转载说明 原文精彩片段 缓冲: 驱动: 转载说明 为解决问题而学习才是由效率的,今天重新看了以前的那个项目的Verilog HDL程序,到现在我还没有弄明白细节,只有慢慢蚕食.看到了这样一串程序 ...

  3. 【FPGA】FPGA对AD7606进行串行数据采集

    个人笔记.这段时间在用FPGA对AD7606进行数据采集,现在把检测过程和遇到的问题记录一下,方便以后避坑.文章最后有相关资料链接. 1.AD7606概述 AD7606是16位,8通道同步采集模数数据 ...

  4. FPGA技术——FPGA的灵魂(FSM)你悟了吗?

    文章目录 前言 一.FSM是什么 ? 1.概念 2.要素 状态机组成的六个要素 状态机工作的四个要素 3.分类 二.如何设计FSM ? 1.状态抽象与转换 2.状态化简 3.状态编码 4.编程实现 三 ...

  5. FPGA学习---FPGA练习与解答

    FPGA练习与解答 练习题目如下,可以练习一下,后面是我做的,欢迎指出错误~ 最后面是可能有用的一些总结,这篇文章可能有用 FPGA学习-数电及verilog知识补充 第一阶段 1.设计4位全加器. ...

  6. Linux下rgmii接口与fpga相连,FPGA控制RGMII接口PHY芯片88E1512网络通信

    一.前言 网络通信中的PHY芯片接口种类有很多,之前接触过GMII接口的PHY芯片RTL8211EG.但GMII接口数量较多,本文使用RGMII接口的88E1512搭建网络通信系统.这类接口总线位宽小 ...

  7. [FPGA]基于FPGA的数字跑表

    基于FPGA的数字跑表的设计与实现 一.设计要求 用FPGA设计并实现一个数字跑表,范围为0~59分59.99秒.可以实现数字跑表进行启动.停止计时和显示读数三个操作,可以在数码管上显示读数. 二.设 ...

  8. 【安路FPGA】FPGA开发日记(一)

    一.开发环境的安装 首先去安路官网下载安装包工具与资料下载-国产FPGA创新者 - 安路科技 下载后解压点击安装包直接傻瓜式安装即可 备注:安装后无法打开或者缺文件等情况是安路安装包不包含一些C++库 ...

  9. 【FPGA】FPGA的介绍及入门

    文章目录 FPGA应用场景 一.FPGA的工作原理 二.FPGA的编程方式 .FPGA开发流程 三.FPGA设计方法 1.功能定义 2.设计输入 3.功能仿真 4.综合优化 五.综合后仿真 六.布局布 ...

  10. 如何学习FPGA,FPGA学习教程学习经验

    队长 路飞的电子设计宝藏 4月16日 一.入门首先要掌握HDL(HDL=verilog+VHDL). 第一句话是:还没学数电的先学数电.然后你可以选择verilog或者VHDL,有C语言基础的,建议选 ...

最新文章

  1. Linux课堂随笔---第四天
  2. 无线网络未来十年十大产业趋势
  3. 6_jfoenix_自定义舞台,JFXSlider
  4. Visual Studio中将打开的代码与类文件进行关联
  5. 倒计时或按任意键返回首页_超实用excel小技巧之时间倒计时及动态显示
  6. Angular8 - 稳定版修改概述(Angular 8的新特性介绍)
  7. html标签转换含义,html标签含义
  8. 如何用Mybatis分库分表
  9. 计算机主板的概念,华硕新型概念主机大爆料:内置未来主板
  10. Jquery-数组删除元素
  11. delphi 从字符串末尾向前查找_零基础学python之字符串
  12. 机器学习之使用sklearn构造决策树模型
  13. MyBatis集合Spring(三)之mapper
  14. Linux文件系统(七)---系统调用之open操作(二) 之 get_unused_fd
  15. 酷似js的java函数简写——lambda表达式
  16. Windows 11 配置JDK 环境变量
  17. ubuntu嵌入式linux实训报告总结,利用ubuntu建立嵌入式linux开发环境的总结
  18. JDBC 连接mysql数据库出现 client does not support authen…… update mysql client
  19. OLED屏幕应用实验
  20. 【USACO题库】3.2.4 Feed Ratios饲料调配

热门文章

  1. ThinkPad无法进系统的解决方案(实测)
  2. centos6.9 虚拟机重启后无法进入系统
  3. Android性能优化之apk瘦身技巧
  4. 微信小程序 限制2M的瘦身技巧与方法详解
  5. RNA-seq 比对软件STAR——(2)使用
  6. 【树形DP】愚蠢的矿工
  7. 《演讲之禅——一个技术演讲家的自白》
  8. java郑州_郑州Java?
  9. JavaSE进阶笔记
  10. 《C/C++等级考试(1~8级)历届真题解析》专栏总目录