芳賀/Altera NiosII IDE
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[芳賀]]
*NiosII IDEについて [#f389313c]
いきあたりばったりのまとめ。バージョンは9.1
**Pathまわり [#ib5d6c8a]
-ソースファイルのカレントディレクトリ
--<project_name>\
-ヘッダファイルのカレントディレクトリ
--<project_name>_syslib\Debug\system_description\
-システム(.ptf)の定義ファイル
--<project_name>_syslib\system.stf
---このファイル内の<project ptf="??.ptf" target="Nios II System Library">を変えることによって、自由に対象システムを変更できる。(システム構成(ペリフェラルの名前や数)が異なる場合は不可?
---カレントディレクトリは<project_name>_syslib
**Sysyem Libraryの設定 [#s782a912]
-C言語用(?)
--Clean exit
--Reduced device drivers
--Lightweight device driver API (HAL用APIを使うときに必要?)
**プロジェクトの作成(C言語プログラム) [#qd2d2d59]
+事前にシステムを合成しておく
+NiosII IDEを起動
+File→Switch Workspace...を選択し、Browse...からプロジェクトを保存する場所を選び、OKを選択
+File→New→Nios II C/C++ Applicationを選択
+プロジェクトの設定をする
++Nameにプロジェクト名を入れる
++Specify Locationにチェックを入れる(これを選択しないと、ptfファイルがあるところにプロジェクトが生成される)
++Locationにプロジェクトを保存する場所を入力する
++SOPC Builder System PTF Fileにプロジェクトで使用するptfファイルを入力する
++CPUでプロジェクトで使用するシステムのCPUを選択する(マルチプロセッサシステムの場合)
++Select Project TemplateからBlank Projectを選択する
++Finishを選択する
**プロジェクトの実行(ハードウェアで) [#r39a4d91]
***シングルプロセッサシステムの場合 [#af21c806]
+実行したいプロジェクトを右クリック→Build Projectを選択
+実行したいプロジェクトを右クリック→Run As→Nios II Hardware
***マルチプロセッサシステムの場合 [#vc890017]
-マルチプロセッサシステムの実行許可
--Window->Preferences->NiosIIの"Allow multiple active run/debug sessions"にチェックを入れる
-プロセッサごとのハードウェア設定
--事前にボードの電源投入とJTAG cableの接続を済ませる
--実行するハードウェアの数だけ設定を行う
>
+Run->Run
+Nios II Hardwareを右クリック->New
+Nameに設定名を入れる(任意だがかぶらないように)
+Main->Project->Browseで設定するプロジェクトを選択
+Main->Target Hardware->Additional nios2-download arguments->Load JDI Fileで、Quartusにて合成して生成された<project_name>.jdiを選択
+Applyをクリック
-マルチプロセッサシステムの実行準備
>
+Run->Run
+Nios II Multiprocessor Collectionを右クリック->New
+Nameに設定名を入れる
+実行したい設定にチェックを入れる
-マルチプロセッサシステムの実行
>
+Run->Run
+Nios II Multiprocessor Collection->作成した設定名
+Run
**注意点 [#ef96bfb2]
***メモリ初期化ファイルについて [#ie2466c2]
-回路の合成時に取り込む
-IDEでプログラムを実行する際に勝手に生成される。このとき、ptfファイルの参照先に初期化ファイルがあった場合、上書きされる。
-Intel-HEXフォーマット
--構造
|:|データ長|オフセットアドレス|レコードタイプ|データ|チェックサム|
--文字数
---データ長:2
---オフセットアドレス:4
---レコードタイプ:2
---データ:データによる
---チェックサム:2
--意味([[くわしくはこちら:http://www.pastelmagic.com/tips/hexform/hexform.html]])
>>
-:
--Intel-HEXフォーマットでは先頭一文字は必ず':'の文字
-データ長
--データフィールドに格納されているデータ数(バイト単位)を2文字で示す。 Sレコードと異なり、データレコードに記されているデータ長であることに注意が必要。
-オフセットアドレス
--データレコードの時は先頭バイトが格納されるアドレスを指定する。 (ビッグ・エンディアンであることに注意) その他のレコードの時にも有効なのだが、現実に使われている例はほとんど見ない(各レコードタイプの説明を参照)
---レコードタイプ
>>>
-00
--データレコード:
---データフィールドは書き込まれるべきデータである。
-01
--エンドレコード:
---(HEXファイルの終了を示す)データフィールドは無いので、データ長フィールドは”00”になる。
-02
--セグメントアドレスレコード:
---データフィールドにはセグメントアドレスが入る。 たとえば、
:02000002E0100C
ならば、セグメントはE010hとなる。(80x86はリトルエンディアンなのに、 Intel-HEXファイルはビッグエンディアンであることに要注意)
元々オブジェクトレコードが16ビットアドレス(S1フォーマットに相当) だったものを8086の20ビットアドレスに拡張するために作られたものなので、これを使っているものを拡張IntelHEXフォーマットと呼ぶこともある。
8086対応でできたものなので、8086の流儀に従って この値を4ビット左にシフトした値にオフセットアドレスを足したものが物理アドレスになる。 たとえばセグメントが1234h、オフセットが3456hならば、物理アドレスは12340h+3456h=15796hになる。このレコードが無い場合はデフォルトでセグメント=0000hの扱いになっている。
例えば、先ほどのセグメントフィールドが無い場合に
:1001000043004865617020616E6420737461636BA5
というデータレコードがあれば、これは0100h番地から格納されるが、 あった場合には、(E010h<<4)+0100h=E0200h番地から格納されることになる。
このレコードの時のオフセットアドレスフィールドは、プログラムローダなどが実際に オブジェクトをロードするアドレスとの間のオフセットとなる。少々ややこしいのだが、 このレコードで指定したオフセットアドレスとデータレコードのオフセットアドレスを加算した値の下位16ビットと、 このレコードで指定したセグメントデータによって物理アドレスが計算されるのである。
ただし、このレコードのオフセットアドレスフィールドを使っている例はほとんど見ない(先頭部分が":02000002"になっているものばかり)ので、無視しても問題になることはまず無いだろう。
-03
--スタートセグメントアドレスレコード:
---プログラムをダウンロードして使うような場合に、 実行開始アドレスを指定するのに使用される。(ROMライタなどでは意味無し)。8086用の拡張で、データフィールドには CS/IP(セグメント/オフセット)が入る。 例えば、
:04000003FF000123D6
ならば、CS=FF00h、IP=0123hとなるので、物理アドレスはFF123h((FF00h<<4)+0123h)番地から開始されることになる。
-04
--拡張リニアアドレスレコード:
---セグメント:オフセットの形式では20ビットアドレスまでしか表現できない(計算上は21ビット目に桁あふれさせることもできるが、本来の使い方ではない)ので、32ビットアドレスが必要になったときにこの形式が追加された。
このレコードでは32ビットアドレスのうち上位16ビット(ビット32〜ビット16の)を与える。 (下位16ビットはデータレコードのオフセットフィールドの値が用いられる) セグメントアドレスレコード同様に、このレコードのオフセットフィールドは、 ロード先にオフセットをかけるために用いられる。こちらの場合には、 実際にロードされるアドレスはリニアドレスの上位+リニアアドレスレコードのオフセット+ データレコードのオフセットの単純和となる。
ただし、セグメントフィールドと同様に、実際に拡張リニアアドレスレコードのオフセットフィールドを使っている例は ほとんど見ないので、無視してしまってもまず問題になることはない筈。
-05
--スタートリニアアドレス:
---スタートセグメントアドレスレコードでは、 セグメント:オフセット形式なので、20ビットの範囲しか指定できないため、 これを32ビット表現できるように拡張したのが、スタートリニアアドレスレコード。 例えば
:04000005FF000123D4
となっていれば、FF000123h番地がスタートアドレスになる。
<<
>
-データ
--2文字で1バイトのデータを表す
-チェックサム
--2文字(1バイト)データ。レコード長、データ長フィールド、オフセットアドレスフィールド、データフィールドの各バイト値の合計の2の補数。 2の補数なので、チェックサムまで全部足すと下位2桁は00hhになる。
例えば、先の例の一番最後の行なら、01+FF=100となり、下位2桁は00h。最後から三番目の行なら、 02+FE+FC+00+00+01+03=200となるので、下位2桁はやはり00hとなっている。
終了行:
[[芳賀]]
*NiosII IDEについて [#f389313c]
いきあたりばったりのまとめ。バージョンは9.1
**Pathまわり [#ib5d6c8a]
-ソースファイルのカレントディレクトリ
--<project_name>\
-ヘッダファイルのカレントディレクトリ
--<project_name>_syslib\Debug\system_description\
-システム(.ptf)の定義ファイル
--<project_name>_syslib\system.stf
---このファイル内の<project ptf="??.ptf" target="Nios II System Library">を変えることによって、自由に対象システムを変更できる。(システム構成(ペリフェラルの名前や数)が異なる場合は不可?
---カレントディレクトリは<project_name>_syslib
**Sysyem Libraryの設定 [#s782a912]
-C言語用(?)
--Clean exit
--Reduced device drivers
--Lightweight device driver API (HAL用APIを使うときに必要?)
**プロジェクトの作成(C言語プログラム) [#qd2d2d59]
+事前にシステムを合成しておく
+NiosII IDEを起動
+File→Switch Workspace...を選択し、Browse...からプロジェクトを保存する場所を選び、OKを選択
+File→New→Nios II C/C++ Applicationを選択
+プロジェクトの設定をする
++Nameにプロジェクト名を入れる
++Specify Locationにチェックを入れる(これを選択しないと、ptfファイルがあるところにプロジェクトが生成される)
++Locationにプロジェクトを保存する場所を入力する
++SOPC Builder System PTF Fileにプロジェクトで使用するptfファイルを入力する
++CPUでプロジェクトで使用するシステムのCPUを選択する(マルチプロセッサシステムの場合)
++Select Project TemplateからBlank Projectを選択する
++Finishを選択する
**プロジェクトの実行(ハードウェアで) [#r39a4d91]
***シングルプロセッサシステムの場合 [#af21c806]
+実行したいプロジェクトを右クリック→Build Projectを選択
+実行したいプロジェクトを右クリック→Run As→Nios II Hardware
***マルチプロセッサシステムの場合 [#vc890017]
-マルチプロセッサシステムの実行許可
--Window->Preferences->NiosIIの"Allow multiple active run/debug sessions"にチェックを入れる
-プロセッサごとのハードウェア設定
--事前にボードの電源投入とJTAG cableの接続を済ませる
--実行するハードウェアの数だけ設定を行う
>
+Run->Run
+Nios II Hardwareを右クリック->New
+Nameに設定名を入れる(任意だがかぶらないように)
+Main->Project->Browseで設定するプロジェクトを選択
+Main->Target Hardware->Additional nios2-download arguments->Load JDI Fileで、Quartusにて合成して生成された<project_name>.jdiを選択
+Applyをクリック
-マルチプロセッサシステムの実行準備
>
+Run->Run
+Nios II Multiprocessor Collectionを右クリック->New
+Nameに設定名を入れる
+実行したい設定にチェックを入れる
-マルチプロセッサシステムの実行
>
+Run->Run
+Nios II Multiprocessor Collection->作成した設定名
+Run
**注意点 [#ef96bfb2]
***メモリ初期化ファイルについて [#ie2466c2]
-回路の合成時に取り込む
-IDEでプログラムを実行する際に勝手に生成される。このとき、ptfファイルの参照先に初期化ファイルがあった場合、上書きされる。
-Intel-HEXフォーマット
--構造
|:|データ長|オフセットアドレス|レコードタイプ|データ|チェックサム|
--文字数
---データ長:2
---オフセットアドレス:4
---レコードタイプ:2
---データ:データによる
---チェックサム:2
--意味([[くわしくはこちら:http://www.pastelmagic.com/tips/hexform/hexform.html]])
>>
-:
--Intel-HEXフォーマットでは先頭一文字は必ず':'の文字
-データ長
--データフィールドに格納されているデータ数(バイト単位)を2文字で示す。 Sレコードと異なり、データレコードに記されているデータ長であることに注意が必要。
-オフセットアドレス
--データレコードの時は先頭バイトが格納されるアドレスを指定する。 (ビッグ・エンディアンであることに注意) その他のレコードの時にも有効なのだが、現実に使われている例はほとんど見ない(各レコードタイプの説明を参照)
---レコードタイプ
>>>
-00
--データレコード:
---データフィールドは書き込まれるべきデータである。
-01
--エンドレコード:
---(HEXファイルの終了を示す)データフィールドは無いので、データ長フィールドは”00”になる。
-02
--セグメントアドレスレコード:
---データフィールドにはセグメントアドレスが入る。 たとえば、
:02000002E0100C
ならば、セグメントはE010hとなる。(80x86はリトルエンディアンなのに、 Intel-HEXファイルはビッグエンディアンであることに要注意)
元々オブジェクトレコードが16ビットアドレス(S1フォーマットに相当) だったものを8086の20ビットアドレスに拡張するために作られたものなので、これを使っているものを拡張IntelHEXフォーマットと呼ぶこともある。
8086対応でできたものなので、8086の流儀に従って この値を4ビット左にシフトした値にオフセットアドレスを足したものが物理アドレスになる。 たとえばセグメントが1234h、オフセットが3456hならば、物理アドレスは12340h+3456h=15796hになる。このレコードが無い場合はデフォルトでセグメント=0000hの扱いになっている。
例えば、先ほどのセグメントフィールドが無い場合に
:1001000043004865617020616E6420737461636BA5
というデータレコードがあれば、これは0100h番地から格納されるが、 あった場合には、(E010h<<4)+0100h=E0200h番地から格納されることになる。
このレコードの時のオフセットアドレスフィールドは、プログラムローダなどが実際に オブジェクトをロードするアドレスとの間のオフセットとなる。少々ややこしいのだが、 このレコードで指定したオフセットアドレスとデータレコードのオフセットアドレスを加算した値の下位16ビットと、 このレコードで指定したセグメントデータによって物理アドレスが計算されるのである。
ただし、このレコードのオフセットアドレスフィールドを使っている例はほとんど見ない(先頭部分が":02000002"になっているものばかり)ので、無視しても問題になることはまず無いだろう。
-03
--スタートセグメントアドレスレコード:
---プログラムをダウンロードして使うような場合に、 実行開始アドレスを指定するのに使用される。(ROMライタなどでは意味無し)。8086用の拡張で、データフィールドには CS/IP(セグメント/オフセット)が入る。 例えば、
:04000003FF000123D6
ならば、CS=FF00h、IP=0123hとなるので、物理アドレスはFF123h((FF00h<<4)+0123h)番地から開始されることになる。
-04
--拡張リニアアドレスレコード:
---セグメント:オフセットの形式では20ビットアドレスまでしか表現できない(計算上は21ビット目に桁あふれさせることもできるが、本来の使い方ではない)ので、32ビットアドレスが必要になったときにこの形式が追加された。
このレコードでは32ビットアドレスのうち上位16ビット(ビット32〜ビット16の)を与える。 (下位16ビットはデータレコードのオフセットフィールドの値が用いられる) セグメントアドレスレコード同様に、このレコードのオフセットフィールドは、 ロード先にオフセットをかけるために用いられる。こちらの場合には、 実際にロードされるアドレスはリニアドレスの上位+リニアアドレスレコードのオフセット+ データレコードのオフセットの単純和となる。
ただし、セグメントフィールドと同様に、実際に拡張リニアアドレスレコードのオフセットフィールドを使っている例は ほとんど見ないので、無視してしまってもまず問題になることはない筈。
-05
--スタートリニアアドレス:
---スタートセグメントアドレスレコードでは、 セグメント:オフセット形式なので、20ビットの範囲しか指定できないため、 これを32ビット表現できるように拡張したのが、スタートリニアアドレスレコード。 例えば
:04000005FF000123D4
となっていれば、FF000123h番地がスタートアドレスになる。
<<
>
-データ
--2文字で1バイトのデータを表す
-チェックサム
--2文字(1バイト)データ。レコード長、データ長フィールド、オフセットアドレスフィールド、データフィールドの各バイト値の合計の2の補数。 2の補数なので、チェックサムまで全部足すと下位2桁は00hhになる。
例えば、先の例の一番最後の行なら、01+FF=100となり、下位2桁は00h。最後から三番目の行なら、 02+FE+FC+00+00+01+03=200となるので、下位2桁はやはり00hとなっている。
ページ名: