[1] | 1 | =====================================================================
|
---|
| 2 | Nios2プロセッサ依存部
|
---|
| 3 | Last Modified: 09 Sep 2008 12:01:04
|
---|
| 4 | =====================================================================
|
---|
| 5 |
|
---|
| 6 | ○概要
|
---|
| 7 |
|
---|
| 8 | Nios2プロセッサ依存部(以下,Nios2依存部)は,Altera社のNios2プロセッ
|
---|
| 9 | サ をターゲットとしている.サポートしている NiosII エンベデッド・デザ
|
---|
| 10 | イン・スイート のバージョンは,8.0sp1 である.これ以降のバージョンに関
|
---|
| 11 | しては,プロセッサやコンパイラに大きな変更がなければ,動作させることが
|
---|
| 12 | 可能である.
|
---|
| 13 |
|
---|
| 14 | Nios2は,ソフトコアプロセッサであるため,コアの構成や周辺回路の構成や
|
---|
| 15 | アドレス等を変更することが可能である.Nios2依存部では,プロセッサコア
|
---|
| 16 | とタイマ(Avalon Timer)とUART(JTAG UART)のみをサポートしている.ア
|
---|
| 17 | ドレス等の設定に関しては,ターゲット依存部で設定する.
|
---|
| 18 |
|
---|
| 19 | ○開発環境
|
---|
| 20 |
|
---|
| 21 | カーネルのコンパイルは,NiosII エンベデッド・デザイン・スイート に付属
|
---|
| 22 | している,GCC を用いる.動作確認を行なったバージョンは,3.4.6 である.
|
---|
| 23 |
|
---|
| 24 | ○コア構成
|
---|
| 25 |
|
---|
| 26 | ASPカーネルは,Nios2 コアの標準の構成で動作する.その他の追加命令(div
|
---|
| 27 | やmulti)は使用していない.これらの追加命令を使用する場合は,ターゲッ
|
---|
| 28 | ト依存部で適切にコンパイルオプションを設定する必要がある.なお,FPU
|
---|
| 29 | MMU MPU はサポートしていない.
|
---|
| 30 |
|
---|
| 31 | 例外に関しては,未定義命令以外の例外を用いる場合(MMUやMPUの追加時等)
|
---|
| 32 | は,ターゲット依存部で NIOS2_USE_EXTRA_EXCEPTION を定義すること.
|
---|
| 33 |
|
---|
| 34 | 割込み応答時間を高速化したい場合は,カスタム命令として,Interrupt
|
---|
| 35 | Vector Instruction を追加することで高速化可能である.
|
---|
| 36 |
|
---|
| 37 | ○周辺回路
|
---|
| 38 |
|
---|
| 39 | ASPカーネルを動作させるためには,周辺回路として,UART(JTAG UART),タ
|
---|
| 40 | イマ(Avalon Timer)をそれぞれ1個ずつ必要となる.Avalon Timerの設定は,
|
---|
| 41 | Presets は Custom とし、Registers は全て有効とする.また,それぞれ割込
|
---|
| 42 | みを使用するように設定する.
|
---|
| 43 |
|
---|
| 44 | ○CPU例外ハンドラ番号
|
---|
| 45 |
|
---|
| 46 | CPU例外番号としては,exception レジスタのCAUSEフィールドにセットされる
|
---|
| 47 | 値を用いる.
|
---|
| 48 |
|
---|
| 49 | ○CPU例外フレーム
|
---|
| 50 |
|
---|
| 51 | CPU例外ハンドラの引数に渡す,CPU例外フレームの構成を次に示す.
|
---|
| 52 |
|
---|
| 53 | 内容 オフセット
|
---|
| 54 | 例外番号 0
|
---|
| 55 | statusレジスタ 4
|
---|
| 56 | 割込み・例外ネストカウント 8
|
---|
| 57 | 戻りアドレス 12
|
---|
| 58 | 割込み優先度マスク(ipm) 16
|
---|
| 59 |
|
---|
| 60 | ○Trap例外
|
---|
| 61 |
|
---|
| 62 | Trap例外のハンドラは,prc_support.S で,trap_handler として用意してい
|
---|
| 63 | る.ディフォルトでは,単にリターンする.
|
---|
| 64 |
|
---|
| 65 | ○未登録の例外の発生
|
---|
| 66 |
|
---|
| 67 | 未登録の例外が発生した場合は,prc_config.c で定義されている.
|
---|
| 68 | default_exc_handler() が呼び出される.default_exc_handler() は,発生し
|
---|
| 69 | た例外の,CPU例外フレームの内容を表示した後,target_exit() を呼び出す.
|
---|
| 70 |
|
---|
| 71 | ○割り込みハンドラ番号と割込み番号
|
---|
| 72 |
|
---|
| 73 | 割込みハンドラ番号(inhno)と割込み番号(intno)は,SOPC Builder で指定し
|
---|
| 74 | た,割込み番号を用いる.
|
---|
| 75 |
|
---|
| 76 | ○カーネル管理内/外の割込み
|
---|
| 77 |
|
---|
| 78 | Nios2依存部では,カーネル管理外の割込みはサポートしない.
|
---|
| 79 |
|
---|
| 80 | ○割込み優先度
|
---|
| 81 |
|
---|
| 82 | CFG_INTに指定可能な割込み優先度としては,-1 から -7 までの値を設定可能
|
---|
| 83 | である.
|
---|
| 84 |
|
---|
| 85 | ○割込み属性
|
---|
| 86 |
|
---|
| 87 | CFG_INTでサポートしている割込み属性はない.
|
---|
| 88 |
|
---|
| 89 | ○未登録の割込み
|
---|
| 90 |
|
---|
| 91 | 未登録の割込みが発生した場合は,prc_config.c で定義されている,
|
---|
| 92 | default_int_handler() を呼び出す.default_int_handler() は,発生した割
|
---|
| 93 | り込みの割込み番号をコンソールに出力した後,target_exit() を呼び出す.
|
---|
| 94 |
|
---|
| 95 | ○デバイスアクセス関数
|
---|
| 96 |
|
---|
| 97 | Nios2では,メモリ空間とI/O空間を区別していないが,データキャッシュを有
|
---|
| 98 | 効とした場合,キャッシュをスルーしてデバイスにアクセスする命令を用いて
|
---|
| 99 | デバイスをアクセスする必要がある.そのため,Nios2依存部では,キャッシ
|
---|
| 100 | ュをスルーしてアクセスするI/O空間アクセス関数を用意している.
|
---|
| 101 |
|
---|
| 102 | sil_reb_iop
|
---|
| 103 | sil_wrb_iop
|
---|
| 104 | sil_reh_iop
|
---|
| 105 | sil_wrh_iop
|
---|
| 106 | sil_rew_iop
|
---|
| 107 | sil_wrw_iop
|
---|
| 108 |
|
---|
| 109 | =====================================================================
|
---|
| 110 | ターゲット依存部開発者向けの情報
|
---|
| 111 | =====================================================================
|
---|
| 112 |
|
---|
| 113 | ○概要
|
---|
| 114 |
|
---|
| 115 | ターゲット依存部では,ペリフェラルのベースアドレスや割込み番号,キャッ
|
---|
| 116 | シュ設定等を設定する必要がある.
|
---|
| 117 |
|
---|
| 118 | ○割込み応答時間の高速化
|
---|
| 119 |
|
---|
| 120 | 割込み応答時間を高速化するためには,Interrupt Vector Instruction をカ
|
---|
| 121 | スタム命令として追加して以下のマクロを定義する.
|
---|
| 122 |
|
---|
| 123 | #define NIOS2_USE_INT_VEC_INST /* Interrupt Vector Instruction を使う */
|
---|
| 124 | #define NIOS2_INT_VEC_INST_NO x /* 命令番号 */
|
---|
| 125 |
|
---|
| 126 | ○コンパイルオプションとCライブラリ(Makefile.target)
|
---|
| 127 |
|
---|
| 128 | Nios2 にハードウェア除算器等やを追加して,カーネルでこれらを使用するよ
|
---|
| 129 | うにコンパイルするためには,COPTSにコンパイルオプションを指定する必要がある.
|
---|
| 130 |
|
---|
| 131 | ○未定義命令例外以外の例外のサポート(target_kernel.h)
|
---|
| 132 |
|
---|
| 133 | 未定義命令例外以外の例外をサポートする場合は,
|
---|
| 134 | NIOS2_USE_EXTRA_EXCEPTION を定義する.
|
---|
| 135 |
|
---|
| 136 | ○タイマ関連
|
---|
| 137 |
|
---|
| 138 | ●ベースアドレス(target_kernel.h)
|
---|
| 139 |
|
---|
| 140 | #define AVALON_TIM_BASE xxx
|
---|
| 141 |
|
---|
| 142 | ●タイマクロック(target_timer.h)
|
---|
| 143 |
|
---|
| 144 | タイマ値の内部表現とミリ秒単位との変換を指定する.
|
---|
| 145 |
|
---|
| 146 | #define TIMER_CLOCK xxxx
|
---|
| 147 |
|
---|
| 148 | ●割込み関連(target_timer.h)
|
---|
| 149 |
|
---|
| 150 | #define INHNO_TIMER xx /* 割込みハンドラ番号 */
|
---|
| 151 | #define INTNO_TIMER xx /* 割込み番号 */
|
---|
| 152 | #define INTPRI_TIMER xx /* 割込み優先度 */
|
---|
| 153 | #define INTATR_TIMER xx /* 割込み属性 */
|
---|
| 154 |
|
---|
| 155 | ○UART関連
|
---|
| 156 |
|
---|
| 157 | Nios2 依存部の JTAG UART ドライバでは,最大3ポートのUARTをサポートして
|
---|
| 158 | いる.
|
---|
| 159 |
|
---|
| 160 | ●コンパイル/リンク指定(Makefile.target)
|
---|
| 161 |
|
---|
| 162 | JTAG UART を使用する場合は,Makefile.target で,SYSSVC_COBJS に,
|
---|
| 163 | jtag_uart.o を追加する.
|
---|
| 164 |
|
---|
| 165 | SYSSVC_COBJS := $(SYSSVC_COBJS) jtag_uart.o
|
---|
| 166 |
|
---|
| 167 | ●ベースアドレス(target_kernel.h)
|
---|
| 168 |
|
---|
| 169 | #define JTAG_UART_PORT1_BASE xxx
|
---|
| 170 | #define JTAG_UART_PORT2_BASE xxx
|
---|
| 171 | #define JTAG_UART_PORT3_BASE xxx
|
---|
| 172 |
|
---|
| 173 | ●割込み番号等(target_serial.h)
|
---|
| 174 |
|
---|
| 175 | #define INHNO_SIO_PORT1 xx /* 割込みハンドラ番号1 */
|
---|
| 176 | #define INTNO_SIO_PORT1 xx /* 割込み番号1 */
|
---|
| 177 | #define INTPRI_SIO_PORT1 xx /* 割込み優先度1 */
|
---|
| 178 | #define INTATR_SIO_PORT1 xx /* 割込み属性1 */
|
---|
| 179 | #define INHNO_SIO_PORT2 xx /* 割込みハンドラ番号2 */
|
---|
| 180 | #define INTNO_SIO_PORT2 xx /* 割込み番号2 */
|
---|
| 181 | #define INTPRI_SIO_PORT2 xx /* 割込み優先度2 */
|
---|
| 182 | #define INTATR_SIO_PORT2 xx /* 割込み属性2 */
|
---|
| 183 | #define INHNO_SIO_PORT3 xx /* 割込みハンドラ番号3 */
|
---|
| 184 | #define INTNO_SIO_PORT3 xx /* 割込み番号3 */
|
---|
| 185 | #define INTPRI_SIO_PORT3 xx /* 割込み優先度3 */
|
---|
| 186 | #define INTATR_SIO_PORT3 xx /* 割込み属性3 */
|
---|
| 187 |
|
---|
| 188 | ●ポート数(target_serial.h)
|
---|
| 189 |
|
---|
| 190 | #define TNUM_PORT xx
|
---|
| 191 |
|
---|
| 192 | ○カーネル低レベル出力用UART関連
|
---|
| 193 |
|
---|
| 194 | Nios2依存部で用いる,カーネル低レベル出力用UARTの定義を行う.用いる
|
---|
| 195 | UART としては,JTAG UART を用い,通常のログ出力と同じポートを使用可能
|
---|
| 196 | である.
|
---|
| 197 |
|
---|
| 198 | ●ベースアドレス(target_kernel.h)
|
---|
| 199 |
|
---|
| 200 | #define KENEL_LOW_JTAG_UART_BASE xxx
|
---|
| 201 |
|
---|
| 202 | ○リンカスクリプト(Makefile.target)
|
---|
| 203 |
|
---|
| 204 | ターゲット依存部部でリンカスクリプトを用意して,Makefile.target で,
|
---|
| 205 | LDSCRIPT に指定する.
|
---|
| 206 |
|
---|
| 207 | ○非タスクコンテキスト用のスタックサイズの定義(target_config.h)
|
---|
| 208 |
|
---|
| 209 | 非タスクコンテキスト用のスタックサイズを, target_config.h で定義する.
|
---|
| 210 | サイズは,4Byte単位で指定する.
|
---|
| 211 |
|
---|
| 212 | #define DEFAULT_ISTKSZ xxxx
|
---|
| 213 |
|
---|
| 214 | 例えば 4KByte を指定する場合は,次のように定義する.
|
---|
| 215 |
|
---|
| 216 | #define DEFAULT_ISTKSZ (0x1000U/4U)
|
---|
| 217 |
|
---|
| 218 | ○sil関連(target_sil.h)
|
---|
| 219 |
|
---|
| 220 | 微少時間待ちのための定義を target_sil.h で定義する.値の決定方法は,
|
---|
| 221 | porting.txt を参照のこと.
|
---|
| 222 |
|
---|
| 223 | #define SIL_DLY_TIM1 xxx
|
---|
| 224 | #define SIL_DLY_TIM2 xxx
|
---|
| 225 |
|
---|
| 226 | ○データセクションの初期化(target_kernel.h)
|
---|
| 227 |
|
---|
| 228 | データセクションのLMAとVMAを別のアドレスとして,ROM化をしない場合には,
|
---|
| 229 | ターゲット依存部で,NIOS2_OMIT_DATA_INIT を定義する.定義することで,
|
---|
| 230 | スタートアップルーチンは,データセクションのROMからRAMへのコピーを行わ
|
---|
| 231 | ない.
|
---|
| 232 |
|
---|
| 233 | ○キャッシュサイズ(target_kernel.h)
|
---|
| 234 |
|
---|
| 235 | インストラクションキャッシュとデータキャッシュのサイズとラインサイズを
|
---|
| 236 | 指定する.
|
---|
| 237 |
|
---|
| 238 | #define NIOS2_ICACHE_SIZE xxx /* 命令キャッシュサイズ */
|
---|
| 239 | #define NIOS2_ICACHE_LINE_SIZE xxx /* 命令キャッシュラインサイズ */
|
---|
| 240 | #define NIOS2_DCACHE_SIZE xxx /* データキャッシュサイズ */
|
---|
| 241 | #define NIOS2_DCACHE_LINE_SIZE xxx /* データキャッシュラインサイズ */
|
---|
| 242 |
|
---|
| 243 | =====================================================================
|
---|
| 244 | バージョン履歴
|
---|
| 245 | =====================================================================
|
---|
| 246 |
|
---|
| 247 | 2009/09/10
|
---|
| 248 | ・非依存部 Release 1.4.0 に対応
|
---|
| 249 | ・SIO割込みハンドラsio_isrの引数の型をintptr_tに変更(jtag_uart.*)
|
---|
| 250 | 2008/09/09
|
---|
| 251 | ・最初のリリース
|
---|
| 252 |
|
---|
| 253 | 以上.
|
---|