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 | 以上.
|
---|