FPGAとかいうやつを触ってみた

Twitter でちょっと話題になっていた「作ろう!CPU」という,FPGA の上で簡単な CPU を作るという本が 1 週間くらい前に届いたのでちょっと FPGA で遊んでみるなど (こういう中途半端な知識で書いてる入門記事って圧倒的 Web のノイズなんだよな,どうでもいいけど)。

まだ全部読んでいないけど,現時点で思うのはハードウェアがなくてもいいと言ってはいるけどやはりないとつまらないと思う。 シミュレーションの波形眺めたり生成される謎ファイルを眺めるだけというのは……。 あと論理回路の解説部分は大学でやった内容のサブセットという感じだったので特につまずくことなく読み進められた。 あの授業の前に買っていれば実際に動かせたりして面白かったんだろうと思ったけれど, その頃はまだこの本が出版されていないので…。 全部読んだら改めて感想文を書こうと思う。

本が届いてから FPGA 評価ボードというのを買った。何を選べばいいのか分からなかったので 先の本の著者が薦めていた Arty-S7-50 というやつを買った。秋月電子で 12,830 円(税込)。

で動かすの自体はとても簡単で,「こんなに簡単でいいの?」という感じだった。 まあ本のサポートページがセットアップの方法を手取り足取り教えてくれたからだけど。

ということで適当に L チカしてみた。本に出てくる L チカはクロック使っていたりしてもっと高度なものだけど。

(3 色の LED をスイッチでつけたり消したりする)

System Verilog のソースコード(って呼ぶのかしらん?)はこんな感じになった。 雰囲気で書いているので後で見たらこれすらクソコードに見えそう。

module top(
  input  logic [3:0]sw,
  output logic led0_r,
  output logic led0_g,
  output logic led0_b
);
  assign led0_r = sw[0];
  assign led0_g = sw[1];
  assign led0_b = sw[2];
endmodule

あと Digilent の GitHub の このリポジトリから, 買ったハードウェアに合う制約ファイルを落としてきてプロジェクトに追加する。 で,スイッチと 3 色の LED に対応する部分のコメントをはずす。

スイッチの状態を取ったり LED をつけたりするには,制約ファイルに書いてある名前でトップモジュールの input/output に追加してやればいいっぽい。

あとは論理合成したりいろいろやって,書き込んでスイッチをカチャカチャやると LED がついたり消えたりする。 LED を自分でつけた気分になったのは小学生のときに適当に電池につないで遊んでいたとき以来なので 面白かった(新しいおもちゃが手に入って良かった)。

しかしこの LED,やけに眩しいけどやり方合ってるんだろうか(起動時に光るのはもっとマイルドな光なので)。