IPコアで"ラクラク"FPGA設計 <Altera編> ―― SOPC Builderを活用した基本I/O&SDRAM制御回路の設計
tag: 半導体 ディジタル・デザイン
技術解説 2010年4月23日
4.ソフトウェアの開発
Nios IIはプロセッサであるため,ソフトウェアの開発が必要です.Nios IIの開発キットには「Nios II Software Build Tools for Eclipse」という,Eclipseベースのソフトウェア開発パッケージが用意されています.Nios II Embedded Design Suiteに含まれており,SOPC Builderから使うことができます.
●Nios IIのソフトウェア開発は独特
Nios IIでもC/C++言語を使ってソフトウェアを開発します.この点は,ほかのマイコン開発と同じです.特徴的な点は,自由に周辺機能を構成できるために,メモリの配置やI/Oアドレスなどが決まっていない点です.
そのため,Nios IIのソフトウェア開発ツールには,ライブラリ群の生成を自動的に行う機能があります.includeにより,メモリのベース・アドレスやライブラリ関数などを使えるようになります.これを「BSP」といいます.BSPは,Eclipseでソフトウェアの開発を行う際に一緒に作ることができます.
●新規のテンプレートを作成する
SOPC Builderの「Nios II」→「Nios II Software Build Tools for Eclipse」を実行すると,Eclipse Platformが起動します(図14).
図14 Eclipse Platform
SOPC Builderの「Nios II」→「Nios II Software Build Tools for Eclipse」で起動する.
「File」→「New」→「Nios II Application and BSP form Template」を選択して,新しいテンプレートを作成します(図15).
図15 新規テンプレートの作成
「File」→「New」→「Nios II Application and BSP form Template」で設定画面が開く.
Target Hardware InformationにはBSPの生成元であるターゲットのハードウェア設定を登録します.SOPC Information File nameとして,「NIOS2core.sopcinfo」を選択します.CPU nameには「cpu_0」が自動的に設定されます.
Application ProjectにはBSPを使ったソフトウェアのプロジェクトを設定します.Project nameは「HelloWld1」とします.Project templateは「Hello World」を選択します.
[Finish]ボタンを押すと,BSPとソフトウェア・プロジェクトの生成を行います.
●BSPをカスタマイズする
SOPC Builderで設定したAGX20_testというプロジェクト情報から,使用されたI/O群,メモリ・マップ,I/Oアクセス・ドライバ類のヘッダ・ファイルやincludeファイル,各種ソース・コードが自動的に作業ディレクトリにコピーされます.その結果,「HelloWld1_bsp」というBSPプロジェクトと,「HelloWld1」というHello Worldサンプル・コードのビルド・プロジェクトがメニュー上に表示されます.
ところで,ハードウェアの構成によっては,標準で生成されたBSPがすぐに使えるとは限りません.今回の例では,命令メモリはSRAMで32Kバイトを設定していますが,標準のBSP設定コードは約70Kバイト必要なため収まりません.また,Hello Worldを出力するために,mainルーチンの中で使われているprintf関数の出力先(コンソール)をJTAG UARTに設定する必要もあります.
命令コードの圧縮フラグを設定します.Project Explorerの「HelloWld1_bsp」を右クリックして表示されるメニューから「Nios II」→「BSP Editor...」を選択してBSPの設定メニューを開きます(図16).enable_reduce_device_driversとenable_small_c_libraryをチェックします.また,stderr,stdin,stdoutをいずれも「jtag_uart_0」に設定します.「File」→「Save」を選んで設定を保存し,[Generate]ボタンを押下してBSPの再生成を行います.
図16 BSPの設定
命令コードを圧縮する設定を示す.
●ビルドする
BSP設定メニューを閉じて,「Project」→「Build All...」を選択すると,HelloWorld.cのビルドが始まります.設定が正しければ,32Kバイトの命令コード内に格納されるJTAG UARTにprintf関数の内容を表示するだけのプログラムが生成され,ビルドが正常に終了するはずです.
●デバッグする
「Run」→「Debug Configurations...」を選択して,デバッグの設定メニューを表示させます.
Project nameのプルダウンで,デバッグを行うプログラムを選択します.ここでは,Hello Worldを表示する「HelloWld1」とします(図17).この選択により,ビルド後のデバッグ情報を含むコードであるHelloWld1.elfがデバッガに受け渡されます.
図17 デバッグの設定
「Run」→「Debug Configurations...」で表示される画面で設定する.
[Debug]ボタンを押下すると,Eclipse上でデバッガが起動し,命令コードがFPGAボードに転送され,デバッグ・ウィンドウが開きます.デバッグ・ウィンドウ上に,ソース・コードやログを表示するコンソール画面が現れ,デバッグ開始の準備が整います.
デバッグ開始ボタンを押し,プログラムを実行します.
「Hello from Nios II!」というメッセージがコンソール画面に表示されれば,プロセッサはプログラム通りに動作していることが分かります(図18).
図18 デバックの様子
printif関数により「Hello from Nios II!」と表示されている.
●参考・引用*文献
(1) 浅井剛;ソフト・マクロのCPUを使おう!――FPGAによるシステムLSI設計の意味,組み込みネット, http://www.kumikomi.net/archives/2003/08/15cpum.php?page=1
(2) 浅井剛;Cyclone IIから組み込みシステム開発評価キットを制御する――ソフトCPUコアNios II搭載システムの実装事例,Interface,2008年4月号.
いくら・まさみ
来栖川電工(有)
東海大学 組込み技術修士(専門職)