みなさんこんにちは.4回生の川原です.このSSSRC Advent calendar 2021も13日目となり折り返し地点となりました.ここまで読んでくださった皆さんありがとうございます.おかげさまで会社・広報ジャンルでのブログランキングが2桁に乗りました.引き続き後半戦をお楽しみください.

 さて,折り返し地点で大事な場面ですが今回自分はFPGA(GWIN-UV4LQ144C6/I5)の開発ボード(2021/12/13現在在庫切れ)をいじってみて技術的ではなくただ単に反省を書こうと思います.積読をついついしてしまう自分にとってInterface2021年12月号は久しぶりに読む+実施することをやったものでありますが,反省ごとがあるのでまとめていきます.

 

 余談ですが,積読については自分は積むだけで知識が蓄積されるという教えの信者のため,本はいわば外付けHDDのようなものだと思っています.(すぐに知識を取り出せるわけではないためSSDには劣りますね.)

 

 

FPGAとは

 FPGAはField Programmable Gate Arrayの頭文字をとったもので,内部に存在する論理回路を変更することで目的の論理回路を構成するシステムです.FPGAデバイスの中に論理回路が多数存在していて,その中でどれを使うかを取捨選択する感じですね.

 このFPGAのメリットとしてはマイコンを補うというのがあります.マイコンと組み合わせることによってマイコンの得意ではない部分や難しい処理などを補ってくれます.詳しくは専門書などを読んでいただけるとよくわかるかと思います.

 実際FPGAは2足歩行ロボットなどいろいろな分野で使用されていて,衛星の分野としても革新的衛星1号でより省電力化の検証実験を行っているなどされています.

 プログラミング言語はVHDL,Verilog HDL,SystemVerilogがメインとして使われています.

 

論理回路とは

 1,0といったデジタル信号を処理して計算や記憶を行う回路のことです.具体的にNOTゲート,ORゲート,ANDゲート,XORゲート,NORゲート,NANDゲートなど存在していてこれらを組み合わせることで構成されていきます.論理演算工学という授業があるのですがそこで扱う内容であり,航空でありながら取った自分はパズルみたいだと面白がっていた記憶があります.

 余談ですがORゲートは論理和演算のことを指し,ゲートに入ってきたもののうちいずれかが正であれば正と返します.そのため,英語で”Trick or Treat”というと「『おかしをくれる』か『いたずらされる』の一方をくらう」のことを指しますが,論理回路的には「『おかしをくれる』か『いたずらされる』のうち一つ以上をくらう」ことになります.英語の意味でとらえるためには”Trick XOR Treat”ですね.(このことを工学以外の人に言ったら,何言っているの?と本気で引かれて心配されたのでいう人を選びましょう.あと季節も選びましょう.)

 

 

本題

 さてここからが本題のFPGAをいじってみての反省に移りたいと思います.自分がもっとも言いたいことは「急がば回れ」です.

 今回使用しているInterface 12月号ですが,この中にサンプルコードが入っていて,コードを打ち込むことでFPGAはきちんと動きます.また,基本的な内容のサンプルコードのため応用を利かせることも可能でしょう.

 しかしながら本を写すだけでは理解は深まりません.Cやpythonみたいに以前触ったことがあるコードおよびそれを派生した言語の場合は理解できることもありますが,今回使用する言語はVerilog HDLという若干毛色の異なるものです.コードを書き写す際にこのコードは何を意味するのかをある程度理解してから書いていきましょう.

 というのも実際に自分は初めにLチカをやっていたのですが,次にやったストップウォッチの実装の際にコード大体C言語と一緒だろうと初めにとりあえず書き写す作業をしてしまい,のちに何がどこに対応しているのかを見返す必要が出てきて入門書に戻りました.この時コードを読み解く作業はコードを理解しながら書く行動より時間がかかりますし進捗が目に見えづらくなるため精神的にきつくつらいものでした.

 今回読み解く必要があったのはコンパイルが通ったものの予想外の挙動を示したものであるからでした.(ストップウォッチの実装の際に1分の桁と1秒の桁が表示されないという挙動)コンパイルエラーをはいてくれればまだ修正は楽だったのですが,打ち間違いの箇所に気づくのに結構時間を食われて萎えてしまいその日の作業を切り上げてしまいました.

 このようにプログラムを書く際にコードを理解してから書いた方が後々デバック作業がしやすくなりますが,コメントを残すこともデバック作業として楽になりますね.というのも学生団体という性質上自分が書いたものを他の人が変更を加える可能性があるというのももちろんありますが,自分自身が書いたものを見返す際にやっぱりコメントがあると読みやすくデバックしやすいなとコードを改善しながら思っていた次第です.

 

 CanSatの時にCとかPythonとかを使用していて,その時には他のブログで書かれているコードを写してからいじっていましたがその時と同じような経験を味わってしまったFPGAの勉強の体験記でした.

 本当は「FPGAでUARTを作ってマイコンと組み合わせてみたよ!」とか書きたかったのですが,それは未来の自分が書いてくれるだろうと託しておきます.

 

 ここまでなんか当たり前だけど大事だなっていうありきたりなことを書いてしまったので最後に自分の趣味を出していきたいと思います.自分は以前のブログにも書きましたがボードゲームが好きなので,BGA(Board Game Arena)でおすすめのアナログゲームを紹介しておしまいにしたいと思います.(タイトルにもORと書いてますし)このゲームは単純だけど面白いのでお勧めですよ.

 

 

ラッキーナンバー(Lucky Numbers)

  •   タイルには1~20までのタイルが人数分存在し,裏向きに伏せられている.
  •   ボードは4×4マスのボードで初めにタイルを4枚左上から対角線上に昇順に置く.
  •   プレイヤーが順番にタイルをオープンするか既にオープンになっているタイルを引く.
  •   ボード上に引いたタイルを配置もしくは交換する.
  •   タイルの配置の仕方は左から右へ昇順かつ上から下への昇順.
  •   4×4マスのボードをタイルで先に埋めた人の勝ち.