Amazon Best VPN GoSearch

OnWorksファビコン

verilator - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows Onlineエミュレーター、またはMACOSオンラインエミュレーターを介してOnWorks無料ホスティングプロバイダーでベリレーターを実行します

これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドベリレーターです。

プログラム:

NAME


Verilator-VerilogコードをC ++ / SystemCに変換します

SYNOPSIS


ベリレーター --help
ベリレーター --バージョン
verilator --cc [options] [top_level.v] ... [opt_c_files.cpp / c / cc / a / o / so]
verilator --sc [options] [top_level.v] ... [opt_c_files.cpp / c / cc / a / o / so]
verilator --lint-only [top_level.v]..。

DESCRIPTION


Verilatorは、合成可能な(動作ではない)Verilogコードに加えて、いくつかの合成を変換します。
SystemVerilogおよびVerilogAMSアサーションの小さなサブセットをC ++またはSystemCコードに変換します。 これ
完全なシミュレーターではなく、コンパイラーです。

Verilatorは、GCC、Cadence Verilog-XL / NC-Verilog、または
シノプシスのVCS。 指定されたVerilogコードを読み取り、それをリントし、オプションで追加します
カバレッジと波形トレースコード。 C ++およびSystemC形式の場合、.cppおよび.hを出力します
ファイル。

次に、Verilatorによって作成されたファイルがC ++でコンパイルされます。 ユーザーは少しC ++を書きます
トップレベルモジュールをインスタンス化し、このファイル名を
コマンドライン。 これらのCファイルはC ++でコンパイルされ、Verilatedファイルとリンクされています。

結果の実行可能ファイルは、実際のシミュレーションを実行します。

開始するには、「EXAMPLE C ++ EXECUTION」にジャンプします。

ARGUMENT 概要


これはVerilatorへの議論の短い要約です。 の詳細な説明を参照してください
詳細については、次のセクションを参照してください。

{file.v} Verilogのトップレベルのファイル名
{file.c / cc / cpp}コンパイルするオプションのC ++ファイル
{file.a / o / so}リンクするオプションのC ++ファイル

+ 1364-1995ext + ファイル拡張子が付いたVerilog1995を使用する
+ 1364-2001ext + ファイル拡張子が付いたVerilog2001を使用する
+ 1364-2005ext + ファイル拡張子が付いたVerilog2005を使用する
+ 1800-2005ext + ファイル拡張子が付いたSystemVerilog2005を使用する
+ 1800-2009ext + ファイル拡張子が付いたSystemVerilog2009を使用する
+ 1800-2012ext + ファイル拡張子が付いたSystemVerilog2012を使用する
--assertすべてのアサーションを有効にする
--autoflushすべての$ displaysの後にストリームをフラッシュします
--bbox-sysブラックボックス不明の$ systemコール
--bbox-unsupBlackboxでサポートされていない言語機能
- 置き場Verilatorバイナリをオーバーライドする
-CFLAGS makefileのC ++コンパイラフラグ
--cc C ++出力を作成します
--cdcクロックドメイン交差分析
--clk 指定された信号をクロックとしてマークします
- コンパイラ指定されたC ++コンパイラに合わせて調整します
--converge-limit コンバージェンスセトルタイムを調整する
--coverageすべてのカバレッジを有効にする
--coverage-lineラインカバレッジを有効にします
--coverage-toggleトグルカバレッジを有効にする
--coverage-userSVLユーザーカバレッジを有効にします
--coverage-underscore_signalsのカバレッジを有効にします
-D [= ]プリプロセッサ定義を設定します
--debugデバッグを有効にする
--debug-checkデバッグアサーションを有効にする
--debugi 指定されたレベルでデバッグを有効にする
--debugi- レベルでソースファイルのデバッグを有効にする
- 既定の言語解析するデフォルト言語
+ define + = プリプロセッサ定義を設定する
--dump-tree.treeファイルのダンプを有効にします
--dump-treei レベルで.treeファイルのダンプを有効にする
--dump-treei- レベルのソースファイルで.treeファイルのダンプを有効にする
-E前処理しますが、コンパイルしないでください
-エラー制限この数のエラーの後で中止する
--exe実行可能ファイルを作成するためのリンク
-F 比較的、ファイルからオプションを解析します
-f ファイルからオプションを解析する
--gdbGDBでVerilatorをインタラクティブに実行します
--gdbbtバックトレース用にGDBでVerilatorを実行します
--helpこのヘルプを表示する
-私検索するディレクトリには次のものが含まれます
--if-depth IFDEPTH警告を調整する
+ incdir + 検索するディレクトリには次のものが含まれます
--inhibit-simsimをオフにする関数を作成します
-インライン-マルチモジュールのインライン化を調整
-LDFLAGS makefileのリンカープレオブジェクトフラグ
-LDLIBS makefileのリンカーライブラリフラグ
- 言語解析するデフォルトの言語標準
+ libext + + [ext] ...モジュールを検索するための拡張機能
--lint-Lintのみですが、出力は行いません
--MMD.d依存関係ファイルを作成します
--MP偽の依存関係ターゲットを作成します
--Mdir 出力オブジェクトディレクトリの名前
--mod-prefix 下位クラスの前に付ける名前
--no-clk 指定された信号をクロックとしてマークしないようにする
--no-pins64-64ビットsigにvluint33_tを使用しないでください
--no-skip-identical同一の出力のスキップを無効にします
+ notimingchecks無視されます
-O0最適化を無効にします
-O3高性能の最適化
-O 選択可能な最適化
-o 最終実行可能ファイルの名前
--no-order-clock-delay順序付けクロックを無効にする割り当てを有効にする
--output-split .cppファイルを分割します
--output-split-cfuncs .cpp関数を分割する
--output-split-ctrace 分割トレース機能
-P-Eを使用して行番号とブランクを無効にします
--pins-bv トップレベルポートのタイプを指定します
--pins-sc-uintトップレベルポートのタイプを指定します
--pins-sc-biguintトップレベルポートのタイプを指定します
--pins-uint8トップレベルポートのタイプを指定します
-パイプフィルタースクリプトを介してすべての入力をフィルタリングする
-プレフィックストップレベルクラスの名前
--profile-cfuncsプロファイリング用の名前関数
-プライベートデバッグ; ドキュメントを参照してください
-パブリックデバッグ; ドキュメントを参照してください
--report-unoptflatUNOPTFLATの追加の診断
--savableモデルの保存を有効にする-復元
--scSystemC出力を作成します
--stats統計ファイルを作成します
--stats-vars変数に関する統計を提供します
-svSystemVerilog解析を有効にする
+ systemverilogext + + 1800-2012ext +の同義語
-トップモジュールトップレベル入力モジュールの名前
--trace波形作成を有効にします
--trace-depth トレースの深さ
--trace-max-array トレースの最大ビット幅
--trace-max-width トレース用の最大配列深度
--trace-paramsトレースパラメータを有効にします
--trace-structs構造体名のトレースを有効にします
--trace-underscore_signalsのトレースを有効にします
-Uプリプロセッサ定義の定義を解除します
--unroll-count 最大ループ反復を調整する
--unroll-stmts ループ本体の最大サイズを調整する
-未使用-正規表現未使用のリント信号を調整する
-V詳細なバージョンと構成
-v Verilogライブラリ
+ verilog1995ext + + 1364-1995ext +の同義語
+ verilog2001ext + + 1364-2001ext +の同義語
-エラー- 警告をエラーに変換
-将来- 不明なメッセージの警告を無効にする
-Wno- 警告を無効にする
-Wno-lintすべてのlint警告を無効にします
-Wno-styleすべてのスタイル警告を無効にします
-Wno-fatal警告の致命的な終了を無効にします
--x-割り当て最初にこの値にXを割り当てます
--x-initial-edge初期X-> 0およびX-> 1エッジトリガーを有効にします
-y モジュールを検索するためのディレクトリ

議論


{ファイル.v}
検証する最上位モジュールを含むVerilogファイルを指定します。

{file.c / .cc / .cpp / .cxx}
VerilogコードにリンクするオプションのC ++ファイルを指定します。 C ++ファイルがある場合
このように指定されている場合、Verilatorには、を生成するmakeルールが含まれます。 モジュール
実行可能。 C ++ファイルがない場合、Verilatorはで停止します モジュール__ALL.aライブラリ、
そして、あなたが自分で書いたmakeルールとリンクし続けると仮定します。 も参照してください
-CFLAGSオプション。

{file.a / .o / .so}
Verilogコードにリンクするオプションのオブジェクトまたはライブラリファイルを次のように指定します。
-LDFLAGSの省略形 " "。この方法でファイルが指定されている場合、Verilator
リンク時にこれらのファイルを使用するmakeルールが含まれます モジュール 実行可能ファイル。
これは通常、-exeオプションとともに使用する場合にのみ役立ちます。

+ 1364-1995ext +EXT
+ 1364-2001ext +EXT
+ 1364-2005ext +EXT
+ 1800-2005ext +EXT
+ 1800-2009ext +EXT
+ 1800-2012ext +EXT
特定のファイル名拡張子で使用される言語標準を指定します。 EXT.

他のシミュレータとの互換性については、同義語「+ verilog1995ext +」も参照してください。EXT,
"+ verilog2001ext +"EXT、および「+ systemverilogext +」EXT.

どのソースファイルでも、これらのオプションで指定された言語がどのソースファイルよりも優先されます
「--default-language」または「--language」オプションで指定された言語。

これらのオプションは、遭遇した順序で有効になります。 したがって、次のようになります
「av」にはVerilog1995を使用し、「bv」にはVerilog2001を使用します。

ベリレーター... + 1364-1995ext + v av + 1364-2001ext + v bv

これらのフラグは、従来の混合言語設計にのみ推奨されます。
オプションは、コードを編集して新しいキーワードを修復するか、適切なものを追加することです
「 `begin_keywords」。

注意 「 `begin_keywords」はSystemVerilogコンストラクトであり、 これ
キーワードのセットが認識されます。 どのセットを選択しても、セマンティクスは次のようになります。
SystemVerilogのもの。 対照的に、「+ 1364-1995ext +」などは、両方の構文を指定します および
使用されるセマンティクス。

- 主張する
すべてのアサーションを有効にします。

--x-assignおよび--x-initial-edgeも参照してください。 「--x-assignunique」の設定および/または
「--x-initial-edge」が望ましい場合があります。

--自動フラッシュ
$ displayまたは$ fdisplayごとに、出力ストリームをフラッシュします。 これにより、
メッセージはすぐに表示されますが、パフォーマンスが低下する可能性があります。 最高のパフォーマンスの呼び出しのために
メインCループで時々「fflush(stdout)」。 デフォルトはオフで、バッファリングされます
通常のCstdio呼び出しによって提供される出力。

--bbox-sys
不明な$ systemタスクまたは関数呼び出しをブラックボックスに入れます。 システムタスクは単純になります
NOPed、およびシステム機能はサイズなしのゼロに置き換えられます。 そのような議論
関数は解析されますが、それ以外の場合はチェックされません。 これにより、エラーが発生しなくなります。
会社固有のPLI呼び出しが存在する場合のリンティング。

--bbox-unsup
サポートされていない言語機能のブラックボックス、現在はUDPテーブルとcmosおよび
トランゲートプリミティブ。 これにより、次の場合でも、デザインの残りの部分をリントできる場合があります。
サポートされていない構成が存在します。

- 置き場 ファイル名
めったに必要ありません。 Verilator自体のデフォルトのファイル名を上書きします。 依存関係がある場合
(.d)ファイルが作成されると、このファイル名はソースの依存関係になり、次のようになります。
このバイナリを変更すると、出力ファイルが再構築されます。

-CFLAGS フラグ
生成されたmakefileに指定されたCコンパイラフラグを追加します。 makeが実行されるとき
生成されたmakefileは、C ++コンパイラ(gcc / g ++ / msvc ++)に渡されます。

--cc
SystemC出力モードなしでC ++を指定します。 --scも参照してください。

- CDC
実験的。 いくつかのクロックドメイン交差チェックを実行し、関連する警告を発行します
(CDCRSTLOGIC)そして終了します; CDC警告以外の警告が必要な場合は、
--lint-onlyを使用したXNUMX回目の実行。 追加の警告情報もに書き込まれます
ファイル{prefix} __ cdc.txt。

現在、他のCDCツールが見逃したいくつかの項目のみをチェックします。 あなたが興味を持っているなら
従来のCDCチェックを追加するには、作成者に連絡してください。

--clk 信号名
Verilatorがクロック信号を他の信号と区別するのが非常に難しい場合があります
データ信号。 時折、クロック信号が次のチェックリストに含まれることがあります。
さらに評価が必要かどうかを決定するシグナル。 これは大幅に劣化します
検証済みモデルのパフォーマンス。

--clkを使用、ユーザーはモデルにルートクロックを指定し、次にVerilatorを指定できます
信号をクロッカーとしてマークし、クロッカー属性を自動的にに伝播します
それから派生した他の信号。 このように、ベリレーターは服用を避けようとします
クロッカー信号をチェックリストに入れます。

信号名はRTL階層パスによって指定されることに注意してください。 たとえば、v.foo.barです。 もしも
信号はトップモジュールへの入力であり、直接信号名です。 あなたがそれを見つけたら
正確な名前を見つけるのが難しい場合は、RTLファイルで「/ * verilatorclocker * /」を使用してみてください。
信号を直接マークします。

- コンパイラ コンパイラ名
指定されたC ++コンパイラのチューニングと回避策を有効にします。

打ち鳴らします
clangに合わせて調整します。 これにより、いくつかの回避策が可能になるため、実行速度が低下する可能性があります
clangでハードコードされた愚かな制限を回避するため。 これには、深い構造物の破壊が含まれます
以下に説明するようにmsvcについて。

gcc Tune for Gnu C ++、ただし生成されたコードはほとんどすべての準拠C ++で動作するはずです
コンパイラ。 現在のデフォルト。

msvc
Microsoft Visual C ++に合わせて調整します。 これにより、実行速度が低下する可能性があります。
MSVC ++でハードコードされた愚かな制限を回避するためのいくつかの回避策。 これも
深くネストされた括弧で囲まれた式をサブ式に分割して回避する
エラーC1009、およびエラーC1061を回避するために深いブロックを関数に分割します。

--converge-limit
めったに必要ありません。 を作成する前の実行時反復の最大数を指定します
モデルはエラーを収束できませんでした。 デフォルトは100です。

- カバレッジ
"--coverage-line--coverage-toggleのエイリアスであるすべての形式のカバレッジを有効にします
--coverage-user」。

-カバレッジライン
基本ブロックラインカバレッジ分析コードを挿入する必要があることを指定します。

カバレッジ分析では、各コードフローの変更ポイントにステートメントが追加されます。
IFおよびCASEステートメントのブランチ、通常のVerilog LineCoverageのスーパーセット。 で
そのような各ブランチには、一意のカウンターがインクリメントされます。 テストの終わりに、カウンター
各カウンタに対応するファイル名と行番号とともに、
logs /coverage.pl。

Verilatorは、$ stopが含まれるブランチのカバレッジを自動的に無効にします。
$ stopブランチには、発生してはならないエラーチェックが含まれていると想定されます。 / * verilator
Coverage_block_off * /コメントは、そのブロック内のすべてのコードで同様の機能を実行します
以下、または/ * verilator Coverage_on / Coverage_off * /は、回線周辺のカバレッジを無効にします
コードの。

注Verilatorは、組み合わせ(クロックされていない)ブロックを過大評価する場合があります。
UNOPTFLAT警告が無効になっている信号を受信します。 最も正確な
カバレッジを使用する場合、結果はこの警告を無効にしません。

-カバレッジ-トグル
信号トグルカバレッジ分析コードを挿入する必要があることを指定します。

モジュール内のすべての信号のすべてのビットには、カウンターが挿入されています。 カウンターは
対応するビットのエッジが変化するたびに増分します。

タスクまたは開始/終了ブロックの一部であるシグナルは、ローカル変数と見なされ、
カバーされていません。 アンダースコアで始まる信号、整数である信号、または非常に幅の広い信号
(すべてのディメンションで合計256ビットを超えるストレージ)も対象外です。

モジュールが複数回インスタンス化される場合は、階層が圧縮されます。
カバレッジは、そのモジュールのすべてのインスタンス化全体でそのビットについて合計されます。
同じパラメータセット。 異なるパラメータ値でインスタンス化されたモジュールは
別のモジュールと見なされ、個別にカウントされます。

Verilatorは、信号のクロックドメインについて最小限のインテリジェントな決定を行います
に移動し、そのクロックドメインのエッジのみを検索します。 これは、エッジが
受信ロジックがエッジを認識できないことがわかっている場合は無視されます。 この
アルゴリズムは将来改善される可能性があります。 最終的な結果は、カバレッジがより低くなる可能性があることです
トレースを見ると何が表示されますが、カバレッジはより正確です
デザインへの刺激の質の表現。

モデルが安定している間、時間ゼロの近くでエッジがカウントされる場合があります。 いいね
そのようなカウントを防ぐために、リセットをリリースする直前にすべてのカバレッジをゼロにする練習をしてください
行動。

/ * verilator Coverage_off / on * /コメントペアは、そうでないシグナルの周囲で使用できます
RAMやレジスタファイルなどのトグル分析が必要です。

-カバレッジ-アンダースコア
アンダースコアで始まる信号のカバレッジを有効にします。 通常、これらの信号は
カバーされていません。 --trace-underscoreも参照してください。

--カバレッジユーザー
ユーザーが挿入した機能カバレッジを有効にします。 現在、すべての機能カバレッジポイント
SVAを使用して指定します。これは、-assertで個別に有効にする必要があります。

たとえば、次のステートメントは、コメント付きのカバレッジポイントを追加します
"DefaultClock":

DefaultClock:カバープロパティ(@(posedge clk)cyc == 3);

-DVAR=
許可せずに、指定されたプリプロセッサシンボルを定義します。 + defineに似ています。 +定義
-DはGCC互換性のエイリアスですが、Verilogツール全体でかなり標準的です。

- デバッグ
Verilatorのデバッグビルドイメージを選択し(利用可能な場合)、より多くの内部を有効にします
アサーション(「-debug-check」と同等)、デバッグメッセージ(「--debug-check」と同等)
"--debugi 4")、および中間形式のダンプファイル( "--dump-treei 3"と同等)。

--デバッグチェック
めったに必要ありません。 デバッグを変更せずに、内部デバッグアサーションチェックを有効にする
冗長性。 --debugを指定すると自動的に有効になります。

--debugi
--debugi-
めったに必要ありません-開発者が使用するため。 内部デバッグレベルをグローバルに設定します
指定されたデバッグレベル(1-10)または指定されたVerilatorソースファイルを
指定されたレベル(例:「-debugi-V3Width9」)。 レベルが高いほど、より詳細になります
メッセージ。

- 既定の言語
各Verilogファイルを最初に処理するときにデフォルトで使用される言語を選択します。
言語値は、「1364-1995」、「1364-2001」、「1364-2005」、「1800-2005」である必要があります。
「1800-2009」または「1800-2012」。

特定のファイル拡張子に関連付けられている任意の言語(さまざまな+を参照)長いext +
options)は、-default-languageで指定された言語よりも優先して使用されます。

--default-languageフラグは、同じものを使用するレガシーコードにのみ推奨されます
望ましいオプションは修復するコードを編集することであるため、すべてのソースファイルの言語
新しいキーワード、または適切な「 `begin_keywords」を追加します。 従来の混合言語設計の場合、
さまざまな+長いext +オプションを使用する必要があります。

このフラグまたは+のいずれかによって言語が指定されていない場合長いext +オプション、次に最新
SystemVerilog言語(IEEE 1800-2012)が使用されます。

+定義+VAR=
+定義+VAR=+var2=value2...
指定されたプリプロセッサシンボル、またはプラス記号で区切られている場合は複数のシンボルを定義します。
-Dに似ています。 + defineはVerilogツール全体でかなり標準的ですが、-Dはエイリアスです
GCC互換性のため。

--ダンプツリー
めったに必要ありません。 ダンプレベル3で.treeデバッグファイルの書き込みを有効にします。これにより、
標準的な重要な段階。 フォーマットの詳細については、VerilatorInternalsを参照してください。
マニュアル。 --dump-treeは--debugで自動的に有効になるため、「-debug
--no-dump-tree "は、ダンプファイルが大きく、望ましくない場合に役立つことがあります。

--dump-treei
--dump-treei-
めったに必要ありません-開発者が使用するため。 内部ツリーのダンプレベルをグローバルに設定します
特定のダンプレベルを指定するか、指定されたVerilatorソースファイルを指定された値に設定します
ツリーのダンプレベル(例:「-dump-treei-V3Order9」)。 レベル0はダンプを無効にし、
「--no-dump-tree」と同等です。 レベル9では、すべてのステージのダンプが可能です。

-Eソースコードを前処理しますが、 'gcc-E'のようにコンパイルしないでください。 出力が書き込まれます
標準化する。 デバッグメッセージを有効にすることに注意してください。
標準アウト。

-エラー制限
この数のエラーまたは警告が発生したら、終了します。 デフォルトは50です。

- EXE
実行可能ファイルを生成します。 また、追加の.cppファイルを
シミュレーションのメインループを実装するコマンドライン。

-F file
指定されたファイルを読み取り、その中のすべてのテキストがコマンドとして指定されたかのように動作します
ラインパラメータ。 相対パスは、を含むディレクトリからの相対パスです。
指定されたファイル。 -fも参照してください。 注-Fは、Verilogツール全体でかなり標準的です。

-f file
指定されたファイルを読み取り、その中のすべてのテキストがコマンドとして指定されたかのように動作します
ラインパラメータ。 相対パスはすべて、現在のディレクトリからの相対パスです。 も参照してください
-F。 注-fは、Verilogツール全体でかなり標準的です。

ファイルには、行末まで無視される//コメントが含まれている場合があります。 任意の$ VAR、
$(VAR)、または$ {VAR}は、指定された環境変数に置き換えられます。

--gdb
インタラクティブGDB(またはVERILATOR_GDB環境変数)の下でVerilatorを実行します
値)セッション。 --gdbbtも参照してください。

--gdbbt
--debugが指定されている場合は、GDBプロセスの下でVerilatorを実行し、バックトレースを出力します
終了時に、すぐにGDBを終了します。 --debugがない場合、またはGDBが機能していないように見える場合は、
このフラグは無視されます。 ユーザーがバックトレースを簡単に作成できるようにすることを目的としています。 それ以外は
--gdbフラグを参照してください。

- 助けて
このメッセージとプログラムバージョンを表示して終了します。

-IDIR
-yを参照してください。

--if-深さ
めったに必要ありません。 IFDEPTH警告が発生する深さを設定します。デフォルトは0です。
これにより、この警告が無効になります。

+ incdir +DIR
-yを参照してください。

-- 抑制シム
めったに必要ありません。 「inhibitSim(bool)」関数を作成して、評価を有効または無効にします。
これにより、上位レベルのテストベンチで、重要ではないモジュールを無効にすることができます。
SystemCモジュールを再コンパイルまたは変更する必要なしに、与えられたシミュレーション
インスタンス化されました。

-インライン-マルチ
モジュールのインライン化を調整します。 デフォルト値の2000は、最大2000の新規を指定します
この数を超える場合は、インライン化によってモデルに操作を追加できます。
操作が発生し、モジュールはインライン化されません。 大きい値、または値<= 1
すべてをインライン化し、コンパイル時間を長くしますが、潜在的に高速になります
ランタイム。 この設定は、非常に小さいモジュールでは無視されます。 彼らは常になります
許可されている場合は、インライン化。

-LDFLAGS フラグ
生成されたmakefileに指定されたCリンカーフラグを追加します。 makeが実行されるとき
生成されたmakefileは、プライマリの*後*にC ++リンカー(ld)に渡されます。
リンクされているファイル。 このフラグは-LDFLAGSと呼ばれます。これは、
シミュレーター; これはMakefile変数であるため、LDLIBSと呼ばれる方がよいでしょう。
それが制御します。 (Makeでは、LDFLAGSは最初のオブジェクトの前にあり、LDLIBSは後にあります。-L
ライブラリは、LDFLAGSではなくMake変数LDLIBSに含まれている必要があります。)

- 言語
他のツールおよび以前のツールとの互換性のための「--default-langauge」の同義語
Verilatorのバージョン。

+ libext +EXT+EXT...
モジュールの検索に使用する拡張機能を指定します。 たとえばモジュールの場合
x 参照されています、見てください x.EXT。 + libext +はVerilog全体でかなり標準的であることに注意してください
ツール。 デフォルトは.vおよび.svです。

--lintのみ
lint違反についてのみファイルをチェックし、他の出力を作成しないでください。

-Wallオプションを使用して、文体と見なされるメッセージを有効にすることもできます。
デフォルトでは有効になっていません。

デザインを完全に検証しない場合は、-bbox-sysおよび
--bbox-unsupオプション。

--MMD
依存関係の検出に使用される.d依存関係ファイルの作成を有効にします。
gcc-MMDオプション。 デフォルトでは、-no-MMDを使用して無効にします。

--MP
--MMDを使用して.d依存関係ファイルを作成する場合は、偽のターゲットを作成します。 gcc-MPに似ています
オプションを選択します。

--ムディル ディレクトリにジョブを開始します。
Makeオブジェクトディレクトリの名前を指定します。 生成されたすべてのファイルが配置されます
このディレクトリにあります。 指定しない場合、「obj_dir」が使用されます。 ディレクトリは次の場合に作成されます
それは存在せず、親ディレクトリは存在します。 それ以外の場合は、手動でMdirを作成します
Verilatorを呼び出す前に。

--mod-プレフィックス トップネーム
すべての下位レベルのクラスに付加する名前を指定します。 デフォルトはと同じ
-プレフィックス。

--no-clk
指定された信号がクロックとしてマークされないようにします。 「--clk」を参照してください。

--ピンなし64
「--pins-bv33」の下位互換性のあるエイリアス。

-スキップなし-同一
めったに必要ありません。 すべてのソースファイルが
同一であり、すべての出力ファイルは新しい日付で存在します。

+ notimingchecks
他のシミュレータとの互換性のために無視されます。

-O0モデルの最適化を無効にします。

-O3(Verilator自体が生成するコードとは対照的に)コードの低速最適化を有効にします
Cコンパイラの最適化に影響を与える「-CFLAGS-O3」。 -O3はシミュレーションを減らす可能性があります
コンパイル時間を犠牲にしてランタイム。 これにより、現在--inline-mult-1が設定されます。

-O最適化レター
めったに必要ありません。 最適化を使用して、特定の最適化を有効または無効にします
渡された手紙に基づいて選択されます。 小文字は最適化を無効にします。
大文字はそれを可能にします。 これは、デバッグでの使用のみを目的としています。 ソースを参照してください
-O文字への最適化のバージョン依存マッピングのコード。

-o
--exeを使用する場合は、ビルドされる最終的な実行可能ファイルの名前を指定します。 デフォルトは
-指定されていない場合はプレフィックス。

--順序なしクロック遅延
めったに必要ありません。 クロックの順序付けのバグ修正を無効にし、遅延を有効にします
割り当て。 このフラグは、開発者によって提案された場合にのみ使用する必要があります。

--出力分割 バイト
出力.cpp / .spファイルを複数の出力に分割できるようにします。 C ++ファイルの場合
指定された操作回数を超えると、次に新しいファイルが作成されます
関数の境界。 さらに、遅いルーチンはすべて__Slowファイルに配置されます。
これにより、低速のルーチンで最適化を無効にできるため、コンパイルが高速化されます。
残りのファイルは並列マシンでコンパイルできます。 --output-splitを使用する
パフォーマンスにわずかな影響しか与えないはずです。 3.3GHzOpteron上のGCC2では、
--output-split 20000は、約XNUMX分に分割されます-コンパイル
チャンク。

--output-split-cfuncs
出力.cpp / .spファイルの関数を複数の関数に分割できるようにします。
生成された関数が指定された操作数を超えると、新しい関数
作成されます。 --output-splitを使用すると、GCCをより高速にコンパイルできるようになります。
分割値を減らすと悪化するパフォーマンスの小さな損失。 ご了承ください
このオプションは、-output-splitが実行しないという意味で、-output-splitよりも強力です。
関数内で分割します。

--output-split-ctrace
出力.cpp / .spファイルのトレース機能を複数に分割できるようにします
機能。 デフォルトは--output-split-cfuncsと同じ設定です。

-P -Eを使用すると、GCC -Pフラグと同様に、 `行マーカーと空白行の生成を無効にします。

--ピン64
「--pins-bv65」の下位互換性のあるエイリアス。 これは65ではなく64であることに注意してください。

--ピン-bv
SystemCの入力/出力を以上に指定します ビット幅が必要です
uint32 / vluint64_tの代わりにsc_bvを使用します。 デフォルトは「--pins-bv65」です。 バージョン
Verilator3.671より前のデフォルトは「--pins-bv33」でした。 sc_bvを多く使用するほど、悪化します
パフォーマンスのために。 「/ * verilatorsc_bv * /」属性を使用して、特定のポートを選択します。
sc_bvになります。

--pins-sc-uint
2ビット幅を超えるSystemC入力/出力がsc_uintを使用する必要があることを指定します
2〜64。「-pins-sc-biguint」の組み合わせと組み合わせると、次のようになります。
sc_uintは2から64の間で使用され、sc_biguintは65から512の間で使用されます。

--ピン-sc-biguint
65ビット幅を超えるSystemC入力/出力がsc_biguintを使用する必要があることを指定します
65〜512、および513以上のsc_bv。 と組み合わせると
「--pins-sc-uint」の組み合わせでは、sc_uintが2〜64の間で使用されます。
sc_biguintは65から512の間で使用されています。

--ピン-uint8
--pins-bv設定および8よりも小さいSystemC入力/出力を指定します
ビット以下では、uint8_tの代わりにuint32_tを使用する必要があります。 同様に、幅9〜16のピンは
uint16_tの代わりにuint32_tを使用してください。

-パイプフィルター command
めったに必要とされず、実験的です。 Verilatorは、指定されたコマンドを次のように生成します。
サブプロセスパイプ。コマンドがVerilogコードに対してカスタム編集を実行できるようにします。
ベリレーターに到達する前に。

各Verilogファイルを読み取る前に、Verilatorはファイル名をサブプロセスに渡します。
stdin with'read_verilog " "'。その後、フィルターはファイルを読み取り、実行する場合があります
必要なフィルタリングを行い、新しいファイルの内容をstdoutのVerilatorにフィードバックします。
'Content-Length'を使用します。 フィルタからstderrへの出力は、Verilatorにフィードスルーされます。
stdoutであり、フィルターがゼロ以外のステータスで終了した場合、Verilatorは終了します。 を参照してください
例としてt / t_pipe_filterテスト。

フィルタの出力をデバッグするには、-Eオプションを使用して前処理された出力を確認してみてください。

--prefix トップネーム
トップレベルクラスとmakefileの名前を指定します。 デフォルトはVの前に付けられます
--top-moduleスイッチの名前、または最初のVerilogファイル名の前に付けられたV
コマンドラインで渡されます。

--profile-cfuncs
作成されたC ++関数を変更して、プロファイリングをサポートします。 機能は次のようになります
XNUMXつの「基本的な」ステートメントを含むように最小化されます。通常、単一の常にブロックまたはワイヤです。
声明。 (これにより、実行可能ファイルの速度が最大5%低下することに注意してください。)さらに、
関数名には、Verilogモジュールのベース名と行番号が接尾辞として付けられます
声明はから来ました。 これにより、gprofまたはoprofileレポートを次のように関連付けることができます。
元のVerilogソースステートメント。

- プライベート
--publicの反対。 デフォルトです。 このオプションは、下位互換性のために存在します。

- 公衆
これは、履歴デバッグでのみ使用されます。 これを使用すると、シミュレーションの誤りが発生する可能性があります
生成されたクロック。

すべてのシグナルとモジュールをパブリックと宣言します。 これにより、信号の最適化がオフになります。
すべてのシグナルに/ * verilator public * /コメントとインライン化が含まれている場合。 これも変わります
モジュールがない限り、すべてのモジュールに/ * verilator public_module * /があるかのようにインライン化をオフにします
特に/ * verilator inline_module *で有効にしました/.

-レポート-unoptflat
UNOPTFLAT警告の追加の診断。 これには、ループごとに、最も幅の広い10が含まれます
ループ内の変数、およびループ内で最もファンアウトされた10個の変数。 これらは
ループを壊すために複数の変数に分割する候補。

さらに、強く接続されたコンポーネント全体のGraphVizDOTファイルを生成します
各ループに関連付けられたソース内。 これは、かどうかに関係なく生成されます
--dump-treeが設定されます。 このようなグラフは問題の分析に役立つ場合がありますが、非常に役立つ場合があります
確かに大きい。

DOTファイルを表示および操作するためのさまざまなコマンドがあります。 たとえば、 ドット
コマンドを使用して、DOTファイルを印刷用のPDFに変換できます。 例えば:

ドット -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot

DOTファイルからPDFVt_unoptflat_simple_2_35_unoptflat.dot.pdfを生成します。

-保存可能
生成されたモデルに保存および復元機能を含めることを有効にします。

ユーザーコードは、VerilatedSerializeまたはVerilatedDeserialzeオブジェクトを作成する必要があります。
生成されたモデルおよびその他のデータで<<または>>演算子をプロセスに呼び出す
保存/復元する必要があります。 例えば:

void save_model(const char * filenamep){
VerilatedSave OS;
os.open(filenamep);
os << main_time; //ユーザーコードはタイムスタンプなどを保存する必要があります
os << * topp;
}
void restore_model(const char * filenamep){
VerilatedRestore OS;
os.open(filenamep);
os >> main_time;
os >> * topp;
}

--sc
SystemC出力モードを指定します。 --ccも参照してください。

-統計
{prefix} __ stats.txtのデザインに関する統計を含むダンプファイルを作成します。

--stats-vars
サイズごとのすべての変数のリストを含む、より詳細な統計を作成します(プレーン
--statsはカウントを与えるだけです)。 これによって暗示される--statsを参照してください。

-svSystemVerilog言語機能を有効にする必要があることを指定します。 「--language」と同等
1800-2005 "。このオプションはデフォルトで選択されており、との互換性のために存在します
他のシミュレーター。

+ systemverilogext +EXT
「+ 1800-2012ext +」の同義語EXT.

-トップモジュール トップネーム
入力Verilogに複数のトップレベルモジュールが含まれている場合、の名前を指定します
トップレベルのVerilogモジュールがトップになり、if--prefixのデフォルトを設定します
使用されません。 これは、トップがXNUMXつしかない標準的な設計では必要ありません。

- 痕跡
モデルに波形トレースコードを追加します。 Verilatorは追加の
コンパイルする必要がある{prefix} __ Trace * .cppファイル。 加えて
verilated_vcd_sc.cpp(SystemCトレースの場合)またはverilated_vcd_c.cpp(両方の場合)は、
コンパイルされ、リンクされます。Verilatorで生成されたMakefileを使用する場合、これらは次のようになります。
ソースターゲットとして追加されました。 Verilator makefileを使用していない場合は、
これらをMakefileに手動で追加する必要があります。

トレースをコンパイルすると、たとえ次の場合でも、パフォーマンスがわずかに低下する可能性があります。
モデルの実行中、波形はオンになりません。

-- トレース深度 レベル
トレースを有効にする深さのレベル数を指定します(例:-trace-level 1 to
トップレベルの信号のみを表示します。 デフォルトはモデル全体です。 少数を使用する
可視性は低下しますが、ランタイムとトレースファイルのサイズが大幅に向上します。

--trace-max-array 深さ
めったに必要ありません。 トレースできる信号の最大アレイ深度を指定します。
大きな配列をトレースすると、トレースされるシミュレーションが大幅に遅くなる可能性があるため、デフォルトは32です。

--トレース最大幅
めったに必要ありません。 トレースできる信号の最大ビット幅を指定します。
大きなベクトルをトレースすると、トレースされたシミュレーションが大幅に遅くなる可能性があるため、デフォルトは256です。

--no-trace-params
パラメータのトレースを無効にします。

-- トレース構造体
トレースを有効にして、パック構造体、共用体、およびパック配列フィールドの名前を表示します。
単純な複合パックバスではなく。 VCDファイル形式の制約により、これは
その結果、トレース時間が大幅に遅くなり、トレースファイルが大きくなります。

--trace-アンダースコア
アンダースコアで始まる信号のトレースを有効にします。 通常、これらの信号は
トレース中に出力されません。 --coverage-underscoreも参照してください。

-UVAR
指定されたプリプロセッサシンボルの定義を解除します。

--アンロール数 loops
めったに必要ありません。 展開できるループ反復の最大数を指定します。
BLKLOOPINIT警告も参照してください。

--unroll-stmts
めったに必要ありません。 そのループのループ内のステートメントの最大数を指定します
展開されます。 BLKLOOPINIT警告も参照してください。

-未使用-正規表現 正規表現
めったに必要ありません。 *と?を使用して単純な正規表現を指定します信号名が一致する場合
UNUSED警告を抑制します。 デフォルトは「*未使用*」です。 「」に設定すると無効になります
マッチング。

-Vにコンパイルされた構成情報を含む詳細バージョンを表示します
ベリレーター。 (perl -Vに似ています。)

-v ファイル名
ファイル名をVerilogライブラリとして読み取ります。 ファイル内の任意のモジュールを使用して
トップレベルモジュールでセルのインスタンス化を解決します。それ以外の場合は無視されます。 注-vはかなりです
Verilogツール全体の標準。

+ verilog1995ext +EXT
+ verilog2001ext +EXT
「+ 1364-1995ext +」の同義語EXT および「+ 1364-2001ext +」EXT それぞれ

-壁
通常はによって無効にされるコードスタイルの警告を含む、すべての警告を有効にします
デフォルト。

-エラー-メッセージ
指定された警告メッセージをエラーメッセージに変換します。 これは一般的に
たとえば、ユーザーがサイト全体の重要なルールに違反するのを思いとどまらせる
「-Werror-NOUNOPTFLAT」。

-将来-メッセージ
めったに必要ありません。 指定された不明なVerilatorコメントまたは警告メッセージを抑制します
メッセージコード。 これは、後のバージョンのプラグマで記述されたコードを許可するために使用されます。
古いバージョンで実行するベリレーター。 各メッセージコードに-Wfuture-引数を追加します
または、古いバージョンがサポートしていない新しいバージョンがサポートしていることをコメントします。

-いいえ-メッセージ
指定された警告メッセージを無効にします。 これにより、のlint_onディレクティブが上書きされます
ソース、つまり警告はまだ印刷されません。

-糸くずなし
すべてのlint関連の警告メッセージとすべてのスタイル警告を無効にします。 これは同等です
to "-Wno-ALWCOMBORDER -Wno-CASEINCOMPLETE -Wno-CASEOVERLAP -Wno-CASEX -Wno-CASEWITHX
-Wno-CMPCONST -Wno-ENDLABEL -Wno-IMPLICIT -Wno-LITENDIAN -Wno-PINCONNECTEMPTY
-Wno-PINMISSING -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNSIGNED -Wno-UNUSED -Wno-WIDTH "
加えて、Wnoスタイルで表示されるリスト。

このオプションを使用するのではなく、コードをクリーンアップすることを強くお勧めします。
サードパーティから受け取ったコードのテストケースを実行する場合にのみ使用することを目的としています。

-Wnoスタイル
すべてのコードスタイル関連の警告メッセージを無効にします(デフォルトでは、すでにメッセージが表示されていることに注意してください)
無効)。 これは、「-Wno-DECLFILENAME -Wno-DEFPARAM-Wno-INCABSPATH」と同等です。
-Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNUSED
-Wno-VARHIDDEN」。

-致命的ではない
警告が検出されたら、それらを印刷しますが、シミュレーターを終了しないでください。

ビルドに警告メッセージが表示されるのはお粗末です。 クリーンアップすることを強くお勧めします
このオプションを使用するのではなく、コードを使用するか、インラインlint_offを使用するか、-Wno -...フラグを使用してください。

-警告-メッセージ
指定された警告メッセージを有効にします。

-警告-lint
すべてのlint関連の警告メッセージを有効にします(デフォルトではすでに有効になっていることに注意してください)。
ただし、スタイルメッセージには影響しません。 これは「-Wwarn-ALWCOMBORDER」と同等です。
-Wwarn-CASEINCOMPLETE -Wwarn-CASEOVERLAP -Wwarn-CASEX -Wwarn-CASEWITHX -Wwarn-CMPCONST
-Wwarn-ENDLABEL -Wwarn-IMPLICIT -Wwarn-LITENDIAN -Wwarn-PINMISSING -Wwarn-REALCVT
-Wwarn-UNSIGNED-Wwarn-WIDTH」。

-警告スタイル
すべてのコードスタイル関連の警告メッセージを有効にします。 これは「-Wwarn」と同等です。
ASSIGNDLY -Wwarn-DECLFILENAME -Wwarn-DEFPARAM -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT
-Wwarn-SYNCASYNCNET -Wwarn-UNDRIVEN -Wwarn-UNUSED-Wwarn-VARHIDDEN」。

--x-割り当て0
--x-割り当て1
--x-高速割り当て(デフォルト)
--x-一意に割り当てます
Xへの割り当てが検出されたときに置き換えられるXNUMXつの状態の値を制御します。
--x-assign = fast(デフォルト)は、すべてのXをパフォーマンスに最適なものに変換します。
--x-assign = 0は、すべてのXを0に変換し、高速です。 --x-assign = 1は、すべてのXをに変換します
1秒、これは0とほぼ同じ速さですが、リセットバグがアクティブハイとして検出される可能性が高くなります
ロジックが起動します。 --x-assign = uniqueは、値を決定する関数を呼び出します。これは
すべてのXをランダム化してリセットのバグを見つけることができ、最も低速ですが、最も安全です。
コード内のリセットバグを見つける。

--x-assign uniqueを使用する場合は、次のような乱数ジェネレーターをシードすることをお勧めします。
各回帰実行は異なるランダム化シーケンスを取得します。 システムを使用する
srand48() またはWindowsの場合 srand() これを行うための関数。 あなたもおそらくしたいと思うでしょう
選択したシードを印刷し、同じシードで再実行できるようにコーディングして、次のことができるようにします。
バグを再現します。

ノート。 このオプションは、でXに明示的に割り当てられている変数にのみ適用されます。
Verilogソースコード。 --x-initial-edgeが次の場合を除いて、クロックの初期値は0に設定されます。
指定。 他のすべての状態保持変数の初期値は、次のように設定されます
--x-assignuniqueが指定されていました。

--x-初期エッジ
一般的にエッジをトリガーするイベント駆動型シミュレーターのエミュレーションを可能にします
Xから1(「ポーズ」)またはXから0(「ネガ」)への遷移。 したがって、次のコードは、
「rst_n」が初期化されていない場合、「rst_n」が最初に設定されたときに「res_n」が「1'b1」に設定されます
ゼロにする:

reg res_n = 1'b0;

常に@(negedge rst_n)begin
if(rst_n == 1'b0)begin
res_n <= 1'b1;
end
end

Verilatorでは、デフォルトでは、初期化されていないクロックにゼロの値が与えられるため、上記の
「常に」ブロックはトリガーされません。

良い習慣ではありませんが、XX0がトリガーすることに依存する設計がいくつかあります。
特にリセットシーケンスでの「ネガティブ」。 Verilatorで--x-initial-edgeを使用すると、
この動作を複製します。 また、XX1が「ポーズ」をトリガーすることも保証されます。

ノート。 一部のユーザーは、このオプションを使用すると収束に影響を与える可能性があると報告しています。
収束の数を増やすには、-converge-limitを使用する必要がある場合があります
反復。 これは、モデル化された設計に問題があることを示すもうXNUMXつの兆候である可能性があります。
対処すべきです。

-y DIR
インクルードファイルを検索する必要があるディレクトリのリストにディレクトリを追加します
またはライブラリ。 XNUMXつのフラグ-y、+ incdir、および-Iは同様の効果があります。 + incdirおよび+ y
-IはGCC互換性のエイリアスですが、Verilogツール全体でかなり標準的です。

Verilatorのデフォルトは、現在のディレクトリ( "-y。")と指定された--Mdirです。
これらのデフォルトパスは、ユーザーが指定したディレクトリの後に使用されます。 これにより、 '-y
「$(pwd)」 'は、エラーメッセージに絶対ファイル名ではなく絶対ファイル名が必要な場合に使用されます
相対ファイル名。

実施例 C + + 実行


この例をC ++にコンパイルします。

mkdir test_our
cd test_our

猫< our.v
モジュール私たち;
初期開始$ display( "Hello World"); $ finish; 終わり
エンドモジュール
EOF

猫< sim_main.cpp
#include "Vour.h"
#include "verilated.h"
int main(int argc、char ** argv、char ** env){
Verilated :: commandArgs(argc、argv);
Vour * top =新しいVour;
while(!Verilated :: gotFinish()){top-> eval(); }
トップを削除します。
終了する(0);
}
EOF

ソースまたはtarballからVerilatorをインストールしたが、操作の一部としてインストールしなかった場合
システム(RPMとして)、最初にキットを指す必要があります:

VERILATOR_ROOT = / path / to / where / verilator / was / installedをエクスポートします
export PATH = $ VERILATOR_ROOT / bin:$ PATH

次に、小さな例でVerilatorを実行します。

verilator -Wall --cc our.v --exe sim_main.cpp

「obj_dir」ディレクトリの下にソースコードが表示されます。 以下のファイルセクションを参照してください
作成されたいくつかのファイルの説明。

ls -l obj_dir

その後、コンパイルできます

cd オブジェクトディレクトリ
make -j -f Vour.mk Vour

(Verilatorには、デフォルトのコンパイルルールとリンクルールが含まれていました。これは、-exeを使用して、
Verilatorコマンドラインの.cppファイル。 次のように、独自のコンパイルルールを作成することもできます。
SYSTEMCセクションに表示します。)

そして今、私たちはそれを実行します

CD ..
obj_dir / Vour

そして、出力として取得します

こんにちは世界
--our.v:2:Verilog $ finish

本当に、あなたはあなたのためにこれらすべてをするためにMakefileを書くほうがよいです。 次に、
ソースを変更すると、これらすべてのステップが自動的に実行されます。 のtest_cディレクトリを参照してください
例の分布。

実施例 システム 実行


これは上記と同様の例ですが、SystemCを使用しています。

mkdir test_our_sc
cd test_our_sc

猫< our.v
モジュール私たち(clk);
入力clk; //初期アクティベーションを取得するには時計が必要です
常に@(posedge clk)
$ display( "Hello World");を開始します。 $ finish; 終わり
エンドモジュール
EOF

猫< sc_main.cpp
#include "Vour.h"
int sc_main(int argc、char ** argv){
Verilated :: commandArgs(argc、argv);
sc_clock clk( "clk"、10、0.5、3、true);
Vour *トップ;
top = new Vour( "top"); // SP_CELL(top、Vour);
top-> clk(clk); // SP_PIN(top、clk、clk);
while(!Verilated :: gotFinish()){sc_start(1、SC_NS); }
トップを削除します。
終了する(0);
}
EOF

ソースまたはtarballからVerilatorをインストールしたが、操作の一部としてインストールしなかった場合
システム(RPMとして)、最初にキットを指す必要があります:

VERILATOR_ROOT = / path / to / where / verilator / was / installedをエクスポートします
export PATH = $ VERILATOR_ROOT / bin:$ PATH

次に、小さな例でVerilatorを実行します。

verilator -Wall --sc our.v

その後、コンパイルできます

make -j -f Vour.mk Vour__ALL.a
make -j -f Vour.mk ../sc_main.o verilated.o

そしてSystemCとリンクします。 ライブラリへのパスは、
オペレーティング·システム。

SYSTEMC_LIBDIR = / path / to / where / libsystemc.a / existsをエクスポートします
LD_LIBRARY_PATH = $ SYSTEMC_LIBDIR:$ LD_LIBRARY_PATHをエクスポートします
#SystemC2.3.0の場合に必要になる可能性があります
エクスポートSYSTEMC_CXX_FLAGS = -pthread

g ++ -L $ SYSTEMC_LIBDIR ../sc_main.o Vour__ALL * .o verilated.o \
-o Vour -lsystemc

そして今、私たちはそれを実行します

CD ..
obj_dir / Vour

そして、C ++の例と同じ出力が得られます。

こんにちは世界
--our.v:2:Verilog $ finish

実際、Makefileを使用してこれらすべてを実行する方がよいでしょう。 次に、あなたのソースが
変更すると、これらすべてのステップが自動的に実行されます。 のtest_scディレクトリを参照してください
例の配布。

ベンチマーク & 最適化


最高のパフォーマンスを得るには、「-O3 --x-assign = fast--noassert」フラグを指定してVerilatorを実行します。 The
-O3フラグはより長いコンパイル時間を必要とし、-x-assign = fastはリスクを高める可能性があります
パフォーマンスと引き換えにバグをリセットします。 これらのフラグについては、上記のドキュメントを参照してください。

マイナーなVerilogコードの変更も、大きな成果をもたらす可能性があります。 UNOPTFLATは必要ありません
Verilatorからの警告。 これらの警告を修正すると、大幅な改善が見込めます。 XNUMX人のユーザー
ゲートに使用されるクロックラッチに簡単な変更を加えることで、XNUMXつのUNOPTFLAT警告を修正しました
クロックと60%のパフォーマンスの向上を獲得しました。

それを超えて、Verilatedモデルのパフォーマンスは主にC ++コンパイラと
CPUのキャッシュのサイズ。

デフォルトでは、lib /verilated.mkファイルの最適化はオフになっています。 これは
ランタイムを犠牲にしてコンパイル時間を改善するため、新規ユーザーのメリット。 たす
最適化をデフォルトとして、OPT、OPT_FAST、またはOPT_SLOWのXNUMXつの変数のいずれかを設定します
lib /verilated.mk。 または、ベリレータコマンドで-CFLAGSおよび/または-LDFLAGSオプションを使用します
フラグをコンパイラまたはリンカに直接渡す行。 または、XNUMX回の実行で、パスします
それらをコマンドラインで作成します。

OPT_FAST = "-O2" -f Vour.mkVour__ALL.aを作成します

OPT_FASTは、主に高速パスの一部であるプログラムの最適化を指定します
サイクルごとに実行されるコード。 OPT_SLOWは、スローパスファイルの最適化を指定します
(プラストレース)、これはめったに実行されませんが、コンパイルに長い時間がかかります
の最適化。 OPTは全体的な最適化を指定し、以下を含むすべてのコンパイルに影響します
それらのOPT_FASTとOPT_SLOWが影響します。 最良の結果を得るには、OPT = "-O2"を使用し、
"-静的"。 コンパイル時間が大幅に短縮されても、ほぼ同じ結果が得られます。
OPT_FAST = "-O1-fstrict-aliasing"。 「-O3」などのより高度な最適化が役立つ場合がありますが、gcc
中規模のデザインでも、O3ではコンパイル時間が長くなる可能性があります。 あるいは、いくつか
デザインが大きいほど、「-Os」を使用するとパフォーマンスが向上します。

残念ながら、SystemCファイルでオプティマイザーを使用すると、コンパイルに時間がかかる可能性があります
数分。 (SystemCライブラリには、
コンパイラナット。)

最良の結果を得るには、GCC3.3以降を使用してください。 GCC 3.2以前には、最適化のバグがあります
ポインタエイリアシングの検出。これにより、パフォーマンスが2倍低下する可能性があります。

XNUMX回のコンパイルで多くのシミュレーションを実行する場合は、フィードバック駆動型を調査してください
コンパイル。 GCCで、-fprofile-arcsを使用すると、-fbranch-probabilitiesは次のようになります。
さらに15%かそこら。

最新のコンパイラは、リンク時最適化(LTO)もサポートしています。これは、特に次の場合に役立ちます。
DPIコードでリンクします。 GCCでLTOを有効にするには、コンパイルとリンクの両方で「-flto」を渡します。
注LTOは、大規模なデザインで過度のコンパイル時間を引き起こす可能性があります。

独自のmakefileを使用している場合は、Verilatedコードを次のようにコンパイルすることをお勧めします。
-DVL_INLINE_OPT =インライン。 これは関数をインライン化しますが、これにはすべてのcppが必要です
ファイルはXNUMX回のコンパイラ実行でコンパイルされます。

Verilogコードをプロファイリングすることで、さらにチューニングの可能性を見つけることができます。 つかいます
Verilatorの--profile-cfuncs、次にGCCの-g-pg。 その後、oprofileまたは
gprofは、C ++コードのどこで時間が費やされているかを確認します。 gprof出力を実行します
verilator_profcfuncを使用すると、ほとんどのVerilogの行番号がわかります。
時間が費やされています。

完了したら、作成者に結果を知らせてください。 私はベリレーターがどのように
比較し、追加の改善を提案できる場合があります。

onworks.netサービスを使用してオンラインでベリレーターを使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad




×
広告
❤️ここでショッピング、予約、購入してください。料金はかかりません。これにより、サービスが無料で維持されます。