1. 概要
この記事では、プラットフォーム・デザイナー(旧 Qsys)には登録せず Quartus® Prime 側に登録したユーザーロジック等のモジュールと一緒に Nios® II のソフトウェア動作をシミュレーションする方法、つまり Nois® II を含んだ Quartus® Prime プロジェクト全体のシミュレーションを行う方法を紹介します。
よりシンプルにプラットフォーム・デザイナーのブロックのみを使用して Nios® II のソフトウェア動作をシミュレーションで確認する方法は、下記コンテンツで紹介していますのでこちらもご参照ください。
【参考コンテンツ】
Nios® II はじめてガイド - Nios® II 簡易シミュレーション
尚、この記事では下記のツールを使用しています。
・Quartus® Prime Standard Edition ver 18.1 (以下、Quartus® Prime)
・ModelSim®-Intel® FPGA Edition 10.5b (以下、ModelSim®)
*注意点
この記事で紹介しているシミュレーション手法は、Nois® II Boot 構成が On Chip RAM から Boot となっている事を前提としたシミュレーション手法になっております。
2. シミュレーション手順
まず、以下が完成している事が前提となります。
・Quartus® Prime の各種デザイン
・プラットフォーム・デザイナーの構成
・Nios® II で動作させるソフトウェア
・シミュレーションで使用するテストベンチ
2-1 下準備
プラットフォーム・デザイナーを Generate する際に、一緒にプラットフォーム・デザイナーの シミュレーション・モデルを生成します。図1 のように設定をして、Generate をクリックしてください。
プラットフォーム・デザイナーの生成フォルダー下に simulation フォルダーが生成されることを確認します。
図1:プラットフォーム・デザイナーでの Generate
Nios® II Software Build Tools for Eclipse (以下 Nios® II SBT)にて、ソフトウェアの HEX ファイルを生成します。図2 のように、
アプリケーションを右クリック → Make Targets → Build... → mem_init_generate → Build
より ***_onchip_memory.hex ファイルを生成します。
アプリケーション・フォルダー下の mem_init フォルダーに HEX ファイルが生成されることを確認できます。
図2:HEX ファイルの生成
2-2 HEX(ソフトウェア・ファイル)の格納
生成した ***_onchip_memory.hex ファイルを シミュレーション で使用するシミュレーション・モデルの保存フォルダーに格納することによって、ソフトウェア・ファイル通りに Nios® II をシミュレーションさせることができます。
図3 のように、<Quartus プロジェクト>/<Platform Designer フォルダー>/simulation/submodule にあるデフォルトの ***_onchip_memory.hex ファイルと、2-1 で生成した ***_onchip_memory.hex ファイルを入れ替えます。
図3:HEX ファイルの格納
2-3 msim_setup.tcl のカスタマイズ
プラットフォーム・デザイナーが生成したファイルや必要なシミュレーション・モデルをModelSim® でセットアップするためのスクリプトファイル(msim_setup.tcl )が下記のフォルダーに用意されています。
<Quartus プロジェクト>/<Platform Designer フォルダー>/simulation/mentor/msim_setup.tcl
今回は、図4 のような Nios® II を含むプラットフォーム・デザイナー・システム(nios2_system)とユーザー回路(led7)を含むデザインを例に msim_setup.tcl カスタマイズ例を紹介します。
図4: デザイン例
図5 のように、msim_setup.tcl のデザインコンパイル記述の中に、ユーザー回路の HDL とテストベンチをコンパイルするコマンドを追加します。
図5: msim_setup.tcl コンパイルコマンド記述
vlog -reportprogress 300 -work work E:/Work/Emb_study/NiosII_Simulation/sim_again_ver1/nios2_basic_lab.v
vlog -reportprogress 300 -work work E:/Work/Emb_study/NiosII_Simulation/sim_again_ver1/led7.v
vlog -reportprogress 300 -work work E:/Work/Emb_study/NiosII_Simulation/sim_again_ver1/simulation/modelsim/nios2_basic_lab.vt
図 5 の msim_setup.tcl カスタム例
図6 のように、ロード・シミュレーション・コマンド(vsim)を修正します。
elab_debug 内の記述に修正・追加をします。
ロード・シミュレーション・コマンドのデフォルトでは、"$TOP_LEVEL_NAME" となっていますが、今回使用するテストベンチ・モジュール名ではないので、使用するモジュール名に修正します。(ファイルの最初に "TOP_LEVEL_NAME" を定義している記述がありますので、そちらを修正する方法もあります)
さらに、見たい信号を wave 画面に追加するコマンド(add wave)と、シミュレーションを実行するコマンド(run)を追加しておけば、自動的に波形の表示まで行うことができます。
図6: msim_setup.tcl ロード・シミュレーション・コマンド記述
# Elaborate the top level design with novopt option
alias elab_debug {
echo "\[exec\] elab_debug"
eval vsim -novopt -t ps $ELAB_OPTIONS $USER_DEFINED_ELAB_OPTIONS -L work -L work_lib -L error_adapter_0 -L avalon_st_adapter -L rsp_mux_001 -L rsp_mux -L rsp_demux_001 -L rsp_demux -L cmd_mux_001 -L cmd_mux -L cmd_demux_001 -L cmd_demux -L nios2_gen2_0_data_master_limiter -L router_003 -L router_002 -L router_001 -L router -L jtag_uart_avalon_jtag_slave_agent_rsp_fifo -L jtag_uart_avalon_jtag_slave_agent -L nios2_gen2_0_data_master_agent -L jtag_uart_avalon_jtag_slave_translator -L nios2_gen2_0_data_master_translator -L cpu -L rst_controller -L irq_mapper -L mm_interconnect_0 -L pio_SW -L onchip_memory -L nios2_gen2_0 -L led_pio -L jtag_uart -L altera_ver -L lpm_ver -L sgate_ver -L altera_mf_ver -L altera_lnsim_ver -L fiftyfivenm_ver nios2_basic_lab_vlg_tst
add wave -position end sim:/nios2_basic_lab_vlg_tst/*
add wave -position end sim:/nios2_basic_lab_vlg_tst/i1/u0/jtag_uart/av_writedata
add wave -position end sim:/nios2_basic_lab_vlg_tst/i1/u0/led_pio/data_out
run -all
}
図6 の msim_setup.tcl カスタム例
ModelSim® のスクリプトファイルの読み方や使用しているコマンドについては下記の記事が参考になります。
【参考コンテンツ】
Quartus® Prime Pro Edition で生成した IP を含むデザインを ModelSim でファンクション・シミュレーションする方法
2-4 Modelsim® によるシミュレーションの実行
ModelSim® を立ち上げて、File メニュー → Change Directory より 2-3 で編集した msim_setup.tcl が保存されているディレクトリに移動します。(図7)
Tools → Tcl → Execute Macro... にて、msim_setup.tcl を選択して、実行してください。
図7: ModelSim® での msim_setup.tcl の実行
msim_setup.tcl を実行すると、図8 のように一旦停止し Transcript にメニューが表示されます。
"ld_debug" を入力すると、各種ファイルのコンパイルとシミュレーションが実行されます。
図8: ld_debug の実行
最後まで実行が終了すると図9 のように波形が表示され、Nios® II とその他 HDL モジュールのシミュレーションが完了することを確認できます。
図9: 波形の表示確認
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。