ぜんぜん今日じゃないけど、この前書いたFPGAについて学んできたことの続き。
今日は、自作周辺回路を登録して使う方法について
■自作周辺回路の概要
自作周辺回路を利用するには、
・まず、コンポーネントとして登録する
・そのコンポーネントをQsysで取り込み、
・NiosⅡEDSでプログラムを書く
●自作周辺回路を、コンポーネントとして登録する
・まず、HDL記述をする→バス信号をどう処理するか記述
代表的な信号
clk クロック
reset リセット
adress アドレス、ワード単位で増える
byteenable
read
readdata
write
writedata
irq 割り込み。後述
・自作周辺回路を登録する
QSysのCompornentLibrary(左側)のNew Compornentをクリック
→Compornentエディタが開く
コンポーネント名設定
FileでHDLを読み込み、Analyze synthesis filesしてチェック
外部端子をNew Conduit... またはConduit_end
InterfaceでAssociated resetの設定
完了、保存
→CompornentLibraryに登録される
●そのコンポーネントをQsysで取り込み
QSysに戻って、CompornentLibraryに登録された回路を、
普通に配置する
そしたら、コンパイル
●NiosⅡEDSでプログラムを書く
ふつうに、プロジェクトを作って(SOPC Informationファイルを指定し)
プログラムを書く。
→BASEは、system.hに定義されるので、
IORD_8_DIRECT,IOWT_8_DIRECTを使って操作する
あとは、普通の操作と変わらない
※まめちしき
・ダイナミックバスとネイティブバス(QSysはダイナミック)
・NIOSはリトルエンディアン
・Avalonバス(スイッチ・ファブリック)は3種類
Avalon Memory Mapped Interface(MM)
Avalon Memory Mapped Tristate Interface
→SRAM,Flashメモリ使用時に利用
Avalon Streming Interface(Avalon ST)
■タイマーの利用
●ハード部分(QSys)
・JTAGのところでつけている、割り込みラインに、
timer_0もつける
●ソフト部分(Nios Ⅱ EDS)
方法は3種類!
(方法1)ポーリングする
・タイムアウト待ちする
(方法2)タイマー割り込みを使う
alt_ic__isr_register
alt_ic_irq_enable、alt_ic_irq_disable
(方法3)HAL APIを使う
→割り込みを意識しないで出来る
・alt_alarm_startではじめの待ち時間設定
・次からは、コールバックの戻り値が、待ち時間となる
・BSPエディターでの修正必要
sys_clk_timerとtimestamp_timerを
timer_0にセット→system.hに反映される
■自作周辺回路の割り込み
・irqを割り込み信号とする
→これをon,offすれば、割り込みになる
・割り込みIDの設定
・割り込みイネーブル、クリアを作る
今日は、自作周辺回路を登録して使う方法について
■自作周辺回路の概要
自作周辺回路を利用するには、
・まず、コンポーネントとして登録する
・そのコンポーネントをQsysで取り込み、
・NiosⅡEDSでプログラムを書く
●自作周辺回路を、コンポーネントとして登録する
・まず、HDL記述をする→バス信号をどう処理するか記述
代表的な信号
clk クロック
reset リセット
adress アドレス、ワード単位で増える
byteenable
read
readdata
write
writedata
irq 割り込み。後述
・自作周辺回路を登録する
QSysのCompornentLibrary(左側)のNew Compornentをクリック
→Compornentエディタが開く
コンポーネント名設定
FileでHDLを読み込み、Analyze synthesis filesしてチェック
外部端子をNew Conduit... またはConduit_end
InterfaceでAssociated resetの設定
完了、保存
→CompornentLibraryに登録される
●そのコンポーネントをQsysで取り込み
QSysに戻って、CompornentLibraryに登録された回路を、
普通に配置する
そしたら、コンパイル
●NiosⅡEDSでプログラムを書く
ふつうに、プロジェクトを作って(SOPC Informationファイルを指定し)
プログラムを書く。
→BASEは、system.hに定義されるので、
IORD_8_DIRECT,IOWT_8_DIRECTを使って操作する
あとは、普通の操作と変わらない
※まめちしき
・ダイナミックバスとネイティブバス(QSysはダイナミック)
・NIOSはリトルエンディアン
・Avalonバス(スイッチ・ファブリック)は3種類
Avalon Memory Mapped Interface(MM)
Avalon Memory Mapped Tristate Interface
→SRAM,Flashメモリ使用時に利用
Avalon Streming Interface(Avalon ST)
■タイマーの利用
●ハード部分(QSys)
・JTAGのところでつけている、割り込みラインに、
timer_0もつける
●ソフト部分(Nios Ⅱ EDS)
方法は3種類!
(方法1)ポーリングする
・タイムアウト待ちする
(方法2)タイマー割り込みを使う
alt_ic__isr_register
alt_ic_irq_enable、alt_ic_irq_disable
(方法3)HAL APIを使う
→割り込みを意識しないで出来る
・alt_alarm_startではじめの待ち時間設定
・次からは、コールバックの戻り値が、待ち時間となる
・BSPエディターでの修正必要
sys_clk_timerとtimestamp_timerを
timer_0にセット→system.hに反映される
■自作周辺回路の割り込み
・irqを割り込み信号とする
→これをon,offすれば、割り込みになる
・割り込みIDの設定
・割り込みイネーブル、クリアを作る