FC2カウンター FPGAの部屋 Verilog2001版DDR SDRAMコントローラーのModelSimシミュレーション4への回答
FC2ブログ

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

FPGAの部屋

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

Verilog2001版DDR SDRAMコントローラーのModelSimシミュレーション4への回答

Verilog2001版DDR SDRAMコントローラーのModelSimシミュレーション4で下のように書いたら慣性遅延になって時間間隔が短い信号はなくなってしまった。

assign #DELAY_TIME ddr_dqs_sdram = (enable_o==1'b0) ? ddr_dqs_fpga : {DQS_BITS{1'bz}};


そこで、このページを参考にさせていただいて、伝播遅延にするためにalways文、ノンブロッキング文で書いてみた。

`timescale 1ps / 1ps

    parameter DELAY_TIME = 1500;

    wire [DQS_BITS-1:0] ddr_dqs_fpga, ddr_dqs_sdram;
    wire [DQ_BITS-1:0] ddr_dq_fpga, ddr_dq_sdram;
    reg [DQS_BITS-1:0] ddr_dqs_fpgan, ddr_dqs_sdramn;
    reg [DQ_BITS-1:0] ddr_dq_fpgan, ddr_dq_sdramn;

    always @ *
        if (enable_o == 1'b1)
            ddr_dqs_fpgan <= #DELAY_TIME ddr_dqs_sdram;
        else
            ddr_dqs_fpgan <= #DELAY_TIME {DQS_BITS{1'bz}};
    
    always @ *
        if (enable_o == 1'b1)
            ddr_dq_fpgan <= #DELAY_TIME ddr_dq_sdram;
        else
            ddr_dq_fpgan <= #DELAY_TIME {DQ_BITS{1'bz}};

    always @ *
        if (enable_o == 1'b0)
            ddr_dqs_sdramn <= #DELAY_TIME ddr_dqs_fpga;
        else
            ddr_dqs_sdramn <= #DELAY_TIME {DQS_BITS{1'bz}};
    
    always @ *
        if (enable_o == 1'b0)
            ddr_dq_sdramn <= #DELAY_TIME ddr_dq_fpga;
        else
            ddr_dq_sdramn <= #DELAY_TIME {DQ_BITS{1'bz}};
    
    assign ddr_dqs_fpga = ddr_dqs_fpgan;
    assign ddr_dq_fpga = ddr_dq_fpgan;
    assign ddr_dqs_sdram = ddr_dqs_sdramn;
    assign ddr_dq_sdram = ddr_dq_sdramn;


parameterの値はDQS_BITSは2で、DQ_BITSは16だ。
inoutの信号はregで宣言するとエラーになるのでregで宣言する信号は中間ノードとして、wireで宣言したinoutの信号にassignで代入している。
ModelSimの波形を下に示す。
Verilog_Delay_2_060130.png

上の図でddr_dqs_fpgaを1500ps遅延させてddr_dqs_sdramに入れていても、0-3-0と正常に遷移している。

もう少しバグを取ったらDDR SDRAMが正常に動作してREAD時のデータ出力までするようになった。でもdata_validが1の時に出力データが出ない。もう少しデバックが必要のようだ。
ともかくDDRが動作するようになってよかった。いろいろなWebサイトに助けられている。このブログも他の方の役に立てていれば良いと思った。
  1. 2007年01月30日 20:09 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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