FC2カウンター FPGAの部屋 VHDLにおけるifdefの代わり
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

VHDLにおけるifdefの代わり

何かVHDLの時にifdefを使いたいという要求があるみたいだが、私も if generate を使って代わりにしている。
これがサンプルコードだ。

    BRAM16I : if ISETUP_ADDR_WIDTH=13 generate -- 8Kbyteの場合
        BLKRAM16GEN : for i in 0 to 3 generate
            blkram16 : ramb16_s18 port map(
                di => int_reg_din(15+16*i downto 16*i),
                dip => gnd2,
                en => vcc,
                we => bram_we(1+2*i),
                ssr => gnd,
                clk => clk,
                addr => adr_node(12 downto 3),
                do => bram_dout(15+16*i downto 16*i)
            );
        end generate;
    end generate;
    
    BRAM8I : if ISETUP_ADDR_WIDTH=14 generate -- 16Kbyteの場合
        BLKRAM8GEN : for i in 0 to 7 generate
            blkram8 : ramb16_s9 port map(
                di => int_reg_din(7+8*i downto 8*i),
                dip => gnd1,
                en => vcc,
                we => bram_we(i),
                ssr => gnd,
                clk => clk,
                addr => adr_node(13 downto 3),
                do => bram_dout(7+8*i downto 8*i)
            );
        end generate;
    end generate;


constantで指定した値 ISETUP_ADDR_WIDTH=13、つまりアドレスが13ビット(8Kbyte)の時にはRAMB16_S18を、SETUP_ADDR_WIDTH=14、つまりアドレスが14ビット(16Kbyte)の時にはRAMB16_S9を使うようになっている。

あれ、今良く見てみると end generate の後にラベル名を忘れている。これでも通るんだね。。。
  1. 2007年06月16日 11:03 |
  2. VHDLの書き方
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/505-626e661f
この記事にトラックバックする(FC2ブログユーザー)