2007年08月29日

VHDL TIPS 「postponed processの使用法」

前回のシミュレーション・サイクルで少し触れた実行遅延プロセスを紹介する。

実行遅延プロセスはVHDL93で追加された機能で、その時刻の全てのデルタサイクルが終わった後で実行されるプロセスである。

動作をサンプルソースで見てみる事にする。
以下のソースは4ビットの同期カウンタを通常のプロセスと実行遅延プロセスでセットアップチェックを行い動作を比較した例だ。


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;

entity PP_TEST is
end PP_TEST;

architecture behavior  of PP_TEST is

    signal  CLK     : std_logic;
    signal  COUNT   : std_logic_vector(3 downto 0) := (others => '0');

begin

    -- クロック生成
    process begin
        CLK <= '0';
        wait for 10 ns;
        CLK <= '1';
        wait for 10 ns;
    end process;

    -- CLKでCOUNTをインクリメント
    process ( CLK ) begin
        if ( CLK'event and CLK = '1' ) then
            COUNT <= COUNT + '1';
        end if;
    end process;

    -- COUNTのセットアップチェック
    process ( CLK ) begin
        if ( CLK = '1' ) then
            assert ( COUNT'last_event >= 5 ns )
                report "Setup Time was not suitable."
                severity WARNING;
        end if;
    end process;

    -- COUNTのセットアップチェック
    postponed process ( CLK ) begin
        if ( CLK = '1' ) then
            assert ( COUNT'last_event >= 5 ns )
                report "Setup Time was not suitable.(postponed)"
                severity WARNING;
        end if;
    end process;

end behavior;


これを実行すると実行遅延プロセスのアサーションだけアクティブになる。
これは、先ほども書いたが全てのデルタ遅延が処理された後でカウンタのセットアップチェックを行うためセットアップ時間が0となり5ns以上では無いのでアサートする。
一方、通常のプロセスはカウンタの値が更新される1つ前のデルタサイクルでセットアップチェックを行うためセットアップ時間が10nsとなり5ns以上なのでアサートされない。

ここで注意として実行遅延プロセスでクロックイベント等を評価した場合、デルタサイクルが無い場合を除き真が返ってくることはない。
また、実行遅延プロセスでデルタサイクルを発生させる事は禁止になっている。
簡単に言うと、実行遅延プロセスで「if ( CLK'event and CLK = '1' )」と書いても既にクロックイベントは終了しているのでこのIF文は実行される事は無い。と言う事と、実行遅延プロセスで「A <= B;」等と信号の代入を行ってはダメと言う事である。

投稿時刻(12:55)│コメント(0)VHDL 

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
最新コメント
カテゴリ別表示
月別表示