2024年の今、「FPGAボードで学ぶVerilog HDL」のXilinx Spartan-3Eで遊ぶ (1) 環境構築 [電子工作・プログラミング]

もう15年ほど積んでしまっていた、「FPGAボードで学ぶVerilog HDL」(2007年、CQ出版) のFPGAボードで遊んでみようと思い立ちました。ただ、同書に収録されているISE 8.2は32 bitのWindows XPの頃のアプリケーションなので、現在のWindows 10機に入る気がしません。そこで、改めてAMD社のページから開発環境を調べてみました。

すると、ISE 14.7が、windows 10にも対応しているとのこと。下記のページも参考にしながら、AMDのユーザ登録もしつつ、インストールしてみました。無償で有難いです。

(AMD社ページ) Windows 10 用 ISE Design Suite - 14.7 (2020/02/20)

【回路設計ヒント】Microsoft Windows 10 でのiMPACT書き込み

最初に、インストールガイドもしっかり読んで、VirtualBoxのバージョン5.2.34をインストールします。入れていないと、エラーが出てISEをインストールできないのですが、その時のメッセージは文字化けしていて、何の情報も得られません...

インストールに成功すると、デスクトップにいくつかアイコンが生成されます。「Project Navigator」を実行すると、VirtualBox上で64 bitのOracle Linux 6.4の仮想マシンが起動し、ISE 14.7一式が使用できます。
ちなみに、ユーザ名はise、パスワードはxilinxで、パスワードを変更すると、デスクトップ上のショートカットはうまく動作しなくなります。このあたりの設定は、ショートカットの参照先 (インストール先ディレクトリ\Xilinx\14.7_VM\bin\app_launcher.bat) を見ると、何となくですが分かります。他の開発用ソフトウェアもインストールされているので、適切に環境変数を通せば、Oracle Linux内のターミナルから実行できます。sshで入ることもできます。

ところで、本書同梱のFPGAボードは、パラレルケーブルでPCと接続し、コンフィグレーションを行います。そのため、PC側のパラレルポートを、仮想マシンにマウントする必要があります。
運よく(!)僕が現在使用しているPC (Windows 10) は、マザーボード上にパラレルポートを装備していますので、ハードウェアとしては別途用意は不要でした。以前にパラレルポートのことを調べたとき、VirtualBoxでマウントする方法は分からなかったのですが、実は可能なようです。

LPTポートをVirtualBoxで使用する方法

VirtualBoxのマニュアル

`VBoxManage modifyvm`コマンドで、`--lptmode1 ...`と`--lpt1 ...`を使うようです。今回使用したPCはMB上にパラレルポートがありますので、参考にしたページと同様、`--lptmode1`に与えるパラレルポート名は`LPT1`、`--lpt1`に与えるアドレスは`0x378`で動きました。(PCIeなどで拡張したパラレルポートだと異なるかもしれませんが、未確認)
設定した後に仮想マシンを起動し、Oracle Linux側のターミナルから、`ls /dev`を実行すると、確かに`/dev/parport0`が存在しています。(うまくできていないときに、parport0が存在しないかは未確認ですが…)

これで開発環境の準備ができたので、ISEを起動し、本の通りにプロジェクトを作成します。新規プロジェクト作成の際に、本には記載のない項目もありますが、それはデフォルト値のままにして進めます。

書籍P18 図2-4 の、led_onoff.v をトップモジュールにする回路を合成すると、WARNING:Security:42 - Your software subscription period has lapsed.とか出ますが、無視して進めます。無事にビットストリームまで出力できます。また、その後の内容で、クロックCLK_Iを使う回路をImplementしようとすると、下記のエラーが発生し、Implement Designが失敗します。

ERROR:Place:1018 - A clock IOB / clock component pair have been found that are not placed at an optimal clock IOB / clock site pair. (後略)

(後略)した部分を読むと、本ボードがクロック入力として使用している端子P63は、IOとクロックの間の速いパスとして使うのは良くないとのことです。メッセージの最後に、
NET "CLK_I" CLOCK_DEDICATED_ROUTE = FALSE;
を.ucfファイルに記載すると、このエラーを警告に落とせる旨が書いてありました。ISE 8.2の頃は、上記はエラーにまではなっていなかったと思われます。ボードの設計はもちろん変えられないので、素直に上記をucfファイルに記載すると、無事にビットストリームの出力まで進められます。

ビットストリームが得られたら、iMPACTを起動します。起動後にプロジェクトを作るか聞かれますが、適当に答えます。
メニューバーの「View→Tabs→iMPACT Flows」で表示されるウィンドウのツリーのアイコン「Boundary Scan」をダブルクリックします。出てきたウィンドウで右クリックし、コンテキストメニューの「Cable Setup...」を選択します。
本書同梱のボードの書き込み回路はParallel Cable III相当です。「Communication Mode」はParallel Cable IIIを、「Port」はparport0を選びます。「Cable Location」はLocalを選び、「Cable Plug-in」のチェックボックスは外し、「OK」で設定ダイアログを閉じます。
再度ウィンドウで右クリックし、「Initialize Chain」を選びます。ウィンドウに青枠の文字で「Identify Succeeded」と表示されれば、認識成功です。
「Assign configuration files」のダイアログにYesと答え、コンフィグレーション用のbitファイルを選択します。「Attach SPI or BPI PROM」を聞かれますが、Noを選択します。その後、「Device Programming Properties」を聞かれますが、何も変更せずに「OK」で閉じます。その後、ウィンドウ内のFPGAのアイコンを右クリックし、「Program」でコンフィグレーションを実行します。30秒~1分ほどでプログレスバーがいっぱいになり、青枠の文字でProgram Succeededと表示されます。作成した回路が動き始めているはずです。

ここまでが、書籍の2.1.8節までの内容に相当します。以降は、書籍の内容に従って進められるはずです。
時代が進んでいるためか、セーブの度に簡単なシンタックスチェックを行ってくれて便利です。ただ、仮想環境上のLinuxでは、キーボードが英語として認識されてしまい、慣れていないと記号のタイピングが面倒です。OSのバージョンが古いので、気軽に色々入れたりしづらいのですが、VirtualBoxの機能でホスト側のフォルダのマウントは可能なので、ホスト側で現代的なエディタを使うのが良い気がします。

これで、環境構築としては完了です。Spartan-3Eは、規模は小さく、レガシーなFPGAですが、基礎的な学習用途として、遊んでみたいと思います。

2024年4月28日22時18分
fartrip
コメント(0)