TOPPERS/ATK2-SC1 <Nios2_Devターゲット依存部マニュアル> このドキュメントはNios2_Devターゲット依存部の情報を記述したものである. ---------------------------------------------------------------------- TOPPERS ATK2 Toyohashi Open Platform for Embedded Real-Time Systems Automotive Kernel Version 2 Copyright (C) 2011-2015 by Center for Embedded Computing Systems Graduate School of Information Science, Nagoya Univ., JAPAN Copyright (C) 2011-2015 by FUJI SOFT INCORPORATED, JAPAN Copyright (C) 2011-2013 by Spansion LLC, USA Copyright (C) 2011-2015 by NEC Communication Systems, Ltd., JAPAN Copyright (C) 2011-2015 by Panasonic Advanced Technology Development Co., Ltd., JAPAN Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN Copyright (C) 2011-2015 by Sunny Giken Inc., JAPAN Copyright (C) 2011-2015 by TOSHIBA CORPORATION, JAPAN Copyright (C) 2011-2015 by Witz Corporation Copyright (C) 2014-2015 by AISIN COMCRUISE Co., Ltd., JAPAN Copyright (C) 2014-2015 by eSOL Co.,Ltd., JAPAN Copyright (C) 2014-2015 by SCSK Corporation, JAPAN 上記著作権者は,以下の (1)〜(3)の条件を満たす場合に限り,本ドキュメ ント(本ドキュメントを改変したものを含む.以下同じ)を使用・複製・改 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. (1) 本ドキュメントを利用する場合には,上記の著作権表示,この利用条件 および下記の無保証規定が,そのままの形でドキュメント中に含まれて いること. (2) 本ドキュメントを改変する場合には,ドキュメントを改変した旨の記述 を,改変後のドキュメント中に含めること.ただし,改変後のドキュメ ントが,TOPPERSプロジェクト指定の開発成果物である場合には,この限 りではない. (3) 本ドキュメントの利用により直接的または間接的に生じるいかなる損害 からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 本ドキュメントのユーザまたはエンドユーザからのいかなる理由に基づ く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 本ドキュメントは,AUTOSAR(AUTomotive Open System ARchitecture)仕様 に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するものではな い.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利用する 者に対して,AUTOSARパートナーになることを求めている. 本ドキュメントは,無保証で提供されているものである.上記著作権者およ びTOPPERSプロジェクトは,本ドキュメントに関して,特定の使用目的に対す る適合性も含めて,いかなる保証も行わない.また,本ドキュメントの利用 により直接的または間接的に生じたいかなる損害に関しても,その責任を負 わない. $Id: target_user.txt 1801 2015-03-27 06:34:43Z t_ishikawa $ ---------------------------------------------------------------------- ○概要 Nios2_Devターゲット依存部(Nios2_Dev依存部)は,Altera社のNios2プロセ ッサを搭載した評価ボードをサポートしている.標準では,Altera社製の以下 のターゲットボードをサポートしている. ・Nios2 Cyclone IV 開発,教育用キット(NIOS2_DEV_DE2_115) ・Nios2 開発キット Stratix プロフェッショナルエディション (NIOS2_DEV_2S180) 本依存部をベースとして,メモリマップやデバイスのベースアドレスや割込み 番号を変更することにより,他のターゲットボードを容易にサポートすること が可能である. ○開発環境と動作確認バージョン 動作確認を行った開発環境は次の通りである. ・Nios2 Cyclone IV 開発,教育用キット(NIOS2_DEV_DE2_115) ・QuartusII : 11.0sp1 ・GCC : 4.1.2 QuartusII は次のURLからダウンロードできる(ユーザ登録が必要). https://www.altera.com/jp/download/dnl-index.jsp ※11.0sp1を選択してダウンロード可能 ※Cyclone IV E Familyをインストールする QuartusII をインストールすると,GCCなどの開発ツールもインストールされ, FPGAのコンフィギュレーションファイル(sofファイル)などを作成できる.sof ファイルの作成方法については,後述の「FPGAコンフィギュレーションファイ ル(sofファイル)の作成方法」を参照のこと. なお,QuartusII ウェブ・エディションでは使用範囲に制限があるが,ATK2カー ネルを動作可能であることを確認している. ○ ターゲット定義事項の規定 ● データ型に関する規定 ターゲット依存のデータ型のサイズは次の通り. void * 32ビット sintptr 32ビット uintptr 32ビット char8 8ビット uint8 8ビット sint8 8ビット uint16 16ビット sint16 16ビット uint32 32ビット sint32 32ビット uint64 64ビット sint64 64ビット float32 32ビット float64 64ビット ● 割込み処理に関する規定 ・割込み優先度の段階数(TNUM_INTPRIの値),その設定方法 デフォルトでは,TNUM_INTPRI=64としている.(prc.tf) 変更する場合は,prc.tfでTMIN_INTPRI定義を修正する. ・制限事項と拡張(ターゲット定義で使用できる割込み属性)サポートし ない ・デフォルトの割込みハンドラ(default_int_handler)の有無と処理内容 prc_user.txtの「未登録の割込み」を参照 ● C1ISRの割込みに関する規定 ・prc_user.txtの「C1ISRの扱い」を参照 ● CPU例外処理に関する規定 ・カーネル内のCPU例外出入口処理で起こる可能性のあるCPU例外 CPUアドレスエラー ● 性能評価用システム時刻の参照に関する規定 ・get_tim_utimeのサポートの有無,その制限事項 サポート ● その他 ・その他の制限事項 ・その他の拡張機能 ○ カーネルの起動/終了処理に関する情報 ・用意しているスタートアップモジュールの処理内容 ハードウェアバージョンの確認 avalonタイマーの起動 ・スタートアップモジュールからhardware_init_hookを呼び出している 場合,hardware_init_hookを呼出すときにメモリのBSS領域はまだ クリアしていないので,BSS領域変数のデフォルト値を使用できない. スタック(sp)及びグローバルポインタ(gp)は使用出来る ○ メモリマップ ・デフォルトのメモリマップ,その変更方法 メモリマップ詳細に関しては,リンカースクリプトnios2_dev_2s180.ld, nios2_dev_de2_115.ld,nios2_dev_2s180_sdram.ldを参照 ○ タイマドライバ関連の情報 ・タイムティックの周期,その変更方法 デフォルトでは,1[msec]周期に定義されている. 変更するには,マクロTIMER_CLOCKの定義を変更すること. 定義場所:nios2_system.h ・使用するリソース(タイマ) SYS_CLK_TIMER_BASEを使用している. ・タイマ割込みの割込み優先度の変更方法 マクロINTPRI_TIMERの定義を変更する. デフォルトではINTPRI_TIMER=5としている. 定義場所:target/nios2_dev_gcc/target_timer.h ○ シリアルインタフェースドライバの情報 ・使用するリソース(SIOコントローラ)として JTAG UART か UART かを 選択できる.デフォルトは JTAG UART を選択している. ・UARTを用いる場合の通信パラメータ ・ボーレート:115200bps ・ビット数:8ビット ・パリティの有無:なし ・ストップビット:1 ○ シリアルインタフェースの選択方法 Nios2 依存部で使うシリアルインタフェースとして, JTAG UART と UART の どちらを使うかは Makefile.target にある SERIAL_UART マクロを以下のよう に編集することで選択できる. ・JTAG UART を使う場合(デフォルト) SERIAL_UART = false ・UART を使う場合 SERIAL_UART = true ○ nios2_dev_de2_115のシリアルポート nios2_dev_de2_115では,UARTは3つのポートから1つを選択できる.デフォル トはポート1となっているが,以下のようにベースアドレスと割込み番号を変 更することで,別のポートを使うことができる. ・ポート1(JP5, デフォルト) ベースアドレス:0x02000d00 割込み番号:3 ・ポート2(JP5) ベースアドレス:0x02000d40 割込み番号:4 ・ポート3(J6, RS-232) ベースアドレス:0x08000440 割込み番号:7 ポート1とポート2については,次のようにJP5ピンに接続する.ポート1とポー ト2の信号レベルは3.3Vで,動作確認はOLIMEX社のUSB-SERIAL-CABLE-Fを使用 している.括弧内の色は,USB-SERIAL-CABLE-Fのケーブルの色を示している. ・ポート1(デフォルト) Rx (緑):A Tx (赤):B GND(青):C ・ポート2 Rx (緑):D Tx (赤):E GND(青):F ・JP5ピンの接続 39 37 35 33 31 29 27 25 23 21 19 17 15 13 11 9 7 5 3 1 -------------------------------------------------------------- |・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ E B | |・ ・ ・ ・ ・ F ・ ・ ・ ・ ・ ・ ・ ・ C ・ ・ ・ D A | -------------------------------------------------------------- 【↓JP8側↓】 ○ システム構築手順 ユーザーズマニュアルの「クイックスタートガイド」を参照 ○FPGAコンフィギュレーションファイル(sofファイル)の作成方法 NIOS2_DEV_DE2_115の場合について,FPGAコンフィギュレーションファイル (sofファイル)の作成方法を説明する.必要なファイル群は以下の通りである. ・NIOS2_DEV_DE2_115に付属のSYSTEM CDの DE2_115_demonstrations/DE2_115_NIOS_DEVICE_LED ディレクトリ ・sopcファイル target/nios2_dev_gcc/fpga_design/DE2_115_SOPC.sopc ・Altera DE2_115 Development and Education Board (NIOS2_DEV_DE2_115) 用ファイル ・パッチファイル target/nios2_dev_gcc/fpga_design/de2_115_patch_for_atk2.diff ・sysverディレクトリ arch/nios2_gcc/sysver/ ・cancディレクトリ target/nios2_dev_gcc/fpga_design/canc ※cancディレクトリにはOpenCores canプロジェクトのIPを基にNIOS2_Devターゲット で使用できるように修正した.canプロジェクトのライセンスはLGPL v2.1となって いる.OpenCoresについてはcanc/hdl/README.txtファイルを参照. DE2_115_NIOS_DEVICE_LED ディレクトリ内に,その他のファイルを置く.ディ レクトリ構造は次のようになる.DE2_115_SOPC.sopcファイルについては,既 存のファイルがあるので上書きする. DE2_115_NIOS_DEVICE_LED/ sysver/ arch/nios2_gcc/からコピー canc/ target/nios2_dev_gcc/fpga_design/からコピー */ SYSTEM CDからコピーしたディレクトリ de2_115_patch_for_atk2.diff target/nios2_dev_gcc/fpga_design/からコピー DE2_115_SOPC.sopc target/nios2_dev_gcc/fpga_design/からコピー * SYSTEM CDからコピーしたファイル 次に,DE2_115_NIOS_DEVICE_LED.qsf ファイルと DE2_115_NIOS_DEVICE_LED.v ファイルにパッチを当てる.DE2_115_NIOS_DEVICE_LED ディレクトリで以下の コマンドを実行することでパッチを当てることができる. % patch -p1 < de2_115_patch_for_atk2.diff 最後に,Nios II XX Command Shell (XXはバージョン) を使い, DE2_115_NIOS_DEVICE_LED ディレクトリで以下のコマンドを実行すると,ATK2 カーネルが動作するsofファイルが生成される. % sopc_builder --generate % quartus_cmd DE2_115_NIOS_DEVICE_LED.qpf -c DE2_115_NIOS_DEVICE_LED.qpf sofファイルの名前は,インストールしたQuartusIIのエディションによって以 下の名前になる. ・ウェブ・エディション DE2_115_NIOS_DEVICE_LED_time_limited.sof ・サブスクリプション・エディション DE2_115_NIOS_DEVICE_LED.sof QuartusIIに含まれるProgrammerによって,sofファイルを使用してFPGAのハー ドウェアを構成する. ○ビルド方法 ビルド時には,ターゲットボードを指定する必要がある.具体的には, Makefile.target にあるBOARDマクロを以下のいずれかに設定する. ・nios2_dev_de2_115 ・Nios2 Cyclone IV 開発,教育用キット (NIOS2_DEV_DE2_115) 指定. ・nios2_dev_2c180 ・Nios2 開発キット Stratix プロフェッショナルエディション (NIOS2_DEV_2S180) 指定. ○実行方法 ●コンソール 文字出力を JTAG UART により出力するため,文字出力用のコンソールを開き, コンソールで以下のコマンドを実行する.UARTを用いる場合は,不要である. nios2-terminal.exe --cable=USB-Blaster ●gdbサーバー gdbサーバーを実行する.新しいコンソールを開き,次のコマンド を実行する.[port]はポート番号で,1234以上を指定する. nios2-gdb-server.exe -r --cable=USB-Blaster --tcpport=[port] ●gdb デバッグ用のgdbを起動する.デバッグ用のコンソールを開き,ビルドしたデ ィレクトリに移動して,次のコマンドを実行する. nios2-elf-gdb atk2-sc1.exe まず,gdbのコマンドラインで,次のコマンドを実行して gdbサーバーに接続 する (gdb)target remote localhost:[port] Remote debugging using localhost:[port] 0x00000000 in ?? () (gdb) ファイルをロードする. (gdb)load ロードを終了した後,実行を開始する. (gdb)continue ●Makefileによる実行 上記の実機の実行は,make により実行できる.用意されているコマンドは次 の通りである. ・make run ・FPGAによる実行. ・make db ・FPGAによるデバッグ ・ターミナルとgdb-serverとgdbを起動する. ※make dbは,ターゲット依存部に用意しているgdb.iniを使用しているの で,デバッグ環境に合わせて(ポート番号など)変更しても良い. ○ HWバージョンのチェック Nios2はFPGA向けのプロセッサであるため,ハードウェア構成を容易に変更す ることが可能である.そのため,動作確認を行ったハードウェアのバージョン を起動時にチェックする. ハードウェアのバージョンは,sysverと呼ばれるペリフェラルによって管理す る.sysverには,以下の8個のレジスタが用意されており,そのうち,3個のレ ジスタをバージョン管理に用いる. ・SYSVER_MAJOR_VAR : メジャーバージョン ・SYSVER_MINOR_VAR : マイナーバージョン ・SYSVER_NUM_CORE : コア数 ハードウェアを変更して,以前のソフトウェアがそのままでは動作しない場合 には,メジャーバージョンをアップする.ソフトウェアの変更が必要ないバー ジョンアップの場合は,マイナーバージョンを上げることとする. ○ 他のターゲットボードへの移植 サポートしているターゲットボード以外のターゲットボードをサポートするた めには,以下の項目を設定する必要がある. ●コンパイルオプションとCライブラリ(Makefile.target) Nios2 にハードウェア除算器等やを追加して,カーネルでこれらを使用するよ うにコンパイルするためには,COPTSにコンパイルオプションを指定する必要が ある. ●タイマ関連 ◎ベースアドレス(nios2_system.h) #define SYS_CLK_TIMER_BASE xxx ◎タイマクロック(nios2_system.h) タイマ値の内部表現とミリ秒単位との変換を指定する. #define TIMER_CLOCK xxxx ◎割込み関連(nios2_system.h) #define SYS_CLK_TIMER_INT xxx ●シリアルインタフェース関連 Nios2 依存部のシリアルインタフェースドライバは,1ポートをサポートして おり,JTAG UART もしくは UART を用いる. ◎コンパイル/リンク指定(Makefile.target) Makefile.target の SERIAL_UART マクロにより,jtag_uart.o もしくは uart.o が SYSMOD_COBJS に追加される. SERIAL_UART マクロについては, 「シリアルインタフェースの選択方法」を参照のこと. ◎ベースアドレス(nios2_system.h) ・JTAG UART の場合 #define JTAG_UART_PORT1_BASE xxx ・UART の場合 #define UART_PORT1_BASE xxx ◎割込み番号(nios2_system.h) ・JTAG UART の場合 #define JTAG_UART_PORT1_INT xxx ・UART の場合 #define UART_PORT1_INT xxx ●カーネル低レベル出力用UART関連 カーネル低レベル出力用UARTは,上記のシリアルインタフェースを用いる. ●リンカスクリプト(Makefile.target) ターゲット依存部部でリンカスクリプトを用意して,Makefile.target で, LDSCRIPT に指定する. ●ベクタ割込みコントローラベースアドレスの定義(nios2_system.h) #define VIC_BASE xx ●ベクタ割込み最大数の定義(nios2_system.h) #define VIC_INT_NUM xx ●キャッシュサイズ(nios2_system.h) インストラクションキャッシュとデータキャッシュのサイズとラインサイズを 指定する. #define NIOS2_ICACHE_SIZE xxx /* 命令キャッシュサイズ */ #define NIOS2_ICACHE_LINE_SIZE xxx /* 命令キャッシュラインサイズ */ #define NIOS2_DCACHE_SIZE xxx /* データキャッシュサイズ */ #define NIOS2_DCACHE_LINE_SIZE xxx /* データキャッシュラインサイズ */ ●システムバージョンレジスタ(sysver) #define SYSVER_BASE xxx /* ベースアドレス */ #define TNUM_HWCORE 1 /* コア数 */ #define MAJOR_VAR xxx /* メジャーバージョン */ ○ ハードウェアカウンタ ・de2_115で動作確認した. ・1個のカウンタに2つのタイマを使用している. 差分タイマ:目的の時間を設定する時の現在時間(現在値タイマ)と次の満 了時間との相対時間をカウントすることで目的の絶対時間に満了したこと とする. count mode:count down once 現在値タイマ:カウンタ周期分のベースタイマを実現(絶対時間をカウント) count mode:continuous count down ・de2_115で使用できるカウンタ(コンフィギュレーション時指定できるカウン タ名と割込み番号)情報 (1)カウンタ名:MAIN_HW_COUNTER 差分タイマ:TIMER_0_IRQ (16) 現在値タイマ:TIMER_1_IRQ (17) 1ティック当たりの秒数:1/TIMER_CLOCK_HZ (※) (2)カウンタ名:SUB_HW_COUNTER1 差分タイマ:TIMER_2_IRQ (18) 現在値タイマ:TIMER_3_IRQ (19) 1ティック当たりの秒数:1/TIMER_CLOCK_HZ (※) (3)カウンタ名:SUB_HW_COUNTER2 差分タイマ:TIMER_4_IRQ (20) 現在値タイマ:TIMER_5_IRQ (21) 1ティック当たりの秒数:1/TIMER_CLOCK_HZ (※) ※TIMER_CLOCK_HZはボード毎に定義される ○割込みコントローラ ・sample1.arxmlでC1ISRのサンプルを使用する場合, (1)sample1.arxmlコンフィギュレーションファイルに,target_test.arxml をインクルードする. (2)../configure -T nios2_dev_gcc -U target_test.o の様に,Makefileに target_test.oを追加する. (3)MakefileでAPPL_ASMOBJS = SmpC1ISR.oを設定する ○その他注意点 テストなどの目的で,OS終了後StartOS()の呼出し元(main関数)に戻りたい 場合,ENABLE_RETURN_MAINマクロを定義することで,実現できる.現状の実装 では,カーネルテスト時に1つのバイナリで複数回OSを起動する機能をOSで実 現したい要望を満たしている. ○変更履歴 2015/03/30 ・トレースログを有効化する設定をターゲット依存部のMakefileから  削除 ・sample1のために,target_test.hで,sample1で使用するハードウェア  カウンタから約1秒でアラームを起動するために,約1秒に相当する  ハードウェアカウンタのティック値をCOUNTER_MIN_CYCLEマクロに定義 ・タイマカウンタにセットする値を実際のティック値-1に修正 2014/02/19 ・fpga_design/canc ・cancディレクトリをarchから移動. ・de2_115_patch_for_atk2.diff ・cancを追加したdiffファイルに更新. ・FPGAコンフィギュレーションファイル(sofファイル)の作成方法を更新. 2014/01/23 ・target_test.c|h|cfg|arxml ・ハードウェアカウンタに関する実装をtarget_hw_counter.c|h|cfg|arxmlへ移動 2014/01/10 ・静的APIファイルを削除 2013/10/11 ・target_config.c ・OS起動前に参照される変数の初期化対応 2013/06/28 ・target_config.c ・target_exit() で target_timer_terminate() を呼び出さないよう変更. 2013/03/29 ・MISRAルール対応により,一部ソースコードを修正した ・Nios2において,UARTのボーレートを変更可能に修正した - UART_BAUDRATEマクロにより変更可能(target_serial.h参照) ・その他の修正. - ソースコード上のコメント修正 - Nios2において,テスト用タイマの周波数が間違っていたので修正した 2013/01/31 一般向けのリリース 以上.