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

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

3天内不再提示

详解RTL设计中多时钟域的处理方法

路科验证 来源:CSDN技术社区 作者:IamSarah 2022-05-17 13:52 次阅读

【 一 】

数字IC系统逻辑设计这部分主要介绍两个方面,一个是RTL的设计基础;另一方面是verilog基本语法。这一篇文章主要介绍一下RTL的设计基础。

RTL设计都是采用同步电路设计方式,了解同步电路的设计要求是RTL设计的第一步。下图是一个同步电路的示例:

d8a421f6-d597-11ec-bce3-dac502259ad0.png

其中,组合逻辑实现设计所需要的功能,寄存器用于暂存数据用时钟控制。只有当时钟进行有效跳变时,才将新的数据所存起来,否则数据保持原值。时钟相当于同步电路中的指挥。时钟一般是由晶振产生,或者由外部输入,如果需要还需要用锁相环进行倍频、相移等操作。

下面对寄存器做一个介绍,一个寄存器的结构如下图所示:

d8ba413e-d597-11ec-bce3-dac502259ad0.png

寄存器的功能如下图所示:

d8d61062-d597-11ec-bce3-dac502259ad0.png

由图可得,该寄存器在时钟的跳变沿锁存数据,然后数据会保持直到下一个跳变沿。寄存器要正常工作,必须保证D端的数据变化与时钟的有效沿不能距离太近,否则有可能锁存错误的数据。在综合库中,规定了数据变化端跟时钟跳变沿最短的时间要求,即建立时间约束和保持时间约束。建立时间规定,在时钟沿到达前的某段时间内,数据必须稳定;保持时间定义了在时钟沿之后的某段时间之后,数据才能发生变化。

对于一个寄存器来说,除了数据端与时钟端有时序要求。异步复位端与时钟端也有要求。假设一个寄存器是已不复位的,复位信号低电平有效。当复位信号是低电平时,寄存器被初始化。当异步复位信号跳高时,寄存器在时钟跳变沿锁存新的数据。如果异步复位信号跳高的时刻距离时钟有效沿太近,寄存器可能继续保持复位状太,也可能锁存新的数据。因此有必要定义时钟有效沿与异步复位无效沿之间的时序要求,这就是recovery/removal的时序要求,如图所示;

d8fd6900-d597-11ec-bce3-dac502259ad0.png

寄存器中建立时间/保持时间、recovery/removal的时序要求, 对设计的最大组合逻辑延时、时钟树的构造、复位树的构造都提出了要求。复位树、时钟树一般由后端工具进行处理。对RTL设计者来说,最需关注的是建立时间的问题。设计中的时序违例通过静态时序分析工具可以检查出来。

在IC系统中, 复位的目的是为了将芯片强制到一个已知的状态。同步复位与异步复位都能达到这个目的。两者的差别在于:同步复位需要时钟有效沿到达时才能起作用,而异步复位不需要。如下,是同步复位电路:

d9374468-d597-11ec-bce3-dac502259ad0.png

同步复位的优点在于:

1)在采用基于周期的仿真器场合,同步复位简单

2)寄存器可以滤掉复位上的毛刺

缺点:

1)需要时钟,在某些场合带来不便。假如设计中包含三态总线,总线上接着许多寄存器。当上电后,晶振还未起振,锁相环还未稳定,这时候没有时钟,所以复位还没有起作用,因此会导致总线上发生冲突。只有增加上电复位电路才能解决此问题。

2)采用同步复位,复位成为路径组合逻辑的一部分,由于复位的负载比较大,因此会使得复位树的延迟比较大,从而导致在路径上的延迟比较大。

异步复位的优点是不需要时钟,且复位不会影响到路径延时。缺点是:复位上的毛刺不能被由它复位的寄存器过滤掉;复位的无效沿与时钟之间存在时序要求。

将同步复位和异步复位优点结合起来:给出了一种异步复位,同步释放的复位方法,如下图所示:

d95479e8-d597-11ec-bce3-dac502259ad0.png

该电路的原理是:当复位信号有效时,两个同步器都为低,因此同步器的输出立即变低,而不管此时是否存在时钟。当复位信号变高后,经过时钟跳变沿后才能将高电平锁存到同步器的输出,也就是说,同步器的输出的无效沿是与时钟同步的。

【 二 】

这篇文章主要讲一下RTL设计中多时钟域的处理,之前在异步FIFO设计中已经讲到这个问题,这篇更全面详细的介绍一下多时钟域的处理。

多时钟域之所以难以处理,是因为在两个时钟域之间传递信号时,不可避免地会出现建立时间/保持时间违例的问题。寄存器会锁存错误的数据,引起功能错误。

现考虑在两个时钟域间传递1位信号的情况。如下图是多时钟域传递一位信号的示例:

d987681c-d597-11ec-bce3-dac502259ad0.png

在这个例子中,aclk与bclk是两个异步时钟。由aclk时钟域产生的数据adat要送到bclk的时钟域。由于bclk与aclk不同步,所以会出现这种情形:在一定时刻,adat的变化沿距离bclk的采样沿非常接近,不能满足建立时间和保持时间的要求。这样, 寄存器可能会进入亚稳态。下图是这种情况下的波形图:

d9bd01a2-d597-11ec-bce3-dac502259ad0.png

bdat1的值会传递给其他模块。在实际芯片中,在bdat1处于亚微态的时候,有些模块会认为自己收到的是“1”, 有些会认为是“0”,这种不一致会导致功能错误,如下图所示:

d9cfbf4a-d597-11ec-bce3-dac502259ad0.png

这种情形需要采用下图所示的同步器来避免:

da101c48-d597-11ec-bce3-dac502259ad0.png

采用同步器之后,其波形如下图所示:

da4b14ba-d597-11ec-bce3-dac502259ad0.png

下面看一下相关的多位信号的传递,同步器适用于在多时钟域间传递1位信号,但是对于相关的多位信号,采用这种技术仍然会出现问题。如下图所示,在多时钟域间传递两位信号:

da5ef6f6-d597-11ec-bce3-dac502259ad0.png

在这个例子中,有两个信号b-load和b-en由bclk时钟域传递到aclk时钟域。这两个信号相关。我们假设在某个时钟周期内, b-load与b-en同时有效,那么这两个信号分别经过同步器后,得到的波形如下所示:

da9e7966-d597-11ec-bce3-dac502259ad0.png

由于b-load信号与b-en信号的延迟不同,两者的上升沿之间有一些偏移。如果同步器的采样时钟正好也位于两个信号变化沿之间, 则采样后的信号有可能会相差一个周期。这种情况下,可以将两个信号进行逻辑与操作变成一个信号送到同步器。但是很多时候,无法对传递信号进行简单的合并。这个时候就可以考虑先将这些信号变成格雷码,然后通过同步器来传递。由于格雷码在一个周期内仅有一位发生变化,这样经过同步器之后就可以得到正确的结果。

上述方案都是基于同步器的,依据的原理是降低寄存器处于亚稳态的概率。另外一种方案是用多组寄存器来存储信号,过一段时间再进行读操作。在开始读操作的时候,数据早已经稳定下来,就不会出现建立时间/保持时间违例的情况。这也就是基于异步fifo在多时钟减传递信号的基本原理。关于异步FIFO的设计,已经讲过,在此不再赘述。

下面讲一下时钟切换电路,有些设计中需要进行时钟切换。动态地将始终从高频切换到低频或者由低频切换到高频,切换过程中会出现毛刺。时钟上的毛刺是非常致命的,可能会导致功能错误。要避免这种问题可以采取两种方法,一种是在时钟切换时,进入复位,当切换完成后,复位结束;另一种方法是采用时钟切换电路,如下图所示,这种切换电路跟锁存器的设计有异曲同工之妙。

dae3d02e-d597-11ec-bce3-dac502259ad0.png

原文标题:带你科普RTL设计基础

文章出处:【微信公众号:路科验证】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

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

    关注

    31

    文章

    5328

    浏览量

    120116
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59720
  • 多时钟域
    +关注

    关注

    0

    文章

    6

    浏览量

    5996

原文标题:带你科普RTL设计基础

文章出处:【微信号:Rocker-IC,微信公众号:路科验证】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于跨时钟信号的处理方法

    我在知乎看到了多bit信号跨时钟的问题,于是整理了一下自己对于跨时钟信号的处理方法
    的头像 发表于 10-09 10:44 6045次阅读

    如何处理好FPGA设计时钟间的数据

    时钟处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟间的数据,可以说是每个FPGA初
    发表于 07-29 06:19

    多时钟的设计和综合技巧系列

    出现问题,来自快时钟的控制信号必须宽于较慢时钟的周期。否则如下图所示,快时钟的控制信号无法被采样到慢
    发表于 04-11 17:06

    IC设计多时钟处理的常用方法相关资料推荐

    1、IC设计多时钟处理方法简析我们在ASIC或FPGA系统设计,常常会遇到需要在多个
    发表于 06-24 16:54

    基于多时钟的异步FIFO设计

    在大规模集成电路设计,一个系统包含了很多不相关的时钟信号,当其目标时钟与源时钟不同时,如何
    发表于 12-14 10:19 14次下载

    关于FPGA时钟的问题分析

    时钟问题(CDC,Clock Domain Crossing )是多时钟设计的常见现象。在FPGA领域,互动的异步时钟
    发表于 08-19 14:52 3330次阅读

    多时钟的同步时序设计和几种处理异步时钟接口的方法

    外部输入的信号与本地时钟是异步的。在SoC设计,可能同时存在几个时钟,信号的输出驱动和输入采样在不同的时钟节拍下进行,可能会出现一些不稳
    的头像 发表于 07-24 09:52 4357次阅读
    <b class='flag-5'>多时钟</b><b class='flag-5'>域</b>的同步时序设计和几种<b class='flag-5'>处理</b>异步<b class='flag-5'>时钟</b><b class='flag-5'>域</b>接口的<b class='flag-5'>方法</b>

    揭秘FPGA跨时钟处理的三大方法

    时钟处理方法,这三种方法可以说是 FPGA 界最常用也最实用的方法,这三种
    的头像 发表于 12-05 16:41 1621次阅读

    RTL多时钟的异步复位同步释放

    1 多时钟的异步复位同步释放 当外部输入的复位信号只有一个,但是时钟有多个时,使用每个时钟搭建自己的复位同步器即可,如下所示。 veri
    的头像 发表于 05-08 09:59 2492次阅读
    <b class='flag-5'>RTL</b><b class='flag-5'>中</b><b class='flag-5'>多时钟</b><b class='flag-5'>域</b>的异步复位同步释放

    解析多时钟和异步信号处理解决方案

    减少很多与多时钟有关的问题,但是由于FPGA外各种系统限制,只使用一个时钟常常又不现实。 FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据
    的头像 发表于 05-10 16:51 3952次阅读
    解析<b class='flag-5'>多时钟</b><b class='flag-5'>域</b>和异步信号<b class='flag-5'>处理</b>解决方案

    介绍3种方法时钟处理方法

    时钟处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟间的数据,可以说是每个FPGA初
    的头像 发表于 09-18 11:33 2.2w次阅读
    介绍3种<b class='flag-5'>方法</b>跨<b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>处理</b><b class='flag-5'>方法</b>

    FPGA多时钟和异步信号处理的问题

    减少很多与多时钟有关的问题,但是由于FPGA外各种系统限制,只使用一个时钟常常又不现实。FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,
    的头像 发表于 09-23 16:39 3055次阅读

    IC设计多时钟处理方法总结

    我们在ASIC或FPGA系统设计,常常会遇到需要在多个时钟下交互传输的问题,时序问题也随着系统越复杂而变得更为严重。
    的头像 发表于 04-06 10:56 795次阅读

    FPGA跨时钟处理方法(二)

    上一篇文章已经讲过了单bit跨时钟处理方法,这次解说一下多bit的跨时钟
    的头像 发表于 05-25 15:07 1000次阅读
    FPGA跨<b class='flag-5'>时钟</b><b class='flag-5'>域</b><b class='flag-5'>处理</b><b class='flag-5'>方法</b>(二)

    关于FPGA设计多时钟和异步信号处理有关的问题

    减少很多与多时钟有关的问题,但是由于FPGA外各种系统限制,只使用一个时钟常常又不现实。FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,
    的头像 发表于 08-23 16:10 599次阅读