Artix-7でLチカ

突然何を始めたんだ??

背景

高校の頃から生物を選択し、学部の頃は大腸菌の遺伝子を組み替えたりDNAで折り紙をしたりと割とWetな道をたどっていたはずなのだが、何の因果かどうやら回路設計に一枚噛む可能性が出てきたので、しばらくFPGA関係のことを調べて環境構築をしていた。マジで意味わからん道に迷い込んでいるな。俺はこの後どうなるんだ?

先人に「まあ個人でやる分にはXilinxのやつがいいかなあ」「ZyboっていうのとArtyってのがあって、ZyboにはArmコアが乗ってる。Artyにはない。まあでも正直どっちでもなんとかなる」「Verilogの勉強には『改訂 入門VerilogHDL記述』がよい」などの話を聞いていたので、とりあえず検索して出てきたArty A7 35Tを購入した。

japan.xilinx.com

値段はそこそこするが、「自腹を切ると覚悟が決まる」という信仰を持っているのでとりあえず自分が遊ぶための分は自腹で買った。

ところで、私はこれまで電子工作をやったことがほぼない。なぜか中学の頃に何かの講座みたいなのではんだ付けをやった記憶があるので多分何かしらやったことがあるのだろう。でも身にはついていない。 私のプログラミングに関するスキルセットはこの記事を読んでいる人は知っている通りで、一応アセンブリの読み書きはできるし、ローレベルプログラミングの知識がある程度ある。また、CPUには興味があったのでnandgameを頭をひねりつつ全クリした。Verilogに関してははとりあえず『入門Verilog HDL記述』を読んだ。それくらいの感じ。

実は週の頭にはArty A7は届いていたのだが、論文のrevisionで忙しかったこと(自分のミスとレビュアーの要求で結構な量の再計算をしていた)と、micro USBのケーブルが家にあると思ったらなかったという二つの理由で先延ばしにしていた。環境構築だけでそこそこ疲れたので金曜日はVivadoをインストールしたあとすぐ寝て、土曜日は昼まで寝た後飯食って漫画読んでたら17時になってたので急いでVivado立ち上げてコード書いてたらこんな時間になった。しかしLチカした動画の時刻を見ると、実際にはブログを書いていた時間の方が長いっぽい。

というわけで今回はズブの素人が購入後Lチカまでにしたことを書いておく。

環境構築まで

とりあえず以下を用意した。

  • Arty A7 35T
  • micro USBケーブル(Arty A7には同梱されていないので注意)
  • Vivadoを動かすためのマシン(今回は折角あるのでWindowsだがLinuxでもいけるっぽい)

続いて、任意の言語において最難関の関門であるところの環境構築を行った。 導入するソフトウェアはVivado HL WebPACK。これは使える基盤が限定されているかわりにライセンスが無料のバージョンらしい。

Xilinxのページでアカウントを作り、Vivado最新版のインストーラをダウンロードしてきたところ、WebPACKを明示的にインストールする選択肢がなかった。 たとえば、以下のページではVivadoを選択したのち、Vivado Design Edition, System Editionと並んで WebPACKが映っている。

www.acri.c.titech.ac.jp

しかしバージョン2020.3にはこのWebPACKの選択肢はなく、手元にライセンスキーがないためそこでいったんやめて少し情報収集をしてみた。 するとフォーラムに似たようなことを聞いている人がいた。状況が少しややこしいので、時系列を意識する必要がある。

  • (2020年6月)最初の人は、明示的にWebPACKと書いてくれていないのが不安だったようで、WebPACKのインストール方法を尋ねている。
  • (一時間後)中の人が来て、「WebPACK版もUnified Installer経由でインストールできる。ライセンスの問題が発生しているなら教えてほしい」と回答している。
  • (その翌日)最初の人が「WebPACKって書いてないから不安だったけどライセンスを要求されてないってことは大丈夫ってことでいいのね」と言ってcloseしている。
  • (2020年10月)30年間Xilinxを使ってきたと名乗る人物が「WebPACKと明記されてないのはさすがに不親切だろう」と苦言を呈している。
  • (数時間後)最初の人が2020.1を使えば明示的にWebPACK版をインストールできる、とコメントしている。
  • (数時間後)苦言を呈した人が「確かにそのバージョンなら大丈夫だった」とコメントしている。
  • (2021年4月)別の人が来て、2020.3にはWebPACK版の選択肢がないんだけど、と質問している。
  • (数時間後)上と同じ人が、2020.1ならWebPACK版の選択肢がある、とコメントしている。
  • その後進展はなし。

forums.xilinx.com

確かに2020.3にはWebPACKの選択肢がない。以下のページでもこれに関する言及があり、2020.2ならWebPACKをインストールできる、と書かれている。

www.comp.sd.keio.ac.jp

とりあえず安全側に倒して2020.2版を使ってインストールした。数十GBくらいの容量を要求される。結構時間がかかる。 待ってる間に上のリンク先の記事を読んでいた。とりあえず動かす、というところまでに必要なことがほぼすべて書かれており、非常にありがたい。

github.com

ここまではインストール後に済ませておく必要がある。

Vivadoでコードを書く

さてVivadoを起動だ。とりあえず、『FPGAプログラミング大全』の第二章をなぞろうと思う。

さて、Verilogの部分は同じでよいが、Constraintはボードに依存する。本ではCora/Zyboを使っているので、写経では対応できない。

デフォルトのConstraintファイルはDigilent社のレポジトリにある。すべてコメントアウトされているので、必要な部分のコメントを外す。

github.com

今回は以下のようにした。Lチカだけなら、クロックと、LED、そしてボタンだけあればとりあえず足りる。

## This file is a general .xdc for the Arty A7-35 Rev. D
## To use it in a project:
## - uncomment the lines corresponding to used pins
## - rename the used ports (in each line, after get_ports) according to the top level signal names in the project

## Clock signal
set_property -dict { PACKAGE_PIN E3    IOSTANDARD LVCMOS33 } [get_ports { CLK100MHZ }]; #IO_L12P_T1_MRCC_35 Sch=gclk[100]
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports { CLK100MHZ }];

## RGB LEDs
set_property -dict { PACKAGE_PIN E1    IOSTANDARD LVCMOS33 } [get_ports { LED_RGB[2] }]; #IO_L18N_T2_35 Sch=led0_b
set_property -dict { PACKAGE_PIN F6    IOSTANDARD LVCMOS33 } [get_ports { LED_RGB[1] }]; #IO_L19N_T3_VREF_35 Sch=led0_g
set_property -dict { PACKAGE_PIN G6    IOSTANDARD LVCMOS33 } [get_ports { LED_RGB[0] }]; #IO_L19P_T3_35 Sch=led0_r

## Buttons
set_property -dict { PACKAGE_PIN D9    IOSTANDARD LVCMOS33 } [get_ports { RST }]; #IO_L6N_T0_VREF_16 Sch=btn[0]

名前の部分はデフォルトから変更している。get_portsの部分だ。最初、クロックって何Hzくらい出てるんだ? と思ってリファレンスを見に行ってたが、もう一度このConstraintファイルを見て自分の馬鹿さ加減に驚いた。クロックシグナルの名前が CLK100MHZ になっている。まず読みましょう。

コードとその後に関しては本の通りで動く。一つだけ、本にはジャンパピン設定を済ませておきましょうと書かれているが、Arty A7の場合はJTAGによるconfigurationを開始した場合はジャンパピンの状態によらずconfigurationが始まるらしい。お手軽。

本とか

ちなみにこのブログは特に広告収入とかはもらっていません。

  • 『入門Verilog HDL記述』小林優 CQ出版社
    • 先人にお勧めされたのでとりあえず半日かけて第一部、第二部を読み、Verilog HDLの雰囲気だけ知った。どんな言語も書かずに知れるのは雰囲気までだ。いくらかコードを読み書きしてから戻ってこようと思う。
  • 『FPGAプログラミング大全』小林優 秀和システム
    • おや、著者同じ人なのか。こちらではCora/Zyboがお勧めされているが、これを見るより先にArty A7を買ってしまったのでまあ仕方ない。むしろちょっと調べないといけない分だけ身になる可能性がある。Arty A7には画面出力がないので、やるならPmod VGAを購入する必要がある。とりあえず今は画面出力の部分は飛ばしながら様子見をしている。

ほかにもいくつか買って、積んでいる。読んだら読んだときに書くかも。