Nios II 簡易シミュレーション
ver. 8.1 2009 年 3 月
1. はじめに
この資料は、別資料である『Nios® II 簡易チュートリアル』を終えた後、Nios II システムのデザインを ModelSim® で、RTL
シミュレーションを行う場合の操作マニュアルです。
この資料では、ModelSim-Altera を使用していますが、ModelSim PE、ModelSim SE でも同様にシミュレーションが可能で す。
この資料においてのシミュレーション環境は、Quartus® II, Nios II 8.1, ModelSim-Altera 6.3g です。
2. 操作方法
以下に、Nios II のシステムを ModelSim-Altera にてシミュレーションを行う手順を示します。
1. 『Nios II 簡易チュートリアル』を終えた後のハードウェア・デザインを、SOPC Builder で再度、ジェネレートします。 2. 『Nios II 簡易チュートリアル』で作成した Nios II IDE のソフトウェア・プロジェクトを開き、再度、ビルドを実行します。 3. Nios II IDE 上から ModelSim-Altera を起動します。
ここからは、ModelSim-Altera での操作になります。 4. 各コンポーネント(HDL ファイル)のコンパイルとロードを行うためのスクリプトを実行します。 5. Wave ウィンドウを立ち上げるスクリプトを実行します。 6. シミュレーション実行のコマンドを入力し、シミュレーションを実行します。 7. シミュレーション結果を確認します。
2-1. SOPC Builder の設定
① 『Nios II 簡易チュートリアル』では、E:¥simple_work フォルダに simple_tutorial というプロジェクトを用意しました。 この資料でも、同じフォルダ構成を例として進めていきます。
simple_work フォルダ内の simple_tutorial.qpf ファイルをダブルクリックして、Quartus II のプロジェクトを開きます。 ② simple_tutorial のプロジェクトで SOPC Builder を起動します
③ jtag_uart のコンポーネントを開きます。
jtag_uart_0 のコンポーネントをダブルクリックし、Simulation タブを選択します。
シミュレーションを実行中に、コンソール画面に表示される printf のキャラクタ出力や、ユーザのキャラクタ入力を仮 想 的 に 行 え る イ ン タ ラ ク テ ィ ブ ・ ウ ィ ン ド ウ を 使 用 す る た め に 、 “Create ModelSim alias to open an interactive stimulus/response window” にチェックを入れます。
Finish をクリックします。
④ 使用する ModelSim-Altera のパスを確認します。 SOPC Builder の Tools ⇒ Option を選択します。
⑤ Options ウィンドウの HDL Simulator Options 欄では ModelSim-Altera を選択します。
Application Path 欄には、使用する ModelSim-Altera の実行ファイル(.exe)があるフォルダまでのパスを正しく設定し ます。
⑥ SOPC Builder で再度ジェネレートを実行します。
System Generation タブを選択し、“Simulation. Create project simulator files.” にチェックを入れます。 File ⇒ Save で SOPC Builder の設定を保存し、Generate をクリックします。
⑦ SOPC Builder のジェネレートが終了すると、“<SOPC Builder で生成したシステム名>_sim” フォルダに拡張子 が、.mpf、.do、.dat のファイルが生成されます。 ここで、生成されたファイルについては、以下の表1 をご覧ください。 表1 _sim フォルダのファイル 拡張子 説明 .mpf ModelSim-Altera のプロジェクトファイル 但し、ModelSim-Altera までのパスを正しく設定しなければ生成されない。 .do ModelSim のマクロ実行スクリプト・ファイル setup_sim.do : 表 2 で紹介されているマクロ実行のためのスクリプト・ファイル
wave_presets.do : ModelSim-Altera の wave ウィンドウへ追加するノードリストを生成する ためのスクリプト・ファイル
.dat
ヘキサデシマル・フォーマットのメモリ初期値ファイル
UART 等の初期値ファイルは、SOPC Builder のジェネレートを実行した時に生成される。 メモリの初期値ファイルは、Nios II IDE でソフトウェアをビルドした時に完成する。
⑧ 生成されたトップのファイル(sopc_system.vhd)をテキスト・エディタなどで開くと、そのファイルの最も下の方にテストベ ンチの記述があります。
このチュートリアルでは行いませんが、任意の入力波形を与えたい場合、メモリ・モデルのコンポーネントを宣言する 場合、ライブラリ記述をする場合は、編集を行ってください。
SOPC Builder で生成言語を VHDL にした場合、以下のような記述になります。
ここで、<ALTERA_NOTE> の間に任意の記述をしておけば、SOPC Builder で Generate を実行しても、そのままの 記述内容が保存されます。
<例>
-- <ALTERA_NOTE> CODE INSERTED BETWEEN HERE --add your libraries here
--AND HERE WILL BE PRESERVED </ALTERA_NOTE>
また、生成言語を Verilog にした場合でも、テストベンチ内の <ALTERA_NOTE> の間に記述をすることで SOPC Builder で Generate を実行しても、そのまま記述が保存されます。
2-2. Nios II IDE の設定
① 『Nios II 簡易チュートリアル』を行った際に作成した、Nios II IDE のソフトウェア・プロジェクト内の、“hello_nios.c” を 開きます。
遅延を発生させている部分をシミュレーションの対象から省き、PIO のアクセスを中心にシミュレーションがきるように、 “hello_nios.c” 内の usleep() 関数をコメントアウトし保存します。
② 『Nios II 簡易チュートリアル』 を行った際に作成した Nios II IDE のソフトウェア・プロジェクトのシステム・ライブラリ の設定を変更します。
プ ロ ジ ェ ク ト の 中 か ら soft_test を 選 択 後 、 右 ク リ ッ ク ⇒ System Library Properties を選 択 し 、 Properties for soft_test_syslib ウィンドウの左枠から “System Library” を選択し、次ページの画面を表示させます。
プログラムメモリを選択し、“ModelSim only, no hardware support” にチェックを入れます。
“ModelSim only , no hardware support” にチェックを入れることで、シミュレーション上では、キャッシュメモリ、BSS 領 域のなどの初期化動作を省きます。
③ ソフトウェアをビルドします。
soft_test を選択後、右クリック ⇒ Build Project をクリックします。 ビルドが終了後、メモリの初期値ファイルの(.dat ファイル)が完成します。
2-3. ModelSim-Altera の設定
① ModelSim-Altera を Nios II IDE から立ち上げます。
③ Project 欄で、soft_test が選択されていていることを確認します。 また、ModelSim path をブラウズボタンより、設定します。 使用する ModelSim-Altera の実行ファイル(.exe ファイル)が存在しているフォルダまでを指定し、シミュレータ・ツー ルのパスを確認し、Run ボタンをクリックします。 ModelSim-Altera が起動します。 ④ ModelSim-Altera が起動すると、自動的に “setup_sim.do” が実行されるため、表 2(次ページ)のマクロが使用できる ようになります。
表2 マクロの説明 マクロ名 説明 Nios II プロセッサやペリフェラルのコンパイル、ロードを行う。 s このマクロを実行すると、実行中のシミュレーションは、リセットされる。 Nios II 用ではなく、Nios 用の古いマクロで、ソースをリコンパイルし、再びメモリの初期 値ファイルを生成させるマクロ。 c
但し、Nios II の開発環境では、Nios II IDE でソフトウェアをビルドする際に、メモリ初 期値ファイルを生成するので、Nios II 開発環境においては使用しない。
w wave_presets.do ファイルを実行することで、ModelSim の wave ウィンドウにシステム内 のプロセッサやペリフェラルの主要なノードをセットする。
UART のインタラクティブ・ウィンドウの起動。 UART 名_drive
UART からの TXD が確認できる。 run <time> <unit> シミュレーションを実行する。ex. run 300 us
h マクロの説明を表示(ヘルプ)
2-4. シミュレーションの実行
② jtag_uart コンポーネントのインタラクティブ・ウィンドウを表示させるため、jtag_uart_0_drive ()と入力し、コマンドを実 行します。
hello_world.c 内の printf で記述されたキャラクタがこのウィンドウで確認できます。
④ cpu、オンチップ・メモリ、jtag_uart のノードは “w” マクロを実行することで wave ウィンドウへ追加されますが、それ 以外のノードを追加したい場合には、以下の方法で追加可能です。
<例>
PIO コンポーネントの信号を wave ウィンドウへ追加する場合
1. Workspace ウィンドウで sim タブを選択し、test_bench ⇒ dut ⇒ the_pio を選択 2. Objects ウィンドウに pio のコンポーネントのノードが表示されるので、必要なノードを選択 3. wave ウィンドウへマウスで“ドラッグ&ドロップ”することで追加 【 補足 】 wave ウィンドウ上で信号間に境界線を追加する方法 1. 境界線を入れたい信号を選択(境界線が入るのは選択した信号の上になります) 2. マウスで右クリック ⇒ Insert Divider を選択
3. Wave Divider ウィンドウが開くので、Divider Name に 境界線の名前(任意)を入力し OK をクリック ドラッグ&ドロップ
⑤ シミュレーションを実行します。
“run 300 us” とタイプし、シミュレーションを実行します。
シミュレーションの実行後、wave ウィンドウで波形を確認することができます。 270 us 以降の pio コンポーネントの信号に着目してください。
hello_nios.c のソース内での pio コンポーネントへのデータアクセスが実際の LED の点滅に反映されていることが確認できま す。
インタラクティブ・ウィンドウを確認すると、printf の出力キャラクタも確認できます。 【 wave ウィンドウ 】
横浜本社 〒222-8563 横浜市港区新横浜 1-5-5 マクニカ第二ビル TEL 045-476-2155 FAX 045-476-2156 大阪営業所 〒532-0011 大阪市淀川区西中島 6-1-3 アストロ新大阪第二ビル 7 階 TEL 06-6307-7670 FAX 06-6307-7671 名古屋営業所 〒460-0003 名古屋市中区錦 1-6-5 名古屋錦シティビル 7 階 TEL 052-202-1024 FAX 052-202-1025 宇都宮営業所 〒321-0953 宇都宮市東宿郷 4-2-24 センターズビル 7 階 TEL 028-637-4488 FAX 028-637-4489 弊社より資料を入手されましたお客様におかれましては、下記の使用上の注意を一読いただいた上でご使用ください。 1. 本資料は非売品です。許可無く転売することや無断複製することを禁じます。 2. 本資料は予告なく変更することがあります。 3. 本資料の作成には万全を期していますが、万一ご不明な点や誤り、記載漏れなどお気づきの点がありましたら、弊社までご一報いただければ幸いです。 4. 本資料で取り扱っている回路、技術、プログラムに関して運用した結果の影響については、責任を負いかねますのであらかじめご了承ください。 5. 本資料は製品を利用する際の補助的な資料です。製品をご使用になる場合は、英語版の資料もあわせてご利用ください。