今日の FPGA デザインにおいて、異なるクロック・ドメイン間における信号の接続 ( CDC ( Clock Domain Crossing ))によるメタステーブルが問題になっています。従来の構造による検証だけでは、CDC 信号の検証に有効ではありません。このコラムでは CDC の問題とその検証方法について4回に分けてご説明します。

 

 

第1回:セットアップタイムやホールドタイムとは

FPGA や ASIC などの LSI に組み込まれている全ての FF(フリップフロップ)/レジスタ には、それぞれが入力時のデータを正しく取り入れて、出力信号を生成できるように、セットアップやホールド タイムなどのタイミング制約が定義されています。

つまり、クロックのエッジの最小時間(セットアップタイム tCO)とクロックのエッジの最小時間(ホールドタイム tH)の間は入力データが安定している必要があります。

 

今回は、セットアップやホールドタイムの制約がある理由を D-FF(フリップフロップ)の構造から説明したいと思いますが、D-FF の構造に興味が無い方へ簡単に説明すると、クロックが入る前後にデータが安定していないと、前後のどちらのデータを取るのか分からないだけでなく、出力が ”Low(0)” と ”High(1)” の中間の電位にしばらく留まるメタステーブルが起こります。そこで、セットアップ/ホールドタイムの制約が存在しています。
では、この現象を詳細にご説明します。

 

D-FF(フリップフロップ)の構造は色々とありますが、CMOS 回路では一般的に図1-1のように インバータやトランスファーゲートなどで構成されます。教科書に書いてある D-FF の回路図とは違いますが、論理は同じでトランジスタ数が少ないのが特徴です。

トランスファーゲートはスイッチの役割を果たし、クロック “C” の状態値によってオンやオフになります。

インバータを 2個使ったループ回路(ラッチ回路)が前段と後段にありますが、ここでデータを保持する仕組みになっています。

動作としては、クロック “C” が L(Low/0) の時にデータ “D” の信号を読み込んで、次に “C” が↑(立ち上がる)と そのデータを出力 “Q” に出力します。

 

図1-1 一般的な D-FF の回路構造

 

図1-2 は ”C” が L(Low/0) の時です。

前段のインバータ・ループに “D” の信号を格納し、後段のインバータ・ループで前サイクルのデータを保持します。

前段と後段のインバータ・ループを接続するトランスファーゲートは オフ なので信号は伝わりません。

 

図1-2 “C” が “Low(0)” の状態

 

図1-3 は “C” が H(High/1) の時です。
“C” を↑にすると、前段のインバータ・ループに格納したデータを後段へ伝送します。

 

図1-3 “C” が “Low(0)” の状態

 

“C” を↑にすると、図1-3のように “D” から信号は入って来ません。

この時に、信号が前段のインバータ・ループを1周していないと信号が “L” と “H” の間を ゆらりゆらり とゆれて 中間電位(メタステーブル)になります。もちろん、CMOS 回路なので ある時間後に “L” か “H” になるのですが、メタステーブル状態は遅延時間より長いのでデータを取りそこなうこともあります。

このために、セットアップ時間の制約があります。

 

また、“C” を↑にして “D” の入力が閉まる直前に “D” が変化すると、次のサイクルで取り込まれるはずのデータを早く取り込んだり、同じようにインバータ・ループで発振やメタステーブルが起きますので、“C” が↑になった後でも “D” の信号はしばらく安定している必要があります。

このために、ホールド時間の制約があります。

よって、クロックが1本の場合はセットアップやホールドタイム時間の制約を守っていれば問題ありません。しかし、クロックが複数ある時は注意する必要があります。

 

今回は ここまでです。次回はメタステーブルについて説明します。