ISEのxstをコマンドラインから実行する

FPGA

xstはISE標準の論理合成ツールです。論理合成可能なVerilogやVHDLのコードをネットリストに変換します。VerilogのサポートはVerilog2001です。SystemVerilogはサポートされていません。

xstをコマンドラインから実行する

設定ファイル

xstをコマンドラインから実行する場合、最低限2つのファイルが必要になります。1つはスクリプト・ファイル、もう1つはソース・コード・リストのファイルです。スクリプト・ファイルには、FPGAデバイスの情報や論理合成のオプションを列挙します。ソース・コード・リストには、論理合成を行うHDLを記述したファイル名を記述します。ソース・コード・リストのファイル名は、スクリプト・ファイル内で指定します。クロック等のタイミング制約が必要な場合は、その設定を記述したファイルを作成し、スクリプト・ファイル内でそのファイル名を指定します。

xstの設定ファイル

xstの設定ファイル

スクリプト・ファイルの例

スクリプト・ファイルは、次のようなテキストファイルです。

# xst script
run
-p xc3s1500fg456-4
-opt_mode Speed
-rtlview yes
-keep_hierarchy yes
#-uc pp_top.xcf
-resource_sharing no
-register_balancing yes
-keep_hierarchy no
-opt_level 2
-ifn rtl_files.prj
# -ifmt mixed
-ifmt verilog
-top pp_top
-iobuf yes
-ofn ./pp_top.ngc
-define {PSOC_IN}
-vlgincdir {../rtl/fm_sdr ../rtl/fm_3d ../rtl/fm_pci}
-sd {}

通常、最初にrunを書き、続いてオプションを列挙します。#の行はコメントです。良く使うオプションは次のとおりです。

-p

論理合成対象のFPGAデバイスを指定します。この例ではSpartan-3(xc3s1500fg456-4)を指定しています。

-opt_mode

論理合成をスピード優先(speed)にするか、サイズ優先(area)にするかを指定します。最適化レベルは-opt_levelを1か2で指定します。デフォルトはSpeedです。

-keep_hierarchy

論理合成時、RTLの階層構造を保持するかどうかをyes/noで指定します。階層構造を破壊した方が、最適化された回路が生成される場合があります。デバッグ時は、階層構造を保持した方が解析が楽です。

-ifn

ソース・コードのリストを記述したファイルを指定します。Verilogの場合、ファイルのパスをincludeで指定します。VHDLやVerilog/VHDL混合の場合はveirlog workというフォーマットでパスを指定します。

// verilog files
`include "../rtl/fm_sh4/fm_sh4.v"
`include "../rtl/fm_sh4/fm_dispatch.v"
`include "../rtl/fm_sh4/fm_dispatch_dma.v"
`include "../rtl/fm_sys/fm_sys"
// in mixed mode, `include -> verilog work

-ifmt

ソース・コードの言語をverilogまたはvhdlで指定します。VerilogとVHDLを混合する場合はmixedを指定します。

-top

最上位のモジュール名を指定します。この例ではpp_topです。

-iobuf

I/Oバッファを使用するかどうかをyes/noで指定します。内部モジュールを論理合成する場合には、noを指定する必要があります。デフォルトはyesです。

-ofn

論理合成結果を格納するファイルを指定します。この例ではpp_top.ngcです。

-define

Verilogのdefineを設定します。この例ではPSOC_INをdefineしています。defineが複数必要な場合は、{}で囲んで列挙します。defineは、Verilogコード中のifdefを確定するために必要になります。

-vlgincdir

Verilogのincludeがサーチするパスを指定します。 複数のパスが必要な場合は、{}で囲んで列挙します。

-sd

合成済みのモジュール等をリンクする場合のパスを指定します。xstでリンクしない場合は、ngdbuildでもリンクできます。

実行方法

ISEコマンドプロンプトなどから-ifnオプションでスクリプト・ファイルを指定してxstを実行します。

xstの実行

xstの実行

実行結果

xstの実行プロセスはログ(.srp)に記録されます。ログの内容を見ると、指定したオプションが実際に認識されているかどうかを確認できます。

=========================================================================
*                      Synthesis Options Summary                        *
=========================================================================
---- Source Parameters
Input File Name                    : "rtl_files.prj"
Input Format                       : verilog
Verilog Include Directory          : {../rtl/fm_sdr ../rtl/fm_3d ../rtl/fm_pci}

---- Target Parameters
Target Device                      : xc3s1500fg456-4
Output File Name                   : "./pp_top.ngc"
Output Format                      : NGC

---- Source Options
Resource Sharing                   : no
Automatic Register Balancing       : yes
Top Module Name                    : pp_top
Verilog Macros                     : {PSOC_IN}

---- General Options
Optimization Goal                  : Speed
RTL Output                         : yes
Keep Hierarchy                     : yes
Optimization Effort                : 2

---- Other Options
Cores Search Directories           : {}

verilogネットリストの生成

論理合成の結果は、.ngcファイルにNGCフォーマットで格納されますが、netgenを使うとVerilogフォーマットのネットリストを生成できます。このネットリストとVerilogシミュレータでゲートレベルのシミュレーションを実行できます。

netgen -sim -ofmt verilog -w pp_top.ngc

まとめ

xstにはいろいろな設定がありますが、デフォルト設定がベストな結果を出す場合が多い気がします(xstに限らず、ISE全般で)。最終的な結果はmapやparを使った配置配線に依存するので、個人的にはxstの結果は目安程度にしか考えていません。

タイトルとURLをコピーしました