FPGAの部屋

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

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ご利用ください。 http://marsee101.web.fc2.com/index.html

2007年01月

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の波形を下に示す。
0bbe11e2.png


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

もう少しバグを取ったらDDR SDRAMが正常に動作してREAD時のデータ出力までするようになった。でもdata_validが1の時に出力データが出ない。もう少しデバックが必要のようだ。
ともかくDDRが動作するようになってよかった。いろいろなWebサイトに助けられている。このブログも他の方の役に立てていれば良いと思った。

Verilog2001版DDR SDRAMコントローラーのModelSimシミュレーションも続けてやっている。
大体バグも取れてきたのだがModelSimXE3 starterだと1回シミュレーションするのに12分くらいかかる。バグを修正して辛抱強く12分待ってから確認するのでどうしても時間がかかる。
今は信号を遅延させたのだが前の信号と違うという状況がわからない。VHDLの慣性遅延のように記述した遅延量以下のパルスは遅延しないのだろうか?
VerilogHDLの遅延は伝播遅延だと書いてあるのを見たことがあったのだが、もう一度調べてみる必要がありそうだ。
Verilogコードは下のようだ。

`timescale 1ps / 1ps
parameter DELAY_TIME = 1500;
assign #DELAY_TIME ddr_dqs_fpga = (enable_o==1'b1) ? ddr_dqs_sdram : {DQS_BITS{1'bz}};
assign #DELAY_TIME ddr_dq_fpga = (enable_o==1'b1) ? ddr_dq_sdram : {DQ_BITS{1'bz}};

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


parameterの値はDQS_BITSは2で、DQ_BITSは16だ。
ModelSimの波形を下に示す。
1329b2f0.png


上の図でddr_dqs_fpgaを1500ps遅延させてddr_dqs_sdramに入れているのだが、0-3-0と遷移するはずがddr_dqs_sdramでは0-3だけで最後の0の遷移がなくなってしまっている。
慣性遅延でなくなってしまったのか?もう少し調査することにする。

2006.01.29:追記 このページによるとassign文で遅延を書くと慣性遅延だそうだ。伝播遅延にするためにはalways文でノンブロッキング文で書くそうだ。早速書いてみよう。

EDSFair2007に行ってきました。

やはりキーノートスピーチには遅刻。展示を見てきました。Synplicity社でSynplify Proのやり方を教えてもらう。Synplify ProからXilinxのISEを起動してインプリメントまで全部できるとのこと。でもISEに入るプロジェクトはEDFなのでXSTに変更して論理合成の差を見ることが出来ないので、やはりISEからSynplify使ったほうが良いかも?

すすたわりさんのところに言ってSUSUBOXを説明してもらう。

井倉さんのプレゼンも聞いてきました。FPGAの電源容量が足りないことが多いというところではドッキリ。でもI/Oも全部計算して十分な容量にしてあるし大丈夫だろうと一安心。XC2VP30のコアに6Aだし、I/Oも6Aの電源だから。PCI-Xバス用の3V電源もXilinxのアプリノートのではいかにも容量が少ないと思ったのでだいぶ大きいのをつけてある。プレゼンの途中で私とブログのことを紹介してもらってしまった。機会も会ったので質問をしたが丁寧に答えてもらった。でも、私のデザインが動かないといっていたようだが、Spartan3E Starter KitでDDR SDRAMコントローラが動かなかったのだろうか?気になる。そういえばFPGAの部屋の名刺を渡すのを忘れていた。。。

ユーザープレゼンテーションを途中まで聴いて帰ってきました。そういえばユーザープレゼンテーション最後PCIボードはPCI Writeがどうして性能が出ないんだろう?私のIPはどっちも同じくらい性能出ているんだけど。。。(プレゼン聞いてこなかったけど。。。)

今のところEDSFair2007に多分いけると思う。
もう井倉氏のセミナーを聞くためにセミナー受講費を振り込んだ。振り込む時にネットから振り込んだので受け取り人名を間違って一度戻ってきてしまった。字が1文字抜けているのがわからずにエレショー協会に電話して振り込めないといったら、調べてくれて、字が抜けているということを教えてもらった。直してもう一度振り込んだらOKだった。しかし、名前が長すぎる。。。絶対間違えるので銀行の振込みリストに登録しておいた。もっと短くしてもいいじゃないだろうか。。。
EDSFair2007はキーノートスピーチも登録したが10時30分にいくのはきついかも?行けるように努力したいが。。。
その後、すすたわりさんも出ているようだしIPフリーマーケットを覗く予定。
そして井倉氏の講演聞いた後はユーザープレゼンテーションを聞きたいが、出展者セミナーに良いのがあれば、そっちに浮気するかも?
とりあえず、ほとんどセミナーを受講する予定。

Xilinx ISE WebPACK 9.1iが出た。日本のXilinxサイトは知らないがUSのサイトからダウンロードした。
今からインストールしてみてみようと思う。
USから落としてきてもインストール画面は日本語になっている。
サービスパック1を落としてかける。
9.1iを起動。なんか8.2iと外見は変化がないみたい。インプリメントも極端に早くなっているわけではなさそうだ。バグとかはFIXされているのだろう?
ちなみにインストールサイズは3.71GByteだった。
019baa28.png


↑このページのトップヘ