source: asp_nios2/trunk/arch/nios2_gcc/prc_user.txt@ 1

Last change on this file since 1 was 1, checked in by ertl-ichiba, 14 years ago

ASP 1.4.0対応のNios2依存部を追加

  • Property svn:eol-style set to native
  • Property svn:keyword set to Id
File size: 7.7 KB
Line 
1=====================================================================
2 Nios2プロセッサ依存部
3 Last Modified: 09 Sep 2008 12:01:04
4=====================================================================
5
6○概要
7
8Nios2プロセッサ依存部(以下,Nios2依存部)は,Altera社のNios2プロセッ
9サ をターゲットとしている.サポートしている NiosII エンベデッド・デザ
10イン・スイート のバージョンは,8.0sp1 である.これ以降のバージョンに関
11しては,プロセッサやコンパイラに大きな変更がなければ,動作させることが
12可能である.
13
14Nios2は,ソフトコアプロセッサであるため,コアの構成や周辺回路の構成や
15アドレス等を変更することが可能である.Nios2依存部では,プロセッサコア
16とタイマ(Avalon Timer)とUART(JTAG UART)のみをサポートしている.ア
17ドレス等の設定に関しては,ターゲット依存部で設定する.
18
19○開発環境
20
21カーネルのコンパイルは,NiosII エンベデッド・デザイン・スイート に付属
22している,GCC を用いる.動作確認を行なったバージョンは,3.4.6 である.
23
24○コア構成
25
26ASPカーネルは,Nios2 コアの標準の構成で動作する.その他の追加命令(div
27やmulti)は使用していない.これらの追加命令を使用する場合は,ターゲッ
28ト依存部で適切にコンパイルオプションを設定する必要がある.なお,FPU
29MMU MPU はサポートしていない.
30
31例外に関しては,未定義命令以外の例外を用いる場合(MMUやMPUの追加時等)
32は,ターゲット依存部で NIOS2_USE_EXTRA_EXCEPTION を定義すること.
33
34割込み応答時間を高速化したい場合は,カスタム命令として,Interrupt
35Vector Instruction を追加することで高速化可能である.
36
37○周辺回路
38
39ASPカーネルを動作させるためには,周辺回路として,UART(JTAG UART),タ
40イマ(Avalon Timer)をそれぞれ1個ずつ必要となる.Avalon Timerの設定は,
41Presets は Custom とし、Registers は全て有効とする.また,それぞれ割込
42みを使用するように設定する.
43
44○CPU例外ハンドラ番号
45
46CPU例外番号としては,exception レジスタのCAUSEフィールドにセットされる
47値を用いる.
48
49○CPU例外フレーム
50
51CPU例外ハンドラの引数に渡す,CPU例外フレームの構成を次に示す.
52
53 内容 オフセット
54 例外番号 0
55 statusレジスタ 4
56 割込み・例外ネストカウント 8
57 戻りアドレス 12
58 割込み優先度マスク(ipm) 16
59
60○Trap例外
61
62Trap例外のハンドラは,prc_support.S で,trap_handler として用意してい
63る.ディフォルトでは,単にリターンする.
64
65○未登録の例外の発生
66
67未登録の例外が発生した場合は,prc_config.c で定義されている.
68default_exc_handler() が呼び出される.default_exc_handler() は,発生し
69た例外の,CPU例外フレームの内容を表示した後,target_exit() を呼び出す.
70
71○割り込みハンドラ番号と割込み番号
72
73割込みハンドラ番号(inhno)と割込み番号(intno)は,SOPC Builder で指定し
74た,割込み番号を用いる.
75
76○カーネル管理内/外の割込み
77
78Nios2依存部では,カーネル管理外の割込みはサポートしない.
79
80○割込み優先度
81
82CFG_INTに指定可能な割込み優先度としては,-1 から -7 までの値を設定可能
83である.
84
85○割込み属性
86
87CFG_INTでサポートしている割込み属性はない.
88
89○未登録の割込み
90
91未登録の割込みが発生した場合は,prc_config.c で定義されている,
92default_int_handler() を呼び出す.default_int_handler() は,発生した割
93り込みの割込み番号をコンソールに出力した後,target_exit() を呼び出す.
94
95○デバイスアクセス関数
96
97Nios2では,メモリ空間と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
128Nios2 にハードウェア除算器等やを追加して,カーネルでこれらを使用するよ
129うにコンパイルするためには,COPTSにコンパイルオプションを指定する必要がある.
130
131○未定義命令例外以外の例外のサポート(target_kernel.h)
132
133未定義命令例外以外の例外をサポートする場合は,
134NIOS2_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
157Nios2 依存部の JTAG UART ドライバでは,最大3ポートのUARTをサポートして
158いる.
159
160●コンパイル/リンク指定(Makefile.target)
161
162JTAG UART を使用する場合は,Makefile.target で,SYSSVC_COBJS に,
163jtag_uart.o を追加する.
164
165SYSSVC_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
194Nios2依存部で用いる,カーネル低レベル出力用UARTの定義を行う.用いる
195UART としては,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 で,
205LDSCRIPT に指定する.
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 で定義する.値の決定方法は,
221porting.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
2472009/09/10
248 ・非依存部 Release 1.4.0 に対応
249 ・SIO割込みハンドラsio_isrの引数の型をintptr_tに変更(jtag_uart.*)
2502008/09/09
251 ・最初のリリース
252
253以上.
Note: See TracBrowser for help on using the repository browser.