FC2カウンター FPGAの部屋 SOPC Builderを使ってみる2(NiosⅡのインスタンシエーション)
FC2ブログ

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

FPGAの部屋

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

SOPC Builderを使ってみる2(NiosⅡのインスタンシエーション)

やっと、日昇テクノロジーのFPGAボードのIOピンの接続リストが出来上がりました。欲しい方がもしいらっしゃったらメールください。

SOPC Builderを使ってみる1”でNiosⅡを生成できた。
次にNiosⅡのインスタンシエーションをする。日昇テクノロジーのMAX II/Cyclone IIボードのマニュアル2009/2/26では、回路図(BDF)でシンボルを読み込んでIOポートを付けたが、私はVerilogでインスタンシエーションを行うことにする。
nois_sdram_inst.v にインスタンシエーションの例が載っているので、それを参考にnios2_sdram_led.v を書くことにする。下にnois_sdram_inst.v の内容を示す。

  //Example instantiation for system 'nois_sdram'
  nois_sdram nois_sdram_inst
    (
      .clk_0                             (clk_0),
      .out_port_from_the_exboard_led_pio (out_port_from_the_exboard_led_pio),
      .pll_0_c0_out                      (pll_0_c0_out),
      .pll_0_c1_out                      (pll_0_c1_out),
      .reset_n                           (reset_n),
      .zs_addr_from_the_sdram_0          (zs_addr_from_the_sdram_0),
      .zs_ba_from_the_sdram_0            (zs_ba_from_the_sdram_0),
      .zs_cas_n_from_the_sdram_0         (zs_cas_n_from_the_sdram_0),
      .zs_cke_from_the_sdram_0           (zs_cke_from_the_sdram_0),
      .zs_cs_n_from_the_sdram_0          (zs_cs_n_from_the_sdram_0),
      .zs_dq_to_and_from_the_sdram_0     (zs_dq_to_and_from_the_sdram_0),
      .zs_dqm_from_the_sdram_0           (zs_dqm_from_the_sdram_0),
      .zs_ras_n_from_the_sdram_0         (zs_ras_n_from_the_sdram_0),
      .zs_we_n_from_the_sdram_0          (zs_we_n_from_the_sdram_0)
    );


nois2_sdram_led.v をNotepad++で作って、ProjectメニューからAdd/Remove Files in Project を選択して、nois2_sdram_led.v をプロジェクトに追加した。
SOPC_Builder_11_090805.png

これで、コンパイルしたらエラーが出た。どうやらwire input clk などと書くと通らないようだ。Verilog2001に対応していないのかな?(Verilog2001の書き方を間違っていました。正しくは input wire clk, です。takepon256さん、ありがとうございました。)
仕方がないので、input clk; wire clk; に分けて記述したところ、文法のエラーはなくなったのだが、今度はTop-level design entity がないとエラーが出てしまった。
SOPC_Builder_12_090805.png

一旦、nois2_sdram_led.v を消して、FileメニューのNew...からnois2_sdram_led.v を作り直してみたがだめ。検索してみると、”Error: top level design entity " " is undefined”が引っ掛かった。
それによると、AssignmentsメニューからDevice...のGeneralをクリックして、Top-level entityを設定するとのことだった。実際にやってみるとnois2_sdram_ledが2つあって、現在選択されていない方にしたらコンパイルが通り始めた。一安心。やはり、最初にトップのファイルを作った方がよさそうだ。
でも、最終的にEDA Netlist Writerで下に示すエラーが出た。

Error: Can't generate netlist output files because the file "H:/HDL/Altera/qdesigns/nisyo_board/nios2_sdram_led/incremental_db/compiled_partitions/nios2_sdram_led.root_partition.map.atm" is an OpenCore Plus time-limited file


検索してみたところ、やはりAltera Forlumの”Open Core IP time limited source files expired.”にsettings->eda tool settings->simultionをオフしたらと書いてあったが、settingsがわからない。どうやら、Assignments->eda tool setting...のsimulation のようだ。現在はModelSim Alteraになっているので、これをNoneに変更した。
SOPC_Builder_13_090805.png

やっとコンパイルが通りました。よかった。。。
SOPC_Builder_14_090805.png

良かったけど、まだIOピンもアサインしていないし、動作周波数も制約していないので、もう一度コンパイルをやり直す。
最終的なnois2_sdram_led.vを下に示す。

// nois2_sdram_led

`default_nettype none

module nois2_sdram_led(clk, reset_n, exboard_led_pio, sdram_clk, SDRAM_A, SDRAM_BA, SDRAM_nCAS, SDRAM_CKE, SDRAM_nCS, SDRAM_D, SDRAM_DQM, SDRAM_nRAS, SDRAM_nWE);

    input             clk;
    input             reset_n;
    output [7:0]    exboard_led_pio;
    output             sdram_clk;
    output [11:0]    SDRAM_A;
    output [1:0]    SDRAM_BA;
    output             SDRAM_nCAS;
    output             SDRAM_CKE;
    output             SDRAM_nCS;
    inout    [15:0]    SDRAM_D;
    output    [1:0]    SDRAM_DQM;
    output            SDRAM_nRAS;
    output             SDRAM_nWE;

    wire         clk;
    wire         reset_n;
    wire [7:0]    exboard_led_pio;
    wire         sdram_clk;
    wire [11:0]    SDRAM_A;
    wire [1:0]    SDRAM_BA;
    wire         SDRAM_nCAS;
    wire         SDRAM_CKE;
    wire         SDRAM_nCS;
    wire [15:0]    SDRAM_D;
    wire [1:0]    SDRAM_DQM;
    wire         SDRAM_nRAS;
    wire         SDRAM_nWE;

  nois_sdram nois_sdram_inst
    (
      .clk_0                             (clk),
      .out_port_from_the_exboard_led_pio (exboard_led_pio),
      .pll_0_c0_out                      (),
      .pll_0_c1_out                      (sdram_clk),
      .reset_n                           (reset_n),
      .zs_addr_from_the_sdram_0          (SDRAM_A),
      .zs_ba_from_the_sdram_0            (SDRAM_BA),
      .zs_cas_n_from_the_sdram_0         (SDRAM_nCAS),
      .zs_cke_from_the_sdram_0           (SDRAM_CKE),
      .zs_cs_n_from_the_sdram_0          (SDRAM_nCS),
      .zs_dq_to_and_from_the_sdram_0     (SDRAM_D),
      .zs_dqm_from_the_sdram_0           (SDRAM_DQM),
      .zs_ras_n_from_the_sdram_0         (SDRAM_nRAS),
      .zs_we_n_from_the_sdram_0          (SDRAM_nWE)
    );
endmodule


しかし、AlteraのQuartusⅡの論理合成ツールはVerilog2001に対応していないのでしょうか?
AlteraはSignalTapⅡがFreeで使える分、ポイントが高いと思ったが、Verilog2001が使えないのでは考えてしまう。。。
Verilog2001使えました。訂正いたします。(AlteraはSignalTapⅡがFreeで使える分、ポイントが高い)
#年は取っていますが、Alteraのツールは初心者で学ぶことが多すぎます。limuxが動作したら良いな。。。いつも途中で挫折してしまうので、このボードでは無理かもしれないけど。うまく行くんだったボードを買っても良いかな?20年前くらいにUNIXのソースコードをみんなで読んだりしたけど、もうだいぶ過去になっている。
#実は今日から5日間夏休みです。いつもと同じようなことをやっています。

(追記)
年をとってもケアレスミスをしてしまってお恥ずかしい。。。もう一度nois2_sdram_led.v を貼っておきます。

// nois2_sdram_led

`default_nettype none

module nois2_sdram_led(
    input    wire         clk,
    input    wire        reset_n,
    output    wire [7:0]    exboard_led_pio, 
    output    wire        sdram_clk,
    output    wire [11:0]    SDRAM_A,
    output    wire [1:0]    SDRAM_BA,
    output    wire        SDRAM_nCAS,
    output    wire        SDRAM_CKE,
    output    wire        SDRAM_nCS,
    output    wire [15:0]    SDRAM_D,
    output    wire [1:0]    SDRAM_DQM,
    output    wire        SDRAM_nRAS,
    output    wire        SDRAM_nWE);

  nois_sdram nois_sdram_inst
    (
      .clk_0                             (clk),
      .out_port_from_the_exboard_led_pio (exboard_led_pio),
      .pll_0_c0_out                      (),
      .pll_0_c1_out                      (sdram_clk),
      .reset_n                           (reset_n),
      .zs_addr_from_the_sdram_0          (SDRAM_A),
      .zs_ba_from_the_sdram_0            (SDRAM_BA),
      .zs_cas_n_from_the_sdram_0         (SDRAM_nCAS),
      .zs_cke_from_the_sdram_0           (SDRAM_CKE),
      .zs_cs_n_from_the_sdram_0          (SDRAM_nCS),
      .zs_dq_to_and_from_the_sdram_0     (SDRAM_D),
      .zs_dqm_from_the_sdram_0           (SDRAM_DQM),
      .zs_ras_n_from_the_sdram_0         (SDRAM_nRAS),
      .zs_we_n_from_the_sdram_0          (SDRAM_nWE)
    );
endmodule

  1. 2009年08月05日 13:34 |
  2. SOPC Builder
  3. | トラックバック:0
  4. | コメント:4

コメント

逆に最近になってXのツールに触り始めました。どちらも覚えることが多いですね。
SOPC Builderは非常に使い易いので、依存症状態です(笑)
Verilog2001ですけど、Assignment→SettingからAnalysis→Verilog HDL Inputと進むとVerilogのバージョンが選べます。SystemVerilogは試したことありませんが、2001は通りましたよ。
  1. 2009/08/05(水) 23:27:02 |
  2. URL |
  3. 独楽 #pYrWfDco
  4. [ 編集 ]

独楽さん、こんにちは。
教えていただいてありがとうございます。
本当にどこのツールも覚えることが多すぎますね。そう思ってAlteraのツールには手を出さなかったのですが、いろいろな情報を見ているとAlteraのツールが使いやすいみたいなので、少しやってみることにしました。SOPC Builder使いやすいですね。NiosⅡプロセッサがいろいろ設定できますね。この辺が今のところMicroBlazeとの大きな違いかな?

Verilogのバージョンの件、了解しました。見てみたところVerilog2001になっていました。やはり通らない記述があるんでしょうか?XilinxのVerilogコードを使うときに注意する必要があるようです。
  1. 2009/08/06(木) 04:58:10 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

こんにちは。こちらに書き込むのは初めてですが、よろしくお願いします。
VHDL使いなのでVerilogはあまりよく知らないのですが、試してみると「input wire clk」ではうまく行きました。
記述の順番が問題なっているようです。
ご参考まで。
  1. 2009/08/06(木) 17:55:09 |
  2. URL |
  3. takepon256 #-
  4. [ 編集 ]

takepon256さん、こんにちは。

すみません。勘違いしていました。訂正しておきます。
  1. 2009/08/06(木) 18:32:10 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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