公開日:2021/01/30
title.png

15th Season


シーズン15

 ここから始まるシーズン15は、FPGAボードを使って大きめな論理回路を作るテーマを連続して扱います。
 まず今回の第一回目で安価なFPGAボードを購入し、設計環境を整えます。
 第二回目では、導入したFPGAボードの動作確認用に作成した、ごく小規模な論理回路(ハードウェアによるLチカ)の設計方法について解説したいと思います。
 第三回目以降でいよいよ本題に入り、少しづつ回路を作りながら最終的にはマイコン(MCU;Micro Controller Unit)を完成させたいと思います。


 レギュラーのArduinoを使った電子工作記事に割り込みながら、少しづつ進めて行きたいと思います。本HPでの主眼はハードウェア(論理回路)設計の考え方をお伝えすることです。お付き合いいただければ幸いです。


#15-1 FPGAボードを買ってみた

 これまでArduinoの周辺にディスクリート部品を使って回路を作ってきた訳だけど、もう少し本格的な論理回路を作って見たいと思ってしまいました。といって、74xxみたいな標準ロジックICで論理回路を作るのはさすがにしんどいし、もっと規模の大きい論理回路を作りたいのです。
 世の中にはFPGA(Field Programmable Gate Array)というチップが有りまして、今回はFPGAボードを導入するテーマとなります。

FPGAボード

 購入したのは、SipeedのLichee Tang PrimerというFPGAボードです(下図)。商品名は長いので、本HPでは以降、「FPGAボード」と称します。

a151_fpga.jpg

 このボードには、Anlogic社(中国)のEG4S20BG256というFPGAチップと、USB⇔JTAGインターフェイスチップ、コンフィギュレーション用のシリアルFlashチップ、降圧レギュレータなどが載っています。

  Anlogic EG4S20BG256データシートを検索(別ウインドウが開きます)

 上のリンクから検索すると判りますが、基本、サポートは中国語なのですよ。EG4S20BG256の技術情報を漁って行くと、しばしば中国語の壁に阻まれます。何とか読解可能な英語のドキュメントを探して技術情報を得るしかないのですが、どうも、痒いところに手が届かないというか、いや、そこまでも到達できないな……。
 ほとんどが表面的な、「こんなマクロを搭載してます」、「こうしたらマクロをインスタンス出来ます」、みたいな説明止まりで、その先が無い。

 実は、内部にSDRAMも持っているみたいで、高速・大容量のRAMを使えるはずなのだけど、リフレッシュレートとか、CASレイテンシとか、SDRAMを使うのに必要な情報が全く出てこない。……まだ使い始めて間もないので、探し方が悪いのかもしれないけど、肝心な仕様は中国語のドキュメントに記載されているのかもしれないし、その辺りは不明。

 昔はFPGAなんて、ものすごく高価なチップで、ちょっとまともな論理規模だと数10万円とか、更にそれを使うためのソフトウェアにも何万円とか、とても手が出せなかったのだけど、最近ではずいぶんと安く手に入る様です。今回の購入価格はこちらをご覧ください


 文句はさておき、事前調査で「これは良さそう」と思った特徴を上げておきましょう(↓)。

 技術情報が不足している不安はあったものの、上の様なProsに魅せられて購入してしまいましたm(1__)m。

届いた

 以下の様な小さなプラスティックケースに入っていました。

a151_fpgapkg.jpg


 サイズ感が解るかどうか、ESP32ボードと並べてみました(↓)。

a151_fpgaesp.jpg

 ESP32もそうなのですが、幅が広いのでブレッドボードに挿すと穴がほとんど隠れてしまいます。今回のFPGAボードは更に長さ方向も長くなっているのでひとしおです。ただ、一般的なFPGAボードに比べると、ずっと小さいです。
 片側20ピン、両側で40ピンのピンヘッダを半田付けできるのですが、よく見ると、ピンヘッダ用のスルーホールの間に、端面スルーホール(基板の縁にある半円のスルーホール)が、倍ピッチで並んでいます。ここにはピンヘッダとは異なる端子が引き出されているので、こいつを使うとさらに倍の計80ピンを使って試作することが出来るみたいです。

 事前調査で、「USBコネクタが壊れやすい(fragile)ので注意」という記載が有ったので確認したところ、確かに危ういです(下図)。

a151_fpgausb.jpg

 写真ではわかり難いですが、USBコネクタの下にスルーホールが付いています。本当は、このスルーホールにUSBコネクタの爪の部分を差し込んで、半田付けすべきなのです。ところが、わざわざ、USBコネクタの爪を折り曲げてあって、スルーホールに通していません。
 本来は、スルーホールに通した爪が半田付けされて、コネクタとボードがしっかりと接合されるのですが、このFPGAボードはそうなっていないので、ボード表面の半田だけで固定されています。
 電子回路の基板は、絶縁体のボードの上に銅の薄い板を接着剤で張り付けて回路パターンをエッチングしているだけなので、ボードと金属板の接合強度はそれほど強くありません。そこに半田付けされているだけなので、不用意に力をかけるとベロっと剥がれてUSBコネクタが外れてしまいます。

 ああ、何だか既視感……。同じように壊れてしまったArduino Microボードの無残な姿はこちら……。

 MicroのUSBコネクタが壊れた時も、無理な力なんて、かけていません(1;_T)!恐らく、普通に使っている間に少しづつ蓄積したダメージが、耐えきれなくなってポロっと剥がれてしまったのだと思います。今回のFPGAボードも、そんなに長くは持たないな……。

 ちなみに、スルーホールにUSBコネクタの爪を通さなかった理由は明らかで、裏面にSDカードソケットが実装してあるためです(上図中央)。爪をスルーホールに通してしまうと、ソケットと干渉してSDカードを挿入できなくなってしまうのでしょう。

 設計ミス、なのか、はたまた、製品の寿命を短くすることで何回もリピート購入させようとするあさましい根性なのか?解り兼ねます。

ソフトウェアのインストール

 SipeedのHPから、「Getting Started」に記載されたドキュメント(英語)に従って、ソフトウェアをインストールします。以下、実行した内容のサマリです。

 さすがは中華企業ですね、悪い意味で。いろいろと問題が山積みです。でも、何とか、環境の立ち上げは完了しました。

FPGAボード(ハードウェア)でLチカ

 では、FPGAボードを使って、「Lチカ」、してみたいと思います。Arduinoのソフトウェアで言うと、以下の様な感じでLEDをピカピカ光らせたいと思います。

  void setup (void)
  {
    pinMode (LED_BUILTIN, OUTPUT);
  }
  void loop (void)
  {
    digitalWrite (LED_BUILTIN, HIGH);
    delay (150);
    digitalWrite (LED_BUILTIN, LOW);
    delay (150);
    digitalWrite (LED_BUILTIN, HIGH);
    delay (150);
    digitalWrite (LED_BUILTIN, LOW);
    delay (550);
  }


 どんな光り方か、想像つきますか?わからなかったら、UNO等へコンパイル&転送して、確かめてみてくださいね。「2回短く光って、長めの消灯」これを1秒周期で繰り返します。
 回路の作り方については、次回、解説したいと思っていますので、今回はTD IDEを使ってFPGAボードに回路を書き込み、動作を確認するだけに留めます。では、手順を追って見て行きましょう。


 書き込みが終了すると、FPGAボードのオンボードLEDが赤く点滅するはずです。「2回短く光って、長めの消灯」これを1秒周期で繰り返しです。ストップウォッチは使いませんでしたが、30セット点滅する時間を測定したところ、丁度30秒でした。設計値通り、約1秒間隔で点滅しています。OKでしょう。


 実験中の様子を動画にしておきました。



 FPGAボードには、Arduino UNOに於けるATmega328の様なMCUが載っていませんので、上動画のLチカは全てハードウェア(論理回路)で制御しています(回路の解説は次回)。

シミュレーション環境の立ち上げ

 正直、今回程度の回路では、論理シミュレーションなんて必要ないのですが、今後、もっと大きな回路を作った時にはシミュレーションが必須となりますので、Verilogのシミュレーション環境も立ち上げておこうと思います。
 今回使うのは、Icarus Verilog(以下、iverilogと呼びます)というオープンソースのVerilogシミュレータです。以下のリンクから探してダウンロードしてください。

  Windows版iverilogを検索(別ウインドウが開きます)

 Windowsのインストーラになっているので、実行して手順に従ってインストールしてください。インストール先を問い合わせてくる画面の直前に、「半角スペースを含むパスにインストールすると動作しない」との警告が出ていますので、見落とさないように。

※Windowsの「Program Files」ディレクトリにインストールしてしまうと、パス名に半角スペースを含むため、動作しません。

 また、インストーラの最後に、「Windowsの環境変数にパスを通しますか?」と聞いてくるので、これもYesにした方が良いでしょう。
 後は、WindowsのPowerShellなり、コマンドウインドウなりを開いて、iverilog.exeを手動で実行することになります。GUIにはなっていませんのでご注意ください。本ページでは、今回もCygwinを使います(↓)。

  Cygwinのシェル(tcsh)でパスを通す:
  set path=( $path /cygdrive/c/iverilog/bin )
  set path=( $path /cygdrive/c/iverilog/gtkwave/bin )


※インストールディレクトリを「C:\iverilog」とした場合の例です。

 前節で作ったblink.vを組み込んで、テストするためのテストベンチをtest_blink.vと言うファイル名で作成しました(次回解説予定)。これらのファイルを使って、シミュレーションを実行してみましょう。

  実験サンプル:【 】内はCygwinシェルウインドウからの実行コマンド
  【iverilog test_blink.v blink.v】

 上の処理がエラー無く終了すると、a.outと言うファイルが出来ています。a.outと見ると、そのまま実行したくなりますが、実行できません。どうやら、WindowsやCygwinの実行ファイルでは無い様です。
 中身を覗いてみたら、何とテキストデータでした。中間コードか何か?先頭行には以下の決まり文句が。

  #! /c/iverilog/bin/vvp
   :


 これ(↑)、UNIX系shellの決まり文句で、実行属性の付いたテキストファイルの先頭行にこの記述「#!」があると、その後ろに記述されたコマンドでそのファイルを実行しなさい、って指示(shellに対する指示)になります。惜しいことに、Cygwinの実行環境だと、Windowsの「C:」ドライブは、「/cygdrive/c/」に見えているので、ちょっとだけパスが違っていて、実行できなかったようです。

 と、言う事で、シミュレーションの実行はvvpコマンドを使います。

  【vvp a.out】
  VCD info: dumpfile test.vcd opened for output.

 test_blink.vの中で、VCD(Value Change Dump)ファイルを出力しているので、メッセージが出ましたが、それが無ければ、何もメッセージは出ません。……動いているのやら、どうなのやら(1^^;)?
 test_blink.vの中で指定したtest.vcdというファイルは出来ていたので、シミュレーションは実行したみたいです。では、test.vcdを開いて、シミュレーション波形を確認してみましょう。

  【gtkwave test.vcd】
  GTKWave Analyzer v3.3.100 (w)1999-2019 BSI
  [0] start time.
  [5100] end time.

 このコマンド(↑)は、iverilogインストールファイルに含まれているGTKWaveというソフトウェアで、シミュレーション波形を表示するためのGUIコマンドです。GUIウインドウが開いたはずなので、そちらで作業を続けます。

a151_gtkwv.png

 左側の枠内で、デザインの中のモジュール階層を辿ると、その下の枠にモジュール内の信号名が出てくるので、これを選択(ダブルクリックなど)すると、右側の波形表示部に表示されます。

 右側の波形表示で、上から3番目の信号がLED_BUILTINとなっていて、LOWでLED点灯、HIGHで消灯となります。「2回短く光って、長めの消灯」を繰り返していることをシミュレーションでも確認できました。
 実回路が動いたことを知っているので、順番が逆となってしまいましたが……(1^ー^)。

※秒オーダのシミュレーションを実行するのは時間もかかるし、波形データも莫大になってしまうので、上の例では点滅周期を1秒 → 100クロック(約4μs)に縮退させています(詳細は次回)。

 確認が済んだら、ウインドウを閉じてしまって良いです。
 もし、回路記述のデバッグ中であれば、「回路を修正して→再シミュレーション→波形確認」というイタレーションが発生すると思います。GTKWaveで波形ファイル(test.vcd)を開きっぱなしにしておいても、再シミュレーションは可能なので、デバッグ中は立ち上げっ放しにできます。
 ウインドウ上部、メニューバーの下にあるボタンバーで「Reloadボタン」を押すと、再シミュレーションした波形ファイルを読み込み直してくれるので、便利です。
 他にも、表示した信号名など作業状態をセーブする機能があるので、ウインドウを閉じで翌日起動し直した時にも、作業状態を回復することが出来ます。GUIなので、後は使ってみてください。

今回のお買い物

 今回のお買い物は、以下の通りです。

 Amazonの「置き配」で、集合住宅の宅配ボックスに届きました。エアクッション付きの大きめな袋に入っていました。上で示した小さいプラスティックケースが1つだけ。

 この値段なので、お手軽に購入できる点は良いのですが、正直、「お勧めできません」。多少値が張っても、有名企業(せめて英語圏)のFPGAボードを購入することをお勧めします(自分は購入しておいて、説得力無いけど……)。

  お勧めできない理由:


 うっかり購入してしまったので、壊れるまでは使ってみますw(1^^;)w。ただ、もし壊れても、リピートはしないと思います……。


後日のアップデート

 TD IDEのライセンスが2021/02/28付で切れてしまい、2021/03/01朝、TD IDEは起動はするが論理合成以降に進めない状態。

  TD IDEで「Processメニュー ⇒ Run」を実行すると:
  RUN-8418 ERROR: License expired!

 SipeedのTD IDEダウンロードページに行っても、新しいライセンスファイル(Anlogic.lic)は見当たらない。どうなってるの?普通、ライセンス切れる前に新しいライセンスを提供する物でしょ?

 現在、<support@sipeed.com>へ問い合わせ中。現在までのところ、音沙汰無し。

 購入からたったの2か月。FPGAボードが壊れる前に、使うのに必要なソフトウェアが使えなくなってごみと化すとか、あり得ません。これからご購入をお考えの方には、もう一度明記しておきます、このFPGAボード「Sipeed Lichee Tang Primer」は、お勧めしません


【2021/03/01 21時】
 現時点で、今朝<support@sipeed.com>宛てに送っておいたメールへの返答は無し。

 しかし、以下ページの更新日付が本日(2021/03/01)になっていることに気が付き、覗いたところ新しいAnlogic_20220130.licを発見(ファイル日付は、2021/03/01 10:33:25)。

  TANG/Premier/IDE

サポートページからリンクされているのは「TANG/Primer/IDE」なので、少しパスが違います。

 こちらに従ってライセンスファイルを更新したところ、無事コンパイル(論理合成・配置配線)ができるようになりました。……次の更新時期は2022/01/30みたいです。

 わざわざサポートにメールしているのだから、返信で「新しいライセンスファイルはここにありますよ」って、教えてくれれば良いものを、何の返答も無しっていうのがSipeedのサポートらしいです。初めから期待はしていなかったし、必要な物は入手できたので、良き。

更に後日のアップデート

 FPGAボード(Sipeed Lichee Tang Primer)へ、デザインを書き込むのに必須となる、TD IDEというソフトウェアは、AnlogicというFPGAチップメーカ(中華企業)のライセンスファイルが必要です。

【2023/06/12】
 「#26-3 Moscoviumのスケールダウン」の執筆中(2023/06/06)に、そのライセンスが切れました。

 FPGAボードを販売したSipeed社のサポート<support@sipeed.com>に連絡して、新しいライセンスファイルを入手できたのですが、他に老舗のFPGAチップメーカで、こんな塩対応しているメーカって、あるのでしょうか?
 ライセンスが切れているのに、こちらからメールしない限り、新しいライセンスファイルが更新されないのですよ!「中華品質」に加えて、「中華サポート」って事でしょうか?ちなみに、Sipeed社も、中華企業。

 今回入手したライセンスの有効期限は、2024/03/10です。また来年、新しいライセンスを入手しないと、FPGAボードを使い続けることができません。

 もう耐えられないな……。

現在(2024/03/30)の状況upd

 Anlogicライセンスファイルの期限(2023/03/10)が切れて、20日ほどが経過したので、FPGAボード(Sipeed Lichee Tang Primer)のライセンスファイルを確認してみましたが、本日(2024/03/30)時点では、新しいライセンスファイルはアップロードされていませんでした。

 中華「糞」サポート確定、ですね。

 これからFPGAボードを入手して、活用しようとする皆様へは、「非」中華製のFPGAボードを強く推奨いたします。以下記事などを参照の上、良く良く吟味してください。

  「#26-6 まともなFPGAボードを買ってみた

a266_cmoda7.jpg

 当方、上記事の通り、米国製のFPGAボード(Cmod A7ボード)へ乗り換え済みですので、中華FPGAが使えなくなった所で、屁でもございませんv(1^^)v。快適です、お勧め。

※FPGAボードだけではなく、長く安心して使いたいお買い物は、「非」中華製を推奨いたします。


btn_arduino.png

btn_prev.png btn_next.png

home