アートのハードウェア・アーキテクチャ(3)クロック・ドメイン

単一クロック設計マルチクロック設計に比べて(同期設計)を、この設計は、準安定生成するために実装することが容易と小さく、ホールド時間違反領域の確立。
複数のクロックドメイン :(ケース複数のクロックドメインにおいては、準安定で、その結果、クロックの立ち上がりエッジの出力クロックドメイン到着が別のクロックドメインに変更された場合に生じやすい)
周波数(1)異なるクロック
( 2)同じクロック周波数、異なる位相

マルチクロック処理技術の設計:
従来の命名(1)クロック
例:システム・クロックは、受信クロックをRX_CLK名前を付けることができ、送信クロックTX_CLK名前を付けることができ、SYS_CLK名前を付けることができ、スクリプト内のすべてのクロックの使用ワイルドカードを用いて動作させることができます。命名時に同様に、ドメインに属する同一のクロック信号は、同じプレフィックスを使用しています。
(2)サブモジュール設計
、各モジュールは、単一のクロックで動作1、
2、クロスクロックドメイン送信信号、同期モジュールを使用して、ドメイン・モジュールに入るクロック信号、クロックモジュールに同期
3、同期できるだけ小さくモジュールサイズ
ここに画像を挿入説明
:クロックドメイン間
(1)転送制御信号
衝撃準安定を低減する、最も一般的な方法の設計者は、一緒に直列に接続された、すなわち二つ以上のフリップフロップ、多段シンクロナイザを使用することです回路同期化(2つの同期回路を用いたが、メタステーブルを回避するのに十分であることは、クロック周波数がデザインだけで非常に高いだけ3レベル同期回路の使用を必要とする)
ここに画像を挿入説明
送信(2)データ信号
多くの場合、1つのクロックドメインからのデータ別の送信クロックドメインを、異なるクロックドメイン伝送の間の2つの方法で、通常のデータを確実にする:
ハンドシェイクモードで使用して、1
2、非同期FIFOを使用すること

一、同频零相位差时钟
唯一要求:保证STA(静态时序分析)通过,如果这一条件满足,就不会出现亚稳态问题和数据丢失或不一致问题。

二、同频恒定相位差时钟
ここに画像を挿入説明
当数据从clk1 传输至clk2 时,由于更小的建立时间/保持时间余量,对于组合逻辑的延时约束都会变得更紧,如果组合逻辑的延时能够保证满足采样沿处建立时间和保持时间的要求,数据就可以正确传输,并且没有亚稳态产生(不需要同步器)
一般会创建这种情况以满足时序的要求(通过在发射边沿和捕获边沿加入偏移)

三、非同频、可变相位差时钟
(1)整数倍频率时钟
两个时钟的有效边沿的相位差是可变的,这两个时钟的有效边沿的最小相位差始终等于其中较快的那个时钟的时间周期(以下的图,数据是由快时钟到慢时钟,可能会出现数据丢失,所以必须要将源数据保持至少一个目标时钟周期,可以使用一个简单的FSM实现
ここに画像を挿入説明

clk1的频率是时钟clk2的三倍。clk2捕获数据的时间可能是T、2T或3T,取决于数据是在clk1哪一个边沿发送出来,所以应满足任意路径的最差延迟都应在时钟边沿相位差为T时满足建立时间的要求。
由于至少都有较快时钟的一个完整的周期用来传输数据,所以通常可以保证满足建立时间和保持时间的要求,基本不会存在亚稳态或数据不一致的问题,也就无需使用同步器。

(2)非整数倍频率的时钟
由于一个时钟的频率是另一个时钟的非整数倍,所以有效边沿的相位差是可变的。此时两时钟之间的最小相位差足以使亚稳态发生(取决于实际的频率倍数和设计工艺)
1、第一种情况,在源时钟有效沿和目的时钟有效沿之间有足够大的相位差,不会有亚稳态
例如:clk1和clk2分别是clk=30ns的三分频与二分频,即clk1的周期是15ns,clk2的周期是10ns。这两个时钟的最小相位差为2.5ns,对于满足建立时间和保持时间足够了。(以下的图,数据是由慢时钟到快时钟,必须增加逻辑以保证数据在快时钟域中只取样一次,防止数据丢失
ここに画像を挿入説明
但是由于该相位差小,应该避免在跨越两个时钟的位置使用任何的组合逻辑(也就是仅仅只能满足建立时间和保持时间),如果需要增加组合逻辑,那么必须使用同步器。

2、第二种情况,源时钟和目的时钟有效沿非常接近,导致产生亚稳态问题。
一旦有时钟边沿接近这种情况出现,下一个时钟周期就会留出足够大的时间冗余,使得数据的捕获不会出现违背建立时间或保持时间的要求。
ここに画像を挿入説明
3、第三种情况,两个时钟的时钟沿在许多连续的周期中都非常接近,(与异步时钟类似,但是以上情况下均是有源时钟进行分频信号处理所得到的时钟,所以两个时钟之间的相位差是可以计算的,具有周期性),这种情况下时钟间的相位差异很小,并能持续存在几个周期。clk1=10ns,clk2=9ns
在前两个周期中可能违背建立时间(源时钟在目的时钟之前),而在后两个时钟周期中可能会违背保持时间(目的时钟在源时钟之前)(除了亚稳态问题,数据从慢时钟域传递至快时钟域也可能丢失)

ここに画像を挿入説明
为了不丢失数据,数据需要保持稳定至少两个目的时钟周期,既适用于从快到慢的传输,也适用于从慢到快的传输。

四、握手信号方法
ここに画像を挿入説明
ここに画像を挿入説明
(1)发送端将数据放到数据总线上并发送(xreq)信号,表示有效数据已经发送接受端的数据总线上,途中xreq->yreq1即将xreq同步至yclk时钟。
(2)接收器通过一个同步器,识别yreq2后,锁存数据总线上的数据,并发出确认信号yack
(3)yack信号同步至xclk,产生信号xack1
(4)发送端通过一个同步器,识别xack2。
(5)下一个时钟周期,将下一个数据放到数据总线上
所以安全地将一个数据从发送端传输至接受端需要5个时钟周期。由此看来握手信号的缺点也十分明显,传输单个数据的延迟太长。

握手信号的要求
(1)通过上述分析,接受端锁存数据总线上的数据,至少要经过两个时钟周期,所以数据在发送时钟域内稳定至少两个时钟上升沿
(2)与之前分析相同,当数据由快时钟向慢时钟发送时,请求信号xreq的宽度应该超过两个上升沿时钟

五、同步FIFO
ここに画像を挿入説明
同步FIFO的工作原理:在同一个时钟信号下,通过读、写指针产生各自的读、写地址,再通过产生的读、写地址分别从FIFO存储器中读取和写入数据。使用状态模块产生的fifo_empty和fifo_full信号。如果fifo_empty有效,说明FIFO已经“读空”,如果fifo_full有效,说明FIFO已经“写满”。
而在读写指针相等时,FIFO要么空要么满,所以需要对这两种情况进行区分。
(1)写操作使两个指针在下个时钟保持相等,即FIFO满

always@(posedge clk or negedge rst_n)
begin:full_gen
if(!rst_n)
	full<=0;
else if(wr&&(wp+1'b1==rp)
	full<=1;
else
	full<=0;
end

(2)同理,如果使读操作使两个指针在下个时钟保持相等,即FIFO空

always@(posedge clk or negedge rst_n)
begin
	if(!rst_n)
		empty<=0;
	else if(rd&&(rp+1'b1==wp))
		empty<=1;
	else
		empty<=0;
end

或者采用计数器的方法,计数器复位后初始化为0,之后写操作加一,读操作减一,当计数器为0时,即FIFO空;当计数器为FIFO的宽度时,即FIFO满,但是这种方案会增加额外的硬件(比较器)来产生FIFO空和满的条件。

六、异步FIFO
ここに画像を挿入説明
异步FIFO的工作原理:原理上,与同步FIFO的区别在于读写数据工作在不同时钟域下。(与握手信号不同,异步FIFO用于性能要求较高的设计中,延迟比系统资源更为重要)
(1)避免使用二进制计数器,使用格雷码同步实现指针;
由于指针与各自的时钟同步,而彼此的之间异步,使用二进制计数器实现指针,可能会导致用于比较的指针值取样错误。(比如从FFF->000所有位都会发生改变,所以本次采用格雷码进行操作)
(2)数据指针如何在不同时钟域传递
(1)xclk的写指针(二进制)->gray 码 ->经过同步器 ->读写指针比较是否产生“写满”状态
(2)yclk的读指针(二进制) ->gray码 ->经过同步器 ->读写指针比较是否产生"读空"状态
(3)gray码的读写指针如何比较产生读写状态
判断读空时:需要读时钟域的格雷码rgray_next和被同步到读时钟域的写指针wp每一位都相同。
判断写满时:需要写时钟域的格雷码wgray_next和被同步到写时钟域的读指针rp高两位不同,其余各位完全相同。

公開された54元の記事 ウォンの賞賛4 ビュー1074

おすすめ

転載: blog.csdn.net/buzhiquxiang/article/details/103368697