source: anotherchoice/tags/jsp-1.4.4-full-UTF8/doc/latticemico32.txt@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 18.9 KB
Line 
1
2 == TOPPERS/JSP カーネル ユーザズマニュアル ==
3 (LatticeMico32 ターゲット依存部)
4
5 (Release 1.4.3 対応, 最終更新: 7-Mar-2008)
6------------------------------------------------------------------------
7 TOPPERS/JSP Kernel
8 Toyohashi Open Platform for Embedded Real-Time Systems/
9 Just Standard Profile Kernel
10
11 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
12 Toyohashi Univ. of Technology, JAPAN
13
14 上記著作権者
15は,以下の (1)〜(4) の条件か,Free Software Foundation
16 によってå…
17¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
18 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
19 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
20å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
21 利用と呼ぶ)することを無償で許諾する.
22 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
23 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
24 スコード中に含まれていること.
25 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
26 用できる形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
28å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
29 者
30マニュアルなど)に,上記の著作権表示,この利用条件および下記
31 の無保証規定を掲載すること.
32 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
33 用できない形で再é…
34å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
35 と.
36 (a) 再é…
37å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
38マニュアルなど)に,上記の著
39 作権表示,この利用条件および下記の無保証規定を掲載すること.
40 (b) 再é…
41å¸ƒã®å½¢æ…
42‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
43 報告すること.
44 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
45 害からも,上記著作権者
46およびTOPPERSプロジェクトをå…
47è²¬ã™ã‚‹ã“と.
48
49 本ソフトウェアは,無保証で提供されているものである.上記著作権者
50お
51 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
52 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
53 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
54
55------------------------------------------------------------------------
56
571. LatticeMico32 (lm32) ターゲット依存部の概要
58
59 1.1 ターゲットシステムと開発環境
60  LatticeMico32 プロセッサのターゲットシステムは Lattice FPGA 搭載の次の
61 開発・評価ボードをサポートしている。
62
63 ・Lattice 社提供; LatticeECP2 LatticeMico32/DSP 開発ボード
64 (FPGA LatticeECP2-50 搭載)
65
66  開発環境には、GCC などの GNU 開発環境を用い、オブジェクトファイルフォー
67 マットは ELF を標準とする。
68
69
70 1.2 サポート機能の概要
71  LatticeMico32 依存の機能として、割込みの禁止と許可(dis_int、ena_int)や
72 システム時刻参ç…
73§æ©Ÿèƒ½(get_tim)、割込みマスクの変更・参ç…
74§(chg_ixx、get_ixx)
75 をサポートしている。詳細なサポート関数については本マニュアルの末尾に一覧
76 でまとめている。
77
78
79 1.3 システム構成
80  LatticeMico32 は FPGA を対象としているため、そのプロセッサ/ペリフェラル
81 構成に対する自由度が大きい。従って JSP カーネルを動作させるために必
82要な
83 å…
84±é€šãªãƒ—ロセッサ依存部が /lm32 下に、ターゲットシステム依存部は、上述の
85 評価ボードの場合に関して /lm32/ECP2 下にある。
86  なお、FPGA は電源投å…
87¥å¾Œã«ãƒ¦ãƒ¼ã‚¶ã®è«–理回路を作り込むプロセス(コンフィグ
88 レーション)が一般に必
89要である。 LatticeECP2 もそうしたタイプである。
90 システムとしては、何らかの不揮発性メモリ内
91にこのコンフィグレーション用デ
92 ータを保持しておく必
93要がある。
94
95  ターゲットシステムで JSP カーネルを動作させるための、コアペリフェラル
96 最小構成を以下に示す。JTAG デバッグポートは任意である。
97  ・タイマ
98  ・UART
99  ・ストレージ・コンポーネント(内
100部 RAM、外部 SRAM、外部フラッシュメモリ)
101
102 ストレージ・コンポーネントの構成(ブート方法)としては 2 つの選択肢がある。
103 内
104部 RAM からのブート;
105  カーネルイメージに対応することができる程度に FPGA の内
106部 RAM が大きい
107  場合、ストレージ・コンポーネントとしては内
108部 RAM のみとしても構成可能で
109  ある。スタック領域を内
110部に持つか外部 SRAM に持つかは、やはり内
111部 RAM の
112  規模や設計方針に依存する。
113   本ブート方法は、FPGA をコンフィグレーションする際に、内
114部 RAM もカーネ
115  ルイメージで同時に初期化するものである。ブートローダを必
116要とすることなく、
117  リセット後直ちにリセットベクタアドレスからイメージを実行する。
118
119 外部フラッシュメモリからのブート;
120   イメージを外部フラッシュに格納し、外部 SRAM(或いは内
121部 RAM)でイメージ
122 を実行する場合、ストレージ・コンポーネントとしては外部 SRAM とフラッシュ
123 メモリの構成になる。リセット後、フラッシュメモリ内
124のブートローダがまず起動
125 し、各データセクションを適切に処理後、実行を開始する。
126
127 なお FPGA に作り込む論理回路(ハードウェアプラットフォーム)の作成、FPGA
128 コンフィグレーション用ファイルの生成に関する詳細については以下の資料など
129 を参ç…
130§ã•ã‚ŒãŸã„。
131 ・LatticeMico32 Software Developer User Guide
132 ・LatticeMico32 Development Kit User's Guide for LatticeECP2
133 ・ispLEVER マニュアル(日本語)
134
135 各資料は以下 URL からå…
136¥æ‰‹å¯èƒ½
137 ・http://www.latticesemi.com/dynamic/index.cfm?fuseaction=view_documents&document_type=35&sloc=01-01-08-11-48-02
138 ・http://www.latticesemi.co.jp/docs/index.cfm
139
140
141 1.4 システムコンフィグレーション
142  JSP カーネルを新規開発システムで実行するためには、適切なターゲット依存
143 ファイルの一部をそのシステム特有の内
144容に書き換える。確認・編集すべきパラ
145 メータは以下の通りである。
146
147 lm32/Makefile.config
148 COPTS : コンパイルオプション
149 LDFLAGS : リンカオプション
150
151 lm32/sys_defs.h
152 TIC_NUME : タイムティック周期の分子
153 TIC_DENO : タイムティック周期の分母
154 TIMER_CLOCK : タイマークロック値。MICO32_CPU_CLOCK_HZ に依存
155
156 lm32/ECP2/lm32.h
157 MICO32_CPU_CLOCK_HZ : CPU クロック周波数 [Hz]、デフォルトは 25MHz
158 DEFAULT_UART_BOARDRATE :UART のデフォルト・ボーレート(Baud Rate) [bps]
159 TIMER_BASE_REG : TIMER のベースアドレス
160 UART0_BASE_REG : UART 0 のベースアドレス
161 UART1_BASE_REG : UART 1 のベースアドレス
162 INHNO_TIMER : TIMER の割り込み ID
163 INHNO_SIO1 : UART 0 の割り込み ID
164 INHNO_SIO2 : UART 1 の割り込み ID(UART 2 系統使用の場合)
165
166 lm32/ECP2/lm32elf.ld(リンカースクリプト)
167 _fstack : 初期スタックアドレス(通常外部 SRAM の ORIGIN と LENGTH)
168
169
170 注1 ;コンパイルオプション(COPTS)に関して
171  Mico32 は CPU コアのオプションとして命令実行アシスト用ロジックの使用
172  可否を MSB にて設定できる (RTL は MSB が生成)。この設定に合わせてコン
173  パイルオプションを付加する。
174   -mmultiply-enabled    :乗算器
175   -mbarrel-shift-enabled  :バレルシフタ
176   -mdivide-enabled    :除算器
177   -msign-extend-enabled  :符号拡張
178 
179 注2 ;リンカースクリプト(lm32elf.ld)に関して
180  上述のスタックに関する定義以外に、ブートローダやブートメモリの指定など
181  も行うが、CPU やメモリの構成に自由度があるので、本リンカースクリプトの
182  編集には注意されたい。参考として、lm32/ECP2/ サブフォルダには以下の
183  サンプルスクリプト例が含まれている。なお、有効なリンカースクリプト名
184  は lm32elf.ld である。
185  lm32elf_ebr.ld ;
186   FPGA コンフィグレーション後、或いは CPU リセット後、内
187部メモリから
188   ブート。スタックは外部 ASRAM
189  lm32elf_flash.ld ;
190   FPGA コンフィグレーション後、或いは CPU リセット後、外部フラッシュ
191   からブート。スタックは外部 ASRAM
192
193
194 1.5 他のターゲットへのポーティング
195  LatticeMico32 プロセッサは以下の Lattice 社製各 FPGA デバイス・ファミリを
196 サポートしている。
197  ・LatticeECP2/ECP2M、LatticeSC/SCM、LatticeEC/ECP
198 ただし、実装
199する論理回路の RTL はオープンソースの方針である。基本的に対象
200 デバイスとしての制約はないので、技術的にはこれ以外のデバイスへの実装
201も可
202 能である。
203
204
205 1.6 GDB スタブ
206  LatticeMico32 開発ツール(MSB, SDK)では GDB スタブはサポートしていない。
207
208
2092. LatticeMico32 プロセッサ依存部の機能
210
211  ここでは、カーネルおよびシステムサービスの機能の中で,LatticeMico32
212 依存部について述べる。
213
214 2.1 データ型
215  signed int 型および unsigned int 型は 32 ビット幅
216である。
217
218 2.2 割込み管理機能と割込みハンドラ
219  DEF_INH で指定する割込みハンドラ番号は、"lm32.h" 内
220で指定した割込み番号
221 を表し、そのデータ型は unsigned int(UINT)として定義されている。
222  DEF_INH で無効の割込み優å…
223ˆåº¦ã‚„、実際の割込み優å…
224ˆåº¦ã¨ç•°ãªã‚‹å€¤ã‚’指定した
225 場合の動作は保証されない。
226
227 なおタスク例外ハンドラの登録はコンフィグレーション・ファイル .cfg 内
228に
229 以下の定義を加えることによって行う。
230
231  DEF_TEX(TASK_ID, { TA_HLNG, tsk_exc_routine });
232   TASK_ID    : 登録するタスクの ID
233   tsk_exc_routine : C ファイルで記述するタスク例外ハンドラ名
234
235
236 2.3 スタートアップモジュールの処理内
237容
238  スタートアップモジュール "start.S" では以下の初期化処理を行う。
239
240 (i) キャッシュの初期化
241  命令キャッシュやデータキャッシュを実装
242している場合、初期化を行う。
243
244 (ii) スタックポインタとグローバルポインターの初期化
245  スタックポインタとグローバルポインターを初期値に設定する。
246
247 (iii) 例外ハンドラの登録
248  リセット、バスエラー、システムコール、割り込みなどの例外ハンドラを
249 それぞれ登録する。
250
251 (iv) bss セクションの初期化
252  bss セクションをクリアする。
253
254 (v) カーネルの起動
255  カーネルを起動する。kernel_start からリターンすることはない。
256
257
2583. ソフトウェア開発環境と手順例
259
260 3.1 カーネル構築の環境
261  アプリケーションをビルドする前に、カーネル環境を準備する必
262要がある。以下に
263 そのチェック事項
264・手順を示す。
265
266 A. LatticeMico32 開発ツール (Mico32 System Builder; MSB) をインストールする
267
268 B. TOPPERS/JSP ソースコードをå…
269¥æ‰‹ã€è§£å‡ã—、Mico32 MSB インストール・ディレク
270  トリ下に置く
271
272 C. LatticeMico32 のターゲット依存コード(lm32)をJSPパッケージ内
273 "jsp\config”
274  というサブディレクトリ下にあることを確認する
275
276 D. JSP パッケージ内
277 "user.txt" 7.3章に記述されているように、GCC などのツール
278  を導å…
279¥ã—、コンフィグレータをビルドする。完了すると、ファイル "cfg.exe" と
280  "chk.exe" がディレクトリ“jsp/cfg" 下に生成される。
281   なお、Mico32 MSBに組み込まれている Cygwin シェル(Mico32 SDK) はこの目的
282  には使用しない。
283
284 MSB は下記 URL から無償でダウンロード可能(ライセンスアグリーメントに同意の
285 ボタンをクリックする必
286要がある)
287 ・http://www.latticesemi.com/dynamic/index.cfm?fuseaction=view_documents&document_type=65&sloc=01-01-08-11-48
288
289
290 3.2 アプリケーションのビルド例
291  LatticeECP2 FPGA をターゲットデバイスとするアプリケーション名を"hello_world"
292 とした場合の例についてビルド手順を以下に示す。
293
294 A. 拡張子のみが異なる同名の3つのファイル、hello_world.c、hello_world.h、および
295  hello_world.cfg を用意する
296
297 B. "/jsp" ディレクトリ下に作業ディレクトリ lm32_hworld(例)を作成し、これら
298  ファイルをコピーする
299
300 C. Mico32 MSB (SDK)でシェルを開き /jsp/lm32_hworld に移動した後、以下を実行
301 する。Makefile が生成される
302  > ../configure -C lm32 -S ECP2 -A hello_world
303
304 D. 生成される Makefile 内
305のオブジェクトファイル拡張子名(71 行目)を編集する
306 (任意)
307   [å…
308ƒ] OBJEXT=exe
309   [新] OBJEXT=elf
310
311 E. 次のコマンドを実行しカーネルを構築する
312  > make depend
313
314 F. 次のコマンドを実行する。目的とするお婦じぇくとファイル jsp.elf (又は jsp.exe)
315 が生成される
316  > make
317  > make jsp.bin
318 (> make; make jsp.bin としても同じ)
319
320 (G. ソースファイルの変更が生じた場合は E, F を繰り返す)
321
322
323 3.3 デバッグ方法
324  以下にアプリケーションプログラムのデバッグ方法例を示す。
325
326 A. Mico32 SDK シェルを開き、次のコマンドを実行する
327 > TCP2JTAGVC2
328
329 B. Mico32 SDK シェルをもう一つ開き /jsp/lm32_hworld に移動後、次コマンドを実行
330  して GDB デバッグ環境にå…
331¥ã‚‹
332 > lm32-elf-gdb
333
334 C. GDB にて次のコマンドでターゲットにリンクする
335 (gdb) target remote localhost:1000
336
337 D. 次のコマンドを実行し、イメージをロードする
338 (gdb) load jsp.elf
339  
340 (3.2 F にて生成したオブジェクトファイル名が jsp.exe の場合は load jsp.exe)
341
342 E. GDB 各コマンドを使用してデバッグする。実行する場合は
343 (gdb) cont
344
345
3464. その他
347
348 4.1 ディレクトリ/ファイル構成
349  LatticeMico32 プロセッサ依存部、ターゲット依存部の各ファイルの概要は次の
350 通り
351
352 lm32/
353 Makefile.config Makefile の LatticeMico32 依存定義
354 cpu_rename.def カーネルの内
355部識別名のリネーム定義
356 cpu_rename.h カーネルの内
357部識別名のリネーム
358 cpu_unrename.h カーネルの内
359部識別名のリネーム解除
360 cpu_config.h プロセッサ依存部の構成定義
361 cpu_config.c プロセッサ依存部の関数
362 cpu_context.h コンテキスト操作
363 cpu_defs.h プロセッサ依存部のアプリケーション用定義
364 cpu_insn.h 低レベルのプロセッサ操作ルーチン
365 cpu_support.S プロセッサ依存部のサブルーチン
366 makeoffset.c offset.h 生成サポートプログラム
367 tool_defs.h 開発環境依存部のアプリケーション用定義(GNU 開発環境用)
368 tool_config.h 開発環境依存部の構成定義(GNU 開発環境用)
369 start.S スタートアップモジュール
370
371 lm32/ECP2
372 Makefile.config Makefile の LatticeECP2 LatticeMico32/DSP ボード依存定義
373 lm32.h LatticeMico32 の定義
374 lm32.c LatticeMico32 用コード
375 sys_config.h システム依存部の構成定義
376 sys_config.c システム依存部の関数
377 sys_defs.h システム依存部のアプリケーション用定義
378 sys_rename.def カーネルの内
379部識別名のリネーム定義
380 sys_rename.h カーネルの内
381部識別名のリネーム
382 sys_unrename.h カーネルの内
383部識別名のリネーム解除
384 sys_support.S システム依存部のサブルーチン
385 hw_serial.h SIO ドライバ
386 hw_serial.cfg SIO ドライバのコンフィギュレーションファイル
387 hw_timer.h タイマ操作ルーチン
388 lm32elf.ld フラッシュブートで外部 SRAM 実行のリンカスクリプト例
389
390
391 4.2 システム関数
392 サポートする JSP システム関数は以下の通り。C ライブラリは実装
393されていない。
394
395 4.2.1 タスク管理関数
396 CRE_TSK, act_tsk, iact_tsk, can_act, ext_tsk, ter_tsk,
397 chg_pri, get_pri
398
399 4.2.2 タスク依存同期関数
400 stp_tsk, tslp_tsk, wup_tsk, iwup_tsk, can_wup, rel_wai,
401 irel_wai, sus_tsk, rsm_tsk, frsm_tsk, dly_tsk
402
403 4.2.3 タスク例外ハンドリング関数
404 DEF_TEX, ras_tex, iras_tex, dis_tex, ena_tex, sns_tex
405
406 4.2.4 同期および通信関数
407 セマフォ
408 CRE_SEM, sig_sem, isig_sem, wai_sem, pol_sem, twai_sem
409
410 イベントフラグ
411 CRE_FLG, set_flg, iset_flg, clr_flg, wai_flg, pol_flag,
412 twai_flag
413
414 データキュー
415 CRE_DTQ, snd_dtq, psnd_dtq, ipsnd_dtq, tsnd_dtq, fsnd_dtq,
416 ifsnd_dtq, rcv_dtq, prcv_dtq, trcv_dtq
417
418 メイルボックス
419 CRE_MBX, snd_mbx, rcv_mbx, prcv_mbx, trcv_mbx
420
421 4.2.5 メモリプール管理関数
422 固定サイズ・メモリプール
423 CRE_MPF, get_mpf, pget_mpf, tget_mpf, rel_mpf
424
425 4.2.6 時間管理関数
426 システムタイム管理
427 set_tim, get_tim, isig_tim
428
429 サイクリックハンドラー
430 CRE_CYC, sta_cyc, stp_cyc
431
432 4.2.7 システム状æ…
433‹ç®¡ç†é–¢æ•°
434 rot_rdq, irot_rdq, get_tid, iget_tid, loc_cpu, iloc_cpu,
435 unl_cpu, iunl_cpu, dis_dsp, ena_dsp, sns_ctx, sns_loc,
436 sns_dsp, sns_dpn
437
438 4.2.8 割り込み管理関数
439 DEF_INF, dis_int, ena_int, chg_ixx, get_ixx
440
441 4.2.9 システムコンフィグレーション管理関数
442 DEF_EXC, ATT_INI
443
444
445 4.3 サポート
446 バグ等を発見した場合は toppers-users の ML に報告もしくは Mico32 依存部
447 担
448当者
449の以下のメールアドレスに連絡して頂きたい
450
451  xxxxxx@yyyy.jp
452
453(-- 以上 --)
Note: See TracBrowser for help on using the repository browser.