2006年02月28日

VHDL TIPS 「generateの使用法」

あるバスに対して同じ回路を複数個用意したり、ある回路の有効/無効を切り替えたりしたい事がある。こんなときにgenerateを使用する。

同じ回路を複数個用意する場合の例


G_ADR : for LCNT in 0 to 15 generate
    OBUF_ADR : OBUF port map ( I => ADR(LCNT), O => X_ADR(LCNT) );
end generate;

上記の例では内部のADRバスに対してXilinxのプリミティブライブラリのOBUFを割り当ててX_ADRとしてピンに出力している。

回路の有効/無効を切り替える場合の例


constant SYNC : integer := 0;
-- 同期
ASYNC : if ( SYNC = 1 ) generate
    process ( CLK ) begin
        if ( CLK'event and CLK = '1' ) then
            if ( SEL_DELAY = '1' ) then
                S0_SYSCMD <= L_SYSCMD1;
            else
                S0_SYSCMD <= L_SYSCMD2;
            end if;
        end if;
        end process;
end generate;
-- 非同期
SYNC : if ( SYNC /= 1 ) generate
    process ( SEL_DELAY, L_SYSCMD1, L_SYSCMD2 ) begin
        if ( SEL_DELAY = '1' ) then
            S0_SYSCMD <= L_SYSCMD1;
        else
            S0_SYSCMD <= L_SYSCMD2;
        end if;
    end process;
end generate;


上記の例では、動作クロックを上げたい時には遅延を少なくするために同期回路を有効にし、動作レイテンシを少なくしたい時には非同期回路を有効にする。この切り替えは「SYNC」の0/1を変更するだけで出来る。(C言語の#ifの様な使い方)

このように、ライブラリを設計する時等にgenerateでバス幅や回路レイテンシを指定できるようにすれば利用しやすくなる。



投稿時刻(10:49)│コメント(0)VHDL 

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
最新コメント
ブログ内検索
カテゴリ別表示
月別表示
問い合わせ・連絡先
ta_bo__@livedoor.com

本サイトは以下のアクセス解析を使用しております。
基礎化粧品