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

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

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

設計のポイント

verilog記述のポイント:エッジ検出回路の記述

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

実現したい仕様・課題

外部からの制御信号やフラグの「立ち上がった瞬間」「立ち下がった瞬間」を捉えて1回だけ処理を起動したい場面は頻繁にあります。信号のレベルをそのまま条件に使うと、信号がHighの間ずっと処理が繰り返されてしまいます。変化点を1クロック幅のパルスとして正しく検出したいというのが課題です。

設計のポイント

エッジ検出は、対象信号を1クロック遅延させたレジスタと現在値を比較することで実現します。信号sigの1クロック前の値sig_dを保持し、sig & ~sig_d が1になった瞬間が立ち上がりエッジ、~sig & sig_d が立ち下がりエッジです。検出結果は1クロック幅のパルスとなるため、カウンタのインクリメント、ステートマシンの起動トリガ、割り込み要求の生成など「1回だけ実行したい処理」の起動条件にそのまま使えます。注意点として、非同期入力(外部スイッチや他クロックドメインの信号)に対しては、必ず2段フリップフロップで同期化してからエッジ検出を行います。同期化前の信号を直接エッジ検出すると、メタステーブルにより誤パルスや検出漏れが発生します。また、機械式スイッチにはチャタリングがあるため、デバウンス処理を通した後の信号に対してエッジ検出を適用します。クロックより速い信号の変化は原理的に取りこぼすため、その場合は入力段での信号設計(パルス伸長等)から見直します。

【コード例】
reg sig_d;
always @(posedge clk) sig_d <= sig;
wire rise = sig & ~sig_d; // 立ち上がり検出(1clk幅パルス)
wire fall = ~sig & sig_d; // 立ち下がり検出

always @(posedge clk)
if (rise) cnt <= cnt + 8’d1; // エッジで1回だけ実行

verilog記述のポイント:エッジ検出回路の記述 | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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