組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

verilog記述のポイント:トグル同期によるクロックドメイン間のパルス受け渡し

設計内容分類FPGA
解決できる課題CPU負荷低減

実現したい仕様・課題

あるクロックドメインで生成した1クロック幅のパルス(イベント通知)を別ドメインへ渡す場合、単純な2段フリップフロップ同期では、受け側クロックが遅いとパルスを取りこぼし、速いと多重検出する危険があります。ドメインをまたいでイベントを1回=1回として確実に伝えたいというのが課題です。

設計のポイント

パルスのクロックドメイン間受け渡しには、トグル同期(パルスをレベル反転に変換して渡す方式)を用います。送り側ドメインでは、パルスが発生するたびに1ビットのトグル信号を反転させます。パルスの「発生」という一瞬の事象を、「レベルが変わった」という持続する状態に変換するのがポイントで、これにより受け側クロックの速さに関係なく事象を保持したまま渡せます。受け側ドメインでは、トグル信号を2段フリップフロップで同期化した後、さらに1段遅延させた値とのXORを取ることで、「レベルが変化した」ことを検出し、受け側クロックの1クロック幅パルスとして再生します。この方式で1つのイベントは必ず1回のパルスとして伝わり、取りこぼしも多重検出も起こりません。制約として、送り側のイベント間隔が受け側の同期化遅延(2〜3クロック)より短いと、トグルが往復して検出漏れが生じるため、「イベント間隔が受け側数クロック分以上空く」ことを設計条件として保証します。高頻度のイベントや、イベントに付随するデータも渡したい場合は、この方式ではなくDCFIFOを使うのが適切です。トグル同期・2段同期・DCFIFOはCDCの基本3点セットとして、対象(レベル/パルス/データ)に応じて使い分けます。

【コード例】
// 送り側(clk_a):パルスをトグルに変換
always @(posedge clk_a) if (pulse_a) tgl <= ~tgl;

// 受け側(clk_b):同期化して変化を検出
reg s1, s2, s3;
always @(posedge clk_b) begin
s1 <= tgl; s2 <= s1; s3 <= s2;
end
wire pulse_b = s2 ^ s3; // clk_bドメインの1clk幅パルス

verilog記述のポイント:トグル同期によるクロックドメイン間のパルス受け渡し | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ