FC2カウンター FPGAの部屋 DDR2 SDRAMコントローラにODT機能を追加
FC2ブログ

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

FPGAの部屋

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

DDR2 SDRAMコントローラにODT機能を追加

ET2008のDDR SDRAMのセミナに行って、ODT(On-Die Termination) はWrite時にだけONすると良いと言うことを聞いてきた。それも、FPGA側にDCI (Digitally Controlled Impedance) を使用するとベストだそうだ。(しかし、DCIを使用すると電力を消費しFPGAが熱くなる)ここでFPGAとDDR2 SDRAM間の配線にはダンピング抵抗のみ実装を想定しているそうだ。
SUZAKU-Vの配線がどうなっているのかいまいちわからないのだが、ODTをWriteのときにだけONしてみることにした。ifdefを使って実装して、いらないときにはすぐにはずせるようにした。
まずはODTのタイミングは下のようになる。Micron社のDDR2 SDRAM MT47H64M4 のデータシート(256MbDDR2_3.fm Rev.J 11/05 EN) の76ページの図を転載させていただきます。
ddr2_odt_2_081127.png

これによるとODT turn-on delay は2tckなので、WriteのDQやDQSが出力される2クロック前にODTを1にする必要がある。次にODT turn-off delay は2.5tckなのでDQやDQSが出力されなくなる2.5クロック前にODTを0にする必要がある。ということでODTを制御するステートマシンを組んでみた。Verilogコードを下に示す。

    // DDR2_ODT
`ifdef DDR2_ODT_ENABLE
    always @(posedge clkx) begin
        if (reset)
            cs_odt <= IDLE_ODT;
        else
            cs_odt <= ns_odt;
    end
    
    always @ * begin
        case (cs_odt)
            IDLE_ODT : begin
                odt_node <= 1'b0;
                if (write_timing)
                    ns_odt <= WRITE_ACTIVE;
                else
                    ns_odt <= IDLE_ODT;
            end
            WRITE_ACTIVE : begin
                odt_node <= 1'b1;
                ns_odt <= WRITE_TEST; // write_timingがまだ1のままかをテスト
            end
            WRITE_TEST : begin
                odt_node <= 1'b1;
                if (write_timing)
                    ns_odt <= WRITE_ACTIVE;
                else
                    ns_odt <= WRITE_HOLDOFF1;
            end
            WRITE_HOLDOFF1: begin
                odt_node <= 1'b1;
                ns_odt <= IDLE_ODT;
            end
        endcase
    end
    
    always @(posedge clkx) begin
        if (reset)
            odt_node_1d <= 1'b0;
        else
            odt_node_1d <= odt_node;
    end
    assign ddr2_odt = odt_node_1d;
`else
    assign ddr2_odt = 1'b0;
`endif


そのシミュレーション結果を下に示す。
ddr2_odt_081127.png

黒いカーソルのところでDDR2 SDRAMはODTが1だと認識して、緑のM1カーソルのところで終端抵抗をONにする。次に赤のカーソルのところでDDR2 SDRAMはODTが1だと認識して、緑のM2カーソルのところで終端抵抗をOFFにする。
Writeでスイングするddr2_dq, ddr2_dqs, ddr2_dqs_n, ddr2_dm がその範囲に入っていることが確認できると思う。
これでODTはWriteのときのみONとなったと思う。
次にDCIだがこれはFPGAのDCIのインピーダンスを決定する抵抗を実装する端子VRPとVRNに抵抗が実装されていないと使えない。これだけでもアットマークテクノに聞いてみないと使えない。。。ODTにしても、終端抵抗が実装されていると2重に終端抵抗をつけてしまうことになるので、ODTはOFFとする必要があるが、回路図を教えてもらえないのでやってみようと思っている。
  1. 2008年11月28日 05:50 |
  2. DDR SDRAMコントローラ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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