FC2カウンター FPGAの部屋 2010年09月30日
FC2ブログ

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

FPGAの部屋

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

MegaWizard Plug-In Manager で作った同期FIFOの動作を確かめる2(シミュレーション)

遅くなってしまったが、”MegaWizard Plug-In Manager で作った同期FIFOの動作を確かめる1”の続き。

今度はテストベンチを作る。XilinxのISEだとテストベンチのテンプレートを生成してくれる機能があるが、Quartus II では見つからなかったので、全部自分で書いた。即興で書いてみたテストベンチを下に示す。

// SFIFO_test_tb.v

`default_nettype none
`timescale 1ns / 1ps

module SFIFO_test_tb;
    reg        clk;
    reg        [16:0] data;
    reg        rdreq;
    reg        wrreq;
    wire    empty;
    wire    full;
    wire    [16:0] q;
    wire    [3:0] usedw;
    integer i;
    
    parameter    CLK_PERIOD = 40;
    parameter    DELAY_TIME = 10;
    
    SFIFO_test SFIFO_test_inst (
        .clock(clk),
        .data(data),
        .rdreq(rdreq),
        .wrreq(wrreq),
        .empty(empty),
        .full(full),
        .q(q),
        .usedw(usedw)
    );
    
    always begin
       #(CLK_PERIOD/2)    clk = 1'b1 ;
       #(CLK_PERIOD/2)    clk = 1'b0 ;
    end

    initial begin
        data = 17'd0;
        rdreq = 1'b0;
        wrreq = 1'b0;
        #(DELAY_TIME*2);
        
        @(posedge clk);
        #DELAY_TIME;
        
        for (i=0; i<9; i=i+1) begin
            @(posedge clk);
            #DELAY_TIME;
            data = data + 17'd1;
            wrreq = 1'b1;
        end
        
        @(posedge clk);
        #DELAY_TIME;
        wrreq = 1'b0;
        
        @(posedge clk);
        #DELAY_TIME;
        
        for (i=0; i<9; i=i+1) begin
            @(posedge clk);
            #DELAY_TIME;
            rdreq = 1'b1;
        end
        
        @(posedge clk);
        #DELAY_TIME;
        rdreq = 1'b0;

        @(posedge clk);
        #DELAY_TIME;
        @(posedge clk);
        #DELAY_TIME;
        $stop;
    end
endmodule


これをModelSim AE 6.5eでシミュレーションしようとして起動したら、ライセンス・エラーになってしまった。
SFIFO_test_13_100930.png

何ででしょう?ModelSim AE 6.5bは問題なく起動するだけど?ネットで検索してもわからなかった。
(2010/10/01:追記) インストールしたModelSim AE 6.5eは購入バージョンでFreeバージョンではありませんでした。ダウンロード・センターから種別を選んでダウンロードすると、購入版になってしまいます。Quartus II ウェブ・エディション ソフトウェアから、Windows 用 ModelSim-Altera Starter Edition v10.0 のサービスパック 1 (541 MB)のリンクをクリックすると、ModelSim-Altera Starter Editionの6.5eがダウンロードできました。インストールすると問題なく立ち上がりました。アプロさん、ありがとうございました。

しょうがないので、ModelSim AE 6.5bを起動して、シミュレーションすることにした。ModelSimを家で起動するのは久しぶりだ。しかもVerilog HDL で、Altera では”無償ツールで実践する「ハード・ソフト協調検証」をやってみる”以来だと思う。
さて、ModelSim AE 6.5bを起動して、プロジェクトを作り、Verilog HDLファイルをADDして、コンパイルした。Simulationをスタートさせようとしたのだが、scfifoがないと怒られてしまった。
SFIFO_test_14_100930.png

あれ?これはどのライブラリをADDすればよいのだったか?良くわからないので、ライブラリが付け易いVeritakでやってみることにした。
alteraのライブラリを下のように選択したところ、シミュレーションが成功した。
SFIFO_test_15_100930.png

シミュレーション波形を下に示す。
SFIFO_test_16_100930.png

emptyが0になった時に、qに00001が出ているので、Show-ahead synchronous FIFO mode となっているのがわかった。
ModelSim AE 6.5bに戻って、SimulateメニューからStart Simulation...を選択して、Start Simulationダイアログを出す。libraries タグから220model_verとaltera_mf_verを選択した。
SFIFO_test_17_100930.png

これでOKボタンをクリックしところシミュレーションをスタートすることができた。Transcriptウインドウでrun -all コマンドを実行すると、シミュレーションを実行することができた。(当然、信号はWaveウインドウにいれました)
SFIFO_test_18_100930.png

次に、fullが1になるのを見るために、16回データを書き込むようにしてみた。(for (i=0; i<16; i=i+1) begin)
これで、ModelSim AE 6.5bでシミュレーションしてみた結果が下の図だ。
SFIFO_test_19_101001.png

やはり、usedwが0、fullが1になっているのがわかった。
  1. 2010年09月30日 05:43 |
  2. QuartusⅡ
  3. | トラックバック:0
  4. | コメント:4