旅する情報系大学院生

旅と留学とプログラミング

FPGA動かすまでに苦労したことまとめ & ボード買わなくてもFPGAをラズパイのGPIOと接続する方法[学科の人向け]

この記事は、IS17er Advent Calendar 2016 - Adventarの6日目の記事として書かれました。
IS17erで、小林先生にFPGAもらったけどまだ作ってない人向けの記事です。FPGAスーパーキットの本を持っている読者を想定してます。
これから組み立てる人がスムーズに行くように困ったところを書いていきます。


私のFPGA現在の状況。Lチカと、ラズパイのGPIOから10送ってxorした結果が出力されている図です。
youtu.be
f:id:yamaguchi_1024:20161206210822j:plain


組み立て

レギュレータなど、小林先生にもらった部品は本に書いてある通りの部品ではないのでいい感じに取り付けることが必要です。

全体像
f:id:yamaguchi_1024:20161206212229j:plain
f:id:yamaguchi_1024:20161206212253j:plain

取り付けは、部品さえあれば本の64ページ辺りと76ページ辺りを読めば普通にできます。

抵抗は下記のように取り付けます。
・130ΩのR2の代わりに150Ω(茶緑茶金)
・120ΩのR1の代わりに100Ω(茶黒茶金)
・10kΩのR3,R4は茶黒橙なのでそのままでよい
・2.2kΩのR5も赤赤赤でそのままでよい

レギュレータは、上記のMAX10-JB基盤の写真の右下にe3と書かれたピンが来るように取り付けます。
はんだ付けの先生にやってもらったとき、先生は基盤に付いているはんだを取ってから自分でつけていました。

SRAMはPICマイコンにプログラムを書き込む前に付けても特に問題はありませんでした。ロボテクの人ならSRAMのはんだ付けできるみたいなので、頼んでみるといいかもしれません。

QuartusにFPGAを認識させる

完全に苦労しました。
私の環境(windows10,insider buildが有効になっている(関係あるのか?))で最初に出たエラーです。
f:id:yamaguchi_1024:20161206212757p:plain
f:id:yamaguchi_1024:20161206212804p:plain
f:id:yamaguchi_1024:20161206212811p:plain
f:id:yamaguchi_1024:20161206212817p:plain

結論から言うと、デバイスドライバがちゃんとインストールできていなかったのが問題のようでした。
色々なことを試しましたが、エラーが起きたらすぐドライバをアンインストールして、もう一度インストールするというのを下記のようにやればすぐ直ったんじゃないかと思います。
1.デバイスマネージャーを起動する。
2.USB-Blasterの項目にエラーが出ている。
3.Altera-USB-Blasterの項目にエラーが出ている。 はい→4へ いいえ→おわり。
4.Altera-USB-Blasterを右クリックして、uninstall driverを選び、アンインストールします。
5.USB-Blasterを右クリックして、Update driver→Manually install driverとして、search for drivers in the locationの欄にC:\altera_lite\15.1\quartus\drivers\usb-blasterと書きます。次へを押して、インストールします。
6.エラーは消えましたか? はい→おわり。 いいえ→1へ戻って無限回繰り返す。


ためして、そして無駄だったこと。

デバイスドライバインストールしてみたけどダメ
コントロールパネルのデバイス管理のところで、表示されない。
quartusをアンインストールして、最新版16.1をインストール。
quartus prime standalone programmerをインストールしたけどだめ。
quartus prime 最新版 ダメ。
serviceからAltera JTAG server何回も再起動したけど関係なさそう。
quartus programmerでAdd hardwareとか色々いじったけど全く関係なかった。ドライバの問題だった。
デバイスドライバを何回も何回も再インストールして、これやったら直った。


ボード買わなくてもラズパイのGPIOと接続する方法

ブレッドボードと青いメスオスの線、又はメスメスの線は最低限必要です。
53ページを見ます。
組み立ての最後の方にCN1,CN2を付けますが、それが外部に接続するためのピンたちで、53ページの外部コネクタの欄にも書いてありますし、基盤にもピン番号(P6とかP62とか)が書いてあります。
FPGAのピンと付けたいラズパイのピンを物理的に接続します。私はFPGAのP59,P60,P61,P62とラズパイ端子の29,31,33,35をこの順でつけました。ラズパイはGPIOの番号と端子の番号は違うので気を付けてください。
本の112p辺りを見ながら、プロジェクトを作っていきます。
書いたverilogはこんな感じ。

module FPGA (
	input wire IN_A,
	input wire IN_B,
	output wire O
	);
	
	wire IA;
	wire IB;
	
	assign IA = IN_A & ~IN_B;
	assign IB = ~IN_A & IN_B;
	
	assign O = IA | IB;
	
endmodule

これを保存し、Assignments→PinPlannerで先ほどのP60とかP62にピンを割り当てていきます。
こんな感じ。
f:id:yamaguchi_1024:20161206215409p:plain

FPGAに書き込んで、ラズパイで適当に端子の31と33からHIGH,LOWを出力して35からINPUTして出力、みたいなスクリプトをpythonで書けばおわりです!
XORするだけの超もったいないFPGAの使い方ができます。



コメントいただけると嬉しいです。