FPGA Altera(1)-開発ボード

前回、PICの開発ボードをご紹介しました。

今回は、FPGA(Altera製)の開発ボードをご紹介します。

開発ボードは、Altera製FPGAのCycloneを使用したTerasic社製のものをよく見かけます。

通常、書き込みには、USB Blasterというツールを使用するのですが、開発ボードにこのUSB Blasterがオンボードされているものもあるので、便利です。


Terasic DE0-NANO開発ボード 【P0082】
価格 14256 円
DE0-Nano 開発・学習ボードDE0-Nano開発・学習ボードは、ロボットやポータブル機器のプロジェクトなどのプロトタイピングサーキットデザインに対応する、 コンパクトサイズのFPGA開発プラットホームです。DE0-Nanoは外部GPIOヘッダー、大容量データストレージやフレームバッファリングが可能なSDRAMとEEPROM、一般利用向けのLEDやボタンが搭載されています。【キット内容】アルテラ DE0-Nano ボードUSB Mini-B ケーブルDE0-Nano クイックスタートガイド・・・
詳細はこちら


Terasic DE0-CV 開発キット 【P0192】
価格 26730 円
最適化されたDE0-CVは、強固なハードウェアデザインプラットフォームで、オンボードUSB Blaster やビデオ機能などその他多数の機能のコントロールにAltera Cyclone V FPGAデバイスを使用しています。DE0-CVは、プロトタイプブリッジング、モータコントロールドライブ、カードや携帯端末のキャプチャなどの多様なアプリケーションのために必要な性能とパワーを提供します。DE0-CVは、完璧な、展示と評価のソリューションで、全てのプロトタイプ機能が128x99mmという、小さな開発ボードに備わっています。DE0-CVは、WindowsXPまたはそれ以上が起動するコンピュータと接続して使用するために必要な、すべてのコンポーネントを含んでいます。仕様DE0-CVは、シンプルな回路・・・
詳細はこちら


Terasic MAX10 NEEK 【P0800】
価格 66646 円
Terasic 社の MAX 10 Nios II Embedded Evaluation Kit (NEEK) は、MAX 10 FPGA ファミリをベースにしたフル機能のエンベデッド評価キットです。組込みシステム開発者がプロセッサ・ベースのシステムを開発するのに必要なものをすべて備えた包括的なデザイン環境であり、さまざまなアプリケーションを開発するためのハードウェア、開発ツール、IP (Intellectual Property)、およびリファレンス・デザインを含む統合プラットフォームを提供します。完全に統合されたキットであるため、プロセッサの固定機能セットに合わせてソフトウェアを制約するのではなく、ニーズに応じてプロセッサや IP を素早くカスタマイズすることが可能です。MAX 10 ・・・
詳細はこちら


ヒューマンデータ Terasic USB Blaster 【1-TB1】
価格 12378 円
【内容】アルテラ社のUSB 対応ダウンロードケーブル USB Blaster の互換品です。台湾Tearsic 社製。アルテラ社の開発ツールQuartusII からUSB Blaster として使用することができます。新しいドライバは不要で、USB Blaster のデバイスドライバがそのまま使え、その点での差違はありません。アルテラ純正品への買換保証はありません。<内容物>・本体・USBケーブル・ユーザー登録はがき※マニュアルは付属しておりません。本製品はこの分野で実績のあるヒューマンデータ社の製品ラインナップのひとつです。(ノーブランド品ではありません。)詳細は同社のWebサイトでご確認ください。以下は同社Webサイトからの抜粋です。「Terasic社はAltera社のパートナー企業です・・・
詳細はこちら

FPGA MAX10(4)-SignalTapⅡ

SignalTapⅡロジック・アナライザ機能です。

Quartus PrimeFPGA内部の信号を観測してデバックする為のロジック・アナライザ機能としてSignalTapⅡを提供しています。

それでは、早速使用してみます。

まずは、TalkBack機能を有効にします。

Tools→optionsよりoptions画面を表示します。

options画面のInternet Connectivityを選択して、画面よりTalkBack Optionsを選択すると、
Quartus Prime TalkBack画面が表示されます。

Enable sending TalkBack data to Alteraチェックボックスにチェックを入れて有効にします。

qurtusprimeliteedition_talkback_001

今回作成したLEDチカチカ回路のcounter_1sec[31:0]とcounter_led[2:0]を見てみようと思います。

SignalTapⅡの無償版では、観測する信号の選択やトリガ条件を変更する際には、フルコンパイルが必要です。

tools→SignalTapⅡ Logic Analyzerを選択して、SignalTapⅡをを起動します。

qurtusprimeliteedition_signaltap2_001

Setupタブ内の空白部分をダブルクリックして、Node Finder画面を表示します。

Namedにキーワードを入れて、Listを選択すると、Matching Nodesにキーワードに一致したものが表示されます。

counter_1secとcounter_ledをNodes Foundに設定します。

SignalTapⅡの画面に戻り、Signal Configurationを設定します。

Clockはclkを指定、Storage qualiferのTypeをContinuousを指定、TriggerをAuto、Sequential、Pre trigger position、Triggerを指定、conditionsを1指定、Trigger in、Trigger outのチェックボックスを無効にする。

Start Compilaiton(三角を90度回転したマーク)を選択して、フルコンパイルを実行します。

フルコンパイルが完了したら、JTAG Chain Configurationを設定します。

SOF Managerで、作成したsofファイル(FPGA.sof)を指定します。

Run Analysisボタンを選択すると、波形が表示されます。

qurtusprimeliteedition_signaltap2_002

FPGA MAX10(3)-Verilog HDL(1)

前回、LEDチカチカ回路を作成する為に、下記のようなVerilog HDLでコードを構築しました。


`define CYCLE_1SEC 48000000

//---------------------------
// Top of the FPGA
//---------------------------
module FPGA
(
	input wire clk,			//48MHz Clock
	input wire res_n,			//Reset Switch
	output wire [2:0] led	//LED Output
);

//-----------------------------
// Counter to make 1sec Period
//-----------------------------
reg [31:0] counter_1sec;
wire period_1sec;

always @(posedge clk, negedge res_n)
begin
	if (~res_n)
		counter_1sec <= 32'h00000000;
	else if (period_1sec)
		counter_1sec <= 32'h00000000;
	else
		counter_1sec <= counter_1sec + 32'h00000001;
end

assign period_1sec = (counter_1sec == (`CYCLE_1SEC - 1));

//------------------------------
// Counter to make LED signal
//------------------------------
reg [2:0] counter_led;

always @(posedge clk, negedge res_n)
begin
	if (~res_n)
		counter_led <= 3'b000;
	else if (period_1sec)
		counter_led <= counter_led + 3'b001;
end

assign led = ~counter_led;	//LED on by low level

endmodule

このコードを分析していこうと思います。

module FPGA();~endmodule

これが大枠になるようです。

括弧の中身は実際にFPGAとやり取りする引数になると思います。

それでは、括弧の中身を見ていきます。

input、output,inout

これはポート宣言で、実際にMAX10に信号を送ったり、MAX10から信号をもらったりする部分になります。

input 信号名

と宣言します。

バス(デバイス間通信)の宣言もできます。

input [MSB(上位ビット):LSB(下位ビット)] 信号名

と宣言します。

上記コードではLEDデバイスと通信する為にバスの宣言を使用しています。

wire, reg

これはそれぞれネット宣言,レジスタ宣言とです。

ネット変数は、宣言ではモジュール内で使用する変数で、常にゲートや継続代入文によって値を送受信しており、送受信していない時にはハイインピーダンス状態になります。

ハイインピーダンスとはようは抵抗が大きい状態なので、電流が流れない。

よって、値を送受信されない状態です。

レジスタ変数は、データを保持します。

ネット型変数の信号への代入は、assign 文でのみ可能で、レジスタ変数の信号への代入は,always 文,initial 文などで可能です。

always @(ステートメント)

ステートメントには、信号名が入ります。

信号名だけの時は、信号が立ち上がる時と,立ち下がる時にbegineからendの処理がされます。

posedge 信号名の時は、信号が立ち上がる時、begineからendの処理がされます。

negedge 信号名の時は、信号が立ち下時、begineからendの処理がされます。

beginからendの中には、よく見るif文が記載されています。

if文は、resetスイッチ(SW1)が押された時(Lowの時)、period_1secが1の時に、counter_1secを0に初期化されます。

その他はcounter_1secをインクリメントします。

32'h00000000は32bitの16進数で10進数の0を表します。

32'h00000001は32bitの16進数で10進数の1を表します。

assign

組合せ回路を記述する時にassign 文を使用します。

assgin 文の左辺はネット型変数になります。

右辺には、論理式がよく使用されますが、定数なども設定可能です。

上記コードでは、counter_1secと`CYCLE_1SEC - 1の値がイコールの時に、period_1secに1が代入されます。

ここまでが、カウンタの処理になります。

LEDも使用している文法はほぼ同じです。

LEDはresetスイッチ(SW1)が押された時(Lowの時)、LEDを消すために、counter_ledに0を入力、period_1secが1の時に、色を変更する為に、counter_ledをインクリメントします。

assignを使用して、ledにcounter_ledの否定値を入力します。

LEDはLow信号の時に光るので、led[2:0]が111の時にLEDは消えます。

FPGA MAX10(2)-LEDチカチカ回路(1)

前回、FPGA MAX10搭載基板と書き込み器製作用プリント基板の初期セットアップが完了したので、今回はLEDチカチカ回路を作ってみようと思います。

まずは、Quartus Primeを実行します。

Windowsのスタートメニューの中から実行できます。

QurtusPrimeLiteEdition_001

新規プロジェクトを作成します。

作成ディレクトリは任意で構いませんが、日本語は使用しない方がよさそうです。

プロジェクト名はFPGAにしました。

私の使用しているデバイスは「10M08SAE144C8GES」のようです。

シミュレーション・ツール形式は「Verilog HDL」に設定しておきます。

次にVerilog HDL Fileを作成します。

そして下記のようにハードウェア言語「Verilog HDL」を入力します。


`define CYCLE_1SEC 48000000

//---------------------------
// Top of the FPGA
//---------------------------
module FPGA
(
	input wire clk,			//48MHz Clock
	input wire res_n,			//Reset Switch
	output wire [2:0] led	//LED Output
);

//-----------------------------
// Counter to make 1sec Period
//-----------------------------
reg [31:0] counter_1sec;
wire period_1sec;

always @(posedge clk, negedge res_n)
begin
	if (~res_n)
		counter_1sec <= 32'h00000000;
	else if (period_1sec)
		counter_1sec <= 32'h00000000;
	else
		counter_1sec <= counter_1sec + 32'h00000001;
end

assign period_1sec = (counter_1sec == (`CYCLE_1SEC - 1));

//------------------------------
// Counter to make LED signal
//------------------------------
reg [2:0] counter_led;

always @(posedge clk, negedge res_n)
begin
	if (~res_n)
		counter_led <= 3'b000;
	else if (period_1sec)
		counter_led <= counter_led + 3'b001;
end

assign led = ~counter_led;	//LED on by low level

endmodule

Verilog HDL」言語については後ほど詳細を調査しようと思います。

とりあえず動作させる事を優先します。

次にTasks内の「Analysis & Synthesis」を右クリックしてStartを選択します。

これは「Verilog HDL」言語の解析と合成を実行しています。

分からない事が多いですが、ようは構築したコードが動作するかどうかチェックして、Quartus Primeにモジュールの階層構造や信号名を認識させているようです。

次に外部端子への信号アサインを行います。

メニューより[Assignments]→[Pin Planner]を選択します。

QurtusPrimeLiteEdition_PinPlanner_001

clkにPin_27を、led[2]にPIN_121、led[1]にPIN_122、led[0]にPIN_120、res_nにPIN_123を設定します。

メニューより[Processing]→[Start Complication]を選択します。

Tasks内からの実行など、他にも実行方法はあります。

次にMAX10版FLASHメモリにでなく、FPGA内のコンフィグレーション用のSDRAMへ書き込みます。

SDRAMに書き込むので、電源を落とすと書き込みはなくなります。

Tasks内のProgram Deviceを右クリックして、Openを選択します。

QurtusPrimeLiteEdition_Programmer_001

Add Fileより先程作成したsofファイルを選択して、Program/Configureにチェックを入れて、Startを選択します。

プログレスバーが100%になれば、コンフィグ成功のはずすが・・・動作しない。

原因を調査したところ、上記で構築したコードが正しくなかったようです。

※上記コードは修正後のコードとなります。

FLASHメモリに書き込む際は、pofファイルを選択して、CFM0のProgram/Configureにチェックを入れて、Startを選択します。

FLASHメモリに書き込んだ場合は、電源を落として、再度起動してもLEDが光るのが確認できます。

FPGA MAX10(1)-MAX10について調べてみる

ちょっと前にラズベリーパイのような小型PCに興味を持ち、無線機器を作れないかなぁと考えていたころがありました。

とりあえず、ラズベリーパイを購入して、小型ディスプレイを装着してみるなど取り組んでいた頃があります。

そのころ、はんだ付けをする事があったのですが、やってみるとなかなかうまくいかないものでした。

しかし、やってみるとおもしろのものです。

という事で、今度はマイコン(マイクロコンピュータ)を使ってみたいと思ったわけです。

まずはマイコンってどんなものがあるのか調べてみました。

いろいろと調べていったところPICFPGA MAX10というキーワードにたどり着きました。

FPGAfield-programmable gate arrayの略のようです。

FPGAはよくよく調べていくとマイコンではないようです。

PICはソフトウェアで処理を行うのに対して、FPGAはハードウェアで処理をします。

PICは論理回路が決まっておりますが、FPGAは論理回路設計からする事ができます。

論理回路から設計してみたいので、今回はFPGA MAX10を使ってみたいと思います。

まずは、FPGA MAX10を用意する必要があります。

私は下記の3点を購入しました。

(1).FPGAの書籍です。

FPGA MAX10搭載基板や書き込み器製作用プリント基板、ソフトウェア一式が付いてきます。

あくまで基盤なので、搭載部品をはんだで取り付ける必要があります。

(1)MAX10(2)ライタ(3)DVD付き! FPGA電子工作スーパーキット (トライアルシリーズ)

(2).FPGA MAX10搭載基板に必要な部品を取り付けてある完成品です。

マルツエレック MAX10-FB(FPGA)基板 全実装版 【MTG-MAX10-FB-F】

こちらに関しては、必要なところをはんだでショートする必要があります。

(3).書き込み器製作用プリント基板に必要な部品を取り付けてある完成品です。

マルツエレック MAX10-JB(JTAG)基板 全実装版 【MTG-MAX10-JB-F】

(2)、(3)を使用すれば、問題なく動作するはずですが、私の場合はどうもうまくいきませんでした。

インターネットで検索したところ、PICを書き換えれば、良いとの事でした、PICを取り外すことができなかったので、とりあえずあきらめました。

結局、(3)の変わりに、書き込み器製作用プリント基板に必要な部品のセットを購入してはんだで取り付けしたところ、こちらは問題なく動作しました。

マルツエレック JB基板仕上げ部品セット 【MTG-MAX10-JC-S】

初期設定は完了したので、次回から論理回路設計やプログラムを使用して動作させていきたいと思います。