本アプリケーションノートでは、Active-HDL における ALTERA NIOS II 組み込みプロセッサデザインのシミュレーション方法を説明します。 ここでは Eclipse IDE for C/C++ Developers software のサンプルデザイン “Board Diagnostics” をベースにしていますが、基本フローは他のデザインでも同じです。
本アプリケーションノートでは、次のツールをインストールしており、操作経験があることを前提としています。
Altera Quartus II 10.1 以降
NIOS II EDS 9.0 以降
Active-HDL 8.3 以降
“C:\” ルートデイレクトリに空の “TEMP” フォルダを作成します。コンピュータのコンテキストメニューからプロパティ | システムの詳細設定を選択し、詳細設定タブにて環境変数ボタンをクリックします。下記のようにシステム環境変数 TEMP と TMP を設定します。
図 1: 環境変数の設定
定義済みのシステム環境変数から Path を選択し、その変数値の設定欄にダブルセミコロン “;;” があるか確認し、ある場合には全ての “;;” をシングルセミコロン “;” に変更します。コンピュータを再起動します。
図 2: Path 整合性の確認
Quartus II を開きます。
File メニューから Open project を選択します。
プロジェクトディレクトリから任意の “.qpf” ファイルを選択して開くをクリックします。デザインが下記のように表示されます。
図 3: Quartus II Configuration Controller プロジェクト
Quartus II にてプロジェクトを読み込んだ後、Tools メニューから SOPC Builder をクリックし、下記のようにデザインの全ての接続をチェックします。
図4: clk_0 clk_reset 接続例
下記のようにエラーがないことを確認します。全てのワーニングやインフォメーションメッセージを読み、デザインへの影響を検討してください。
図 5: Design Status Window
Next をクリックしてシミュレーションファイルを生成します。
System Generation タブにて Simulation にチェックを入れ、プロジェクトシミュレータファイルを作成します。
図 6: System generation 設定
Generate ボタンをクリックします。変更箇所の保存を要求される場合には Save をクリックします。
図 7: Generate ボタン
図 8: ファイル生成の完了
Eclipse にてプロジェクトを作成し構築するには、次の手順で行います。
Tools メニューから NIOS II Software Build Tools for Eclipse を選択します。
File | New| Project を選択します。
NIOS II Application and BSP from Template を選択して Next をクリックします。
図 9: NIOS II IDE にて新しいプロジェクトを作成
次のウィンドウで、SOPC 情報ファイルを探して Open をクリックします。
図 10: SOPC 情報ファイルの選択
Board Diagnostics プロジェクトテンプレートを選択して、プロジェクトに “BD_big_stack” と名前を付けます。“Next” をクリックします。
注意: HAL BSP はメモリ管理ユニット (MMU) をサポートしていなため、Eclipse NIOS II サンプルを使用するには、MMU をデザインから除外する必要があります。
図 11: 新プロジェクトの設定
Create a new BSP project based ......を選択し、次のように設定します。“Finish” をクリックして、status ウィンドウが完了するのを待ちます。
図 12: BSP の生成
プロジェクトの生成をチェックし、status ウィンドウの出力が下記のようであることを確認します。
*** Clean-only build of configuration Nios II for project BD_big_stack ****
make clean
[BD_big_stack clean complete]
プロジェクトを選択し、マウス右ボタンメニューの Properties | Project References をクリックして、下記のような設定であることを確認します。OK をクリックします。
図 13: Project References
“BD_big_stack” プロジェクトを選択し、マウス右ボタンメニューの Build Project をクリックして実行します。出力ウィンドウをチェックします。プロジェクトによっては処理に時間がかかります。コンパイル処理が完了すると、プロジェクトディレクトリの .dat ファイルが更新されます。
--quartus_project_dir "C:/Users/TerryT/workspace/niosII_stratixII_2s60"
Info: (BD_big_stack.elf) 89 KBytes program size (code + initialized data).
Info: 31 KBytes free for stack + heap.
Info: Creating BD_big_stack.objdump
nios2-elf-objdump --disassemble --syms --all-header --source BD_big_stack.elf >BD_big_stack.objdump
[BD_big_stack build complete]
ソフトウェアプロジェクトの作成と構築が完了したら、シミュレーションを実行するために Active-HDL で下記の操作をします。
SOPC と Eclipse でのシミュレーションファイルの生成が完了したら、下記を実行します。
Active-HDL を起動します。Active-HDL がすでに立ち上がっている場合には、開いているワークスペースを閉じます。
メニューの File | Import | Altera SOPC Simulation Script を選択します。
setup_sim.do ファイルを選択し、Open をクリックします。[setup_sim.do ファイルはプロジェクトディレクトリに存在します。このファイルは SOPC builder により生成されています。]
図 14: setup_sim.do ファイル
Altera SOPC Simulation Script importing ウィザードにより、ワークスペースが作成され、必要な do ファイルが作成されて、ワークスペースに付加されます。下記は setup_sim.do ファイルインポート時の典型的なコンソール出力です。シミュレーションスクリプトを Active-HDL にインポートすると、ワークスペースは下記のようになります。
# ELBREAD: Elaboration time 2.5 [s].
# Reading "setup_sim.do" ...
# Creating "setup_sim_altera.do" ...
# Creating "comp_altera.do" ...
# Creating "comp_mem_altera.do" ...
# Creating "init_sim_altera.do" ...
# Creating "wave_presets_altera.do" ...
# Creating "list_presets_altera.do" ...
# Creating "help_altera.do" ...
# Creating "aliases_altera.do" ...
# Creating "jtag_uart_0_log_altera.do" ...
# Import process successfully finished, etc.
図15: setup_sim.do ファイルインポート後のワークスペース
comp_altera.do ファイルを実行して、必要なライブラリのマッピングとコンパイルを行います。 マクロファイルを実行するには、comp_altera.do を選択し、マウス右ボタンメニューの execute をクリックします。
# Compile Architecture "europa" of Entity "onchip_memory2_0_s1_arbitrator"
# Compile Entity "sysid_control_slave_arbitrator"
# Compile Architecture "europa" of Entity "sysid_control_slave_arbitrator"
# Compile Entity "timer_0_s1_arbitrator"
# Compile Architecture "europa" of Entity "timer_0_s1_arbitrator"
# Compile Entity "VME_HW_SOPC_BUILD_reset_clk_0_domain_synch_module"
# Compile Architecture "europa" of Entity "VME_HW_SOPC_BUILD_reset_clk_0_domain_synch_module"
# Compile Entity "VME_HW_SOPC_BUILD_reset_altpll_0_c0_out_domain_synch_module"
# Compile Architecture "europa" of Entity "VME_HW_SOPC_BUILD_reset_altpll_0_c0_out_domain_synch_module"
# Compile Entity "VME_HW_SOPC_BUILD"
# Compile Architecture "europa" of Entity "VME_HW_SOPC_BUILD"
# Compile Entity "test_bench"
# Compile Architecture "europa" of Entity "test_bench"
# Compile success 0 Errors 0 Warnings Analysis time : 0.8 [s]
init_sim_altera.do ファイルを実行し、イニシャライズシミュレーション処理を行います。次のメッセージがコンソールに表示されます。
# ELAB2: Elaboration final pass...
# ELAB2: Create instances ...
# ELAB2: Create instances complete.
# SLP: Started
# SLP: Elaboration phase ...
# SLP: Elaboration phase ... skipped, nothing to simulate in SLP mode : 0.0 [s]
# SLP: Finished : 0.0 [s]
# ELAB2: Elaboration final pass complete - time: 1.2 [s].
# KERNEL: Kernel process initialization done.
# Allocation: Simulator allocated 25170 kB (elbread=6156 elab2=16989 kernel=2025 sdf=0)
# KERNEL: ASDB file was created in location C:\Users\TerryT\workspace\niosII_stratixII_2s60\VME_HW_SOPC_BUILD_sim\src\wave.asdb
# 11:36 AM, Wednesday, February 02, 2011
# Simulation has been initialized
# Selected Top-Level: test_bench (europa)
wave_presets_altera.do ファイルを実行し、信号を波形に追加します。
simulation メニューからシミュレーションを実行するか、コンソールに run 1000 us とタイプして enter キーを押します。コンソールには次のメッセージが表示されます。
# # Displays virtual signals
# 6 signal(s) traced.
run 1000 us
# EXECUTION:: NOTE : Stratix II GX PLL is enabled
# EXECUTION:: Time: 0 ps, Iteration: 2, Instance: /DUT/the_altpll_0/altpll_0_altpll_sd1_183/STRATIXII_ALTPLL/M1, Process: SCHEDULE.
# EXECUTION:: NOTE : Stratix II GX PLL locked to incoming clock
# EXECUTION:: Time: 110 ns, Iteration: 4, Instance: /DUT/the_altpll_0/altpll_0_altpll_sd1_183/STRATIXII_ALTPLL/M1, Process: SCHEDULE.
# KERNEL: stopped at time: 1 ms
下記は 1msec のシミュレーション実行結果の例です。
図16: Active-HDL シミュレーション実行