Verilog HDLを使ってみた

最近執筆のためにいろいろな言語を触っていて、なんだかもうCPUの上で動く言語は結局のところ最終的には機械語の列をCPUが実行しているわけなのでどれもこれも大差ないなぁと感じるようになってきて、なんかもっと根本的に新しい体験のできる言語はないものか〜と思っていたわけです。

そうか、FPGAか! (cf. DE0でFPGAによるVGA出力 - きしだのはてな)

というわけで早速きしださんの真似をしてDE0と同じ参考書を買いました。いや、買うべきでした。ちょっと安いからといってDE0-nanoを買ってしまいました。おかげで載ってるFPGAも、LEDやスイッチがどのピンにつながっているのかも全部違う!まあ、それはちょっと調べればわかることだからいいのだけども、7セグLEDもVGA出力もシリアルポートもついていないところが痛い。僕がやりたいことはFPGAで遊ぶことであって、インターフェイスを自作することではないのだった。というわけで今から始める人にはnanoの方が良い明確な理由がなければnanoを買わないことをおすすめしておきます。

Terasic - DE Main Boards - Cyclone - DE0-Nano Development and Education Boardマニュアル、ADC(アナログ・デジタル変換)と加速度センサが付いててサイズが小さいのが長所?

さて、待ちに待った週末、大雨で外に出られないとの予報なので1日FPGAで遊ぼう、とQuartus II Web Editionの最新版をAlteraのサイトからダウンロードし始めました。結局ダウンロード終わって開発環境のセットアップが終わるまで4時間掛かりました。昨晩やっとけ自分。

ピンアサインとかの慣れない工程があるので、まずは参考書の最初の課題を愚直にやる。無事動いた。めでたしめでたし。


ピンアサインの時に表示されるこの図は何を表現しているのか…なんか面白げだが…

フリップフロップ - Wikipediaを(regとかを使わずに)実装して見ることにした。

https://gist.github.com/anonymous/5325489

どうせならばこのコードの中のRSフリップフロップの部分を別モジュールに切り出したい、と思ったのだけども、複数のモジュールから呼び出すことのできる関数を作る方法がわからず、NANDの定義が2箇所になってしまった。うーむ、NANDもモジュールとして定義すればよかったのか?

https://gist.github.com/anonymous/5325564

今後もっと複雑なものを作る場合に、入出力がボタン6個とLED8個ではさすがに残念なのでPCからデータを入れたり出したりできるようにしたいなと思うわけですが、どうするのがいいんでしょうねぇ。Arduino互換基盤用にFT232RL USBシリアル変換基板が手元にあるのだけども、これのジャンパスイッチを変えて3.3Vで出力するようにした上でDE0-nanoの適当な汎用IOのピンにつないで、それでやりとりをすればいいんでしょうか…