ハードウェア構成法のレポートについて

ハードウェア構成法のレポート(VHDLでコラッツの問題を計算する)の出題があまりにも雑で、課題の内容より環境構築のほうがよほど大変という感じだったので一応引き継ぎ書類みたいな感じでやりかたを書きます(が、僕自身の理解が不十分なのを隠す気がないため、一部雑なところがあります)。対象はubuntuですがインストールが終わって以降の話はwindowsでも使えるでしょう。Quartusのバージョンは18.1です。また、もっといいやり方があるものもあるかもしれませんが、あの課題をやるにあたってはソフトウェアに関してそこまで体系化された知識は必要ないので、とりあえずこうやればできたというものを書きます。

 

・準備

intelFPGAのQuartus Prime Lite Edition(version 17.1)をUbuntu16.04(on Virtualbox)にインストールする - k0b0's record. にあるとおり、

libxft2:i386 libxext6:i386 libncurses5:i386

この3つを入れます。サイトによってはもっと大量に列挙されていたりしますがこの3つの依存関係で全部入る説も見た気がします。

 

・ダウンロード

Quartus Prime Lite Edition(一式ファイル)をダウンロードします。なんか会員登録が必要と言われたのでしました。

 

・インストール

インストールはそれほど難しくないです。ModelSimが選択されているか確認しましょう。Starter Editionでいいです(そうじゃないとお金がかかります)。デバイスはCyclone Vだけでいいんじゃないでしょうか。これで必要容量が12GBくらいです。インストール先についてはデフォルトのままホームディレクトリに入れました。

 

・起動

~/intelFPGA_lite/18.1/quartus/bin/quartus

みたいなやつを実行するとQuartusが起動します。

 

・Modelsimの起動

Modelsimの実行ファイルの実体は

~/intelFPGA_lite/18.1/modelsim_ase/linuxaloem/vsim

です。これを端末から起動しようとすると、

Fatal: Read failure in vlm process

みたいなエラーが出ます。これはfreetypeのバージョン違いのエラーだそうです。Ubuntu16.04 64-bitで、Quartus II 13.1からModel-sim - Moiz's journalとかに書いてあります。しかしせっかくubuntuなのでこんなふうにわざわざコンパイルしなくても、http://ftp.riken.go.jp/Linux/ubuntu/pool/main/f/freetype/みたいなubuntuのミラーに行って、欲しいバージョンのパッケージをダウンロードして必要ファイルだけ取り出せばいいです。バージョンは2.5.0-2より新しいと駄目らしいのでlibfreetype6_2.4.8-1ubuntu2.6_i386.debあたりにして、インストールするのではなくアーカイブマネージャーで開き、data.tar.gzの/./usr/lib/i386-linux-gnu/の中の2つの.soファイルだけをどこか(/path/to/libraryとします)にコピーします。

そして、export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH

としてからvsimを実行します。今度は起動するはずです。うまく行かなければ

Altera Design Software - ArchWikiあたりが頼りになるかもしれません。

 

スクリプトからのModelSimの起動

ModelSimがとりあえず起動することを確認したら、~/intelFPGA_lite/18.1/modelsim_ase/bin/vsimを実行して起動するか確認します。本来はここから起動することが想定されています。Quartusもここを見に行くようです(~/intelFPGA_lite/18.1/modelsim_ase/linuxaloem/を見に行くような設定に元々はなっていますが(Tools -> Options -> EDA Tool Options)、~/intelFPGA_lite/18.1/modelsim_ase/bin/に変えないと動きません)。僕の場合は./../linux_rh60/vsimが見つかりませんと言われました。確かにそんなフォルダはないので、~/intelFPGA_lite/18.1/modelsim_ase/bin/vsimを編集し、linux_rh60となっている部分をlinux(あるいはlinuxaloem(シンボリックリンクなのでどっちでも変わらない))に変えます。すると当然ながら再びfreetypeのエラーが出るので、~/intelFPGA_lite/18.1/modelsim_ase/bin/vsimの下のほうにあるexec(が2つ入ったif文)の直前にexport LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATHと書きます。今度こそ起動します。

 

・プロジェクトを作成

Working directory(とは名ばかりで実際はプロジェクトディレクトリ)がデフォルトではQuartusのインストールディレクトリになってて普通に頭おかしいので、空のフォルダを作ってそこを指定しましょう。あと、なんか上の方で単に"ModelSim"と言っていますが、どうやらこいつはプロジェクト作成時の設定にある"ModelSim"と"ModelSim-Altera"のうち"Modelsim-Altera"に該当するらしいので気をつけましょう("ModelSim"を使う設定にすると、「あなたがModelSimとして指定したこの実行ファイルはModelSim-Alteraのようですが…」みたいに言われる)。

VHDLファイルを追加するときは、File->New...から作って編集し、Save As...でプロジェクトディレクトリの中に保存します。プロジェクトのファイル一覧は左上のProject NavigatorからFilesを選択すると見られます。

プロジェクトに関する設定はAssignmentsにあります。トップレベルエンティティはデフォルトではプロジェクト名と同じですが変えたいときとかはここから設定します。

 

VHDLを書く

先輩の解答例GitHub - dmingn/HW_report_2017とか、先生の解答例とか、Tutorials for VHDLとかを読んでがんばりました。一応本を買わなくてもなんとかなりました。先輩の解答例がちょっとこみいっている感じだったので、RAM使う以外の工夫を何もしていない、比較的単純な解答例を作ってみました。8041クロックかかります。

GitHub - ge9/collatz

何故かQuartusで日本語入力ができないため、心もとない英語でコメントを書きました。VHDL以外にも、プロジェクトの設定画面なども見比べてお使いください。

recordは構造体です。variableは使わなくてもできたのでよく理解してないです。同時処理文と順次処理文みたいなのが結構本質的っぽかったので調べました。

 

・テストベンチについて

シェフの気まぐれテストベンチ~NativeLink イリュージョン~ | マクニカオンラインサービスあたりを参照してテストベンチを設定します。参考サイトでは.vtという拡張子のファイルを指定していますが、VHDLなら.vhdになります(本来は.vhtにするのが正しいらしい)。ちなみに"Top level module in test bench"をわざと間違えて指定すると、ModelSimが起動したときに自動でシミュレーションが始まってしまうことがなくなり、一旦停止して最初からやり直す手間が省けたので、自分はそうしていました。僕のさっきの解答例はそうなっています。ModelSimの画面が起動したらcollatz_testbenchをダブルクリックすればいいです。

テストベンチをトップレベルエンティティにするとクロックのあたりでなんかエラー(wait statement must contain condition clause with until keyword)が出るのでだめです。理由は知りません。

 

・component宣言について

VHDLで下位ブロックを呼び出す2つの方法 - Qiitaに書いてあります。いちいちcomponent宣言のためにentity宣言をコピペするのはやっぱり美しくない気がしたので2つめの方法にしました。デメリットも一応あるらしいですが。

workというのは特殊な識別子で、現在のプロジェクトを指すらしいです。

 

・RAMについて

IP Catalogを表示してBasic Functions->On Chip MemoryからRAM:1-PORTみたいなやつを選ぶとウィザードが出てきます。僕は2-PORTも使う羽目になりました。メモリの仕様に関しては生成される.vhdファイルの中身を見ればわかります。

 

・タイミング解析

タイミング解析シリーズ 2 『 SDCファイルってなに?』に従って.sdcファイルを設定します。get_portsにはトップレベルエンティティのportを指定します。

 

コンパイル・シミュレーション

コンパイルすると結果のファイルに使用エレメントとか周波数が書いてあります(解答例参照)またTools->Run Simulation Tool->RTL SimulationからModelSimでシミュレートできます。Waveを見ながらデバッグしたりします。Wave->Format->Radix->Unsignedすると10進で表示されて見やすいです。

あと、Quartus側でご丁寧にModelsim-Alteraの/home/user/intelFPGA_lite/19.1/modelsim_ase/bin/