Compiler

コンパイラの使用方法

以下のようにコマンドプロンプトから起動するか、適当なGUIランチャー等から引数を与えて起動します。 以下のオプション例はよく使用する一部オプションを示したものです。

vppl [-h] [-d] [-v] [-V] [-a] [-i] [--PREF preference_file.csv] [SOURCE.VPPL]

以下のようなオプションをつけて動作させることで所望の結果を得ることができます。

コマンドラインオプション

オプション 意味
-h ヘルプ表示
--PREF pf ppをCPSDEプリファレンスファイルとしてそこから諸設定を読み込みます。
--ISIM ISIM用にコードを生成します。
--RTL RTL用にコードを生成します。
--FPGA FPGA用にコードを生成します。
--EDM 初期化済変数領域を256Kバイトに拡張するモードでコードを生成します。
--EXM DM領域を2Mバイトに拡張するモードでコードを生成します。
--CR プログラムコード圧縮を試みます。速度は低下する可能性があります。
--G2 ミニマムのGen.2命令セット以上を使用すると警告します。
-a コンパイラの制御下で、アセンブルも続けて行います。
-i コンパイラの制御下で、オブジェクトファイルをISIMで実行します。
-b Xilinx FPGA用のbitファイルにオブジェクトを書き込みます。
-c ASMファイルではなくINCファイルにコンパイルします。
-g GNU binutilツールチェーン(GASなど)を使ってHEXファイルを生成します。
-e ISIM実行せず前のISIM結果を再評価します。
-s コンパイルをスキップします。-iもしくは-eオプションの単独実行用です。
-t コンパイラの内部テスト用。
-Onnn オプティマイズを行います。nnnにより詳細制御可能です。
--ASM af afを出力するアセンブラソース名として設定します。
--PINA png png画像ファイルを イメージバッファAにロードします。
--PINB png png画像ファイルを イメージバッファBにロードします。
--POUTA png イメージバッファAに書き込まれた内容をpng画像ファイルに出力します
--POUTB png イメージバッファBに書き込まれた内容をpng画像ファイルに出力します
-v 処理の途中経過を詳細に出力
-V バージョンのみ表示して終了
-d デバッグ用オプション

アセンブルオプション選択時の注意

-a オプションを使用し、-gオプションを使用しない場合、QVP.TBLファイルを作業フォルダに設置してください。 QVP.TBLファイルが存在しない場合、VPPLコンパイラがアセンブラを呼び出した場合にエラーが発生し、アセンブルができなくなります。

GNU binutilツールチェーン選択時の注意

VPPLコンパイラが生成できるアセンブラソースの形式は、既定のアセンブラ形式だけです。 この形式のソースをGNU gasが受け付けられる形式に変換するために以下のスクリプトが内部で使用されます。 (以下のスクリプトはトプスシステムズの著作です。)

asm2s.py

また命令セットシミュレータが読み込めるリスティングファイル形式も既定のアセンブラ形式となっています。 GNU gasが出力するリスティングファイルをシミュレータが読み込むことができる形式に変換するために以下のスクリプトが内部で使用されます。 (以下のスクリプトはトプスシステムズの著作です。)

gasList2lst.py

以下のGNU binutilツールが呼び出されて使用されます。それらは実行パスに含まれるフォルダに無ければなりません。 また、現状、それらツールはWindows上のMSYS2環境でのみ動作可能です。MSYS2の実行環境も実行パスから見えねばなりません。

アセンブラ

topsqvp-elf_as アセンブラソースをELF形式のオブジェクトファイルにアセンブルします。

リンカ

topsqvp-elf_ld gasの出力したELF形式のオブジェクトファイルをリンクします。 VPPLコンパイラはリンクの際にFPGAの実行環境に合うように絶対番地を指定して出力オブジェクトを生成させます。

オブジェクトコピー・ユーティリティ

topsqvp-elf_objcopy ELF形式のオブジェクトからFPGA用ツールチェーンが受け入れ可能なモトローラS形式の オブジェクトファイルに変換するために用いられます。

※制限事項

既定のアセンブラが出力するモトローラS形式のHEXファイルは必要な部分のみレコード化されていますが、 binutilのobjcopyが出力するモトローラS形式のHEXファイルはアドレスのスキップが必要な場合はゼロ詰めされたレコードが出力されます。 このため、元が同じアセンブラソースでもそのサイズは大きくことなるHEXファイルが出力されます。 FPGAツールチェーンに送る場合、どちらのHEXファイルでも同じ結果を得ることができます。 なお、2つのHEXファイルの等価性は、トプスシステムズのユーティリティ hexComp.py により確かめることができます。 ただし、既定のアセンブラとgasで、同等の命令に対して複数の機械語コードが選べる場合に選択されるコードが異なることがあるので 不一致箇所については目視での確認を推奨します。

プリファレンスファイル

VPPLコンパイラは、一度セットアップすれば通常変更の必要のない参照変数を多数もっています。これらの参照変数は、CSV形式のプリファレンスファイルに キー,バリュー形式にて設定します。このプリファレンスファイルはCoolSoft製CPSDEが使用しているプリファレンスファイルと同じ形式、共通の変数をもっている ので、CPSDEのものをそのまま共用することができます。–PREFオプションで明示的にプリファレンスファイル名を設定することもできますが、無指定の場合、 CPSDEのデフォルトプリファレンスファイル名である cpsdePREF.CSV を読み込みます。以下にVPPLコンパイラが参照する変数名の設定例を抜き出します。

VPPL_ISIM_LOG, workbatch.LOG
VPPL_SPT_NAME, workbatch.spt
VPPL_HEX_NAME, work.HEX
VPPL_LST_NAME, work.LST
VPPL_ASM_TIMEOUT, 20
VPPL_ISIM_TIMEOUT, 20
VPPL_BMM_IM,CORE_
VPPL_BMM_DM,DM_CORE_
VPPL_MEM_IM,VPPL_IMEM
VPPL_MEM_DM,VPPL_DMEM
VPPL_BIT_SRC,smyle_phase2_fpga_top.bit
VPPL_BIT_WORKA,TEMPBIT_A.bit
VPPL_BIT_WORKB,TEMPBIT_B.bit
VPPL_BIT_DST,VPPL.bit
VPPL_DATA2MEM,data2mem
VPPL_LSTW_NAME, workW.LST
VPPL_ERR_NAME, work.err
VPPL_S_NAME, work.s
VPPL_O_NAME, work.o
VPPL_ELF_NAME, work.elf
VPPL_ASM2S, asm2s.py
VPPL_GASLST2LST, gaslist2lst.py
VPPL_GAS, topsqvp-elf_as
VPPL_LD, topsqvp-elf_ld
VPPL_OBJCOPY, topsqvp-elf_objcopy
VPPL_HELPER_DATA, "600FD700"
VPPL_HELPER_CMD, "600FD720"
Lic_PATH, cpsde.Lic
ISIM_exe,C:/CPSDE/isim/bin/isim_SMYLEvideo.exe
py_PATH,C:/CPSDE/py/
python_PATH,python
xasm_PATH,C:\CPSDE\bin\C32D4CL.EXE
run16_PATH,C:\CPSDE\bin\msdos.exe

アセンブラ、インストラクションシミュレータの起動

VPPLコンパイラは、外部プログラムであるアセンブラおよびインストラクションシミュレータのドライバとしての機能を内蔵しています。 それらプログラムはコンパイラオプションにより呼び出すことができます。その際にはそれらの外部プログラムの実行ファイルへのパスを プリファレンスファイルに記入しておかねばなりません。また、アセンブラの出力するオブジェクトファイル名、リスティングファイル名も プリファレンスファイルで指定するとともに、インストラクションシミュレータを制御するための SPT ファイルについてもそれらのファイル名を 正しく参照するように設定しておくことが必要です。

FPGAへの書き込み

VPPLコンパイラは、生成したオブジェクトプログラムを、外部プログラムを利用してXilinx社のFPGA(現状:Virtex7-V2000Tのみ)ビットファイルに 書き込むドライバ機能も内蔵しています。そのためにはそれらの外部プログラムを準備するとともに、プログラムへのパスをプリファレンスファイルに 記入しておかねばなりません。

Python 2.7.x    Python処理系
makeBMM.py              上記Python処理系上で動作するプログラム。詳細については、 :doc:`makeBMM` を参照してください。
BramMan.py              上記Python処理系上で動作するプログラム。詳細については、 :doc:`BramMan` を参照してください。
DATA2MEM.exe    Xilinx社のユーティリティプログラム

また、Xilinx社の UltraScale用FPGA上で生成したオブジェクトプログラムを実行することも可能ですが、その際は Xilinx社の特定のSDK上での操作が必要となりますので詳細はお尋ねください。

INCファイルの生成

通常、VPPLコンパイラは、割り込みベクタテーブルや大域変数、スタックなどを含むスタンドアロンで動作可能なプログラムを出力します。 しかし、他にメインとなるプログラムがある場合に、VPPLコンパイラでその一部のサブルーチンのみ書くことができるように-cスイッチが用意されています。 このコンパイルオプションスイッチを指定することで、VPPLコンパイラは、サブルーチンおよびメインルーチンのうち明示的に書かれた部分のみを出力するようになります。 このモードでは出力ファイルの拡張子は.ASMではなく.INCとなります。

オプティマイズ

オプティマイズスイッチ -O に何も数値を指定しなければ、その時点で可能なオプティマイズを全て行います。 -Oの直後(スペースを入れずに)10進数値を記載することで以下のオプティマイズのON/OFFを制御できます。 ON/OFFは数値を2進表現で見たときのビットのON/OFFによります。

制御スイッチのビットの意味

ビット 意味
テンポラリレジスタへの冗長なMOV命令除去
条件分岐時の比較演算子の冗長な評価(正)を除去
条件分岐時の比較演算子の冗長な評価(反転)を除去
冗長なインクリメント演算シーケンス1の除去
冗長なインクリメント演算シーケンス2の除去
冗長な分岐命令の除去

エラーメッセージ

一部のパラメータのエラーなどでは、複数のエラーが重ねて発生してもVPPLコンパイラはコンパイルを継続し、 複数のエラーメッセージを出力します。 しかし、構文にかかわる多くのケースでは、現状のVPPLコンパイラはエラー回復を即座に諦め、エラーメッセージと発生場所を出力し、 コンパイルを即座に中止します。