FC2カウンター FPGAの部屋 MegaWizard Plug-In Manager で作った同期FIFOの動作を確かめる1
FC2ブログ

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

FPGAの部屋

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

MegaWizard Plug-In Manager で作った同期FIFOの動作を確かめる1

Xilinx用に作ったSDR SDRAMコントローラには、FIFOモジュールがあって、それは分散RAM(ルックアップテーブルを使用したRAM)を使用している。Altera のAN307では、MLABという小さい容量のメモリがあったので、それを使おうと思っていたら、どうやらCycloneシリーズにはMLABはないようだ。仕方がないので、勿体無いがM9K Memory Blockを使うしかない。
それだったら、Altera の同期FIFOの動作を見たことがなかったので、MegaWizard Plug-In Manager で生成してシミュレーションを行うことにした。
Quartus II のバージョンは10.0SP1。最初にQuartus II のToolsメニューからMegaWizard Plug-In Manager を選択する。そうするとMegaWizard Plug-In Manager ダイアログが開く。Next >をクリックする。
SFIFO_test_1_100924.png

次のダイアログで、左のペインのMemory Compilerを展開して、FIFOを選択する。Verilogを使うので、Verilog HDLのラジオボタンをクリックする。FIFOのファイル名を書く。Next >をクリックする。
SFIFO_test_2_100924.png

FIFOのダイアログが開く。FIFOの幅と深度を設定する。同期FIFOなので、ReadもWriteも同じクロックを選択する。Next >をクリックする。
SFIFO_test_3_100924.png

次は、fullやempty, usedwなどの設定だ。デフォルトのままNext >をクリックする。
SFIFO_test_4_100925.png

Show-ahead synchronous FIFO modeに設定する。Next >をクリックする。
SFIFO_test_5_100925.png

次はどれをクリックしてもResource Usageは変わらなかったし、デフォルトとする。Next >をクリックする。
SFIFO_test_6_100925.png

次もデフォルトのままとする。Next >をクリックする。
SFIFO_test_7_100925.png

Verilog HDL black-box file(SFIFO_module_bb.v)にはすでにチェックが入っているので、Instantiation template file(SFIFO_module_inst.v) ファイルにもチェックを入れて、Finishボタンをクリックする。
SFIFO_test_8_100925.png

なぜか?今生成したIPを自分のデザインに加えても良いか?というダイアログが出てきた。これは、自分のデザインに加えたくてIPを生成しているので、Automatically add Quartus II IP Files to all projects にチェックを入れてYseボタンをクリックした。
SFIFO_test_9_100925.png

これでSFIFO_moduleが生成された。SFIFO_module_bb.vの中身を下に示す。その他はコメントがいっぱいだが、実際のコードはこれだけだ。

module SFIFO_module (
    clock,
    data,
    rdreq,
    wrreq,
    empty,
    full,
    q,
    usedw);

    input      clock;
    input    [16:0]  data;
    input      rdreq;
    input      wrreq;
    output      empty;
    output      full;
    output    [16:0]  q;
    output    [3:0]  usedw;

endmodule


Instantiation template fileのSFIFO_module_inst.vを下に示す。

SFIFO_module    SFIFO_module_inst (
    .clock ( clock_sig ),
    .data ( data_sig ),
    .rdreq ( rdreq_sig ),
    .wrreq ( wrreq_sig ),
    .empty ( empty_sig ),
    .full ( full_sig ),
    .q ( q_sig ),
    .usedw ( usedw_sig )
    );


さて、トップファイルのSFIFO_test.vファイルを作って、プロジェクトに入れた。下にSFIFO_test.vファイルを示す。

// SFIFO_test.v 

`default_nettype none

module SFIFO_test(
    input    wire    clock,
    input    wire [16:0]    data,
    input    wire    rdreq,
    input    wire    wrreq,
    output    wire    empty,
    output    wire    full,
    output    wire [16:0]    q,
    output    wire [3:0]    usedw
);
    
SFIFO_module    SFIFO_module_inst (
    .clock ( clock ),
    .data ( data ),
    .rdreq ( rdreq ),
    .wrreq ( wrreq ),
    .empty ( empty ),
    .full ( full ),
    .q ( q ),
    .usedw ( usedw )
    );
endmodule


これで、一旦コンパイルしてみたところ、正常に終了した。
SFIFO_test_10_100925.png

Chip Plannerを立ち上げて、どのようにCyclone III の素子が使われているかを見てみた。
SFIFO_test_11_100925.png

ピンクの四角の中に、ちょっとだけだが使われている。この部分を拡大すると。
SFIFO_test_12_100925.png

M9K Memory Blockが使われているのがわかる。

今回はこの辺で。次はテストベンチを作って、シミュレーションをしてみるが、Quartus II ではテストベンチのテンプレートを生成してくれる方法はないのかな?
  1. 2010年09月24日 06:06 |
  2. QuartusⅡ
  3. | トラックバック:0
  4. | コメント:4

コメント

一応、LEでFIFOを作るような指定ができると思います

Quartus II Ver10から、内蔵のシミュレータは無くなりました。
Modelsimでシミュレーションしてくれってことらしいです

また、テストベンチのテンプレートを作るような機能あったかな?
  1. 2010/09/25(土) 11:01:01 |
  2. URL |
  3. アプロ #-
  4. [ 編集 ]

アプロさん、こんにちは。
>一応、LEでFIFOを作るような指定ができると思います
MLABですか?それならば、Cycloneにはないようです。

>また、テストベンチのテンプレートを作るような機能あったかな?
XilinxのISEではあったので、Quartus IIもあったら良いなと思っています。
  1. 2010/09/25(土) 16:17:00 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

6枚目のウインドの一番下のチェックBOXだと思います
あまりやったことがないので確証はありませんけど・・・
  1. 2010/09/25(土) 16:23:55 |
  2. URL |
  3. アプロ #-
  4. [ 編集 ]

アプロさん、Impement FIFO storage with logic cell only をチェックしてみましたが、LEのFFを使ってしまっているようですね。
XilinxのSLICEMのようにLUT自体がDPRAMになる構造にはなっていないようです。
  1. 2010/09/25(土) 17:38:59 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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