source: rc_os_nios2/atk2-sc1_1.3.2/target/nios2_dev_gcc/target_user.txt@ 128

Last change on this file since 128 was 128, checked in by ertl-honda, 9 years ago

追加.

File size: 17.0 KB
Line 
1
2 TOPPERS/ATK2-SC1
3 <Nios2_Devターゲット依存部マニュアル>
4
5このドキュメントはNios2_Devターゲット依存部の情報を記述したものである.
6
7----------------------------------------------------------------------
8TOPPERS ATK2
9 Toyohashi Open Platform for Embedded Real-Time Systems
10 Automotive Kernel Version 2
11
12Copyright (C) 2011-2015 by Center for Embedded Computing Systems
13 Graduate School of Information Science, Nagoya Univ., JAPAN
14Copyright (C) 2011-2015 by FUJI SOFT INCORPORATED, JAPAN
15Copyright (C) 2011-2013 by Spansion LLC, USA
16Copyright (C) 2011-2015 by NEC Communication Systems, Ltd., JAPAN
17Copyright (C) 2011-2015 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
18Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN
19Copyright (C) 2011-2015 by Sunny Giken Inc., JAPAN
20Copyright (C) 2011-2015 by TOSHIBA CORPORATION, JAPAN
21Copyright (C) 2011-2015 by Witz Corporation
22Copyright (C) 2014-2015 by AISIN COMCRUISE Co., Ltd., JAPAN
23Copyright (C) 2014-2015 by eSOL Co.,Ltd., JAPAN
24Copyright (C) 2014-2015 by SCSK Corporation, JAPAN
25
26上記著作権者は,以下の (1)〜(3)の条件を満たす場合に限り,本ドキュメ
27ント(本ドキュメントを改変したものを含む.以下同じ)を使用・複製・改
28変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
29(1) 本ドキュメントを利用する場合には,上記の著作権表示,この利用条件
30 および下記の無保証規定が,そのままの形でドキュメント中に含まれて
31 いること.
32(2) 本ドキュメントを改変する場合には,ドキュメントを改変した旨の記述
33 を,改変後のドキュメント中に含めること.ただし,改変後のドキュメ
34 ントが,TOPPERSプロジェクト指定の開発成果物である場合には,この限
35 りではない.
36(3) 本ドキュメントの利用により直接的または間接的に生じるいかなる損害
37 からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
38 本ドキュメントのユーザまたはエンドユーザからのいかなる理由に基づ
39 く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
40
41本ドキュメントは,AUTOSAR(AUTomotive Open System ARchitecture)仕様
42に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するものではな
43い.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利用する
44者に対して,AUTOSARパートナーになることを求めている.
45
46本ドキュメントは,無保証で提供されているものである.上記著作権者およ
47びTOPPERSプロジェクトは,本ドキュメントに関して,特定の使用目的に対す
48る適合性も含めて,いかなる保証も行わない.また,本ドキュメントの利用
49により直接的または間接的に生じたいかなる損害に関しても,その責任を負
50わない.
51
52$Id: target_user.txt 1801 2015-03-27 06:34:43Z t_ishikawa $
53----------------------------------------------------------------------
54○概要
55
56Nios2_Devターゲット依存部(Nios2_Dev依存部)は,Altera社のNios2プロセ
57ッサを搭載した評価ボードをサポートしている.標準では,Altera社製の以下
58のターゲットボードをサポートしている.
59
60 ・Nios2 Cyclone IV 開発,教育用キット(NIOS2_DEV_DE2_115)
61 ・Nios2 開発キット Stratix プロフェッショナルエディション
62 (NIOS2_DEV_2S180)
63
64本依存部をベースとして,メモリマップやデバイスのベースアドレスや割込み
65番号を変更することにより,他のターゲットボードを容易にサポートすること
66が可能である.
67
68○開発環境と動作確認バージョン
69
70動作確認を行った開発環境は次の通りである.
71
72・Nios2 Cyclone IV 開発,教育用キット(NIOS2_DEV_DE2_115)
73 ・QuartusII : 11.0sp1
74 ・GCC : 4.1.2
75
76QuartusII は次のURLからダウンロードできる(ユーザ登録が必要).
77 https://www.altera.com/jp/download/dnl-index.jsp
78 ※11.0sp1を選択してダウンロード可能
79 ※Cyclone IV E Familyをインストールする
80
81QuartusII をインストールすると,GCCなどの開発ツールもインストールされ,
82FPGAのコンフィギュレーションファイル(sofファイル)などを作成できる.sof
83ファイルの作成方法については,後述の「FPGAコンフィギュレーションファイ
84ル(sofファイル)の作成方法」を参照のこと.
85
86なお,QuartusII ウェブ・エディションでは使用範囲に制限があるが,ATK2カー
87ネルを動作可能であることを確認している.
88
89○ ターゲット定義事項の規定
90
91● データ型に関する規定
92
93ターゲット依存のデータ型のサイズは次の通り.
94 void * 32ビット
95 sintptr 32ビット
96 uintptr 32ビット
97 char8 8ビット
98 uint8 8ビット
99 sint8 8ビット
100 uint16 16ビット
101 sint16 16ビット
102 uint32 32ビット
103 sint32 32ビット
104 uint64 64ビット
105 sint64 64ビット
106 float32 32ビット
107 float64 64ビット
108
109● 割込み処理に関する規定
110 ・割込み優先度の段階数(TNUM_INTPRIの値),その設定方法
111 デフォルトでは,TNUM_INTPRI=64としている.(prc.tf)
112 変更する場合は,prc.tfでTMIN_INTPRI定義を修正する.
113
114 ・制限事項と拡張(ターゲット定義で使用できる割込み属性)サポートし
115 ない
116
117 ・デフォルトの割込みハンドラ(default_int_handler)の有無と処理内容
118 prc_user.txtの「未登録の割込み」を参照
119
120● C1ISRの割込みに関する規定
121 ・prc_user.txtの「C1ISRの扱い」を参照
122
123● CPU例外処理に関する規定
124 ・カーネル内のCPU例外出入口処理で起こる可能性のあるCPU例外
125 CPUアドレスエラー
126
127● 性能評価用システム時刻の参照に関する規定
128 ・get_tim_utimeのサポートの有無,その制限事項
129 サポート
130
131● その他
132 ・その他の制限事項
133 ・その他の拡張機能
134
135○ カーネルの起動/終了処理に関する情報
136 ・用意しているスタートアップモジュールの処理内容
137 ハードウェアバージョンの確認
138 avalonタイマーの起動
139 ・スタートアップモジュールからhardware_init_hookを呼び出している
140 場合,hardware_init_hookを呼出すときにメモリのBSS領域はまだ
141 クリアしていないので,BSS領域変数のデフォルト値を使用できない.
142 スタック(sp)及びグローバルポインタ(gp)は使用出来る
143
144○ メモリマップ
145 ・デフォルトのメモリマップ,その変更方法
146 メモリマップ詳細に関しては,リンカースクリプトnios2_dev_2s180.ld,
147 nios2_dev_de2_115.ld,nios2_dev_2s180_sdram.ldを参照
148
149○ タイマドライバ関連の情報
150 ・タイムティックの周期,その変更方法
151 デフォルトでは,1[msec]周期に定義されている.
152 変更するには,マクロTIMER_CLOCKの定義を変更すること.
153 定義場所:nios2_system.h
154
155 ・使用するリソース(タイマ)
156 SYS_CLK_TIMER_BASEを使用している.
157
158 ・タイマ割込みの割込み優先度の変更方法
159 マクロINTPRI_TIMERの定義を変更する.
160 デフォルトではINTPRI_TIMER=5としている.
161 定義場所:target/nios2_dev_gcc/target_timer.h
162
163○ シリアルインタフェースドライバの情報
164 ・使用するリソース(SIOコントローラ)として JTAG UART か UART かを
165 選択できる.デフォルトは JTAG UART を選択している.
166
167 ・UARTを用いる場合の通信パラメータ
168 ・ボーレート:115200bps
169 ・ビット数:8ビット
170 ・パリティの有無:なし
171 ・ストップビット:1
172
173○ シリアルインタフェースの選択方法
174
175Nios2 依存部で使うシリアルインタフェースとして, JTAG UART と UART の
176どちらを使うかは Makefile.target にある SERIAL_UART マクロを以下のよう
177に編集することで選択できる.
178
179 ・JTAG UART を使う場合(デフォルト)
180 SERIAL_UART = false
181 ・UART を使う場合
182 SERIAL_UART = true
183
184○ nios2_dev_de2_115のシリアルポート
185
186nios2_dev_de2_115では,UARTは3つのポートから1つを選択できる.デフォル
187トはポート1となっているが,以下のようにベースアドレスと割込み番号を変
188更することで,別のポートを使うことができる.
189
190 ・ポート1(JP5, デフォルト)
191 ベースアドレス:0x02000d00
192 割込み番号:3
193 ・ポート2(JP5)
194 ベースアドレス:0x02000d40
195 割込み番号:4
196 ・ポート3(J6, RS-232)
197 ベースアドレス:0x08000440
198 割込み番号:7
199
200ポート1とポート2については,次のようにJP5ピンに接続する.ポート1とポー
201ト2の信号レベルは3.3Vで,動作確認はOLIMEX社のUSB-SERIAL-CABLE-Fを使用
202している.括弧内の色は,USB-SERIAL-CABLE-Fのケーブルの色を示している.
203
204 ・ポート1(デフォルト)
205 Rx (緑):A
206 Tx (赤):B
207 GND(青):C
208 ・ポート2
209 Rx (緑):D
210 Tx (赤):E
211 GND(青):F
212
213 ・JP5ピンの接続
214 39 37 35 33 31 29 27 25 23 21 19 17 15 13 11 9 7 5 3 1
215 --------------------------------------------------------------
216 |・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ E B |
217 |・ ・ ・ ・ ・ F ・ ・ ・ ・ ・ ・ ・ ・ C ・ ・ ・ D A |
218 --------------------------------------------------------------
219 【↓JP8側↓】
220
221○ システム構築手順
222
223 ユーザーズマニュアルの「クイックスタートガイド」を参照
224
225○FPGAコンフィギュレーションファイル(sofファイル)の作成方法
226
227NIOS2_DEV_DE2_115の場合について,FPGAコンフィギュレーションファイル
228(sofファイル)の作成方法を説明する.必要なファイル群は以下の通りである.
229
230 ・NIOS2_DEV_DE2_115に付属のSYSTEM CDの
231 DE2_115_demonstrations/DE2_115_NIOS_DEVICE_LED ディレクトリ
232 ・sopcファイル
233 target/nios2_dev_gcc/fpga_design/DE2_115_SOPC.sopc
234 ・Altera DE2_115 Development and Education Board
235 (NIOS2_DEV_DE2_115) 用ファイル
236 ・パッチファイル
237 target/nios2_dev_gcc/fpga_design/de2_115_patch_for_atk2.diff
238 ・sysverディレクトリ
239 arch/nios2_gcc/sysver/
240 ・cancディレクトリ
241 target/nios2_dev_gcc/fpga_design/canc
242
243※cancディレクトリにはOpenCores canプロジェクトのIPを基にNIOS2_Devターゲット
244で使用できるように修正した.canプロジェクトのライセンスはLGPL v2.1となって
245いる.OpenCoresについてはcanc/hdl/README.txtファイルを参照.
246
247DE2_115_NIOS_DEVICE_LED ディレクトリ内に,その他のファイルを置く.ディ
248レクトリ構造は次のようになる.DE2_115_SOPC.sopcファイルについては,既
249存のファイルがあるので上書きする.
250
251 DE2_115_NIOS_DEVICE_LED/
252 sysver/ arch/nios2_gcc/からコピー
253 canc/ target/nios2_dev_gcc/fpga_design/からコピー
254 */ SYSTEM CDからコピーしたディレクトリ
255 de2_115_patch_for_atk2.diff target/nios2_dev_gcc/fpga_design/からコピー
256 DE2_115_SOPC.sopc target/nios2_dev_gcc/fpga_design/からコピー
257 * SYSTEM CDからコピーしたファイル
258
259次に,DE2_115_NIOS_DEVICE_LED.qsf ファイルと DE2_115_NIOS_DEVICE_LED.v
260ファイルにパッチを当てる.DE2_115_NIOS_DEVICE_LED ディレクトリで以下の
261コマンドを実行することでパッチを当てることができる.
262
263 % patch -p1 < de2_115_patch_for_atk2.diff
264
265最後に,Nios II XX Command Shell (XXはバージョン) を使い,
266DE2_115_NIOS_DEVICE_LED ディレクトリで以下のコマンドを実行すると,ATK2
267カーネルが動作するsofファイルが生成される.
268
269 % sopc_builder --generate
270 % quartus_cmd DE2_115_NIOS_DEVICE_LED.qpf -c DE2_115_NIOS_DEVICE_LED.qpf
271
272sofファイルの名前は,インストールしたQuartusIIのエディションによって以
273下の名前になる.
274
275 ・ウェブ・エディション
276 DE2_115_NIOS_DEVICE_LED_time_limited.sof
277 ・サブスクリプション・エディション
278 DE2_115_NIOS_DEVICE_LED.sof
279
280QuartusIIに含まれるProgrammerによって,sofファイルを使用してFPGAのハー
281ドウェアを構成する.
282
283
284○ビルド方法
285
286ビルド時には,ターゲットボードを指定する必要がある.具体的には,
287Makefile.target にあるBOARDマクロを以下のいずれかに設定する.
288
289 ・nios2_dev_de2_115
290 ・Nios2 Cyclone IV 開発,教育用キット
291 (NIOS2_DEV_DE2_115) 指定.
292 ・nios2_dev_2c180
293 ・Nios2 開発キット Stratix プロフェッショナルエディション
294 (NIOS2_DEV_2S180) 指定.
295
296○実行方法
297
298●コンソール
299
300文字出力を JTAG UART により出力するため,文字出力用のコンソールを開き,
301コンソールで以下のコマンドを実行する.UARTを用いる場合は,不要である.
302
303nios2-terminal.exe --cable=USB-Blaster
304
305●gdbサーバー
306
307gdbサーバーを実行する.新しいコンソールを開き,次のコマンド
308を実行する.[port]はポート番号で,1234以上を指定する.
309
310nios2-gdb-server.exe -r --cable=USB-Blaster --tcpport=[port]
311
312●gdb
313
314デバッグ用のgdbを起動する.デバッグ用のコンソールを開き,ビルドしたデ
315ィレクトリに移動して,次のコマンドを実行する.
316
317nios2-elf-gdb atk2-sc1.exe
318
319まず,gdbのコマンドラインで,次のコマンドを実行して gdbサーバーに接続
320する
321
322(gdb)target remote localhost:[port]
323Remote debugging using localhost:[port]
3240x00000000 in ?? ()
325(gdb)
326
327ファイルをロードする.
328
329(gdb)load
330
331ロードを終了した後,実行を開始する.
332
333(gdb)continue
334
335●Makefileによる実行
336
337上記の実機の実行は,make により実行できる.用意されているコマンドは次
338の通りである.
339
340 ・make run
341 ・FPGAによる実行.
342
343 ・make db
344 ・FPGAによるデバッグ
345 ・ターミナルとgdb-serverとgdbを起動する.
346 ※make dbは,ターゲット依存部に用意しているgdb.iniを使用しているの
347 で,デバッグ環境に合わせて(ポート番号など)変更しても良い.
348
349○ HWバージョンのチェック
350
351Nios2はFPGA向けのプロセッサであるため,ハードウェア構成を容易に変更す
352ることが可能である.そのため,動作確認を行ったハードウェアのバージョン
353を起動時にチェックする.
354
355ハードウェアのバージョンは,sysverと呼ばれるペリフェラルによって管理す
356る.sysverには,以下の8個のレジスタが用意されており,そのうち,3個のレ
357ジスタをバージョン管理に用いる.
358
359・SYSVER_MAJOR_VAR : メジャーバージョン
360・SYSVER_MINOR_VAR : マイナーバージョン
361・SYSVER_NUM_CORE : コア数
362
363ハードウェアを変更して,以前のソフトウェアがそのままでは動作しない場合
364には,メジャーバージョンをアップする.ソフトウェアの変更が必要ないバー
365ジョンアップの場合は,マイナーバージョンを上げることとする.
366
367○ 他のターゲットボードへの移植
368
369サポートしているターゲットボード以外のターゲットボードをサポートするた
370めには,以下の項目を設定する必要がある.
371
372●コンパイルオプションとCライブラリ(Makefile.target)
373
374Nios2 にハードウェア除算器等やを追加して,カーネルでこれらを使用するよ
375うにコンパイルするためには,COPTSにコンパイルオプションを指定する必要が
376ある.
377
378●タイマ関連
379
380◎ベースアドレス(nios2_system.h)
381
382#define SYS_CLK_TIMER_BASE xxx
383
384◎タイマクロック(nios2_system.h)
385
386タイマ値の内部表現とミリ秒単位との変換を指定する.
387
388#define TIMER_CLOCK xxxx
389
390◎割込み関連(nios2_system.h)
391
392#define SYS_CLK_TIMER_INT xxx
393
394●シリアルインタフェース関連
395
396Nios2 依存部のシリアルインタフェースドライバは,1ポートをサポートして
397おり,JTAG UART もしくは UART を用いる.
398
399◎コンパイル/リンク指定(Makefile.target)
400
401Makefile.target の SERIAL_UART マクロにより,jtag_uart.o もしくは
402uart.o が SYSMOD_COBJS に追加される. SERIAL_UART マクロについては,
403「シリアルインタフェースの選択方法」を参照のこと.
404
405◎ベースアドレス(nios2_system.h)
406
407・JTAG UART の場合
408 #define JTAG_UART_PORT1_BASE xxx
409・UART の場合
410 #define UART_PORT1_BASE xxx
411
412◎割込み番号(nios2_system.h)
413
414・JTAG UART の場合
415 #define JTAG_UART_PORT1_INT xxx
416・UART の場合
417 #define UART_PORT1_INT xxx
418
419●カーネル低レベル出力用UART関連
420
421カーネル低レベル出力用UARTは,上記のシリアルインタフェースを用いる.
422
423●リンカスクリプト(Makefile.target)
424
425ターゲット依存部部でリンカスクリプトを用意して,Makefile.target で,
426LDSCRIPT に指定する.
427
428●ベクタ割込みコントローラベースアドレスの定義(nios2_system.h)
429
430#define VIC_BASE xx
431
432●ベクタ割込み最大数の定義(nios2_system.h)
433
434#define VIC_INT_NUM xx
435
436●キャッシュサイズ(nios2_system.h)
437
438インストラクションキャッシュとデータキャッシュのサイズとラインサイズを
439指定する.
440
441#define NIOS2_ICACHE_SIZE xxx /* 命令キャッシュサイズ */
442#define NIOS2_ICACHE_LINE_SIZE xxx /* 命令キャッシュラインサイズ */
443#define NIOS2_DCACHE_SIZE xxx /* データキャッシュサイズ */
444#define NIOS2_DCACHE_LINE_SIZE xxx /* データキャッシュラインサイズ */
445
446●システムバージョンレジスタ(sysver)
447
448#define SYSVER_BASE xxx /* ベースアドレス */
449#define TNUM_HWCORE 1 /* コア数 */
450#define MAJOR_VAR xxx /* メジャーバージョン */
451
452○ ハードウェアカウンタ
453・de2_115で動作確認した.
454・1個のカウンタに2つのタイマを使用している.
455 差分タイマ:目的の時間を設定する時の現在時間(現在値タイマ)と次の満
456 了時間との相対時間をカウントすることで目的の絶対時間に満了したこと
457 とする.
458 count mode:count down once
459 現在値タイマ:カウンタ周期分のベースタイマを実現(絶対時間をカウント)
460 count mode:continuous count down
461・de2_115で使用できるカウンタ(コンフィギュレーション時指定できるカウン
462 タ名と割込み番号)情報
463 (1)カウンタ名:MAIN_HW_COUNTER
464 差分タイマ:TIMER_0_IRQ (16)
465 現在値タイマ:TIMER_1_IRQ (17)
466 1ティック当たりの秒数:1/TIMER_CLOCK_HZ (※)
467
468 (2)カウンタ名:SUB_HW_COUNTER1
469 差分タイマ:TIMER_2_IRQ (18)
470 現在値タイマ:TIMER_3_IRQ (19)
471 1ティック当たりの秒数:1/TIMER_CLOCK_HZ (※)
472
473 (3)カウンタ名:SUB_HW_COUNTER2
474 差分タイマ:TIMER_4_IRQ (20)
475 現在値タイマ:TIMER_5_IRQ (21)
476 1ティック当たりの秒数:1/TIMER_CLOCK_HZ (※)
477
478 ※TIMER_CLOCK_HZはボード毎に定義される
479
480○割込みコントローラ
481・sample1.arxmlでC1ISRのサンプルを使用する場合,
482 (1)sample1.arxmlコンフィギュレーションファイルに,target_test.arxml
483 をインクルードする.
484 (2)../configure -T nios2_dev_gcc -U target_test.o の様に,Makefileに
485 target_test.oを追加する.
486 (3)MakefileでAPPL_ASMOBJS = SmpC1ISR.oを設定する
487
488○その他注意点
489テストなどの目的で,OS終了後StartOS()の呼出し元(main関数)に戻りたい
490場合,ENABLE_RETURN_MAINマクロを定義することで,実現できる.現状の実装
491では,カーネルテスト時に1つのバイナリで複数回OSを起動する機能をOSで実
492現したい要望を満たしている.
493
494
495○変更履歴
496
4972015/03/30
498・トレースログを有効化する設定をターゲット依存部のMakefileから
499 削除
500・sample1のために,target_test.hで,sample1で使用するハードウェア
501 カウンタから約1秒でアラームを起動するために,約1秒に相当する
502 ハードウェアカウンタのティック値をCOUNTER_MIN_CYCLEマクロに定義
503・タイマカウンタにセットする値を実際のティック値-1に修正
504
5052014/02/19
506・fpga_design/canc
507 ・cancディレクトリをarchから移動.
508・de2_115_patch_for_atk2.diff
509 ・cancを追加したdiffファイルに更新.
510・FPGAコンフィギュレーションファイル(sofファイル)の作成方法を更新.
511
5122014/01/23
513・target_test.c|h|cfg|arxml
514 ・ハードウェアカウンタに関する実装をtarget_hw_counter.c|h|cfg|arxmlへ移動
515
5162014/01/10
517・静的APIファイルを削除
518
5192013/10/11
520・target_config.c
521 ・OS起動前に参照される変数の初期化対応
522
5232013/06/28
524・target_config.c
525 ・target_exit() で target_timer_terminate() を呼び出さないよう変更.
526
5272013/03/29
528 ・MISRAルール対応により,一部ソースコードを修正した
529
530 ・Nios2において,UARTのボーレートを変更可能に修正した
531 - UART_BAUDRATEマクロにより変更可能(target_serial.h参照)
532
533 ・その他の修正.
534 - ソースコード上のコメント修正
535 - Nios2において,テスト用タイマの周波数が間違っていたので修正した
536
5372013/01/31
538 一般向けのリリース
539
540以上.
Note: See TracBrowser for help on using the repository browser.