FC2カウンター FPGAの部屋 Spartan3E Starter KitのDDR SDRAMコントローラについての疑問
fc2ブログ

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

FPGAの部屋

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

Spartan3E Starter KitのDDR SDRAMコントローラについての疑問

Spartan3E Starter KitのDDR SDRAMコントローラがISEでインプリメントできるところまで来たが、どうしてもMAPでエラーが出てしまう。DDR_DQのIO出力はDDRのデータと出力イネーブルを制御するのにDDRレジスタを使用している。そのうちの出力イネーブルを制御するDDRレジスタにエラーが出ているようだ。SET/RESETを統一してもエラーが出てしまう。
DDRtest_1_060624.png

Sprtan3EからVirtex2proにデバイスを変更するとインプリメントできる。
DDRtest_2_060624.png

IOBの出力レジスタの構成もFPGA Editorを見た限りでは同じに見えるのだがどうしてだろうか?
Virtex2proのデータパッド(DQ)のIOBを見てみると、思い通りに実装されている。
DDRtest_3_060624.png

ちなみに入力用DDRレジスタの下側(CLKの立下りで動作するレジスタ)が使われていないのはそっち側のデータを使用していないのでどっかで消されたようである。
もう少し調査が必要のようだ。アンサーで調べてみようと思う。

2006/6/25追記

Spartan3-1000でもやってみたがインプリメントできた。

DDR_DQ(DDR SDRAMのデータDQ)の出力DDRレジスタ関係のソースを次に示す。

    -- Instantiate Output DDR registers
    WRDATA_DDR_OUT_INST : for i in DDR_DATA_WIDTH-1 downto 0 generate
        WRDATA_DDR_OUT : FDDRCPE port map(
            q => ddr_out(i),
            d0 => wrdata_2d(i),
            d1 => wrdata_3d_half(i),
            c0 => clk,
            c1 => clkx,
            ce => dqs_enable_2d(i/8),
            clr => reset,
            pre => gnd
        );
    end generate WRDATA_DDR_OUT_INST;
    
    not_dqs_enable_2d <= not dqs_enable_2d;
    
    -- Insantiate three-state DDR registers
    WRDATA_DDR_TRI_INST : for i in DDR_DATA_WIDTH-1 downto 0 generate
        WRDATA_DDR_TRI : FDDRRSE port map(
            q => out_tri(i),
            d0 => dqs_reset_2d_dqtri(i/8), -- DQSが0になる最初のクロックで1なので、一番最初の半クロックだけディスエーブル
            d1 => gnd,
            c0 => clk,
            c1 => clkx,
            ce => vcc,
            r => reset,
            s => not_dqs_enable_2d(i/8)
        );
    end generate WRDATA_DDR_TRI_INST;
    
    -- inferr the 3-State buffer
    process(out_tri, ddr_out) begin
        for i in DDR_DATA_WIDTH-1 downto 0 loop
            if out_tri(i) = '1' then
                ddr_dq(i) <= 'Z';
            elsif out_tri(i) = '0' then
                ddr_dq(i) <= ddr_out(i);
            end if;
        end loop;
    end process;


上のソースで"-- inferr the 3-State buffer"の部分をBUFTを使用するように以下のように修正したが他のエラーが出てしまった。

    -- inferr the 3-State buffer
    OBUFT_GEN : for i in DDR_DATA_WIDTH-1 downto 0 generate
        OBUFT_INST : OBUFT port map(
            o => ddr_dq(i),
            i => ddr_out(i),
            t => out_tri(i)
        );
    end generate OBUFT_GEN;


Spartan3Eはなぜだめなのだろうか?
Virtex2proやSpartan3と根本的に異なっているのだろうか?
何か情報を持っている方は教えてください。
  1. 2006年06月24日 22:14 |
  2. Spartan3E Starter Kit
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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