当前位置:文档之家› 跨时钟域信同步方法种

跨时钟域信同步方法种

跨时钟域信同步方法种
跨时钟域信同步方法种

跨时钟域信号同步方法6种

ASIC中心

1 引言

基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统。但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免。如果对跨时钟域带来的亚稳态、采样丢失、潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行。本文总结出了几种同步策略来解决跨时钟域问题。

2 异步设计中的亚稳态

触发器是FPGA设计中最常用的基本器件。触发器工作过程中存在数据的建立(setup)和保持(hold)时间。对于使用上升沿触发的触发器来说,建立时间就是在时钟上升沿到来之前,触发器数据端数据保持稳定的最小时间。而保持时间是时钟上升沿到来之后,触发器数据端数据还应该继续保持稳定的最小时间。我们把这段时间成为setup-hold时间(如图1所示)。在这个时间参数内,输入信号在时钟的上升沿是不允许发生变化的。如果输入信号在这段时间内发生了变化,输出结果将是不可知的,即亚稳态 (Metastability)

图1

一个信号在过渡到另一个时钟域时,如果仅仅用一个触发器将其锁存,那么采样的结果将可能是亚稳态。这也就是信号在跨时钟域时应该注意的问题。如图2所示。

信号dat经过一个锁存器的输出数据为a_dat。用时钟b_clk进行采样的时候,如果a_dat正好在b_clk的setup-hold时间内发生变化,此时b_ dat就既不是逻辑"1",也不是逻辑"0",而是处于中间状态。经过一段时间之后,有可能回升到高电平,也有可能降低到低电平。输出信号处于中间状态到恢复为逻辑"1"或逻辑"0"的这段时间,我们

称之为亚稳态时间。

触发器进入亚稳态的时间可以用参数MTBF(Mean Time Between Failures)来描述,MTBF即触发器采样失败的时间间隔,表示为:

其中fclock表示系统时钟频率,fdata代表异步输入信号的频率,tmet代表不会引起故障的最长亚稳态时间,C1和C2分别为与器件特性相关的常数。如果MTBF很大,就认为这个设计在实际工作中是能够正常运行的,不会因为亚稳态导致整个系统的失效。当触发器处于亚稳态,且处于亚稳态的时间超过了一个时钟周期,这种不确定的状态还会影响到下一级的触发器,最终导致连锁反应,从而使整个系统功能失常。

3 同步策略

在异步设计中,完全避免亚稳态是不可能的。因此,设计的基本思路应该是:首先尽可能减少出现亚稳态的可能性,其次是尽可能减少出现亚稳态并给系统带来危害的可能性。以下是根据实际工作总结出来的几种同步策略。

3.1电平同步器

为了避免进入亚稳态,应当使参数MTBF尽可能大。通常采用的方法是双锁存器法,即在一个信号进入另一个时钟域之前,将该信号用两个锁存器连续锁存两次(如图3所示)。理论研究表明这种设计可以将出现亚稳态的几率降低到一个很小的程度,但这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。

对于上面的双锁存器法,如果a_clk的频率比b_clk的频率高,将可能出现因为dat变化太快,而使b_clk无法采样的问题。即在信号从快时钟域向慢时钟域过渡的时候,如果信号变化太快,慢时钟将可能无法对该信号进行正确的采样,所以在使用双锁存器法的时候,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器可以正确地对其进行采样。

3.2 边沿同步器

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

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个触发器组成,同时需要对发送信号做一些处理。3.3 脉冲同步器

脉冲同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻转电路(下图)。每当翻转电路接收到一个脉冲时,它就会在高、低电平间进行转换,然后通过电平同步器到达异或门的一个输入端,而另一个信号经一个时钟周期的延迟进入异或门的另一端,翻转电路每转换一次状态,这个同步器的输出端就产生一个单时钟宽度的脉冲。

图:脉冲同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻转电路

脉冲同步器的基本功能是从某个时钟域取出一个单时钟宽度脉冲,然后在新的时钟域中建立另一个单时钟宽度的脉冲。脉冲同步器也有一个限制,即输入脉冲之间的最小间隔必须等于两个同步器时钟周期。如果输入脉冲相互过近,则新时钟域中的输出脉冲也紧密相邻,结果是输出脉冲宽度比一个时钟周期宽。当输入脉冲时钟周期大于两个同步器时钟周期时,这个问题更加严重。这种情况下,如果输入脉冲相邻太近,则同步器就不能检测到每个脉冲。

3.4 结绳法

由于双锁存器法在快时钟域向慢时钟域过渡中可能存在采样失效的问题,我们引入了一种安全的跨时钟域的方法:结绳法。结绳法适合任何时钟域的过渡(clk1,clk2

的频率和相位关系可以任意选定),如图4所示。

图4中的_clk1表示该信号属于clk1时钟域,_clk2的信号表示该信号属于clk2时钟域。在两次src_req_clk1之间被src_vld_clk1结绳(Pluse2Toggle)。将src_vld_clk1用双锁存器同步以后,该信号转换为dst_req_clk2(Toggle2Pluse)。同理,用dst_vld_clk2将dat_req_clk2结绳,dst_vld_clk2表明在clk2时钟域中,src_dat_clk1已经可以进行正确的采样了。最后将dst_vld_clk2转换为dst_ack_clk1(Synchronizer and Toggle2Pluse)。dst_ack_clk1表明src_dat_clk1已经被clk2正确采样了,此后clk1时钟域就可以安全地传输下一个数据了。可以看出,结绳法的关键是将信号结绳以后,使其保持足够长的时间,以便另一个时钟可以正确采样。图5描述了结绳法的具体实现,主要包括3个基本单元:Pluse2Toggle、Synchronizer 和Toggle2Pluse。

Pluse2Toggle模块负责将两个脉冲信号结绳,即将单脉冲信号延长;Synchronizer模块用双锁存器法将得到的信号过渡到另一个时钟域;Toggle2Pluse模块与Pluse2Toggle功能相对,即将延长的脉冲信号还原为单脉冲,这里用到了异或门。整体的设计思想就是用Pluse2Toggle将信号延长,用Synchronizer过渡,再用Toggle2Pluse还原,以保证另一个时钟域可以正确采样,而接收方用相反的流程送回响应信号。

结绳法可以解决快时钟域向慢时钟域过渡的问题,且适用的范围很广。但是结绳法实现较复杂,在设计要求较高的场合应该慎用。

3.5 握手协议

在许多应用中,跨时钟域传送的不只是简单的信号,数据总线、地址总线和控制总线都会同时跨域传输。工程师们用一些其它的手段来处理这些情况,如握手协议等。

当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效的通信。例如,仲裁总线结构可以让一个以上的电路请求使用单个的总线,用仲裁方法来

决定哪个电路可以获得总线的访问权,例如 PCI 或 AMBA(高级微控制器总线架构)。每个电路都发出一个请求信号,由仲裁逻辑决定谁是“赢家”。获胜的电路会收到一个应答,表示它可以访问总线。该电路于是中断请求,开始使用总线。

不同时钟域电路使用的握手协议有两种基本类型:全握手(Full-handshake)和部分握手(partial-handshake)。每种类型的握手都要用同步器,每种都各有自己的优缺点。对全握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的响应(图4)。首先,电路 A 声明它的请求信号,然后,电路 B 检测到该请求信号有效后,声明它的响应信号。当电路 A 检测到响应信号有效后,中止自己的请求信号。最后,当电路B 检测到请求无效后,它中止自己的响应信号。除非电路 A 检测到无效的响应信号,否则它不会再声明新的请求信号。

图4,对全握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的响应。

这种类型的握手使用了电平同步器。设计人员将这种技术用在如下情况:响应电路(电路 B)需要告知请求电路(电路 A)它可以处理请求。这种握手方法要求请求电路延迟它的下一个请求,直到它检测到响应信号无效。可以用经验估算法判断这个协议的时序:信号跨越一个时钟域要花两个时钟周期的时间,信号在跨越多个时钟域前被电路寄存。全部的时间序列是:A 时钟域中最多五个周期加上 B 时钟域最多六个周期。全握手类型很强健,因为通过检测请求与响应信号,每个电路都清楚地知道对方的状态。这种方式的不足之处是完成所有交互的整个过程要花费很多时钟周期。

另一种类型是部分握手,它可以缩短这些事件的过程。使用部分握手信号时,通信双方的电路都不等对方的响应就中止各自的信号,并继续执行握手命令序列。部分握手类型比全握手类型在健壮性方面稍弱,因为握手信号并不指示各自电路的状态,每一电路都必须保存状态信息(在全握手信号里这个信息被送出去)。但是,由于无需等待其它电路的响应,完整的事件序列花费时间较少。

当使用部分握手信号方式时,响应的电路必须以正确的时序产生它的信号。如果响应电路要求先处理完一个请求,然后才能处理下一个请求,则响应信号的时序就很重要。电路用它的响应信号来指示它的处理任务何时完成。一种部分握手方法混合了电平与脉冲信号,而其它的方法则只使用脉冲信号。

在第一种部分握手方法中,电路 A 以有效电平声明其请求信号,电路 B 则以一个单时钟宽度脉冲作为响应。此时,电路 B 并不关心电路 A 何时中止它的请求信号。但为了使这种方法成立,电路 A 中止请求信号至少要有一个时钟周期长,否则,电路 B 就不能区别前一个请求和新的请求。在这种握手方式下,电路 B 为请求信号使用一个电平同步器,电路 A 为响应信号使用一个脉冲同步器。只有当电路 B 检测到请求信号时才发出响应脉冲。这种情况可以使电路 A 通过控制其请求信号的时序,控制同步器接收到的脉冲间隔(图 5)。同样可以用经验估算法确定时序,即信号跨越一个时钟域要花

两个时钟周期并且在跨越时钟域前被电路寄存。

图5,在一种部分握手方法中,电路 A 发出它的请求信号,电路 B 则以一个单时钟宽度脉冲作为响应。

全部的序列为 A 时钟域最多三个周期加上 B 时钟域最多五个周期。这种部分握手方法比全握手方法在 A、B 两个时钟域分别少用了两个和一个时钟周期。如果采用第二种部分握手方法可以再减少一些时钟周期,此时电路 A 用一个单时钟宽度脉冲发出它的请求,而电路 B 也用一个单时钟宽度脉冲响应这个请求。这种情况下,两个电路都需要保存状态,以指示请求正待处理。

图6,这种握手类型使用的是脉冲同步器,但如果其中一个电路时钟比另一个电路时钟快两倍,则可以用边沿检测同步器来代替。

这种握手类型使用的是脉冲同步器,但如果其中一个电路时钟比另一个电路时钟快两倍,则可以用边沿检测同步器来代替(图 6)。完整的时序是:A 时钟域最多两个周期加上 B 时钟域最多三个周期。所以这种部分握手技术与全握手方法相比,在 A 时钟域少用三个时钟周期,在 B 时钟域也少用三个时钟周期。同时,也比第一种部分握手方法分别在 A、B 时钟域快了一个和两个周期。这些握手协议针对的都是跨越时钟域的单一信号。但当几组信号要跨越时钟域时,设计人员就需要使用更加复杂的信号传送方法。

3.6 异步FIFO

在现代的集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟。多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步 FIFO(First In First Out)是解决这个问题一种简便、快捷的解决方案。使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据。在网络接口、图像处理等方面, 异步FIFO 得到了广泛的应用。

异步FIFO是一种先进先出的电路,使用在需要产时数据接口的部分,用来存储、缓

冲在两个异步时钟之间的数据传输。在异步电路中,由于时钟之间周期和相位完全独立,因而数据的丢失概率不为零。

由图1可以看出:整个系统分为两个完全独立的时钟域——读时钟域和写时间域;FIFO的存储介质为一块双端口RAM,可以同时进行读写操作。在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址;读时钟部分由读地址产生逻辑产生读控制信号和读地址。在空/满标志产生部分,由读写地址相互比较产生空/满标志。

设计异步FIFO有两个难点:一是如何同步异步信号,使触发器不产生亚稳态;二是如何正确地设计空、满以及几乎满等信号的控制电路。

3.6.1 亚稳态问题的解决

在数字集成电路中,触发器要满足setup/hold的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端的值是不确定的,并且在未知的时刻会固定到高电平或低电平。这个过程称为亚稳态(Metastability)。图2所示为异步时钟和亚稳态,图中clka和clkb为异步时钟。

亚稳态必定会发生在异步FIFO中。图中在异步FIFO中,电路外部的输入和内部的时钟之间是毫无时间关系的,因此setup/hold冲突是必然的;同在电路内部的两个没有关

系的时钟域之间的信号传递,也必须会导致setup/hold冲突。

虽然亚稳态是不可避免的,但是,下面的设计改进可以将其发生的概率降低到一个可以接受的程度。

①对写地址/读地址采用格雷码。由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率。对多个触发器的输出所组成的写地址/读地址可以采用格雷码。由于格雷码每次只变化一位,采用格雷码可以有效地减少亚稳态的产生。

②采用触发器来同步异步输入信号,如图3中的两极触发器可以将出现亚稳态的几率降低到一个很小的程度。但是,正如图3所示,这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。

3.6.2 空/满标志的产生

空/满标志的产生FIFO的核心部分。如何正确设计此部分的逻辑,直接影响到FIFO 的性能。

空/ 满标志产生的原则是:写满不溢出,读空不多读。即无论在什么进修,都不应出现读写地址同时对一个存储器地址操作的情况。在读写地址相等或相差一个或多个地址的时候,满标志应该有效,表示此时FIFO已满,外部电路应对FIFO发数据。在满信号有效时写数据,应根据设计的要求,或保持、或抛弃重发。同理,空标志的产生也是如此,即:空标志<=(|写地址-读地址|<=预定值)AND(写地址超前读地址)

满标志<=(|写地址-读地址|<=预定值)AND(读地址超前写地址)

最直接的做法是,采用读写地址相比较来产生空满标志。如图4所示,当读写地址的差值等于一个预设值的时候,空/满信号被置位。这种实现方法逻辑简单,但它是减法器形成的一个比较大的组合逻辑,因而限制了FIFO的速度。所以,一般只采用相等不相等的比较逻辑,避免使用减法器。

图5 是另外一种常用的设计,比较器只对读写地址比较是否相等。在读写地址相等的时候有两种情况:满或者空。所以,附加了一个并行的区间判断逻辑来指示是空还是满。这个区间判断逻辑将整个地址空间分为几个部分,以指示读写地址的相对位置。这种做法提高了整个电路的速度,但是也有其缺点。主要是直接采用读写地址等于不等于的比较逻辑来进行空/满标志的判断,可以带来误判。

基于异步FIFO实现不同时钟域间数据传递的设计

基于异步FIFO实现不同时钟域间数据传递的设计 [2006-12-1813:31:00|By:夏虫] 推荐 摘要:数据流在不同时钟域间的传递一直是集成电路芯片设计中的一个重点问题。本文通过采用异步FIFO的方式给出了这个问题的一种解决方法,并采用Verilog硬件描述语言通过前仿真和逻辑综合完成设计。 关键词:异步FIFO;时钟域;Verilog 引言 当今集成电路设计的主导思想之一就是设计同步化,即对所有时钟控制器件(如触发器、RAM等)都采用同一个时钟来控制。但在实际的应用系统中,实现完全同步化的设计非常困难,很多情况下不可避免地要完成数据在不同时钟域间的传递(如高速模块和低速模块之间的数据交换)。这时,如何保持系统的稳定,顺利完成数据的传输就成为一个重要的问题,这也是异步电路设计中最为棘手的问题。通常的做法是采用对每位信号加同步器或增加握手信号来解决这一问题,但这样会增加系统的复杂度且影响传输速度。本文的做法是在两个时钟域的交界处设计一个异步FIFO,通过它来实现数据流的传输。由发送时钟域将数据写入,接收时钟域将数据取出,在数据传输的同时实现了数据的缓存,因此是一种较理想的方法。 不同时钟域间数据传递的 问题及其解决方法 不同时钟域间数据传递的最重要问题就是亚稳态问题。当数据信号通过两个时钟域的交界处时,将会分别由这两个时钟来控制信号的值。此时如果两时钟信号的敏感沿非常接近并超过了允许的额度,则将出现数据信号的不稳定,即电路陷入亚稳态,也称为同步失败。亚稳态是在两时钟敏感沿靠得很近、第二级时钟敏感沿到来时其输入数据不稳时发生,可将其视为仅仅是第二级触发器输入信号不稳定所导致的结果。只要使输入信号稳定,就能解决亚稳态问题。 针对如上所述亚稳态的特点,可设计一个同步器来保证数据的稳定传输以解决这个问题。其原理在于使信号在新的时钟域中先稳定下来再进入相关的逻辑,以保证信号与新的时钟同步。本设计在时钟域的接口处就采用此法。 异步FIFO模块设计及实现 异步FIFO结构设计 本文所设计的异步FIFO采用循环队列方式,由独立的两个时钟Iclk和Oclk来控制读、写指针。模块结构如图1所示。 输入端口:输入端时钟Iclk,输出端时钟Oclk,8位并行输入数据Din,复位信号Rst_。 输出端口:8位并行输出数据Dout,FIFO写满信号Full,FIFO读空信号Empty。信号后缀:i—由输入时钟域控制、o—由输出时钟域控制、g—GRAY码、b—二进制自然码。

硬盘录像机服务器时间同步方法

PC、硬盘录像机时间同步设置 一.原理:利用NTP服务实现。NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS 等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,W AN 上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。 二.如何使局域网内的电脑时钟同步 首先要在互联网上寻找一台或几台专门提供时间服务的电脑(以下称为“主时间服务器”),在百度和Google里搜索一下,时间服务器还是很多的,笔者推荐pool.ntp.org这个地址。其次设置局域网时钟服务器。选择单位中能上外网的一台电脑,让它与主时间服务器同步,然后把它设为局域网内部的时间服务器(以下称为时间服务器),以后局域网内所有电脑依它为准进行时间校对。 最后设置客户端。如果客户机为win2000、XP或Linux系统,不需要安装任何软件。如客户机为Win98系统时要根据时间服务器类型的不同而区别对待:如果时间服务器选用SNTP协议进行时钟同步,则Win98机上需安装一个sntp客户端软件,如时间服务器由Windows电脑通过netbios协议提供,则Win98上也不需要安装任何软件。 三.如何设置时间服务器 以下分Win2000、XP分别介绍,而且只介绍sntp服务的架设。 1.Windows2000、XP做时间服务器 第一步:指定主时间服务器。在DOS里输入“net time /setsntp:pool.ntp.org”,这里我们指定pool.ntp.org是主时间服务器。 第二步:与主时间服务器同步。先关闭windows time服务,再开启该服务。在DOS里输入“net stop w32time”、“net start w32time”。 第三步:设置电脑的Windows time服务的启动方式为自动,在“管理工具”的“服务”界面下完成(xp系统默认是自动)。 注意:这台windows主机不能加入任何域,否则无法启动windows time服务。此时,这台windows电脑已经是互联上主时间服务器的客户了,以后每次电脑启动时,都会自动与主时间服务器校对时间。如果网络不通,电脑也会过45分钟后再次自动校对时间。需要提醒的是电脑的时钟与标准时间误差不能超过12个小时,否则不能自动校对,只有手动校正了。

跨时钟域处理

快时钟域信号到慢时钟域有可能的情况是: 快时钟域信号宽度比慢时钟信号周期窄,导致漏采。 解决的方法有: 1.将快时钟域信号延长,至少有慢时钟周期的一到两个周期宽 2.使用反馈的方法,快时钟域信号有效直到慢时钟域有反馈信号,表示已经正确采样此信 号,然后快时钟域信号无效。

通过反馈的方式很安全,但是从上图可以看出来延时是非常大的。慢时钟采快时钟信号,然后反馈信号再由快时钟采。 以上是简单的单个信号同步器的基本方法。 多个信号跨时钟域 多个控制信号跨时钟域仅仅通过简单的同步器同步有可能是不安全的。 简单举例,b_load和b_en同步至a_clk时钟域,如果这两个信号有一个小的skew,将导致在a_clk时钟域中两个信号并不是在同一时刻起作用,与在b_clk中的逻辑关系不同。解决的方法应该比较简单,就是将b_load和b_en信号在b_clk时钟域中合并成一个信号,然后同步至a_clk中。 如果遇到不能合并的情况,如译码信号。如下图

如果Bdec[0]、bdec[1]间存在skew将导致同步至a_clk中后译码错误,出现误码。在这种情况下,建议加入另一个控制信号,确保bdec[0]、bec[1]稳定时采。例如在bdec[0]、bec[1]稳定输出后一到两个周期b_clk域输出一个en信号,通知a_clk域此时可以采bdec[0]、bec[1]信号。这样可确保正确采样。 数据路径同步 对数据进行跨时钟域处理时,如果采用控制信号同步的方式进行处理的话,将是非常浩大的工程,而且是不安全的。 简单来说,数据同步有两种常见的方式: 1.握手方式 2.FIFO 简要说下握手方式,无非就是a_clk域中首先将data_valid信号有效,同时数据保持不变,然后等待b_clk中反馈回采样结束的信号,然后data_valid信号无效,数据变化。如有数据需要同步则重复上述过程。握手方式传输效率低,比较适用于数据传输不是很频繁的,数据量不大的情况。 FIFO则适合数据量大的情况,FIFO两端可同时进行读/写操作,效率较高。而且如果控制信号比较多,也可采用fifo方式进行同步,将控制信息与数据打包,写入FIFO,在另一端读取,解码,取得数据和控制信息。

时钟同步技术概述

作为数字通信网的基础支撑技术,时钟同步技术的发展演进始终受到通信网技术发展的驱动。在网络方面,通信网从模拟发展到数字,从TDM网络为主发展到以分组网络为主;在业务方面,从以TDM话音业务为主发展到以分组业务为主的多业务模式,从固定话音业务为主发展到以固定和移动话音业务并重,从窄带业务发展到宽带业务等等。在与同步网相关性非常紧密的传输技术方面,从同轴传输发展到PDH,SDH,WDM和DWDM,以及最新的OTN和PTN技术。随着通信新业务和新技术的不断发展,其同步要求越来越高,包括钟源、锁相环等基本时钟技术经历了多次更新换代,同步技术也在不断地推陈出新,时间同步技术更是当前业界关注的焦点。 2、时钟技术发展历程 时钟同步涉及的最基本技术包括钟源技术和锁相环技术,随着应 用需求的不断提高,技术、工艺的不断改进,钟源技术和锁相环 技术也得到了快速的演进和发展。 (1) 钟源技术

时钟振荡器是所有数字通信设备的基本部件,按照应用时间的先后,钟源技术可分为普通晶体钟、具有恒温槽的高稳晶振、原子钟、芯片级原子钟。 一般晶体振荡器精度在nE-5~nE-7之间,由于具有价格便宜、尺寸小、功耗低等诸多优点,晶体振荡器在各个行业和领域中得到广泛应用。然而,普通晶体钟一般受环境温度影响非常大,因此,后来出现了具有恒温槽的晶体钟,甚至具有双恒温槽的高稳晶体钟,其性能得到很大改善。随着通信技术的不断发展,对时钟精度和稳定性提出了更高的要求,晶体钟源已经难以满足要求,原子钟技术开始得到应用,铷钟和铯钟是其中最有代表性的原子钟。一般来说,铷钟的精度能达到或优于nE-10的量级,而铯钟则能达到或优于1E-12的量级。 然而,由于尺寸大、功耗高、寿命短,限制了原子钟在一些领域的应用,芯片级原子钟有望解决这个难题。目前民用的芯片级原子钟基本上处于试验阶段,其尺寸只有立方厘米量级,耗电只有百毫瓦量级,不消耗原子,延长了使用寿命,时钟精度在nE-10量级以上,具有很好的稳定性。芯片级原子钟将在通信、交通、电力、金融、国防、航空航天以及精密测量等领域有着广泛的应用前景。 (2) 锁相环技术 锁相环技术是一种使输出信号在频率和相位上与输入信号同步的电路技术,即当系统利用锁相环技术进入锁定状态或同步状态后,系统的震荡器输出信号与输入信号之间相差为零,或者保持为常数。锁相环路技术是时钟同步的核心技术,它经历了模拟锁相环

FPGA与SoC芯片设计中五步法CDC跨时钟域检查方法学

Advanced Verification White Paper Five Steps to Quality CDC Verification Ping Yeung Ph.D. Mentor Graphics

CDC synchronizers are used to reduce the probability of metastable signals. Taking unpredictable metastable sig- nals and creating predictable behavior, they prevent metastable values from reaching the receiving clock domain.Metastability Effects Even when proper CDC synchronizers are used for all clock-domain crossings and all CDC protocols are cor-rectly implemented, metastability inevitably leads to unpredictable cycle-level timing [4, 5]. Traditional RTL simulation does not model metastability, therefore, it cannot be used to find functional problems that may arise when metastability manifests in hardware. We are going to show two scenarios in which the cycle-level timing of RTL simulation differs from the cycle-level timing of the actual hardware in the presence of metastability.In Figure 3, the incoming CDC signal, cdc_d , violates the register setup time. Although it is sampled correctly in RTL simulation, the register is metastable and the output settles to 0. As a result, the hardware transition is delayed by one cycle. Figure 2: A two-register CDC synchronizer. Figure 4: Hold time violation: hardware transition is advanced by one cycle. Figure 3: Setup time violation: hardware transition is delayed by one cycle.

微电子一些面试问题资料讲解学习

亚稳态 Setup/hold time 是测试芯片对输入信号和时钟信号之间的时间要求。建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time.如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如果hold time不够,数据同样不能被打入触发器。 建立时间(Setup Time)和保持时间(Hold time)。建立时间是指在时钟边沿前,数据信号需要保持不变的时间。保持时间是指时钟跳变边沿后数据信号需要保持不变的时间。如果不满足建立和保持时间的话,那么DFF将不能正确地采样到数据,将会出现亚稳态(metastability)的情况。如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。 在数字集成电路中,触发器要满足setup/hold的时间要求。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q端的值是不确定的,并且在未知的时刻会固定到高电平或低电平。这个过程称为亚稳态

(Metastability)。 一些关于微电子方面的笔试题(zz) 1.FPGA和ASIC的概念,他们的区别。(未知) FPGA是可编程ASIC。 ASIC:专用集成电路,它是面向专门用途的电路,专门为一个用户设计和制造的。根据一个用户的特定要求,能以低研制成本,短、交货周期供货的全定制,半定制集成电路。与门阵列等其它ASIC(Application Specific IC)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点. 2.建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time.如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如果hold time不够,数据同样不能被打入触发器。 建立时间是指在时钟边沿前,数据信号需要保持不变的时

NTP服务时间同步设置

一、市局集中端服务器上搭建NTP服务的服务端 1、在市局集中端服务器上,通过开始菜单,输入regedit命令后打开注册表设定画面。 2、修改以下选项的键值 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\ NtpServer内的「Enabled」设定为1,打开NTP服务器功能

3、修改以下键值 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config\ AnnounceFlags设定为5,该设定强制主机将它自身宣布为可靠的时间源,从而使用内置的互补金属氧化物半导体(CMOS) 时钟。 4、在dos命令行执行以下命令,确保以上修改起作用 net stop w32time net start w32time 那么为了避免服务器和internet上的ntp同步,最好追加以下配置: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\

NtpClient的「enable」设定为0 以防止作为客户端自动同步外界的时间服务 二、硬盘录像机设置NTP服务的客户端 (注:只有新版型号的硬盘录像机才有NTP的功能) 1、在市局服务器IE浏览器地址栏输入硬盘录像机IP地址,进入到登陆界面,输入用户名:admin 密码:12345 端口号:8000 登陆后选择菜单“配置”, 2、在“配置”页面左边选择“远程配置”,出来“远程参数配置”页面,在“远程参数配置”页面里选择“网络参数”→“NTP设置”,“启用NTP”打上钩,“服务器地址”统一为市局集中端服务器地址,“NTP端口号”为123,校时间隔:4320(统一设置为三天,这里的单位是分钟),选择时区: ,点儿“保存”按钮。

Xilinx FPGA 设计中的跨时钟域问题

浅谈XLINX FPGA设计中跨时钟域的同步设计问题 摘要 本文介绍了FPGA设计中的同步设计原则并对FPG A设计中的触发器亚稳态问题进行了阐述本文通过具体的设计实例论证了跨时钟域同步处理的必要性并介绍了一种实现跨时 钟域同步处理的方法和其具体电路 关键字 同步设计异步设计触发器亚稳态时序稳定 一同步设计的原则 尽量使用同步电路避免使用异步电路这句话是电路设计的几个原则之一同异步设计相比同步设计设计出来的电路更稳定可靠在XILINX FPGA设计中时常 有设计人员遇到如下类似的问题 设计的电路升级困难可移植性差也就是说一些原本工作正常的电路移植到高端的FPGA中就根本工作不起来了 设计的电路一致性差同一电路设计每次布线后工作的结果不同 设计的电路时序仿真正常但实际电路上却工作不起来 设计的电路极易受毛刺的干扰 通常这些类似的问题都于电路的异步设计有关 二亚稳态 图1 触发器的亚稳态示意图 对于触发器当时钟沿到来时其输入要求是稳定的这时其输出也是稳定的但假如时钟沿到来时其输入也正在变化即翻转这时触发器会瞬时进入亚稳态通 常触发器对输入信号都有一个建立时间的要求也即setup时间当这一建立时间得 不到满足时触发器也会进入瞬时亚稳态如图1 通常触发器即使进入亚稳态也会很快进入稳态但其输出值是不定的这有可能对使我们设计的FPGA模块尤其是哪些有复杂状态机的模块产生错误的逻辑对于亚稳态问题我们还应明白亚稳态问题并非指输出结果数据的不确定性而是指输出变化的时序不确定性 遵循同步设计的原则有助于解决亚稳态问题使我们设计出稳定可靠的电路模块对于单时钟系统我们可以很方便地设计出稳定易于设计及仿真的同步单一时钟系统但在电信和数据通讯领域中我们设计的系统中往往具有多个时钟往往需要将数据或时序由一个时钟域传到另一个时钟域这类设计的难点在于实现不同时钟域之间数据和时序变化的稳定可靠地传递采用经验证的设计技术可以实现跨时钟域的同步设计进而设计出可靠工作的电路 三跨时钟域的异步设计案例 本人曾经设计过如下几个模块这些模块中的几个子模块分别工作在各自的时钟域

多时钟域数据传递的FPGA实现

多时钟域数据传递的FPGA 实现 鲁 玲 (扬州大学能源与动力工程学院江苏扬州 225009) 摘 要:分析了多时钟域数据传递设计中亚稳态的产生以及对整个电路性能和功能的影响,以一款异步并行通信接口芯片的设计为例,详细描述了采用同步器、FIFO 实现8位并行数据到16位并行数据的两时钟域异步转换的过程。电路在 XilinxISE6.0环境下用Modelsim5.7进行了逻辑仿真,结果表明系统稳定可靠。 关键词:多时钟域;亚稳态;FP GA ;异步信号;FIFO 中图分类号:TP391.98 文献标识码:B 文章编号:10042373X (2007)212130203 An Implementation of Communicating Data bet w een Multi 2clock Domain B ased on FPG A L U Ling (Institute of Energy &Power ,Yanghou University ,Yangzhou ,225009,China ) Abstract :The paper analyses the metastability which is caused by communicating data between multi 2clock domain and effect of metastability to the circuit.For example ,the design of asynchronous parallel interface chip is described to make use of synchronizer and FIFO to transfer the data band f rom 8bits to 16bits between two clock domain in details.The circuit is simulated on a Modelsim5.7with Xilinx ISE6.0software and good test result has gotten. K eywords :multi 2clock domain ;metastability ;FP GA ;asynchronous signal ;FIFO 收稿日期:2007207225 随着EDA 技术的发展,由于其在电子系统设计领域中的明显优势,FP GA 已经在许多方面得到了广泛应用,特别是在无线通信领域,FP GA 以其极强的实时性,指令软件编程的极大灵活性赢得了巨大的市场。本文采用 FP GA 来设计一款广泛应用于计算机、Modem 、数据终端 以及许多其他数字设备之间的数据传输的专用异步并行通信接口芯片,实现了某一时钟域(如66M Hz )的8位并行数据到另一低时钟域(如40M Hz )16位并行数据的异步转换,并且客户可以根据自己的要求进行数据定义。完成数据在不同时钟域间的正确传递的同时防止亚稳态的出现,保持系统的稳定,是电路设计的关键。1 时钟域转换中亚稳态的产生 触发器是数字电路设计中的一个重要元件,而触发器工作过程中存在数据建立与保持时间的约束,如果这种约束得不到满足,触发器就会进入某个不确定状态———亚稳态[1]。亚稳态的存在可能导致连锁反应,以致引起整个系统功能混乱。在单时钟域电路设计中由于不存在时钟之间的延迟和错位,所以建立条件和保持条件的时间约束容易满足。而在多时钟域里由于各个模块的非同步性,则必须考虑亚稳态的发生,如图1 所示。 图1 多时钟域亚稳态的产生 2 多时钟域数据传递方案 多时钟域传递的信号有两种,其一为控制信号,其二为数据流信号。针对这两种不同的信号,分别采取不同方案遏制系统堕入亚稳态。对控制信号采用同步器装置,即在2个不同的时钟域之间插入同步器;而对于不同独立时钟域之间的数据流传递,为了避免异步时钟域产生错误的采样电平,采用FIFO 存储器作为其转换接口,在输入端口使用写时钟写数据,在输出端口使用读时钟读数据,这样就完成了异步时钟域之间的数据交换[2]。 芯片的总体逻辑框图如图2所示,图中输入输出信号定义如表1所示。 从逻辑结构上将芯片划分为3块:写时钟域I/O BU FFER 、读时钟域I/O BU FFER 及FIFO 存储器。I/O BU FFER 的主要作用是对外部信号进行预处理,消除外 31自动化技术鲁 玲:多时钟域数据传递的FP GA 实现

时钟同步系统施工方案

时钟同步系统施工方案

施工方案审批表 审核单位:审核意见:审核人: 日期:监理单位:监理意见:监理人: 日期:批准单位:审批意见:审批人: 日期:

目录 一、施工方案综述............................................................................................... - 3 - 二、工程概况及特点........................................................................................... - 4 - 三、施工步骤....................................................................................................... - 5 - 四、风险分析..................................................................................................... - 14 - 五、生产安全及文明施工................................................................................. - 14 - 一、施工方案综述 根据中韩(武汉)石油化工有限公司PLC系统的改造技术要求和我公司对改造要求的理解来编制施工方案。

跨时钟域问题

Metastability in the asynchronous clocks and Synchronizer 摘要:相较纯粹的单一时钟的同步电路设计,设计人员更多遇到的是多时钟域的异步电路设计。因此,异步电路设计在数字电路设计中的重要性不言而喻。本文主要就异步设计中涉及到的亚稳态问题,作简要介绍,并提出常用的解决办法——即同步器的使用。 关键词:异步电路设计、亚稳态、同步器。 Abstract: Compared with the pure one-clock synchronous designs,the designers more often deal with the multi-clock asychronous designs. Therefore, asynchronous circuit design is very important in the field of digital circuit design. This paper briefly describes the problematic metastability in the asynchronous designs and presents a regular solution——synchronizer. Key words: Asynchronous circuit design, Metastability, Synchronizer. 毫无疑问,单一时钟域的电路设计是数字电路中最基本的技能,其时序分析(Timing Analysis)也是最简单的。与之相对,在多时钟域中跨时钟域传输信号易出现亚稳态,加上自动时序分析工具对异步信号处理的力不从心,这些都使得多时钟域的异步设计和分析较为困难。不幸的是,现实世界是异步的。如我们常常看见的键盘输入、磁盘文件传输、UART(通用异步收发器)等等,都是异步时序的事例。 1 亚稳态(metastability) 时序电路采用触发器和锁存器作为存储单元,这两种器件都易进入亚稳态[1]。所谓亚稳态是指触发器无法在某个规定的时间段内达到一个可确认的状态。如图1所示,对任何一种触发器,在时钟触发沿前后存在一个小的时间窗口(称为判决窗口,decision window),输入信号在判决窗口内必须保持稳定,否则,触发器就会进入亚稳态,既无法预测该单元的的输出电平,也无法预测何时输出才能稳定在某个电平上。 这个判决窗口由建立时间(setup time)和保持时间(hold time)两部分组成。并且时间窗口也是多种因素的函数,包括触发器设计、实现技术、运行环境以及无缓冲输出的负载等。输入信号陡峭的边沿可以将此窗口减至最小,随着时钟频

时间同步服务器设置

默认情况下,服务器Windows2003 Server是作为时间同步客户端的。你可以双击系统时间,在“Internet时间”属性页里有时间同步的设置,显然系统默认是作为客户端的。所以,必须通过修改设置,使系统作为时间同步的服务端。 1,修改注册表以下项的键值 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 内的“Enabled”设置为“1”,打开时间同步服务功能。 2,修改以下键值HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config里的“AnnounceFlags”设置为“5”,表示强制主机将它自身宣布为可靠的时间源,从而使用CMOS时钟。如果设置为“a”,则表示为采用外面的时间服务器。 3,重启Win32Time服务执行如下命令:net stop w32time && net start w32time 客户端设置: 1,客户端的设定更改注册表即可。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient里的“SpecialPollInterval”时间间隔(单位为秒,43200为12小时);“SpecialPollTimeRemaining”时间同步的服务器,格式为:“IP address,0”,例如:192.168.1.1,0。 2,重启win32time服务net stop w32time && net start w32time这样,设置完成了,无需重启电脑。如果想立刻时间的变化,可以把时间设置成1、2秒。

跨时钟域问题(Clock Domain Crossing)

跨时钟域问题(Clock Domain Crossing) –同两个时钟域打交道! 引言:设计者有时候需要将处于两个不同时钟域的系统对接,由于接口处是异步(会产生setuptime 和holdtime violation,亚稳态以及不可靠的数据传输)的,因此处理起来较同步逻辑更棘手,需要寻求特殊处理来进行接口界面的设计。 任意的两个系统如果满足以下条件之一,就可称其为异步的: (1)工作在不同的时钟频率上; (2)工作频率相同,但是相位不相同; 处理跨时钟域的数据传输,有两种实现方案: (1)采用握手信号来交互 (2)以异步FIFO来实现 1.1、以握手信号交互: 假设系统A以这种方式向系统B传递数据,握手信号分别为req和ack。 握手协议: Transmitter asserts the req (request) signal, asking the receiver to accept the data on the data bus.

Receiver asserts the ack (acknowledge) signal, asserting that it has accepted the data. 这种处理跨时钟域的方式很直接,但是也最容易产生亚稳态,由于系统A发送的req信号需要系统B中的时钟去sample,而系统B发出的ack信号又需要系统A中的时钟去sample,这样两边都存在着setup time和hold time violation的问题。为了避免由于setup time和hold time vilation所造成的亚稳态,通常我们可以将异步时钟域交互的信号用local system的时钟打两级甚至三级寄存器,以此来消除亚稳态的影响。下图以系统A发送到系统B的req信号示例消除亚稳态的方法: 当然,这种处理方式是以损失传输速率为代价的,加入两到三级寄存器同步异步时钟域的信号,会有许多时钟周期浪费在了系统的“握手”。 有时候,我们也会对数据多打两拍reg来同步,但通常情况下,我们并不会采取这种方式,它不仅需要较多逻辑,而且收效甚微。通常对数据的同步是以异步FIFO来实现的。下图给出了1bit数据传输打两拍reg所做的同步,从中可以发现,与前面的握手信号处理完全一致。 1.2 结合实际工作谈谈以握手信号处理的跨时钟域问题 由于所在项目的逻辑设计相当庞大,超出了最初的预估,同时也鉴于产品化方向考虑可以单独流片,因此对整个逻辑结构进行了划分,在做FPGA原型验证的时候,将这两块逻辑分别映射到不同的器件单元中,这里暂且称它们为wrapper0和wrapper1。实践结果表明,wrapper0和wrapper1的相位需要存在180度的反相,弥补板级走线的延迟影响。

(完整word版)异步FIFO的实现方式

异步FIFO的实现方式 实验目的 本次实验介绍一种异步FIFO的实现方式。使用FIFO存储器可以在两个不同时钟系统之间快速而方便的传输数据。另外,在网络接口,图像处理等方面异步FIFO存储器也得到了广泛的应用。因此,异步FIFO存储器具有较大的研究和应用价值。 异步FIFO的介绍和整体结构 异步FIFO(First In First Out)存储器是指向FIFO缓冲器中写入数据的时钟域和从FIFO缓冲器中读取数据的时钟域是不同的,这两个时钟之间没有必然的因果关系。异步FIFO是一种先进先出的电路,使用在异步时钟域数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。在异步电路中,由于时钟之间周期和相位完全独立,所以数据的丢失概率不为零。如何设计一个高可靠性、高速的异步FIFO存储器便成为一个难点。 异步FIFO的一般结构如图1所示,都是由一个读时钟域电路、一个写时钟域电路和一个双端口的RAM来构成的。异步FIFO与同步FIFO所做的工作是相同的,都是在写信号有效时写数据到RAM中,在读信号有效时把数据从RAM中读出,所以对于中间部分的RAM 设计是比较简单的。另外,读电路和写电路单独实现起来也是比较容易的,只需要按照同步FIFO的工作情况,如果没有写满或读空的状态时每写一个数据就把写地址加1,每读一个数据就把读地址减1。设计难点在于两个时钟域的交叠部分:满、空状态的产生,这也是设计的重点。

图1 异步FIFO结构 针对这个问题,先从对亚稳态的处理开始介绍 亚稳态的处理 一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态、并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。亚稳态发生的原因是由于在同步系统中,如果触发器的建立时间或保持时间不满足,就可能产生亚稳态,此时触发器输出端Q在亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态,逻辑误判有可能通过电路的特殊设计减轻危害(如本设计中将使用的Gray码计数器),而亚稳态的传播则扩大了故障面,难以处理。 在数字集成电路中寄存器要满足建立时间和保持时间。建立时间是在时钟翻转之前数据输入必须有效的时间,保持时间是在时钟沿之后数据输出必须仍然有效的时间。当一个信号被寄存器锁存时,如果信号和时钟之间不满足这个要求,Q的值是不确定的,并且在未知的时刻会固定到高电平或低电平。此时寄存器进入了亚稳态(Metastability)。解决这一问题的最简单方法是使用同步器,使得在另一个时钟域采样时信号足够稳定。 同步器的设计本身就是一个比较麻烦的问题,本次设计中也不深入讨论一些细节性的问题,直接采用两级采样的同步器,避免了使用一级同步器仍可能出现亚稳态的情况。每个这样的同步器都具有一个等于时钟周期的等待时间。这种同步器可以把一些亚稳态的值同步为确定值,但并不一定是正确值,同时有一些亚稳态也还是无法稳定成确切值的,这种情况称为同步出错。由于同步出错的随机性,很难对它们进行跟踪。如果想进一步降低亚稳态出现的概率、可以再増加同步器的级数,但是太多的同步器会使系统的性能下降,所以系统中不会用太多的同步器,一般使用两个同步器已经足够。 空满状态的判断 之所以在前面介绍了亚稳态的问题,是因为这是判断满状态或空状态无法回避的一个问题。因为读电路在读控制时维持一个地址指针,写电路在写控制时维持一个地址指针,简单来说,这两个地址指针直接一比较,就能得到空满的判断结果,但是实际操作起来非常麻烦。例如对于满状态来说,这是写入电路所关心的状态,因为满状态下不能继续写入数据,但是空状态对于写电路没有影响。如果写入电路要判断当前FIFO是否为满,就需要把写电路自身维持的写指针和读电路维持的读指针做比较,这个读指针就需要送入写电路中,此时就发生了穿过时钟域的问题,也就是说,读指针要从读时钟域同步到写时钟域,然后参与判断,此时就需要前面介绍的同步器。同样,对于空状态来说,这是读出电路所关心的状态,也是由读电路来维持的,因为空状态下再读数就会得到错误的数据,但是满状态下读数是没有影响的。如果读电路要判断当前FIFO是否为空,就需要把写时钟域中的写指针取到读时钟域来,和读时钟域的读指针进行比较得出是否是空状态,同样跨越了时钟域。在跨时钟域系统中希望出现错误的概率越低越好,此时格雷码无疑是最好的一个选择。格雷码属于可靠性编码,是一种误差最小化的编码,它大大减少了由一个状态到下一个状态时电路混淆。由这种编码相邻的两个码组之间只有一位不同,和其他编码同时改变2位和多位的情况相比更为可靠。表1所示是格雷码与二进制码的对应关系。

跨时钟域信同步方法种

跨时钟域信号同步方法6种 ASIC中心 1 引言 基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统。但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免。如果对跨时钟域带来的亚稳态、采样丢失、潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行。本文总结出了几种同步策略来解决跨时钟域问题。 2 异步设计中的亚稳态 触发器是FPGA设计中最常用的基本器件。触发器工作过程中存在数据的建立(setup)和保持(hold)时间。对于使用上升沿触发的触发器来说,建立时间就是在时钟上升沿到来之前,触发器数据端数据保持稳定的最小时间。而保持时间是时钟上升沿到来之后,触发器数据端数据还应该继续保持稳定的最小时间。我们把这段时间成为setup-hold时间(如图1所示)。在这个时间参数内,输入信号在时钟的上升沿是不允许发生变化的。如果输入信号在这段时间内发生了变化,输出结果将是不可知的,即亚稳态 (Metastability) 图1 一个信号在过渡到另一个时钟域时,如果仅仅用一个触发器将其锁存,那么采样的结果将可能是亚稳态。这也就是信号在跨时钟域时应该注意的问题。如图2所示。 信号dat经过一个锁存器的输出数据为a_dat。用时钟b_clk进行采样的时候,如果a_dat正好在b_clk的setup-hold时间内发生变化,此时b_ dat就既不是逻辑"1",也不是逻辑"0",而是处于中间状态。经过一段时间之后,有可能回升到高电平,也有可能降低到低电平。输出信号处于中间状态到恢复为逻辑"1"或逻辑"0"的这段时间,我们

跨时钟域设计问题与方法

1.1ASYNCHRONOUS INTERFACE – CDC GUIDELINE 1.1.1INTRODUCTION ASIC design is becoming more complex due to more and more IP integrated in a chip, and data is frequently transferred from one clock domain to another domain. Clock domain crossing issue becomes more and more important vector in a multi-clock, stable work chip. This document mainly introduce below topics: a. Where will occur CDC; b. What problem will occur due to CDC issue; c. How to design CDC logic correctly. 1.1.2APPLICATION AREA In a multi-clock design, clock domain crossing occurs whenever data is transferred from a flop driven by one clock to a flop driven by another clock. As it is shown in Figure 1-1, Figure 1-1 Clock domain crossing *Note: definition of terminology: Source clock: Clock A in figure 1-1 is defined as source clock; Destination clock: Clock B in figure 1-1 is defined as destination clock; Source clock domain: All the logic design whose reference clock is Clock A, like flip-flop FA in figure 1-1; Destination clock domain: All the logic design whose reference clock is Clock B, like flip-flop FB in figure 1-1; 1.1.3PROBLEM DEFINITION Meta-stability, glitch, multi-fanout and re-convergence may occur in an asynchronous design, they may cause design entering an un-anticipant state and result in function error.

异步FIFO设计

异步FIFO设计文档 一、概述 在大规模ASIC或FPGA设计中,多时钟系统往往是不可避免的,这样就产生了不同时钟域数据传输的问题,其中一个比较好的解决方案就是使用异步FIFO来作不同时钟域数据传输的缓冲区,这们既可以使相异时钟域数据传输的时序要求变得宽松,也提高了它们之间的传输效率。此文内容就是阐述异步FIFO 的设计。 二、设计原理 2.1结构框图 Fig. 2.1.1 如上图所示的同步模块synchronize to write clk,其作用是把读时钟域的读指针rd_ptr采集到写时钟(wr_clk)域,然后和写指针wr_ptr进行比较从而产生或撤消写满标志位wr_full;类似地,同步模块synchronize to read clk的作用是把写时钟域的写指针wr_ptr采集到读时钟域,然后和读指针rd_ptr进行比较从而产生或撤消读空标志位rd_empty。 另外还有写指针wr_ptr和写满标志位wr_full产生模块,读指针rd_ptr和读空标志位rd_empty产生模块,以及双端口存储RAM模块。

2.2 二进制计数器存在的问题 异步FIFO读写指针需要在数学上的操作和比较才能产生准确的空满标志位,但由于读写指针属于不同的时钟域及读写时钟相位关系的不确定性,同步模块采集另一时钟域的指针时,此指针有可能正处在跳变的过程中,如图Fig.2.2.1所示,那么采集到的值很有可能是不期望的值,当然,不期望的错误结果也会随之发生。 Fig. 2.2.1 上图中,rd_ptr2sync 3和4以及4和5之间的中间态是由于到各寄存器的时钟rd_clk存在偏差而引起的。二进制的递增操作,在大多数情况下都会有两位或者两以上的bit位在同一个递增操作内发生变化,但由于实际电路中会存在时钟偏差和不同的路径延时,二进制计数器在自增时会不可避免地产生错误的中间结果,如图Fig.2.2.2。 Fig.2.2.2 上图是Fig.2.2.1的电路原型以及局部波形的放大。由于rd_clk上升沿到达

相关主题
文本预览
相关文档 最新文档