注目の投稿

技術Note一覧

このブログのメインコンテンツである技術Noteの一覧

2017/08/29

Nios マルチコアシステム

Qsys
・Nios設定にてreset vector (ブート位置)が被らないように手動で入力する.
参考文献(https://www.altima.jp/members/japanese/download/nios2_sw_sc2_v10.pdf)ではreset vector , expection vector 共に +0x60000している.これでプログラム(ソフトウェア・イメージ)を同じメモリに格納できる.
・通常reset vectorはon chip flash 等の不揮発領域を指定するが,flashの書き込み寿命が気になったり,気軽にデバッグしたい場合にはon chip memoryやsdram controllerなどでも良い.
・expection vectorはRAM領域推奨(な気がする)
・各CPUに対してJTAGモジュールが必要

Eclipce BSP
・CPUを複数含むsopcinfoファイルからCプロジェクトを生成すると,どのCPUに対するBSPかを選択できる.
・Linker ScriptタブのLinker Regionsにメモリの使用可能領域が表示されている.この領域をそれぞれのCPUのBSPと見比べて,Qsysで入力した通りになっているか裏付けができる.
・あとはLinkerSectionのMappingを上手いこと設定する.ここの設定はプログラム実行時にどこのメモリを使うか?(ソフトウェア実行領域)なので基本的にはsdram等の大容量なやつが指定されるはず

・賢いことに,複数のプロジェクトでソフトウェア実行領域が被らないようにしてくれるらしい.

・ここまでで各CPUから独立にLチカするくらいはできる.


--ここから未確認.要検証
・プロジェクト間でデータを共有したい場合には共有メモリを使う.共有メモリといってもQsysでon chip memoryを追加して,二つのCPUからMMslaveインターフェースに結線するだけ.

・Nios上でon chip memory のAPIを叩いて,指定アドレスへのデータ書き込みを行う.このアドレスに別のCPUから読み込みを行えばデータ共有が可能になる.

・が,排他制御は必要.ハードウェアMutexというシンプルな仕組み(IP)が有るようなのでQsysに追加.