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

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

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

設計のポイント

VHDL記述のポイント:rising_edge(clk)を使う

設計内容分類FPGA

実現したい仕様・課題

クロックの立ち上がり検出には、古くからの慣用句 clk’event and clk = ‘1’ と、標準関数 rising_edge(clk) の2通りの書き方が流通しています。’eventを使った書き方は、std_logicの9値のうち’X’や’L’から’1’への変化もエッジと誤判定する余地があり、シミュレーション上の見かけの動作が実機と食い違う一因になります。エッジ検出を安全な書き方に統一したいというのが課題です。

設計のポイント

クロックエッジの判定には、std_logic_1164パッケージの標準関数 rising_edge(clk)(立ち下がりは falling_edge(clk))を使用します。rising_edgeは「’0’から’1’への遷移」を厳密に判定する関数であり、clk’event and clk = ‘1’ のように「値が変化し、かつ現在値が’1’」という条件では拾ってしまう’X’→’1’や’L’→’1’といった遷移を、エッジとして扱いません。これにより、初期化前の不定値やテストベンチ上の弱い駆動値が混入した場合でも、実機のフリップフロップと整合した動作をシミュレーションで再現できます。記述としても関数名がそのまま意図(立ち上がりエッジ)を表すため可読性が高く、合成ツールもフリップフロップとして正しく認識します。同期プロセスの標準形は、感度リストにクロック(非同期リセットがある場合はリセットも)を置き、if rising_edge(clk) then で本体を囲む形です。1つのプロセスで両エッジを扱う記述(rising_edgeとfalling_edgeの併用)は、対応できるデバイス構成が限られるため、DDR入出力など明確な必要がある場合を除き避けるのが無難です。既存コードに’event形式が残っている場合も、新規・改修部分からrising_edgeへ統一していくことを推奨します。

【コード例】
— 推奨:標準関数によるエッジ判定
process(clk, rst_n)
begin
if rst_n = ‘0’ then
q <= (others => ‘0’);
elsif rising_edge(clk) then
q <= d;
end if;
end process;

VHDL記述のポイント:rising_edge(clk)を使う | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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