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

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

3天内不再提示

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

sanyue7758 来源:处芯积律 2023-04-06 10:56 次阅读

我们在ASICFPGA系统设计中,常常会遇到需要在多个时钟域下交互传输的问题,时序问题也随着系统越复杂而变得更为严重。

跨时钟域处理技术是IC设计中非常重要的一个部分,我们需要学习并应用一些常用的处理方法,从而提高电路运行的稳定性,使得整个系统更鲁棒。

下面考虑ASIC设计场景,为了满足系统功能需求,整个系统由不同的功能块构成,例如:

处理器

存储器

浮点引擎

存储控制器

总线接口

高速接口

假如考虑处理器和存储器的工作频率为500MHz,带有存储器控制器的浮点引擎的工作频率为666.66MHz,总线接口和高速接口工作频率为250MHz,则该设计具有多个时钟,被视为多个时钟域的设计。

01多时钟域设计常用方法

如前所述,多个时钟域的处理问题是在传输数据和控制信号时,它对数据完整性有影响。下面的策略在ASIC设计阶段是有用的。

尝试为数据和控制路径优化制定策略。

尝试创建多个时钟域组来定义策略。

在多个时钟域之间传递控制信号时,尝试使用同步器的策略。

尝试使用FIFO和缓存的数据路径同步器来提高数据完整性。

现在讨论重要的跨时钟处理问题与策略及其在多时钟域设计中的使用。

02多时钟域设计有哪些问题

如果我们考虑适度的门数设计或使用单时钟工作的处理器核心和设计,它可能在布局阶段由于额外的互连延迟而产生时序违例。但是这种设计可能会通过架构、RTL、综合和基于工具的优化调整来满足时序和性能。

现在考虑图中所示的需要多个时钟的设计,让我们试着理解设计中的问题。

1.由于多个时钟域,数据完整性是主要问题,设计需要通过数据完整性检查。

2.没有使用同步器的时钟域边界上的触发器将由于建立和保持违例而存在亚稳态问题。

3.该设计将存在时序违例,并且很难强制时序电路输出进入有效的合法状态。

让我们用具有多个时钟域的时序电路来理解上面的内容。由于到达clk1和clk2之间的相差,第二个时钟域的触发器将有建立和保持违例,即触发器输出data_out将是亚稳态的。原因是时钟域1的q输出在clk2活动边的建立和保持窗口期间可能会改变,因此data_out将被迫进入非法状态,即亚稳态。如图1所示。

fe163fca-d305-11ed-bfe3-dac502259ad0.png

图1 多时钟域概念

时序如图2所示。

fe24bfd2-d305-11ed-bfe3-dac502259ad0.png

图2 亚稳态输出

03架构设计策略

考虑图3中有三个时钟域的设计,表1描述了不同时钟频率下的时钟域信息

fe322dca-d305-11ed-bfe3-dac502259ad0.png

图3 多时钟域架构

表1 多时钟域时钟组

Clock domain
control
Frequency
inMHz
Description
clk1 500 The clock domain one operating at frequency of 500 MHz
Clk2 666.66 The clock domain one operating at frequency of 666.66 MHz
Clk3 250 The clock domain one operating at frequency of 250 MHz

作为一名IC设计人员或架构师,我们需要考虑多个时钟域设计的整体数据完整性检查,并需要为数据路径和控制路径提供干净的时序。

考虑到这一点,我们需要设计同步器来在多个时钟域设计之间传输数据。当在多个时钟域设计之间传递控制信号时,电平、多路复用器和脉冲等同步器是有用的。异步FIFO可以用作同步器,在时钟域和数据路径之间传输数据。

以下是我们在进行多时钟域设计时应该使用的一些准则,以消除CDC错误。

避免亚稳态:在传递控制信号信息时,使用寄存器输出,因为这有助于避免毛刺和冒险。通过在传递控制信号时使用寄存的输出逻辑,可以避免单时钟周期内的多次转换。亚稳态阻塞逻辑如图4所示。

fe3d446c-d305-11ed-bfe3-dac502259ad0.png

图4 亚稳态阻塞逻辑

使用MCP:强烈推荐多周期路径策略,以避免在多个时钟域之间传递数据和控制信号信息时的亚稳态问题。在MCP中,采用的策略是建立控制和数据对,将具有单比特控制信号的多比特数据从发送时钟域传递到接收时钟域。利用脉冲同步器可以在接收时钟域对控制信息进行采样,并在有或没有同步器的情况下将数据传递到接收时钟域。该技术可以在多个周期内保持数据的稳定值,并且可以利用脉冲同步器产生的同步信号在接收时钟域中采样。跨越时钟域的边界,以下是需要考虑的关键点。

(a)控制信号必须使用多级同步器进行同步。

(b)控制信号应无冒险和毛刺。

(c)应该有跨越时钟边界的过渡。

(d)控制信号应至少稳定一个时钟周期。

MCP策略如图5所示。

fe55b402-d305-11ed-bfe3-dac502259ad0.png

图5 MCP策略

采用FIFO:异步FIFO是传递多位控制信号或数据信息的有效技术。在这种技术中,发送时钟域在FIFO未满时将数据写入FIFO内存缓冲区,接收时钟域在FIFO未空时从FIFO缓冲区读取数据。

使用格雷码计数器:在大多数具有跨时钟域(CDC)的ASIC设计中,跨时钟域传递计数器值是至关重要的。如果二进制计数器用于在时钟域边界交换数据,那么由于一个或多个比特的转换,数据转换很容易出错。在这种情况下,建议使用格雷码计数器在跨时钟边界传递数据。在接收端时钟域,采用格雷码到二进制码的转换,将原始数据恢复。

设计分区:在为多个时钟域设计逻辑时,通过使用时钟组对设计进行分区。

时钟命名约定:为了更好地识别时钟源,建议使用时钟命名约定。时钟的命名约定应该由有意义的前缀/后缀支持。例如,发送时钟域使用clk_s,接收时钟域使用clk_r。

同步复位:对于ASIC设计,强烈建议使用同步复位器。

避免保持时间违例:为了避免保持时间违例,建议仔细查看体系结构,并制定在多个时钟周期之间传递稳定数据的策略。

避免丢失相关性:在时钟域边界上,有几种可能导致丢失相关性的方式。比如有:

(a)总线上的多个比特

(b)多个握手信号

(c)不相关的信号

为了避免这种情况,使用时钟意图验证技术,因为这些技术将确保在时钟边界上传递多位信号。

04控制路径与同步

本节讨论ASIC设计中使用的各种同步器和策略。

电平或多触发同步器

在多个时钟域之间传递的控制信号主要由快时钟域向慢时钟域传递,会出现时序错误,设计中会出现时序违例。因此,在体系结构设计期间,更好的策略是确定多个时钟域设计的接口边界,然后在RTL设计中使用同步器的策略。

当在多个时钟域之间传递控制信号时,可以通过设计电平同步器(可能使用两个或三个触发器)来解决亚稳态问题。图6使用了两级电平同步器逻辑。

fe626a80-d305-11ed-bfe3-dac502259ad0.png

图6 控制路径中有二级电平同步器

如图6所示,利用电平同步器将控制信号q1从时钟域1传递到时钟域2。主要的设计策略是将有效的输出q1传递到第二个时钟域。电平同步器在第二个时钟域,对输出q1进行采样。由于违反了设置或保持时间,第二个时钟域的输入触发器将是亚稳态的,这应该通过设置EDA工具属性来忽略。输出的data_out是有效的数据,由于使用了同步器,本设计有两个时钟的延迟。

图6所示的设计时序描述如下(图7所示)。

fe743e86-d305-11ed-bfe3-dac502259ad0.png

图7 使用两级同步器的时序

如图7所示,q1由第一个时钟域输出。在clk2的上升沿上,触发器FF1的输出q2将由于建立或保持时间违例而进入亚稳态。但是触发器FF2输出在接下来的时钟边是data_out是有效的输出。使用该命令设置false path:

set_false_path –from FF0/q –to FF1/q

使用这两个触发器的电平同步器如图8所示,可以在设计中采用。更好的策略是在RTL设计期间将电平同步器的RTL描述作为单独的模块。引入的延迟取决于将输出驱动到有效合法状态所需的触发器数。

fe8ea974-d305-11ed-bfe3-dac502259ad0.png

图8 电平同步器

下面将对RTL描述部分进行描述:

always@(posedgeclk)
begin
q<=data_in;
data_out<=q
end

在ASIC设计中,当控制信息需要从快时钟域传递到慢时钟域时,就会出现数据完整性问题。该问题是由于在将控制信号从时钟域1传递到时钟域2时触发器输出的合法状态不收敛造成的。

利用脉冲展宽器可以解决从快时钟域到慢时钟域的采样问题。工作在正时钟边缘的电平脉冲发生器如图9所示。

fe9d9f7e-d305-11ed-bfe3-dac502259ad0.png

图9 电平到脉冲转换

另一种机制是信号的握手,可以用来实现数据的收敛。

如图10所示,将时钟域2的采样信号作为握手信号反馈到时钟域1。这种握手机制类似于对较快时钟域1的确认或通知,较快时钟域传递的控制信号被较慢时钟域成功采样。在实际的大多数场景中,都采用了这种机制,即使较快的时钟域在收到较慢时钟域的有效通知或确认信号后,也可以发送另一个控制信号。

fea8e8a2-d305-11ed-bfe3-dac502259ad0.png

图10 控制信号的握手机制

脉冲同步器

这种类型的同步器使用多级电平同步器,其中两级电平同步器的输出由输出触发器采样。这种同步器也称为切换同步器,用于将发送时钟域产生的脉冲同步到目标时钟域。当将数据从较快的时钟域传递到较慢的时钟域时,如果使用两级电平同步器,脉冲可能跳过。在这种情况下,脉冲同步器是有效和有用的。脉冲同步器图如图11所示。

feb49da0-d305-11ed-bfe3-dac502259ad0.png

图11 脉冲同步器

Mux同步器

将时钟域1的信息发送到时钟域2时,使用这对数据和控制信号。使用多bit数据和使用单bit控制信号。在接收端,根据发送时钟和接收时钟的比值,使用电平或脉冲同步器为多路复用器产生控制信号。这种技术类似于MCP,并且如果数据在跨越时钟边界的多个时钟周期中是稳定的,则这种技术是有效的。如图12所示。

fec2feb8-d305-11ed-bfe3-dac502259ad0.png

图12 Mux同步器

05多bit数据传输的挑战

在多个时钟域之间传递多个控制信号是一个重要的挑战。问题是这些控制信号到达的时间不同。如果这些控制信号的到达没有得到正确的管理,那么真正的问题是由于倾斜。考虑图13所示的场景,其中“enable ” “load_en ”和“ready ”需要从一个时钟域传递到另一个时钟域。在这种情况下,如果使用独立的电平同步器,则接收端可能会因为信号的歪斜(信号到达时间不同)而出现同步失败。

fed44218-d305-11ed-bfe3-dac502259ad0.png

图13 对接收端时钟域内的多个信号进行采样

考虑其中一个控制信号,例如enable到达较晚,则控制路径中可能存在同步失败,为了避免这组3个控制信号,尝试在时钟域之间传递共同信号。策略如图14所示。

fee2c0a4-d305-11ed-bfe3-dac502259ad0.png

图14 固定在多时钟域内传递的控制信号

06数据路径同步

用于在时钟域之间传递多个数据bit的技术是:

握手机制

异步FIFO缓存

格雷编码

握手机制

在时钟域之间传递多比特信号时,握手机制的使用是一种有用的技术。如图15所示,发射机工作在clk1,接收机工作在clk2。数据可以从发射机传送到接收机。这里要注意,该握手与AXI总线的握手略有不同。

接收端时钟域可以产生数据有效(data valid)和设备就绪(ready)等握手信号。因此,目的是通知发送器总线上还存在有效数据可用,设备还没有准备好接收新数据。

ff02defc-d305-11ed-bfe3-dac502259ad0.png

图15 握手机制框图

握手信号datavalid它是来自时钟域2的主动高电平握手信号,表示传输的数据是有效数据,接收端只需要很少的时钟就可以对该数据进行采样。传输数据时的时钟延迟取决于同步器中使用的触发器的数量,而延迟是握手机制的最大缺点之一。

握手信号deviceready它表明当数据有效的时候,接收端已经准备好接收新数据,并且设备ready好了可以拉高通知发送端将新数据放到数据总线上。

如果我们有多个时钟域的FSM控制器,那么设计架构来通过使用请求(request)和确认(ack)信号建立同步。FSM控制的握手机制如图16所示。

ff16cb4c-d305-11ed-bfe3-dac502259ad0.png

图16 FSM握手机制

异步FIFO同步器

异步FIFO是有用的,因为数据路径同步器是用来交换多个时钟域之间的数据。如果FIFO内存缓冲区没有满,发送端时钟域或发送端时钟域可以使用write_clk将数据写入FIFO内存缓冲区,如果FIFO内存缓冲区没有空,接收端时钟域可以使用read_clk读取数据(图17)。

FIFO由以下几个块组成:

Memory:内存缓冲区

Write Clock Domain:在write_clk上工作的写时钟域逻辑。

Read clock Domain:读时钟域逻辑,它正在read_clk上工作。

Flag Logic:生成标志逻辑empty和full。

FIFO和相关的逻辑块如图17所示。

ff2937c8-d305-11ed-bfe3-dac502259ad0.png

图17 FIFO框图

如何得到FIFO的深度?

考虑写时钟域的工作频率为250 MHz,读时钟域的工作频率为100 MHz,没有延迟,然后传输50字节的突发长度,可以使用以下计算:

Writeclocktime:T1=1/250MHz=4ns.
TheTimeRequiredto WriteBurstof50Bytesofdata=4ns*50=200ns
ReadClockTime:T2=1/100MHz=10ns
NumberofReadswith10ns=200ns/10ns=20
Depth of FIFO = 50–20 = 30 Bytes.

如果指定了读和写延迟,那么尝试修改上面的步骤来获得FIFO的深度。

格雷编码

在传递多个位的数据或控制信号时,必须使用格雷编码技术,因为这种技术保证了两个连续的数字只有一bit的变化。例如,如果4bit二进制数据需要在多个时钟域之间传递,那么一个或多个bit转换,因此需要更多的功率和出错的机会。因此,为了避免这种情况,提高性能,在发送端或发送端时钟域采用二进制到格雷码转换逻辑。这保证了在时钟边界上只有一bit变化。为了得到接收端时钟域的原始二进制数据,采用格雷码到二进制码的转换。该技术如图18所示。

ff3aaf8a-d305-11ed-bfe3-dac502259ad0.png

图18 格雷编码技术

07总结

总结几个要点:

在多个时钟域之间传递数据时,设计数据路径同步器。

在多个时钟域之间传递控制信号时,需要设计控制路径同步器。

在通过时钟域传递数据和控制信号信息时,强烈建议使用多周期路径来避免亚稳态问题。

传递多bit控制或数据信息的常用而有效的技术是使用异步FIFO。

对于在多个时钟域之间传递的多位控制信号,采用分组技术来避免由于到达时间不同而产生的歪斜。

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

    关注

    1602

    文章

    21326

    浏览量

    593216
  • asic
    +关注

    关注

    34

    文章

    1158

    浏览量

    119264
  • 存储器
    +关注

    关注

    38

    文章

    7151

    浏览量

    162000
  • IC设计
    +关注

    关注

    37

    文章

    1264

    浏览量

    102959
  • 多时钟域
    +关注

    关注

    0

    文章

    6

    浏览量

    5972

原文标题:IC设计中的多时钟域处理方法总结

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    多时钟数据传递的Spartan-II FPGA实现

    时钟电路设计由于不存在时钟之间的延迟和错位,所以建立条件和保持条件的时间约束容易满足。而在多时钟
    发表于 09-07 09:16

    FPGA设计中有多个时钟时如何处理

    FPGA设计中有多个时钟时如何处理?跨时钟的基本设计方法是:(1)对于单个信号,使用双D触发
    发表于 02-24 15:47

    关于异步时钟的理解问题:

    关于异步时钟的理解的问题: 这里面的count[25]、和count[14]和count[1]算是多时钟吧?大侠帮解决下我的心结呀,我这样的理解对吗?
    发表于 02-27 15:50

    【FPGA设计实例】FPGA跨越多时钟

    跨越时钟FPGA设计可以使用多个时钟。每个时钟形成一个FPGA内部时钟
    发表于 03-19 15:16

    如何处理好FPGA设计时钟问题?

    的跨时钟,相信大家还是可以理解的。当然,在能使用异步双口 RAM 来处理时钟的场景,也可
    发表于 09-22 10:24

    探寻FPGA中三种跨时钟处理方法

    的跨时钟,相信大家还是可以理解的。当然,在能使用异步双口 RAM 来处理时钟的场景,也可
    发表于 10-20 09:27

    三种跨时钟处理方法

    时钟处理方法,这三种方法可以说是FPGA界最常用也最实用的方法,这三种
    发表于 01-08 16:55

    三种FPGA界最常用的跨时钟处理法式

    。对于使用异步双口RAM来处理多bit数据的跨时钟,相信大家还是可以理解的。当然,在能使用异步双口RAM来处理时钟
    发表于 02-21 07:00

    FPGA初学者的必修课:FPGA跨时钟处理3大方法

    。对于使用异步双口RAM来处理多bit数据的跨时钟,相信大家还是可以理解的。当然,在能使用异步双口RAM来处理时钟
    发表于 03-04 09:22

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

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

    如何处理好跨时钟间的数据呢

    时钟处理是什么意思?如何处理好跨时钟间的数据呢?有哪几种跨
    发表于 11-01 07:44

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

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

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

    1、IC设计多时钟处理方法简析我们在ASIC或FPGA系统设计
    发表于 06-24 16:54

    讨论一下在FPGA设计多时钟和异步信号处理有关的问题和解决方案

    和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证。  这里以及后面章节提到的时钟,是指一组逻辑,这组逻辑的所有同步
    发表于 10-14 15:43

    高级FPGA设计技巧!多时钟和异步信号处理解决方案

    ,以及为带门控时钟的低功耗ASIC进行原型验证。本章讨论一下在FPGA设计多时钟和异步信号处理有关的问题和解决方案,并提供实践指导。 这
    发表于 06-02 14:26