FC2カウンター FPGAの部屋 Vivado 2014.2 で論理シミュレーション1(エラー発生)
FC2ブログ

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

FPGAの部屋

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

Vivado 2014.2 で論理シミュレーション1(エラー発生)

Vivado 2014.2 が出ました”で、”VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP4(IP化)”のプロジェクトを早速、Vivado 2014.2に移行した。
今回は、Vivado 2014.2にプロジェクトを変換しても”VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ IP3(単体シミュレーション)”と同様にシミュレーション出来るかどうかを確かめてみることにした。

2014/06/29:追記 エラーの原因が分かりました。詳しくは下の記事の該当部分に書きます。)

・初めに、Project Manager の Simulation Settings をクリックした。
Vivado_ZYBO_CDC_axi_slave_71_140612.png
問題無さそうだ。

・Project Manager から Run Simulation をクリックして、右に出た表示の中の Run Behavioral Simulation を選択した。

・コンパイルが始まるが途中でエラーが出てしまった。
Vivado_ZYBO_CDC_axi_slave_72_140612.png

・次のダイアログ。
Vivado_ZYBO_CDC_axi_slave_73_140612.png
xelab.log を見ろとの事だった。

・xelab.log のエラー部分を下に示す。


ERROR: [VRFC 10-1540] value for parameter FB_MEM_SIZE is not constant [C:/Users/Masaaki/Documents/Vivado/Zynq/ZYBO/IP_test/cdc_vga_axi_slave/cdc_vga_axi_slave.srcs/sources_1/imports/hdl/verilog/frame_buffer.v:31]
ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) in library work failed.K/pre>


FB_MEM_SIZE が定数じゃないと言われている。
frame_buffer.v の FB_MEM_SIZE 定義部分を下に示す。

module frame_buffer # (
        parameter integer RESOLUTION    = 1    // SVGA
    )
    (clka, clkb, reset_a, reset_b, processor_addr, processor_din, processor_dout, processor_we, display_addr, display_dout);
    `include "video_timing_param.vh"
    `include "convenient_functions.vh"

    input clka;
    input clkb;
    input reset_a;
    input reset_b;
    input [log2(ALL_CHAR_SIZE)-1:0] processor_addr;
    input [15:0] processor_din;
    output [15:0] processor_dout;
    input processor_we;
    input [log2(ALL_CHAR_SIZE)-1:0] display_addr;
    output [15:0] display_dout;

    parameter integer    FB_MEM_SIZE    = near_power2(ALL_CHAR_SIZE);


near_power2() は、convenient_functions.vh で定義されている。定義部分を下に示す。

// 一番近く、より大きい2のn乗の値を返す
function integer near_power2;
    input integer num;
    begin
        for (near_power2=2; near_power2<=num; near_power2=near_power2*2);
    end
endfunction


ALL_CHAR_SIZE は、video_timing_param.vh で定義されている。定義部分を下に示す。

parameter ALL_CHAR_SIZE = H_DISPLAY_SIZE*V_DISPLAY_SIZE;


H_DISPLAY_SIZE と V_DISPLAY_SIZE は、RESOLUTION が決まれば一意に決定される。”video_timing_param.vh”については、”ZYBO用キャラクタ・ディスプレイ・コントローラ IPの単体テスト(VGAポート専用)”にVerilog HDLコードの全コードが載せてあるので参照のこと。

2014/06/29:追記 near_power2() の for ループの中で実行する行が無いのが原因でした。これは、Vivado 2014.1 でも論理合成時にエラーが表示されました。near_power2() を以下の様に修正したらエラー無しでシミュレーションを行うことが出来ました。でも、エラーの解説が不親切ですね。原因を指摘して欲しいです。

function integer near_power2;
    input integer num;
    begin
        for (near_power2=2; near_power2<=num; )
          near_power2=near_power2*2;
    end
endfunction


シミュレーション画面を下に示します。
Vivado_2014_2_15_140628.png

これで、Vivado 2014.2 が問題なく使えることがわかったので、積極的に使っていこうと思う。

Vivado 2014.1をVivado 2014.2に変換したプロジェクトの論理シミュレーションでエラーが出てしまった。Vivado 2014.1では問題なくシミュレーションができていたのだが、HDLソースも間違っていないようだし、どうしようか考え中だ。
  1. 2014年06月12日 05:21 |
  2. Vivado
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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