多时钟域设计——数据信号传输

主要内容:

  • 使用握手信号进行跨时钟域的数据信号传输
  • 使用FIFO进行跨时钟域的数据信号传输
  • 跨时钟域的数据信号传输总结

同步器为什么不适合用于跨时钟域数据传输过程

  1. 一般情况下数据信号的都是多位的,以数据总线的形式传输。
  2. 同步器只能降低亚稳态传输的概率,不能确保正确的同步信号。

因此如果简单的使用多组同步器进行数据信号跨时钟域传输,可能导致数据信号中多位数据在传输过程中发生错误。

时钟定义命名

前级时钟=发送时钟;

后级时钟=采样时钟=接收时钟;

1、使用握手信号进行跨时钟域的数据信号传输

根据发送时钟端数据信号的变化速率和采样时钟频率,可以分为一下三种情况。

(1)数据变化速率比采样时钟频率低

问题:上升沿检测电路检测的是什么信号的上升沿?

使用发送端的控制信号进行同步,在采样到慢时钟域发出的控制信号后,接收数据的时钟沿进行数据采样。

使用如图所示的上升沿检测信号CE作为控制信号(或数据接收的使能信号)控制数据信号的传输。

(2)数据变化速率比采样时钟频率略高

由于发送时钟比接收时钟快,对于接收时钟而言,发送时钟相当于窄脉冲。

为避免检测不到上升沿,可以结合窄脉冲捕获电路和上升沿检测电路进行边沿检测,并将结果作为使性能信号,但前提是发送时钟频率不能太快。

(3)数据变化速率比采样时钟频率快很多

问题:可能会导致数据采样不完整,数据丢失的现象。

无法使用握手信号进行数据传输,需要使用FIFO。

2、使用FIFO进行跨时钟域的数据信号传输

FIFO设计

同步FIFO架构: 

如图所示为同步FIFO,DPRAM(双端RAM)作为FIFO的存储器,允许读写同步进行,由状态模块控制读写的指针和FIFO的状态。

同步fifo表示fifo状态的表示方法

异步FIFO架构: 

异步FIFO用于对性能要求较高的设计中,尤其是始终延迟比系统资源更为重要的环境中。

可以使用与同步FIFO类似的双端RAM和单独读写端口实现,但是要注意产生fifo_empty和fifo_full时要避免出现亚稳态现象。

避免使用二进制计数器实现指针

在写请求有效时,写指针在写时钟作用下递增;在读请求有效时,读指针在读时钟下递增。

由于读写指针分别与其各自的时钟同步,彼此之间异步,使用二进制计数器实现指针时,可能会导致比较指针值取样错误。

原文地址:https://www.cnblogs.com/lizhiqing/p/12677013.html

时间: 2024-08-29 19:26:31

多时钟域设计——数据信号传输的相关文章

跨时钟域设计【二】——Fast to slow clock domain

跨时钟域设计中,对快时钟域的Trigger信号同步到慢时钟域,可以采用上面的电路实现,Verilog HDL设计如下:   // Trigger signal sync, Fast clock domain to slow domainmodule Trig_CrossDomain_F2S ( input clkB, input rst_n, input TrigIn_clkA,  output  reg TrigOut_clkB );  reg Q1,Q2,nQ2;  always @(pos

跨时钟域设计【一】——Slow to fast clock domain

跨时钟域设计是FPGA设计中经常遇到的问题,特别是对Trigger信号进行同步设计,往往需要把慢时钟域的Trigger信号同步到快时钟域下,下面是我工作中用到的慢时钟域到快时钟域的Verilog HDL设计.     // Trigger Cross Domain Design, Slow to fast clock domain  module Trig_ CrossDomain _S2F (      input clkB,      input rst_n,      input Trig

数字IC学习之五(综合、SVA以及跨时钟域设计)

我们来说说综合,通常意义上的综合指的是,将RTL风格的描述转化为逻辑网标,通俗点说,就是把你的代码转化成真实的电路,我们以EDA工具Design Compiler为例来说说如何进行综合,对于综合我推荐的资料为<Design Compiler User Guide>(synopsys)(书1),<Optimization Reference Manual>(synopsys)(书2),<高级ASIC芯片综合>(书3),<专用集成电路设计实用教程>(虞)(书4)

时钟域译文转载

第六章   时钟域 有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域.换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口.虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题,但是由于FPG**外各种系统限制,只使用一个时钟常常又不现实.FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证.本章讨论一下在FPGA设计中多时钟域

跨时钟域信号处理

1.什么是跨时钟域? 如图所示: 缺点:数据传输不可靠 2.如何实现信号传输稳定? 设计最基本的思想就是同步. 看两篇文章:<(多图) 跨越鸿沟:同步世界中的异步信号>.<cpu与fpga跨时钟域数据交换的实现问题>

跨时钟域信号处理——专用握手信号

在逻辑设计领域,只涉及单个时钟域的设计并不多.尤其对于一些复杂的应用,FPGA往往需要和多个时钟域的信号进行通信.异步时钟域所涉及的两个时钟之间可能存在相位差,也可能没有任何频率关系,即通常所说的不同频不同相. 图1是一个跨时钟域的异步通信实例,发送域和接收域的时钟分别是clk_a和clk_b.这两个时钟频率不同,并且存在一定的相位差.对于接收时钟域而言,来自发送时钟域的信号data_a2b有可能在任何时刻变化. 图1 跨时钟域通信 对于上述的异步时钟域通信,设计者需要做特殊的处理以确保数据可靠

基于FPGA的跨时钟域信号处理——亚稳态(V3-FPGA学院)

(V3-FPGA学院教你学习FPGA) 基于FPGA的跨时钟域信号处理--亚稳态 基于FPGA的跨时钟域信号处理--亚稳态 什么是亚稳态? 所有数字器件(例如FPGA)的信号传输都会有一定的时序要求,从而保证每 个寄存器将捕获的输入信号正确输出.为了确保可靠的操作,输入寄存器的信号必须在时钟沿的某段时间(寄存器的建立时间Tsu)之前保持稳定,并且持续到时钟沿之后的某段时间(寄存器的保持时间Th)之后才能改变.而该寄存器的输入反映到输出则需要经过一定的延时(时钟到输出的时间Tco).如果数据信号的

FPGA中亚稳态相关问题及跨时钟域处理

前言 触发器输入端口的数据在时间窗口内发生变化,会导致时序违例.触发器的输出在一段时间内徘徊在一个中间电平,既不是0也不是1.这段时间称为决断时间(resolution time).经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系. 触发器由于物理工艺原因,数据并不是理想化的只要触发沿时刻不变即可.触发器有固定的建立时间,保持时间. 建立时间:在时钟有效沿到来前数据需要稳定的时间. 保持时间:在时钟有效沿之后数据还需要保持不变的时间.

FPGA中信号的跨时钟域处理模板(一)

在做项目的时,我们经常会使用到多个时钟.每一个时钟在FPGA内部都会形成一个时钟域,如果一个时钟域中要用到另外一个时钟域的信号,也就形成了跨时钟域的操作,这时候要格外小心. 一.实际使用背景       假设在项目中需要在clk_b时钟域中用到用到来自clk_a中的信号.那么此信号就需要从clk_a时钟域跨越到clk_b中因此我们要建立一个同步计数器,该设计器从clk_a 中获取信号,然后再clk_b中创建一个新的信号.并从作为输出.模型如下: 在此设计中.我们假设输入的信号与clk_a和clk