0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA中同步异步时钟域信号的处理

FPGA设计论坛 来源:博客园 作者:雨航 2021-09-13 09:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

最常用的约束有IO管脚位置约束和电平幅度约束,这个很好理解。另外,就是对时钟网络约束。这个是很重要的。比如你的系统中,驱动的电路的时钟是27M的,那么你需要在约束文件中增加类似如下的约束语句

NET REF_CLK27M TNM_NET = REF_CLK27M_grp;

TIMESPEC TS_REF_CLK27M = PERIOD REF_CLK27M_grp : 37ns HIGH 50 %;

这样的话,工具在布线的时候,就会知道这个时钟所驱动的所有网络必须满足至少27M速度的要求,占空比为50%。它会任意布线,就有可能出现信号翻转的很慢,或者延时很长,建立时间保持时间不足,在实际中造成timing错误。一般来说,十几兆以上的时钟网络最好都加类似的约束,在时钟上就可以了,工具会帮你把它所驱动的所有网络都加上约束的。

另外,常用的约束还有delay,skew等,具体的你可以到Xilinx网站上下载专门有关Constains的文档学习一下。

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

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

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

always @ (posedge inputs)

begin

...

end

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

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1655

    文章

    22287

    浏览量

    630334
  • 信号
    +关注

    关注

    11

    文章

    2902

    浏览量

    79679

原文标题:FPGA中对异步信号的处理

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于FPGA的高效内存到串行数据传输模块设计

    本文介绍了一个基于FPGA的内存到串行数据传输模块,该模块设计用来高效地处理存储器的数据并传输至串行接口。项目中自定义的“datamover_mm2s_fpga_”方案利用
    的头像 发表于 11-12 14:31 3854次阅读
    基于<b class='flag-5'>FPGA</b>的高效内存到串行数据传输模块设计

    时钟缓冲器的应用场景及如何选择合适的时钟缓冲器?

    数据中心:数据中心通常需要处理大量数据,时钟信号的稳定性和同步性至关重要。时钟缓冲器可以帮助实现多设备之间的
    的头像 发表于 10-30 14:12 185次阅读
    <b class='flag-5'>时钟</b>缓冲器的应用场景及如何选择合适的<b class='flag-5'>时钟</b>缓冲器?

    如何在嵌入式RF测试实施多信号分析

    射频(RF)测试是嵌入式系统开发与验证的关键环节,尤其是在电信、航空航天、汽车以及物联网等行业。随着嵌入式系统的日益复杂,传统RF测试方法往往难以捕捉多个(时间、频率、数字信号
    的头像 发表于 08-15 16:32 2626次阅读
    如何在嵌入式RF测试<b class='flag-5'>中</b>实施多<b class='flag-5'>域</b><b class='flag-5'>信号</b>分析

    黑芝麻智能跨时间同步技术:消除多计算单元的时钟信任鸿沟

    ,并以黑芝麻智能武当 C1296 芯片为例,通过多方式同步实现多高精度对齐,消除时钟信任鸿沟的实测效果。 智能汽车的核心是通过多维度感知、实时决策和精准控制实现辅助驾驶与智能交互,而这一切的前提是 "时间基准一致",由于不同传
    的头像 发表于 07-22 09:17 413次阅读
    黑芝麻智能跨<b class='flag-5'>域</b>时间<b class='flag-5'>同步</b>技术:消除多<b class='flag-5'>域</b>计算单元的<b class='flag-5'>时钟</b>信任鸿沟

    NTP网络同步时钟:数字世界的“心跳”

    NTP网络同步时钟是为网络设备提供准确、标准、可靠和多功能的时间服务的解决方案,能提供准确的同步时钟信号,支持标准的NTP和SNTP网络时间
    的头像 发表于 07-15 10:42 421次阅读
    NTP网络<b class='flag-5'>同步</b><b class='flag-5'>时钟</b>:数字世界的“心跳”

    同步快?异步稳?串口通信方案选择的避坑指南

    我们常用的串口究竟是同步还是异步?蓝牙模块、WiFi模块用的又是什么方式?今天,我们就来一探究竟,讲清楚串口通信的同步异步的区别。 1.同步
    的头像 发表于 07-09 16:58 549次阅读
    <b class='flag-5'>同步</b>快?<b class='flag-5'>异步</b>稳?串口通信方案选择的避坑指南

    时钟同步在低空经济的典型应用及发展方向

    在低空经济时钟同步的应用场景非常广泛,以下是几个典型的例子:1.无人机编队飞行无人机编队飞行是低空经济的重要应用,例如物流配送和农业喷洒。在编队飞行
    的头像 发表于 07-08 14:02 653次阅读
    <b class='flag-5'>时钟</b><b class='flag-5'>同步</b>在低空经济<b class='flag-5'>中</b>的典型应用及发展方向

    AMD FPGA异步模式与同步模式的对比

    本文讲述了AMD UltraScale /UltraScale+ FPGA 原生模式下,异步模式与同步模式的对比及其对时钟设置的影响。
    的头像 发表于 07-07 13:47 1435次阅读

    异步时钟处理方法大全

    该方法只用于慢到快时钟的1bit信号传递。在Xilinx器件,可以使用(* ASYNC_REG = "TRUE" *)标记,将两个寄存器尽量靠近综合,降低 亚稳态因导线延迟太大而传
    的头像 发表于 05-14 15:33 1285次阅读
    跨<b class='flag-5'>异步</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>处理</b>方法大全

    ntp时钟同步服务器是什么?ntp时钟同步服务器介绍

    时间、时钟、时辰是我们非常熟悉的,但是你们知道如今的时间、时钟都是哪里产生的吗?尤其当今网络设备的普及使用,上面几乎都有时间标识,其实他们都是通过一些设备传递的,比如ntp时钟同步服务
    的头像 发表于 05-13 15:19 647次阅读
    ntp<b class='flag-5'>时钟</b><b class='flag-5'>同步</b>服务器是什么?ntp<b class='flag-5'>时钟</b><b class='flag-5'>同步</b>服务器介绍

    时钟同步在通信系统中有哪些重要作用?

    时钟同步是指在一个系统,各个时钟能够准确地显示相同的时间。在现代科技发展时钟
    的头像 发表于 04-29 13:44 931次阅读
    <b class='flag-5'>时钟</b><b class='flag-5'>同步</b>在通信系统中有哪些重要作用?

    gps卫星同步时钟应用场景及特点介绍

    其他电路提供稳定的时钟驱动,保证其工作频率的准确性和稳定性。例如,在通信基站,10MHz 信号用于同步基站的射频模块、基带处理模块等,确保
    的头像 发表于 04-17 15:01 743次阅读
    gps卫星<b class='flag-5'>同步</b><b class='flag-5'>时钟</b>应用场景及特点介绍

    进群免费领FPGA学习资料!数字信号处理、傅里叶变换与FPGA开发等

    进群免费领FPGA学习资料啦!小编整理了数字信号处理、傅里叶变换与FPGA开发等FPGA必看资料,需要的小伙伴可以加小助手(微信:elecf
    发表于 04-07 16:41

    时钟缓冲器工作原理及常见时钟缓冲器的国产替代情况

    时钟缓冲器是一种用于生成、处理和分配时钟信号的电子电路,主要用于确保数字系统各模块的同步操作。
    的头像 发表于 02-17 14:34 1951次阅读

    北斗卫星同步时钟授时天线:实现精确时间同步的关键

    北斗卫星同步时钟装置的授时天线是用于接收全球导航卫星系统信号以实现精确时间同步的关键组件。本文将介绍授时天线的特点、工作原理及其应用场景。
    的头像 发表于 01-06 09:49 2191次阅读
    北斗卫星<b class='flag-5'>同步</b><b class='flag-5'>时钟</b>授时天线:实现精确时间<b class='flag-5'>同步</b>的关键