FPGAによるコンピューター将棋「スーパー田舎将棋」作ってます!!

FPGAでコンピューター将棋を作っちゃうブログ

FPGA 入門 その1

まず、FPGAの研究用にTerasic製のDE0 nanoを共立エレショップにて購入しました。

 

http://eleshop.jp/shop/g/gBAD121/

 

 

 

9800円と大変お安いです。(digikeyですと7470円+送料だそうです。digikeyで買ったほうが良かった?)

 

 

ALTERA CycloneIVが載っていて、22,320 LEだそうです。1000LE程度で32bit RISCコアが作れますから22個もCPUコアが載りますね。

USB Blasterを基板上に搭載しているようで、USBケーブルでつなぐだけでプログラムを転送することが出来るようです。

 

 

FPGA ボードで学ぶ組込みシステム開発入門 ?Altera編?

 

FPGAボードで学ぶ組み込みシステム開発入門 Altera編」(asin:4774148393)は、あちこちでお勧めされているようなので買いました。

DE0についても書かれているのでDE0 nanoを買って勉強しようという人は、まずはこの本を買うべきだと思います。

 

 

第1回 関西FPGA・DE0勉強会(2012/5/19)やってみた

 

http://d.hatena.ne.jp/ksksue/20120520/1337533844

 

 

 

発表スライドへのリンクなどがあり、勉強になります。DE0 nanoを入門機として買うのは良い選択だったようです。

以下、DE0 nanoで本書に従って学習したときに気づいたことをメモしておきます。

 

 

・本書のQuartus IIはv11.0ですが、現在はv12.0sp2らしく、インストールするときにNios IIをインストールするかしないかなどの選択ダイアログは出ませんでした。

 

 

・DE0用の説明になっているのでDE0 nanoの場合、FPGAとしてCyclone  IV EP4CE22F17C6を選択する必要があります。

 

・DE0 nano付属のUSBケーブルはぜんまいによる巻き取り式になっているのですが、速攻ネジが破損して巻き取る本体がばらけてぜんまいが飛び出したので本体部分捨てました。

 

・DE0 nanoには7セグメントがないので本書の手順で進めても動作テストができません。

 

 

・LEDが8個ついているのでこれを代わりに使って試します。

 

 

・DE0 nanoの付属のCD-ROMのうち、Quartusが入っているほうのCD-ROMはAlteraのサイトから最新版がダウンロードできるのでこのCD-ROM自体が不要。

 

 

・USB Blasterのドライバーは、Quartusのインストールフォルダのdriver/ フォルダ配下にある。ゆえにCD-ROMは不要。

 

 

・DE0 nano本体を付属のUSBケーブルでPCに接続すると(USB Blasterのドライバーをインストールする前の段階で)LEDライトがゆっくりと点滅する。

デモ用に出荷時にそういうプログラムが書かれているようです。

 

 

・DE0 nano付属のQuartusの入っていないほうのCD-ROMはいろいろ入っていて面白い。

Usermanual\DE0_Nano_User_Manual_v1.7.pdf

→ ユーザーマニュアル(英語)

Schematic\de0-nano-c4-rev-c(release_cd_rom)

→ 回路図

Tools\DE0_Nano_ControlPanel

→ LEDの個別のON/OFFテスト、ボタン型スイッチのON/OFFの検出、ディップスイッチのON/OFF状態の検出、メモリ(SDRAM等)の読み書き

などのテストができる。

Tools\DE0_Nano_SystemBuilder

→ 他のTerasic製のadd-onボードなどを載せたときにこれで設定するようです。よくわかりません。

 

 

あと、このボードのpin assignファイルは、

Demonstration\DE0_NANO_default\DE0_NANO.qsf

を使うと良いようです。DE0用のものは本書の著者がいじったものが技術評論社のサイトのほうからダウンロードできるようなのだが( http://gihyo.jp/book/2011/978-4-7741-4839-7/support )、DE0 nanoのものはないのでそのまま使います。

 

Verilogについては本書では解説が10ページほどしかないです。簡単に文法が載っているだけです。インターネットで検索すればいくらでも情報は出てくるので別の本を買うつもりはいまのところありません。

 

・DE0 nanoには7segが搭載されていませんので、本書の3章までのサンプルはそのままでは動きません。適当に読み替えて動作確認をします。

 

・自分でmoduleを書いてQuartusでコンパイルしたときに

Error: Top-level design entity "xxxxx" is undefined.

と表示されました。変数xxxxxはreg宣言していたのですが、この変数が使えないのかと思ったのですが、そうではなかったです。プロジェクト名とmodule名が一致していない場合、このmodule名をtop-level desingとして指定する必要があるようです。Assignments→Settingのところから設定しました。

 

・自分でmoduleを書いてコンパイルしたとき

Verilog HDL Procedural Assignment error at counter.v(17): object "LED" on left-hand side of assignment must have a variable data type

と表示されました。LEDをreg宣言していなかったためのようです。output reg [7:0] LED と変更しました。

 

・20LEぐらいの簡単なプログラムでもコンパイルに20秒ぐらいかかります。HDDからガリガリ聞こえてくるのでSSDならば半分ぐらいの時間で済むのかも知れません。それにしても遅いですね。

 
 
・moduleのなかでinput CLKと書いていたのですが、CLKがどこから与えられているのかわからず、動作もしませんし、エラーにもならないのですが、おそらくどこかに設定するところがあると思うのですが…。pin assignファイル(.qsf)を見ますとCLOCK_50というピンから50MHzのクロックを供給してもらっているようなのでCLOCK_50に変更したところ意図通りに動作しました。
 
 
・ボタン型スイッチに対応するpinである、KEY[0],KEY[1]は負論理になっているようです。(押されたときに0になります)  LED[7:0]は正論理のようです。

 

 

・サンプル書いてみました。KEY1を押すと1秒ごとにLEDが2進数的に1ずつ加算され、KEY2を押すとLEDに表示されている2進数的な値が0にリセットされます。

 

module UPCOUNTER(

input CLOCK_50,

input [1:0] KEY,

// KEY[0] == RESET ,

// KEY[1] == increment

output reg [7:0] LED

);

 

reg [7:0] counter;

reg [25:0] time_counter;

 

always @( posedge CLOCK_50 ) begin

if ( ~ KEY[0] ) // reset

counter <= 8'h0;

else if ( EN1HZ ) // increment

time_counter <= 26'b0;

else

time_counter <= time_counter + 1'b1;

 

if (EN1HZ && ~ KEY[1])

counter <= counter + 8'h1;

 

LED <= counter;

end

 

assign EN1HZ = (time_counter == 26'd49999999); // 50MHzを分周して1Hzに

 

endmodule

 
 
・4章のSignalTapIIだがp.132で「Add Nodes..」を選ぶように書いてあるのだが、これが選択できません。回路図を描いてないから?
 
参考資料)
SignalTap II エンベデッド・ロジック・アナライザを使用したデザインのデバッグ (PDF)
 
たぶんそういう波形レベルでのデバッグはしばらくやらないと思うのでこれはスルー。
 
・5章 → Nios IIの導入。verilogの勉強をもう少ししてからにしたいのでこれは後回し。
・6章 → Nios II のバスに付いて。Nios IIの導入がまだなのでスルー。
・7章 → Nios II の周辺回路の設計。→ コンピューター将棋で周辺回路を作ることはないと思うのでスルー。
・8章 → メモリコントローラーの設計。SDRAMコントローラーを製作しているみたい。verilogの勉強をもう少ししてから自分でもやってみる。
・9章 → μClinuxの搭載 → 使うことはないだろうからスルー。
 

以上で本書は終わり。

 

残りの課題としては…

 

課題1) verilogのプログラム、もう少し自分で書いてみて勉強する。

課題2) 小さなCPUを自分で設計してみる

課題3) SDRAMコントローラーを設計してみる

課題4) Nios IIの導入

 

という感じ。