FPGA ことはじめ
経緯
大学の課題で「FPGA を使ってデジタル時計を作る」というものが出たのでそのときに試行錯誤した記録を適当に残しておこうと思います。
使った FPGA 開発ボードなど
まずは FPGA 開発ボードを買ってくる必要があります。
kivantium プロの記事 に載っていた Papilio One 500K を買おうと思って秋月に行ったのですが売り切れていたので仕方なく Cmod S6 Kit というものを買いました。web で検索してもこのボードに関する日本語な記事はほとんど出てこなかったのできちんと使えるのか不安でしたが、結果としてはあまり苦労せずにプログラムを書き込んで動かすことができました。専用のソフトウェアを用いて USB 経由で書き込めるので手軽に FPGA で遊べて良いと思います。
あとは適当にブレッドボードとか 7 セグメントの表示器とか抵抗とかを買ってつなげました。ボタンは面倒だったので Cmod S6 Kit についていたものを使いました。チャタリング対策をどこかでしておかないとボタンの挙動がおかしくなるのですが面倒だったのでなにも対策しませんでした。
実際に配線などをするには digilent のウェブサイトに載っている 基板の概要 と 基板の配線図 を頑張って読み解く必要があります。
開発環境のインストール
kivantium プロの記事 を参考にしました。 http://cellspe.matrix.jp/parallella/inst_ise.html に載っている手順に従って ISE Design Suite をインストールしてガチャガチャしました。
ISE Design Suite をインストールしただけでは USB 経由でボードに書き込みをすることはできません。Gentoo Wiki に載っている適当な記事 を参考にしてプラグインなどを入れておくと iMPACT から直接書き込みを実行できるようになります。
けっこう前だったので細かいことは忘れました……。
VHDL を書く
基本文法
kivantium プロが学科 slack にあげてくれた資料を見て適当に雰囲気をつかみました。 ここに上げておくといろいろダメな気がするのでどうにかしてその資料を手に入れるかネットで入門記事を漁るかしてください……。
テスト
levelfour 先輩の記事 を参考に GHDL を入れてテストを書いて手で回しました。
成果物
github にあげました。あとは察してください。面倒なので……。ちなみに元の課題では「1 秒間隔で DP などが点滅」という指定があったのですが頭が悪かったので 2 秒間隔で点滅するようなコードになっています。
実際に動作しているところを撮った動画はどこかに消えてしまいました。