”FPGAで遊んでみる”では、セミナー用に作成したサンプル回路などを整理して少しづつ紹介していきます。
セミナ開催します
手ぶらでOK!実習・知って必ず得する!Armアセンブリ言語「超」入門
-- 高水準言語では実現できない処理を実現しマイコンの動きをより深く知るために
2024年12月20日(金)CQ出版社セミナルーム CQ出版社セミナ・ルーム
詳しくはこちらへ
ZYBOの本
FPGAパソコンZYBOで作るLinux I/Oミニコンピュータ CQ出版 発売中
Papilioの本
FPGA版Arduino!!Papilioで作るディジタル・ガジェット CQ出版 発売中
番外編 FPGAでCPU(NiosU)を動かしてみる
☆DE10-lite版のページはこちら
今回は、FPGA上でCPU(NiosU)を動かしてみます。LED制御までの手順を紹介します。
NiosUはアルテラ社の用意したFPGA上で動作するCPUで評価であれば無償で利用できます。
CPUを最小構成にするとCyclonの一番小さい物(EP1C3T100)でも使用可能です。
短時間でシリアル通信等を持つ回路が作成できますので、評価中に専用テスト冶具が欲しい時などに重宝します。
NiosUの詳細についてはアルテラ社のサイトを見てください。
準備する物
FPGAボード:改定版FPGAボードで学ぶ論理回路設計(CQ出版)付属ボード(CQ出版)
他のFPGAボードでもアルテラ社のFPGAが搭載されていれば利用可能です。
ダウンロードケーブル:USB Blaster ※FT2232DではソフトのダウンロードできませんのでUSB Blasterが必要です。
デジキーで互換品が購入可能です。
FPGA開発ソフト:QuartusUアルテラ社のサイトからダウンロード可能です。今回はバージョン9.1sp1を使用
NiosUソフト開発環境:NiosU EDS アルテラ社のサイトからダウンロード可能です。今回はバージョン9.1を使用
作業1.ツールのインストール
QuartusUとNiosUEDSをダウンロードしてインストールしてください。
QuartusUとNiosUEDSはバージョンが一致する物を使ってください。
作業2.FPGA開発プロジェクト作成
QuartusUを起動して新規のプロジェクトを作成します。
2-1新規プロジェクトの作成.
Create a New Projectを選択
2-3.プロジェクトフォルダとプロジェクト名の指定
任意の名前を入れます。
2-4.ソースファイルの指定
ソースファイルは何も指定しないで”Next”をクリック
2-5.デバイスの指定
使用するFPGAボードに合わせます。
2-6.ツールの指定
ModellSim-Alteraはアルテラライトからダウンロードできます。
ModellSim-Alteraを使わない場合はインストールしていなくても問題ありません。
2-7.プロジェクト設定完了
"Finish"を選択するとQuartusUが起動します。
作業3.CPUを持つシステムの構築
CPU(NiosUProcessor)を持つシステムは、QuartusU内のSOPCBuildeで構築します。
今回は、以下のモジュールを組み込みます。
NiosUProcessor:CPU
On-Chip Memory:内部メモリ
JATG UART:JTAG経由でNiosUEDSのコンソールとシリアル通信するモジュール
PIO:LED制御
3-1.SOPCBuilder起動
”Tools”→"SOPC Builder"でSOPCBuilderが起動します。
3-2.システス名の指定
QuartusUのプロジェクト名と同じにしてください。
同じ名前にするとSOPCBuilderで作成する回路がトップ階層として扱われます。
3-3.クロック周波数指定、NIOSUプロセッサの追加
ClockSettingのMHzの部分をFPGAボードに合わせて周波数をしてください。今回使用するボードは33.0に設定
ComponentLibraryのNiosUProcessorを選択して"Add"をクリックするとNiosUProcessorの設定が開始する。
3-4.NiosUProcessorのコア・タイプ設定
NiosU/e→NiosU/s→NiosU/fの順で高機能になりますが回路規模も大きくなります。
今回はのFPGAの回路規模が小さいのでNiosU/eを選択します。
3-5.NiosUProcessor設定の2,3,4ページはデフォルトのままです。
3-6.デバックレベルの設定
ソフトウェアの動作確認でデバッカを使うのでLevel1を設定
3-7.NiosUProcessor設定の完了
"Finish"を選択すると設定が完了してシステムにNiosUProcessorが追加されます。
3-8.メモリの追加
SOPC Builderに戻り、"On-ChipMemory"を選択して"Add"をククックすると内部メモリの設定が始まります
3-9.内部メモリの設定
今回使用するFPGAのメモリブロックが少ないのでSizeを2048Bytesに設定します。
”Finsh”をクリックするとシステムにメモリが追加されます。
3-10.NiosUProcessorの使用メモリ設定
NiosUProcessorへ使用するメモリ指定をするために、”NiosUProcessor”選択して”Edit”をクリック
3-11.使用メモリ指定
ResetVectorとExceptionVectorに先ほど追加した内部メモリ(onchip_memory2_0)を指定する。
3-12.JTAG UARTの追加
JTAG UARTはJATG経由でNiosUEDSのターミナル機能と通信するモジュールです。
”JTAG UART"を選択して”Add"をクリックして設定します。
3-13.JTAG UARTの設定
デフォルト設置のままで”Finish”をクリックするとJTAG UARTがシステムに追加されます。
3-14.PIOの追加
PIOはLEDの点灯制御に使用します。
”PIO(Parallee I/O)"を選択して”Add"をクリックして設定します。
3-15.PIOの設定
今回はLEDの点灯制御だけなので、"Output ports only"をセットして”Finish”をクリック
3-16.システムの構築指示
”Generate”をクリックするとシステムが構築されます。
3-17.システムの構築完了
”System generation was successful”と表示されれシステムの設計データ構築が完了です。
エラーの場合は設定不足や設定の矛盾がありますので、エラーメッセージを見て設定を変更してください。
作業4.FPGAの回路データの作成
SOPCBuilderで作成してくれるのは設計データなので、論理合成、PIN配置指定、配置配線など通常のFPGA開発作業を
ここから行います。
4-1.論理合成
”Analysis&synthesis"→"Start"で論理合成が開始します。
QuartusUのプロジェクト名とSOPCBuilderのシステム名が違っている場合は、直ぐにエラーになります。
システム名を変更してください。
4-2.PIN配置ツールの起動
"Assignments"→"Pins"でPIN配置ツールが起動します。
4-3.PIN配置指定
下側にある信号名リストで信号を選択してマウスの右ボタンを押しながら右上のTopWiewの端子上に移動して右ボタンを
離すと配置が指定されます。
信号名リストのLocationに直接入力しても指定可能です。PIN配置ツールを終了させると指定が設計データへ反映されます。
4-4.FPGAへの書込みデータ作成
”Assembler"→”Start”でFPGAへの書込みデータが作成されます。
作業5.ソフトウェアの作成
NiosUProcessorを動かすソフトウェアを作成します。作成にはアルテラ社が用意してくれているEclipseベースのNiosUEDSを使います。
NiosUEDSからサンプルのソフトウェアプロジェクトを作れますので、それを利用してソフト開発するのが早道です。
5-1.NiiosUEDSの起動
SOPCBuilderで"NiosUSoftware Build Tools for Eclipse"をクリックするとNiiosUEDSが起動します。
5-2.ワークスペースの指定
Eclipseのワークスペースに使うフォルダを指定します。
任意のフォルダが設定可能です。
”OK”を押すとNiiosUEDSが起動します。
5-3.ソフトウェアプロジェクトの雛型作成
NiiosUEDSで”File”→”New”→”NiosUApplication and BSP...”を選択するとソフトウェアプロジェクトの雛型設定に移行します。
5-4.ソフトウェアプロジェクトの雛型設定
"SOPC Information File name"にはQuartusUのプロジェクトフォルダにある"システム名.sopcinfo"を指定します。
"Project name"は、ソフトウェアプロジェクト名で、任意の名前を入力してください。
"Project template"は"HelloWorldSmall"を選択してください。他のテンプレートを選択するとメモリ不足で動作しない場合があります
"Finish"をクリックするとソフトウェアプロジェクトが作成されます。
5-5.ソフトウェアプロジェクトのビルド
"ProjectExplorer"に作成されてソフトウェアプロジェクトが表示されます。
hello_world_sall.cがC言語のソースコードで、NiiosUEDSコンソールに"Hello
from Nios II !!"と表示する内容なっています。
"Project"→"Build Project"でビルドが実行されコンパイル、リンク、オブジェクト生成を行ってくれます。
作業6.雛型ソフトウェアプロジェクトのFPGAでの動作確認
6-1.FPGAボードの準備
FPGAボートとダウンロードケーブル(USB Blaster)とPCを接続して、FPGAボードへ電源を入れます。
6-2.プログラマの起動
QuartusUで"Tools"→"Programmer"を選択するとプログラマが起動します。
6-3.FPGAのダウンロード
中央付近の"Start"をクリックするとFPGAへのダウンロードが実行されます。
"Progress"が100%になったらダウンロードの完了です。
6-4.プログラムの実行
NiiosUEDSで"Run As"→"NiosUHardware"を選択すると、プログラムがダウンロードされて実行が開始します。
6-5.FPGAボードが認識されない場合
プログラムのダウンロード時にFPGAボードが上手く認識されないと"RunConfiguretons"が表示れます。
上手く認識されていない場合は、"Run"ボタンが選択できなくなっています。
"RefreshConnection"をクリックすると"Run"ボタンが有効になり実行可能になる場合があります。
それでも駄目な場合は、"System ID checks"の二つの項目にチェックを入れてみてください。
6-6.実行結果
実行に成功すると、NIosUConsoleに"Hello from Nios II !!"と表示さます。
作業7.ソフトウェアの変更
次に雛型のhellow_world_small.cを変更してLEDを制御してみます。
7-1.hellow_world_small.cの変更
"hellow_world_small.c"をダブルクリックするとエディタが起動してソースコード修正ができます。
変更後の動作内容は、起動時に”LED ctrl Start”と表示して、その後はコンソールに入力された文字が”A”の場合は、
"on"とkンソールに表示してLED点灯、 "B"の場合は"off"と表示してLED消灯します。
変更後のhello_world_small.c
#include "system.h" //システムの情報のヘッダーファイル追加 #include "sys/alt_stdio.h" int main() { //PIO用のレジスタアクセスの定義 #define PIO_0_LED (*(volatile unsigned int *) PIO_0_BASE) //入力されたデータ保存用変数 int key_data; //起動時はLEDを消灯 PIO_0_LED = 0xff; //起動時の表示メッセージ alt_putstr("LED ctrl Start\n"); /* Event loop never exits. */ while (1){ //コンソールから1文字入力 key_data = alt_getchar(); //入力文字の判定 if (key_data==0x41){ //"A"の場合 alt_putstr("on\n"); //"on"をメッセージ表示 PIO_0_LED = 0x0;} //PIOレジスタへ0を書込みしてLED点灯 else if (key_data==0x42){ //"B"の場合 alt_putstr("off\n");//"off"をメッセージ表示 PIO_0_LED = 0xff;} //PIOレジスタへ0xffを書込みしてLED消灯 else{ PIO_0_LED = PIO_0_LED;} } return 0; } |
system.hは雛型のソフトウェアプロジェクトの作成時に自動生成されるヘッダーファイルで、ベースアドレス等が定義されています。
PIO_0_BASEはsystem.hに定義されているPIOのベースアドレスです。
ソースの修正が終わりましたら、セーブしてソフトウェアプロジェクトビルドを実行してください。
7-2.動作確認
ソフトウェアプロジェクのトビルド後に6-1〜6の要領でFPGAの動作確認を行います。
コンソールに"LED ctrl Start"と表示さ後にコンソールから”A”を入力すると”on”と表示されてLEDが点灯し、
次に”B”と入力すると”off”と表示されてLEDが消灯するば動作OKです。
今回、作成したシステムをベースに変更を加える形で開発する作業がスムーズですので、活用してみてください。
紹介した回路を試す場合は、自己責任でお願いします。
リンクフリーです。
リンクされた場合にご連絡をいただけると嬉しです。
メール:
変更履歴
(2010/11/9) 初版