公開日:2023/08/19
title.png

26th Season


#26-9 まともなFPGAボードのLチカ

 「#15-1 FPGAボードを買ってみた」より、使い続けてきたFPGAボード(Sipeed Lichee Tang Primer)ですが、FPGAチップAnlogic EG4S20の開発ツールであるTD IDEのライセンスが定期的に切れます。本来、Anlogic社ないしは、FPGAボード販売元のSipeed社が、ライセンスの切れる前に新しい更新ライセンスを発行すべきです。
 ところが、そんな簡単なサポートですら、まともにできないのが中華企業なのです。こちらで再三報告している様に、ライセンスが切れる度に、こちらからサポートに連絡しないと、ライセンスが更新されません。
 こんな低水準な中華サポートを続けるAnlogic社にも、Sipeed社にも、長い未来があるとは思えないし、先行きも不安です。いつ、会社が無くなってサポートが打ち切られるのやら……。

 いい加減ウンザリしたので、まともな(非中華製)かつ、最新のXilinx Artix-7 FPGAボードに乗り換えるんだ〜、というテーマです。
 前回、FPGAボード(Cmod A7)のVivado開発環境を使って新規プロジェクトを作成しました。今回は、シミュレーションと、実際のFPGAボードで回路を動作させてみようと思います。

シミュレーションしてみよう

 Primerボードの開発環境であるTD IDEでは、シミュレーションを実行することができなかったので、別途フリーのVerilogシミュレータであるiverilogをインストールして、シミュレーションを実行していました。

 Vivadoには、論理シミュレータが内蔵されているので、統合環境の中でシミュレーションまで実行可能です。早速、シミュレーションで動作を確認しておきましょう。

 今回のLチカ回路は、約1秒周期でチカチカ光ります。LEDの点滅サイクルは、

 なので、まじめにシミュレーションしようとすると、1秒以上の長い時間をシミュレーションしなくてはなりません。シミュレーションは非常に時間のかかる処理ですので、そんなに長い時間のシミュレーションは実行したくない、と言うのが実情です。

 Lチカ回路(blinkv_fsm.v)には、「SIMULATION」というマクロをデファイン(`define)しておくことで、シミュレーション実行時にタイマのオーバフロウ時間を短縮して、短時間のシミュレーションを可能とする記述が入っています(以下コード)。

  `ifdef SIMULATION
  parameter [23:0] TPRD_S=24'd15 - 24'd1;
  parameter [23:0] TPRD_L=24'd55 - 24'd1;
  `else // SIMULATION
  parameter [23:0] F_CLK_KHZ=24'd12_000;  // fclk=12MHz
  parameter [23:0] TPRD_S=24'd150*F_CLK_KHZ - 24'h1;  // 150ms for fclk
  parameter [23:0] TPRD_L=24'd550*F_CLK_KHZ - 24'h1;  // 550ms for fclk
  `endif // SIMULATION


 上のコードでは、クロック周波数12MHzで150msを計測するのに必要なタイマカウント数をTPRD_S、同550msをTPRD_Lに設定しています。マクロSIMULATIONが設定されると、各々、15クロックと55クロックに短縮されるようになっているので、短時間のシミュレーションで動作を確認することができる仕組みです。

 ただ、もし、FPGAボードに書き込む時にSIMULATIONマクロを設定したままにしてしまうと、点滅周期が早すぎて、人間の目では暗く光りっぱなしている様にしか見えなくなってしまいます。シミュレーションする時だけ、SIMULATIONマクロを設定しておかなくてはなりません。

a269_simdef.png

 これで、シミュレーションを実行する時だけ、「`define SIMULATION」された状態で、テストベンチとRTLがコンパイルされます。

 Flow Navigatorサブウインドウから、「SIMULATION ⇒ Run Simulation ⇒ Run Behavioral Simulation」を実行しましょう。

a269_simwav.png

 なお個人的には、Vivadoの波形表示ツールは使い難いと感じました(※)。普通にVerilogの$dumpfile()システムタスクでVCDファイルを出力できるので、今まで通り、iverilogと一緒にインストールされたGTKWaveで波形表示してデバッグしようと思います。

※操作方法など、好みの問題です。Vivadoの波形表示ツールが使いやすいと感じるなら、外部のツール(GTKWave)が必要なくなりますので、Vivadoだけで全て閉じることができます。

 以上で、シミュレーションによる動作確認は終了です。


 今、VivadoはSIMULATIONモードが起動しているので、こちらの図で「PROJECT MANAGER - BLINKV」と表示されているサブウインドウのタイトルが「SIMULATION」に変化しているはずです。タイトル「SIMULATION」から右へ目を移して、「×」をクリックすると、SIMULATIONモードを閉じて、「PROJECT MANAGER」モードに戻ることができます。

 この様に、SIMULATION,SYNTHESIS,IMPLEMENTATION等のモード間を遷移しながら処理が進むので、現在のモードを確認しながら、作業を進めてください。モードによって、表示されるサブウインドウの種類が変化しますので、「あれ?あのサブウインドウが無いぞ?どこ行った?」みたいな迷子になったら、現在のモードを確認して見てください。

論理合成・配置配線

 開発フロウを進めて、論理合成 → 配置配線を経て → FPGAボードにLチカ回路を書き込んでみましょう。

  Flow Navigatorサブウインドウの中で:

 各々、直前の開発フロウ結果を使う必要があるため、SYNTHESIS → IMPLEMENTATION → PROGRAM AND DEBUGと、1手順毎順番に実行しながら、警告やエラーの発生状況を確認して進めて行きます(初期デバッグ時)。
 ある程度デバッグが進むと、一気にPROGRAM AND DEBUGを実行すれば、自動的に全体のフロウ(SYNTHESIS → IMPLEMENTATION → PROGRAM AND DEBUG)を実行してくれる様になります。

 次の実験では、実際にCmod A7ボードにLチカ回路を書き込んで動作確認しますので、「Flow Navigatorサブウインドウ ⇒ PROGRAM AND DEBUG ⇒ Generate Bitstream」を実行して、BITファイルを作成しておいてください。

ビバ実験

 ようやく辿り着きました。いよいよ、Cmod A7ボードにLチカする回路を描き込んで、実動作を確認しますよ。

 ここで、Cmod A7ボードをUSBでPCに接続してください。初めて接続した場合は、ドライバのインストールが始まるかもしれません。必要なドライバソフトウェアは、Vivadoをインストールした時に、一緒にインストールされたはずです。

 ここでもPrimerボード(中華製)に対する優位があります。
 PrimerボードのUSB⇔JTAG変換ドライバは署名されていなかったので、PCのセキュアブートに対応しておらず、一々セキュアブートを無効にしてPCを(再)起動してから、FPGAボードを接続しなければなりませんでした。
 Cmod A7ボードのドライバソフトウェアは、ちゃんと署名されていてセキュアブートしたままで認識されます。良き良き。てか、これこそが、あるべき姿だよ〜。

 Vivadoの「Flow Navigatorサブウインドウ ⇒ PROGRAM AND DEBUG ⇒ Open Hardware Manager ⇒ Open Target ⇒ Auto Connect」を実行してください。下図の様にxc7a35tが検出されましたか?

a269_hwmdet.png


 続いて、Vivadoの「Flow Navigatorサブウインドウ ⇒ PROGRAM AND DEBUG ⇒ Open Hardware Manager ⇒ Open Target ⇒ Program Device」を実行してください。

a269_hwmbit.png

 Generate Bitstreamコマンドで完成したBITファイルを指定して、書き込みましょう。


 書き込みが終わったら、Cmod A7ボードに注目してください。オンボードのLED×2個がチカチカしているはずです。「短く2回光って、長めに消灯、周期約1秒」が確認できましたか?

a269_expr.jpg

 上図写真の位置関係で、FPGAチップ(XC7A35T)の右にあるのは512KバイトSRAMチップで、更にその右にLEDが4個(=2個×2個)配置されています。また、USBコネクタの上下にも2個のLEDが見えます。回路図などと見比べて、以下の様な割り当てと、なっている様です。

中央右寄り、2個×2個配置LED:
  左側 右側
上段 ・非ユーザリソース。
・ユーザ制御できないので、消せない。
・書き込み(コンフィギュレーション)
 終了で光るため、ほぼ光っている。
・邪魔。
・ユーザRGB LED。シルクにLED0。
・LOW駆動で光る。
・今回は光らないように、
 HIGH駆動してある。
・ケアしないと光る場合がある。
下段 ・ユーザLED。シルクにLED2。
・今回チカチカさせたLED。
・HIGH駆動で光る。
・ユーザLED。シルクにLED1。
・同左。
USBコネクタの上下2個配置LED:
USB上側 ・パワーインジケータ。
・電源が供給されると光る。
USB下側 ・USB⇔UART通信インジケータ。
・シリアルモニタなどで通信が発生すると光る。


 期待通りの動作を実物(FPGAボード)にて確認できましたので、以上でFPGAボードを使った実動作の確認は終了です。


 Vivadoの操作が良く解らず、うまく行かない方のために、動画を作っておきました。以下動画でご確認ください。




 動画をご覧になって頂いても、うまく行かない方のために、GitHubに今回のプロジェクトファイル一式を用意しておきましたので、こちらもお試しください。

  GitHub:BLINK-VD

 GitHubを使い慣れない方のため、トップのREADME.mdにダウンロード方法を記載しておきました。

オンボードFlashメモリ

 前節の実験では、USB⇔JTAG変換を通して、FPGAチップXC7A35Tに直接書き込み(コンフィギュレーション)しました。FPGAチップ自体は揮発性なので、一度電源を切ってしまうと、最書き込みが必要となります。

 お客様へプロトタイプとして提供する時等、お客様の手元で一々書き込みをお願いする訳には行きません。
 ボード上には、不揮発性のQuad SPI Flashメモリチップが搭載されているので、ここに書き込んでおくと、電源を切って再度接続した時、自動的にFlashメモリから書き込みされるため、Flashメモリに書き込んでおいた回路が動作するようになります。

 次は、不揮発のFlashメモリへ回路情報を書き込んでみたいと思います。公式HPから、以下の記事を参照してください。


  Flashメモリに書き込むための準備:

a269_hwmsbn.png

a269_hwmqsf.png

a269_flsdet.png

 まだ設定は続きます。

a269_flscmp.png


a269_flscfg.png


a269_flscfm.png


 以上で、Flashチップ関係の設定が終了しましたので、こちらのHardwareサブウインドウで、Flashチップ(mx25l3273f)を選択した状態で「右クリック ⇒ Program Configuration Memory Device」を実行します。

a269_hwmbin.png

 Configuration fileにBINファイル名を設定してOKボタンを押すと、Flashメモリに回路が書き込まれます。

 Flashメモリ(不揮発性)に書き込むことができたハズですので、一度USB接続を切断🔌するなどしてCmod A7ボードの電源を切り、暫くしてから再接続して見てください。電源投入してすぐに、「短く2回光って、長めに消灯」を確認できたら成功です。

※「すぐ」と言っても実際には、Flashメモリから読み出しながらコンフィギュレーションが終わるまで、数秒かかります。

Moscoviumシリーズの開発続行

 以降、オリジナル16ビットCPUコアMoscovium(シリーズ)の開発は、Cmod A7ボードを使って続行します。使い難いPrimerボードは用済みですので、Primerボードを使ったMoscoviumシリーズ開発は、以下記事をもって最終回だったことになります。

  「#26-4 Tennessineコアの動作検証

 こちらのデザインページは「凍結」となり、今後更新されることはありません。
 また、これを機に、プロジェクトファイルなどをGitHubに移動しました。

  GitHub:MCOC115-TD

 今更ながら、ファイルを1個1個ダウンロードするよりは、楽になったかと……。

 Moscoviumマイコンは、チマチマとCmod A7ボードへの移植作業を進めて行きます。ですが、今まで設計してきた全てのユニットを一気に移植する余裕は無いので、多分、筆者が必要になったユニットだけが移植されていく事になると思います。
 本HPは、「サポート無し、無保証」が基本なので、上の様な状況も込々でご利用ください。


 Primerボードは、色々と使い難くてお勧めできませんでしたが、3,300円程の低コストで、これだけ遊んだので十分元は取ったと思います。安いだけの中華製品は、美味しい所だけつまみ食いして、飽きたらポイ捨て、で沢山です。長く使いたい場合は、多少値が張っても非中華製を推奨します(経験者は語る、ってやつです)。


btn_arduino.png

btn_prev.png btn_next.png

home