FC2カウンター FPGAの部屋 DDR SDRAMコントローラをVHDLからVerilog2001へ書き換える2
FC2ブログ

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

FPGAの部屋

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

DDR SDRAMコントローラをVHDLからVerilog2001へ書き換える2

”DDR SDRAMコントローラをVHDLからVerilog2001へ書き換える2”ではgenerate文のVHDLとVerilogの違いについて書こうと思う。
VHDLでLUTを使用したDual Port RAMのRAM16X1Dプリミティブをアドレス幅だけインスタンスを作る方法を下に示す。

    FIFO_GEN : for i in USER_INPUT_ADDRESS_WIDTH-1 downto 0 generate
        RAM16_INST : RAM16X1D port map(
            DPO => out_sig(i),
            SPO => open,
            A0 => wp(0),
            A1 => wp(1),
            A2 => wp(2),
            A3 => wp(3),
            D => din(i),
            DPRA0 => rp(0),
            DPRA1 => rp(1),
            DPRA2 => rp(2),
            DPRA3 => rp(3),
            WCLK => clk,
            WE => we
        );
    end generate FIFO_GEN;


Verilog2001で書くとこうなるのではないだろうか?

    generate
    genvar i;
        for (i=USER_INPUT_ADDRESS_WIDTH-1; i>=0; i=i-1) begin: ADDR_FIFO_RAM
            RAM16X1D #(
                .INIT(16'h0000) // Initial contents of RAM
            ) RAM16_INST (
                .DPO(out_sig[i]),
                .SPO(),
                .A0(wp[0]),
                .A1(wp[1]),
                .A2(wp[2]),
                .A3(wp[3]),
                .D(din[i]),
                .DPRA0(rp[0]),
                .DPRA1(rp[1]),
                .DPRA2(rp[2]),
                .DPRA3(rp[3]),
                .WCLK(clk),
                .WE(we)
            );
        end
    endgenerate


一応、ModelSimでコンパイルは通っているがelaborateの時にエラーが出るかもしれないし、どのようになるかもわからない。それは全部出来てSimulationするときのお楽しみとしたい。

2006.01.17:追記 generateの中のbeginの後にラベル名(ADDR_FIFO_RAM)が必要なようだ。ModelSimではなくても通るがISEのXST(論理合成ツール)ではラベルがないと通らないようだ。
  1. 2006年12月03日 13:05 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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