Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート...

62
Vivado Design Suite チュート リアル ロジック シミュレーション この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報 につきましては、必ず最新英語版をご参照ください。 すべてのバージョンを表示 UG937 (v2019.2) 2019 年 10 月 30 日

Transcript of Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート...

Page 1: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

Vivado Design Suite チュートリアルロジック シミュレーションUG937 (v2019.1) 2019 年 6 月 4 日

この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきましては、必ず最新英語版をご参照ください。

すべてのバージョンを表示

UG937 (v2019.2) 2019 年 10 月 30 日

Page 2: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

改訂履歴次の表に、この文書の改訂履歴を示します。

セクション 改訂内容2019 年 6 月 4 日 バージョン 2019.1

第 5 章: 演習 4: SystemVerilog の機能 新しい章を追加。

改訂履歴

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 2UG937 (v2019.2) 2019 年 10 月 30 日

2019/10/30: Vivado® Design Suite 2019.2 リリース。2019.1 リリースから内容の変更なし。

Page 3: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

目次改訂履歴..........................................................................................................................................................................2

第 1 章: Vivado シミュレータの概要......................................................................................................... 5概要..................................................................................................................................................................................5チュートリアルの説明....................................................................................................................................................5チュートリアル ファイルの場所.................................................................................................................................... 7ソフトウェアおよびハードウェアの要件...................................................................................................................... 7

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行.................................................................. 9手順 1: 新規プロジェクトの作成....................................................................................................................................9手順 2: IP カタログからの IP の追加........................................................................................................................... 14手順 3: ビヘイビアー シミュレーションの実行.......................................................................................................... 19まとめ............................................................................................................................................................................ 21

第 3 章: 演習 2: デザインのデバッグ....................................................................................................... 22手順 1: プロジェクトを開く......................................................................................................................................... 22手順 2: 信号波形の表示................................................................................................................................................ 23手順 3: アナログ波形ビューアーの使用...................................................................................................................... 24手順 4: 波形ウィンドウの使用..................................................................................................................................... 26手順 5: 信号プロパティの変更..................................................................................................................................... 30手順 6: 波形設定の保存................................................................................................................................................ 31手順 7: デザインの再シミュレーション...................................................................................................................... 33手順 8: カーソル、マーカーの使用および時間の計測................................................................................................ 34手順 9: ブレークポイントを使用したデバッグ........................................................................................................... 36手順 10: シミュレーションの再実行............................................................................................................................41まとめ............................................................................................................................................................................ 42

第 4 章: 演習 3: バッチ モードのシミュレーションの実行..................................................... 43手順 1: シミュレーションの準備..................................................................................................................................43手順 2: シミュレーション スナップショットの構築...................................................................................................45手順 3: デザインの手動シミュレーション...................................................................................................................46まとめ............................................................................................................................................................................ 47

第 5 章: 演習 4: SystemVerilog の機能.................................................................................................. 48サンプル デザインの作成............................................................................................................................................. 48機能カバレッジ............................................................................................................................................................. 55ランダム制約.................................................................................................................................................................59

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 3UG937 (v2019.2) 2019 年 10 月 30 日

Page 4: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

付録 A: その他のリソースおよび法的通知.......................................................................................... 61ザイリンクス リソース.................................................................................................................................................61Documentation Navigator およびデザイン ハブ...................................................................................................... 61お読みください: 重要な法的通知.................................................................................................................................61

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 4UG937 (v2019.2) 2019 年 10 月 30 日

Page 5: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

第 1 章

Vivado シミュレータの概要重要: このチュートリアルでは、Kintex®-7 ファミリのデバイスまたは UltraScale™ デバイスを使用します。このデバイスがインストールされていない場合は、Vivado® ツールのインストールをアップデートする必要があります。デザイン ツールまたはデバイスの追加の詳細は、『Vivado Design Suite ユーザー ガイド: リリース ノート、インストール、およびライセンス』 (UG973: 英語版、日本語版) を参照してください。

概要この ザイリンクス Vivado® Design Suite チュートリアルでは、Vivado シミュレータを詳しく紹介します。ビデオ: Vivado シミュレータの詳細は、Vivado ロジック シミュレーションの QuickTake ビデオをご覧ください。

トレーニング: ザイリンクスでは、この資料に含まれるコンセプトを説明するさまざまなトレーニング コースおよびQuickTake ビデオを提供しています。次のリンクから関連するコースを参照してください。• トレーニング クラス: Vivado Design Suite を使用した FPGA の設計 1

• トレーニング クラス: Vivado Design Suite を使用した FPGA の設計 2

• トレーニング クラス: Vivado Design Suite を使用した FPGA の設計 3

Vivado シミュレータは、ハードウェア記述言語 (HDL) シミュレータで、VHDL、Verilog、混合言語デザインのビヘイビアー、論理、タイミング シミュレーションを実行します。Vivado シミュレーション環境には、次の主な機能が含まれます。• xvhdl および xvlog: VHDL および Verilog ソース ファイルを解析し、解析済みファイルをディスクの HDL ライブラリに保存します。

• xelab: HDL エラボレータおよびリンカーのコマンド。最上位ユニットの場合、xelab を使用して、すべての下位デザイン ユニットが読み込まれ、実行可能なコードに変換されます。また、生成された実行コードをシミュレーション カーネルとリンクさせ、実行可能なシミュレーション スナップショットを作成します。

• xsim: Vivado シミュレーション コマンドは、シミュレーション スナップショットを読み込んで、バッチ モードのシミュレーションを実行するか、GUI または Tcl ベースの対話型シミュレーション環境を提供します。

• Vivado 統合設計環境 (IDE): 対話型の設計環境で、シミュレータのユーザー インターフェイスを提供します。

チュートリアルの説明このチュートリアルでは、Vivado 統合設計環境 (IDE) からビヘイビアー、論理、タイミング シミュレーションを実行する目的で Vivado® シミュレータを使用するデザイン フローを説明します。

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 5UG937 (v2019.2) 2019 年 10 月 30 日

Page 6: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

重要: チュートリアル ファイルは、Windows 環境で Vivado シミュレータを実行するように設定されています。Linux OS でこのチュートリアルを実行するには、ファイルを一部変更する必要がある場合があります。

Vivado シミュレータは、プロジェクト モード (Vivado デザイン プロジェクトを使用してデザイン ソースおよびデザイン フローを管理) および非プロジェクト モード (デザインを直接管理) の両方で実行可能です。プロジェクト モードおよび非プロジェクト モードの詳細は、 『Vivado Design Suite ユーザー ガイド: デザイン フローの概要』 (UG892:英語版、日本語版) を参照してください。次の図は、チュートリアル デザインのブロック図です。

図 1: チュートリアル デザイン

このチュートリアル デザインは次のブロックで構成されています。• 高、中、低の周波数の正弦波、および振幅正弦波を生成する Sine Wave Generator (sinegen.vhd)。• 低、中、高の周波数波を生成する DDS Compiler: (sine_low.vhd、sine_mid.vhd、および sine_high.vhd)。• 4 つの正弦波の中から 1 つを選択する有限ステート マシン (FSM) (fsm.vhd)。• Sine Wave Selector の未処理のものとデバウンスされたものとを切り替えるデバウンス回路 (debounce.vhd)。• FSM と Sine Wave Generator をリセットしてから、正弦波選択の結果を多重化させ LED に出力するデザインの最上位モジュール (sinegen_demo.vhd)。

第 1 章: Vivado シミュレータの概要

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 6UG937 (v2019.2) 2019 年 10 月 30 日

Page 7: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

• Sine Wave Generator デザインを開始する単純なテストベンチ (testbench.v):

○ デザインのシステム クロック sys_clk_p に 200 MHz の入力クロックを生成。○ GPIO ボタン選択を生成。○ Sine Wave Selector の未処理のものとデバウンスされたものとを切り替える。

注記: テストベンチの詳細は、『効率的なテストベンチの記述』 (XAPP199) を参照してください。

チュートリアル ファイルの場所このチュートリアルには演習ごとにプロジェクト ファイルおよびソース ファイルがあります。これらのファイルは、Xilinx ウェブサイトの [Support] → [Documentation] → [Development Tools (Product Type)] → [HardwareDevelopment (Product Category)] → [Vivado Design Suite – HLx Editions (Product)] → [Tutorials (Doc Type)]にあります。1. リファレンス デザイン ファイルをダウンロードします。2. ZIP ファイルの内容を書き込み可能なディレクトリに抽出します。このチュートリアルでは、抽出された ug937-design-files ディレクトリの内容は <Extract_Dir> と表記されます。

推奨: チュートリアルの作業を進めながら、チュートリアルのデザイン データを変更していきます。このチュートリアルを開始するたびに、デザイン ファイルの新しいコピーを使用してください。次の表は、ug937-design-files.zip ファイルの内容の説明です。表 1: デザイン ファイルの内容

ディレクトリ/ファイル 説明/completed 参照用に、チュートリアル デザインの完了したファイルおよび

Vivado 2019.x プロジェクトが含まれています。(「x」には Vivado 2019 IDE の最新バージョンが入ります。)

/scripts チュートリアルで実行するスクリプトが含まれています。/sim testbench.v ファイルが含まれています。/sources 論理シミュレーションに必要な HDL ファイルが含まれています。readme.txt readme.txt は README ファイルで、このチュートリアル デザインの内容およびバージョン履歴が記載されています。

ソフトウェアおよびハードウェアの要件このチュートリアルを実行するには、Vivado® Design Suite 2019.1 をインストールしておく必要があります。VivadoDesign Suite が x86 および x86-64 プロセッサ アーキテクチャでサポートする OS は次のとおりです。• Microsoft Windows サポート:

• Windows 8.1 Professional (32 ビットおよび 64 ビット)、英語/日本語

第 1 章: Vivado シミュレータの概要

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 7UG937 (v2019.2) 2019 年 10 月 30 日

Page 8: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

• Windows 7 および 7 SP1 Professional (32 ビットおよび 64 ビット)、英語版/日本語版• Linux サポート:

• Red Hat Enterprise Workstation 6.4 および 6.5 (32 ビットおよび 64 ビット)

• SUSE Linux Enterprise 11 (32 ビットおよび 64 ビット)

• Cent OS 6.4 および 6.5 (64 ビット)

システムおよびソフトウェア要件については、『Vivado Design Suite ユーザー ガイド: リリース ノート、インストール、およびライセンス』 (UG973: 英語版、日本語版) を参照してください。

第 1 章: Vivado シミュレータの概要

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 8UG937 (v2019.2) 2019 年 10 月 30 日

Page 9: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

第 2 章

演習 1: Vivado IDE でのシミュレータの実行

この演習では、新しい Vivado® Design Suite プロジェクトを作成し、HDL デザイン ソースを追加し、ザイリンクスIP カタログから IP を追加し、シミュレーションに必要な出力ファイルを生成します。その後、エラボレート済みのRTL デザインでビヘイビアー シミュレーションを実行します。

手順 1: 新規プロジェクトの作成次の図に示すように、Vivado® 統合設計環境 (IDE) では、デザイン プロジェクト内からシミュレーションを起動し、必要なシミュレーション コマンドやファイルが自動的に生成されます。

ソース ファイルを管理するために新規プロジェクトを作成し、デザインに IP を追加し、ビヘイビアー シミュレーションを実行します。

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 9UG937 (v2019.2) 2019 年 10 月 30 日

Page 10: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

1. Windows で、次のように順にクリックして、Vivado IDE を起動します。 [Start] → [ All Programs] → [Xilinx DesignTools] → [Vivado 2019.x] → [Vivado 2019.x]

(「x」には Vivado 2019 IDE の最新バージョンが入ります。)注記: インストールされている Vivado Design Suite は、[スタート] メニューに表示されている ザイリンクス デザイン ツールとは異なる場合があります。

2. Vivado IDE の Getting Started ページで [Create Project] をクリックします。3. [New Project] ダイアログ ボックスで [Next] をクリックし、[Project name] に「project_xsim」と入力します。4. [Project location] で、抽出されたチュートリアル データを含むフォルダー <Extract_Dir> を参照します。

[Create project subdirectory] チェック ボックスがオンになっていることを確認し、[Next] をクリックします。

注記: [Create project subdirectory] チェック ボックスはデフォルトでオンになっています。5. [Project Type] ページで [RTL Project] を選択し、[Next] をクリックします。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 10UG937 (v2019.2) 2019 年 10 月 30 日

Page 11: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

6. [Add Sources] ダイアログ ボックスで [Add Directories] をクリックし、抽出したチュートリアル デザイン データを追加します。• <Extract_Dir>/sources

• <Extract_Dir>/sim

注記: Ctrl キーを押しながら、複数のファイルやディレクトリを選択できます。7. [Target language] を [Verilog] に設定します。これが合成のネットリスト言語になります。8. 次の図のように、[Simulator language] を [Mixed] に設定します。

[Simulator language] で指定する言語は、論理シミュレータでサポートされる、またはそのシミュレータに必須の言語になります。Vivado Design Site では、出力ファイルの生成時に、使用可能な合成ファイルを使用して必要な言語別の構造シミュレーション モデルを生成し、デザイン内の IP コアのシミュレーション モデルがあるかどうかを確認します。IP コアおよび ザイリンクス IP カタログの使用方法は、『Vivado Design Suite ユーザー ガイド: IP を使用した設計』 (UG896: 英語版、日本語版) を参照してください。また、『Vivado Design Suite チュートリアル: IP を使用した設計』 (UG939: 英語版、日本語版) で学ぶこともできます。

9. [Next] をクリックします。10. [Next] をクリックして、[Add IP Category] ダイアログ ボックスを閉じます。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 11UG937 (v2019.2) 2019 年 10 月 30 日

Page 12: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

次の図のように [Default Part] ダイアログ ボックスが表示されるので [Boards] を選択し、7 シリーズの場合は[Kintex®-7 KC705 Evaluation Platform] を、また UltraScale デバイスの場合は [Kintex-UltraScale KCU105Evaluation Platform] を選択して、[Next] をクリックします。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 12UG937 (v2019.2) 2019 年 10 月 30 日

Page 13: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

注記: [Add sources from subdirectories] チェック ボックスはデフォルトでオンになっています。11. [New Project Summary] ダイアログ ボックスでプロジェクト サマリを確認します。12. [Finish] をクリックすると、プロジェクトが作成されます。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 13UG937 (v2019.2) 2019 年 10 月 30 日

Page 14: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

Vivado が起動し、Vivado IDE にデフォルトのビュー レイアウトで新規プロジェクトが開きます。

手順 2: IP カタログからの IP の追加[Sources] ウィンドウには、プロジェクト作成時に追加したソース ファイルが表示されます。[Hierarchy] タブには、ソース ファイルが階層表示されます。1. [Sources] ウィンドウで をクリックして、次の図のようにフォルダーを展開させます。すべての階層のファイルをすべて表示するには、 ボタンを使用します。Sine Wave Generator (sinegen.vhd) は、現在のデザイン ソースにはないセルを参照します。[Sources] ウィンドウでは、抜けているデザイン ソースの横に アイコンが表示されます。注記: このアイコンは、抜けているソースのみを表示させるときに使用されます。大型デザインで抜けているソースを表示させるときに便利です。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 14UG937 (v2019.2) 2019 年 10 月 30 日

Page 15: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

sine_high、sine_mid、および sine_low モジュールを ザイリンクス IP カタログからプロジェクトに追加します。

Sine_High の追加1. Flow Navigator で [IP Catalog] をクリックします。

IP カタログが開きます。Vivado® IDE の使用方法の詳細は、『Vivado Design Suite ユーザー ガイド: Vivado IDE の使用』 (UG893: 英語版、日本語版) を参照してください。

2. IP カタログの [Search] フィールドに「DDS」と入力します。Vivado IDE により IP カタログにある DDS Compiler がハイライトされます。

3. どのカテゴリでも構いませんが、カテゴリの下で [DDS Compiler] をダブルクリックします。Customize IP ウィザードが開きます (次の図)。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 15UG937 (v2019.2) 2019 年 10 月 30 日

Page 16: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

4. [IP Symbol] の左側にある [Show disabled ports] チェック ボックスがオフになっていることを確認します。5. [Configuration] タブで次のように設定します。

• [Component Name]: sine_high

• [Configuration Options]: SIN COS LUT only

• [Noise Shaping]: None

• [Hardware Parameters] で、[Phase Width] を 16 に、[Output Width] を 20 に設定します。6. [Implementation] タブで、[Output Selection] を [Sine] に設定します。7. [Detailed Implementation] タブで、[Output Signals] を [ARESETn (active-Low)] に設定します。8. [Summary] タブで設定を確認し、[OK] をクリックします。9. [Create Directory] ダイアログ ボックスで [OK] をクリックします。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 16UG937 (v2019.2) 2019 年 10 月 30 日

Page 17: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

sine_high IP コアをデザインに追加すると、IP をこのデザインでサポートするのに必要な出力ファイルを生成する必要があります。次の図のように [Generate Output Products] ダイアログ ボックスが開きます。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 17UG937 (v2019.2) 2019 年 10 月 30 日

Page 18: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

この出力ファイルを使用して、IP はデザインの一部として合成、シミュレーション、インプリメンテーションされます。IP コアおよび ザイリンクス IP カタログの使用方法は、『Vivado Design Suite ユーザー ガイド: IP を使用した設計』 (UG896: 英語版、日本語版) を参照してください。また、『Vivado Design Suite チュートリアル: IP を使用した設計』 (UG939: 英語版、日本語版) で学ぶこともできます。[Generate] をクリックして、sine_high のデフォルトの出力ファイルを生成します。

Sine_Mid の追加1. IP カタログで [DDS Compiler IP] をもう一度ダブルクリックします。2. [Configuration] タブで次のように設定します。

• [Component Name]: sine_mid

• [Configuration Options]: SIN COS LUT only

• [Noise Shaping]: None

• [Hardware Parameters] で、[Phase Width] を 8 に、[Output Width] を 18 に設定します。3. [Implementation] タブで、[Output Selection] を [Sine] に設定します。4. [Detailed Implementation] タブで、[Output Signals] を [ARESETn (active-Low)] に設定します。5. [Summary] タブを選択して設定を確認し、[OK] をクリックします (次の図を参照)。

sine_mid IP コアがデザインに追加されると、[Generate Output Products] ダイアログ ボックスが表示され、デザインでこの IP をサポートするのに必要な出力ファイルが生成されます。

6. [Generate] をクリックして、sine_mid のデフォルトの出力ファイルを生成します。「Out-of-context module runwas launched for generating output products」 (出力ファイル生成のためアウト オブ コンテキスト モジュールrun が実行されました) というメッセージが表示されます。[OK] をクリックします。

Sine_Low の追加1. IP カタログで [DDS Compiler IP] をさらにもう一度 (3 回目) ダブルクリックします。2. [Configuration] タブで次のように設定します。

• [Component Name]: sine_low

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 18UG937 (v2019.2) 2019 年 10 月 30 日

Page 19: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

• [Configuration Options]: SIN COS LUT only

• [Noise Shaping]: None

• [Hardware Parameters] で、[Phase Width] を 6 に、[Output Width] を 16 に設定します。3. [Implementation] タブで、[Output Selection] を [Sine] に設定します。4. [Detailed Implementation] タブで、[Output Signals] を [ARESETn (active-Low)] に設定します。5. [Summary] タブを選択して設定を確認し、[OK] をクリックします (次の図を参照)。

sine_low IP コアがデザインに追加されると、[Generate Output Products] ダイアログ ボックスが表示され、デザインでこの IP をサポートするのに必要な出力ファイルが生成されます。

6. [Generate] をクリックして、sine_low のデフォルトの出力ファイルを生成します。「Out-of-context module runwas launched for generating output products」 (出力ファイル生成のためアウト オブ コンテキスト モジュールrun が実行されました) というメッセージが表示されます。[OK] をクリックします。

手順 3: ビヘイビアー シミュレーションの実行チュートリアル デザインの Vivado® プロジェクトを作成したら、ビヘイビアー シミュレーションを実行するため、Vivado® シミュレータを設定して起動します。Vivado® ツールでビヘイビアー シミュレーションのプロパティを設定します。1. Flow Navigator で [Simulation] を右クリックし、[Simulation Settings] をクリックします。Flow Navigator で

[Project Manager] → [Settings] をクリックします。[Settings] で [Simulation] を選択します。次のデフォルト値が自動的に設定されています。• [Simulation set]: sim_1

• [Simulation top-module name]: testbench

2. [Elaboration] タブで (次の図)、デフォルト レベルがデフォルト値の [typical] に設定されていることを確認します。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 19UG937 (v2019.2) 2019 年 10 月 30 日

Page 20: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

3. [Simulation] タブで、[Simulation Run Time] が 1000 ns であることを確認します。4. [OK] をクリックします。

シミュレーション オプションを正しく設定できたら、Vivado シミュレータを起動して、このデザインのビヘイビアー シミュレーションを実行します。

5. Flow Navigator で [Run Simulation] → [Run Behavioral Simulation] をクリックします。論理およびタイミング シミュレーションは、合成後およびインプリメンテーション後に利用できます。これらのシミュレーションについては、このチュートリアルでは説明しません。[Run Behavioral Simulation] を実行すると、Vivado ツールによりデザイン解析のため xvlog および xvhdl が実行され、デザインをエラボレートしてシミュレーション スナップショット (Vivado シミュレータで実行可能) にコンパイルするために、バックグラウンドで xelab が実行されます。プロセスが完了すると、Vivado ツールでxsim が起動し、シミュレーションが実行されます。デザインの解析およびコンパイルが完了すると、Vivado IDE でシミュレータの GUI が開きます。デフォルトで、最上位の HDL オブジェクトが波形ウィンドウに表示されます。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 20UG937 (v2019.2) 2019 年 10 月 30 日

Page 21: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

まとめこの演習では、新しい Vivado® Design Suite プロジェクトを作成し、HDL デザイン ソースを追加し、ザイリンクスIP カタログから IP を追加し、シミュレーションに必要な出力ファイルを生成し、エラボレート済みの RTL デザインでビヘイビアー シミュレーションを実行しました。これで演習 1 は終了です。時間が許せば、ここから 手順 2: 信号波形の表示 を開始して、演習 2 に進んでください。または、シミュレーション、プロジェクト、Vivado IDE を閉じ、後で演習 2 に取り掛かることも可能です。1. [File] → [Close Simulation] をクリックして、開いているシミュレーションを閉じます。2. シミュレーションを閉じることを確認するダイアログ ボックスが表示されたら、[OK] をクリックします。3. [File] → [Close Project] をクリックして、開いているプロジェクトを閉じます。4. [File] → [Exit] をクリックして Vivado ツールを終了します。

第 2 章: 演習 1: Vivado IDE でのシミュレータの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 21UG937 (v2019.2) 2019 年 10 月 30 日

Page 22: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

第 3 章

演習 2: デザインのデバッグVivado® シミュレータ GUI には、波形ウィンドウ、[Objects] および [Scope] ウィンドウがあります。デザインの問題をすみやかに確認およびデバッグし、修正するデバッグ機能があります。GUI コンポーネントの詳細は、『VivadoDesign Suite ユーザー ガイド: ロジック シミュレーション』 (UG900: 英語版、日本語版) を参照してください。この演習では、次の作業を実行します。• デバッグ機能のイネーブル• デザイン バグの確認• バグの根本的な原因を見つけるため、デバッグ機能を使用• コードの変更• 再コンパイルおよびシミュレーションの再起動

手順 1: プロジェクトを開くこの演習は、演習 1 の終わりから始まります。演習 2 を始める前に、演習 1 を必ず終わらせてください。演習 1 の最後に、Vivado IDE を終了させ、チュートリアル プロジェクト、シミュレーションを閉じた場合は、これらをもう一度開きます。[Start] → [All Programs] → [Xilinx Design Tools] → [Vivado 2019.x] → [Vivado 2019.x] をクリックして、Vivado 統合設計環境 (IDE) を開きます。注記:

1. インストールされている Vivado Design Suite は、[スタート] メニューに表示されている ザイリンクス デザインツールとは異なる場合があります。

2. または、[Vivado 2019.x] デスクトップ アイコンをクリックし、Vivado IDE を起動します。Vivado IDE が開きます。演習 1 で使用したプロジェクトを開き、ビヘイビアー シミュレーションを実行します。1. メイン メニューから [File] → [Project] → [Open Recent] をクリックし、演習 1 で保存した project_xsim を選択します。

2. プロジェクトが開いたら、Flow Navigator から [Run Simulation] → [Run Behavioral Simulation] をクリックします。Vivado シミュレータによりデザインがコンパイルされ、シミュレーション スナップショットが読み込まれます。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 22UG937 (v2019.2) 2019 年 10 月 30 日

Page 23: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

手順 2: 信号波形の表示このセクションでは、信号を確認し、シミュレーション結果を解析しやすくする Vivado シミュレータ GUI の機能を確認します。• 波形ウィンドウの信号、および [Tcl Console] ウィンドウに表示されるテストベンチからのメッセージを使用してデザイン機能を確認するため、シミュレーションを実行および再起動。

• テストベンチやほかのデザイン ユニットからの信号のステータスを確認できるよう、これらの信号を波形ウィンドウに追加。

• 波形ウィンドウで信号を特定しやすくするため、グループおよびディバイダーを追加。• 波形ウィンドウで信号を確認しやすくするため、信号および波形プロパティを変更。• シミュレーションの主なイベントをハイライトし、ズーム機能や時間計測機能を実行するため、マーカーおよびカーソルを使用。

• 複数の波形設定を使用。

信号の追加および監視このチュートリアル デザインの焦点は、正弦波を異なる周波数でいくつか生成することです。回路の機能を確認するには、デザインの信号をいくつか監視します。特定時間シミュレーションを実行する前に、波形ウィンドウに信号を追加し、それらの信号がシミュレーション中に異なるステートに遷移していく様子を監視します。デフォルトで、Vivado® シミュレータによりシミュレーション オブジェクトがテストベンチから波形ウィンドウに追加されます。このチュートリアルの場合は、次のテストベンチ信号が自動的に読み込まれます。• 差動クロック信号 (sys_clk_p および sys_clk_n)。これは、テストベンチによって生成される 200 MHz のクロックで、完成したデザインの入力クロックになります。

• リセット信号 (reset)。回路をリセットします。• GPIO ボタン (gpio_buttons[1:0])。異なる周波数の正弦波を選択するための制御信号です。• GPIO スイッチ (gpio_switch)。デバウンス ロジックをイネーブルまたはディスエーブルにする制御スイッチです。

• LED (leds_n[3:0])。シミュレーションの結果を表示させるためのバスです。このリストに新たに信号をいくつか追加し、それらを監視することもできます。必要であれば、[Scopes] ウィンドウで 記号をクリックしてテストベンチを展開します (デフォルトで展開されている場合もあります)。HDL スコープ (または単にスコープ) は、Verilog のモジュール、関数、タスク、プロセス、ブロックなど、HDL コードの宣言部分で定義されます。VHDL スコープには、エンティティ/アーキテクチャ定義、ブロック、関数、プロシージャ、およびプロセスが含まれます。1. [Scopes] ウィンドウで [dut] オブジェクトを選択します。シミュレーションの現在のスコープがテストベンチ全体から選択されたオブジェクトに変化します。次の図のように、[Objects] ウィンドウが選択されたスコープのすべての信号および定数でアップデートされます。

2. [Objects] ウィンドウで sine[19:0] および sineSel[1:0] 信号を選択し、次のいずれかの方法で波形ウィンドウに追加します。• 選択した信号を波形ウィンドウにドラッグ アンド ドロップする。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 23UG937 (v2019.2) 2019 年 10 月 30 日

Page 24: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

• 信号を右クリックして [Add to Wave Window] をクリックする。注記: Ctrl キーを押しながら、複数の信号を選択することも可能です。

手順 3: アナログ波形ビューアーの使用確認中の sine[19:0] はアナログ信号で、アナログ波形モードにするとより確認しやすくなります。波形ウィンドウで信号を [Digital] または [Analog] に指定して表示設定を選択できます。1. 波形ウィンドウで sine[19:0] 信号を選択します。2. 次の図のように、右クリックして [Waveform Style] → [Analog] をクリックします。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 24UG937 (v2019.2) 2019 年 10 月 30 日

Page 26: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

デバッグ用の波形の保存波形ウィンドウでは、複数の信号のステートをシミュレーション実行として確認できます。ただし、サイズの問題があるので、波形ウィンドウで実際に確認できる信号の数は限られます。デバッグ中にデザイン エラーを特定するには、波形ウィンドウで表示できる数以上の信号およびオブジェクトを追跡する必要があります。波形ウィンドウに表示されない信号の波形は、シミュレーション波形データベース (WDB) に波形を出力して、保存できます。シミュレーション後、この波形データベース ファイルに取り込まれたすべての信号の遷移を確認できます。[Scope] ウィンドウでテストベンチの下にある [dut] をクリックします。オプション リストから Log to WaveDatabase をクリックします。[Objects in Scope] オプションを選択します。指定された信号が波形データベースに書き込まれます。

Tcl コマンドの使用[Tcl Console] ウィンドウに次のように入力し、指定の HDL の波形ログをイネーブルにします。log_wave [get_objects /testbench/dut/*] [get_objects /testbench/dut/U_SINEGEN/*]

注記: log_wave コマンドの詳細は、『Vivado Design Suite Tcl コマンド リファレンス ガイド』 (UG835: 英語版、日本語版) を参照してください。このコマンドは、指定の HDL オブジェクトのシグナル ダンプ /testbench/dut/* および /testbench/dut/U_SINEGEN/* をイネーブルにします。注記: * シンボルによりスコープ内のすべての HDL オブジェクトが指定されます。log_wave コマンドにより、指定信号が波形データベースに書き込まれます。このデータベースは現在のプロジェクトのシミュレーション フォルダーに保存されます。<project_name>/<project_name>.sim/sim_1/behave

手順 4: 波形ウィンドウの使用信号を表示し、波形データベースに記録するようシミュレータを設定したので、シミュレータを再度実行する準備が整いました。1. [Run All] ボタン をクリックしてシミュレーションを開始します。

波形で sine 信号出力を確認します。波形ウィンドウは、メイン ウィンドウのレイアウトから切り離して、スタンドアロンで使用できます。

2. 波形設定ウィンドウのタイトル バーにある [Float] ボタン をクリックします。3. [Zoom Fit] ボタンをクリックして、波形ウィンドウの時間軸全体を表示させます。

低周波数の正弦波出力が間違っている点に注目してください。波形ウィンドウを拡大表示して、この波形の詳細を表示できます。波形を拡大表示するときは、波形全体を確認するのに、水平方向および垂直方向のスクロールバーを使用できます。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 26UG937 (v2019.2) 2019 年 10 月 30 日

Page 27: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

上の図にあるように、sineSel の値が 0 のときは、低周波数の正弦波が選択されていることを示し、アナログsine[19:0] 出力は正しい正弦波になりません。つまり、デザインまたはテストベンチに問題があることを示しています。

信号のグループ化次は、デザイン全体の機能を解析しやすくするため、ほかのデザイン ユニットからの信号を追加します。波形ウィンドウに信号を追加する場合、ウィンドウのサイズが決まっているので、同時にすべての信号を表示させるのが難しくなります。すべての信号を確認するには、垂直方向のスクロール バーを使用する必要があるので、確認作業が難しくなるのです。そこで、確認作業を楽にするため、関連信号をまとめることができます。グループにまとめると、関連信号だけを表示したり非表示にしたりできるので、波形ウィンドウの表示が複雑にならず、信号を把握しやすくなります。1. 波形ウィンドウで、テストベンチ ユニットにある信号をすべて (sys_clk_p、sys_clk_n、reset、

gpio_buttons、gpio_switch、および leds_n) 選択します。注記: Ctrl キーまたは Shift キーを押しながら、複数の信号をクリックして選択します。

2. 信号を選択した状態で右クリックし、[New Group] をクリックします。これを「TB Signals」と名前を付けます。Vivado® シミュレータにより、波形設定ウィンドウにグループが作成されます。このグループを展開するには、グループ名の左側にある をクリックします。

3. sine[19:0] および sine_sel[1:0] 信号をグループにまとめるため、DUT Signals という名前の信号グループを作成します。信号は随時、グループへ追加、またはグループから削除できます。波形ウィンドウの信号リストから信号をカット アンド ペーストするか、あるグループから信号を別のグループにドラッグ アンド ドロップします。または、信号を [Objects] ウィンドウから波形ウィンドウにドラッグ アンド ドロップすることもできます。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 27UG937 (v2019.2) 2019 年 10 月 30 日

Page 28: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

すべての信号をグループから外して、グループを削除することもできます。波形ウィンドウでグループを選択して右クリックし、[Ungroup] をクリックします。どの信号がどのデザイン ユニットに属しているかを視覚的に把握しやすくするには、ディバイダーを追加して、信号をデザイン ユニットごとに分けます。

ディバイダーの追加ディバイダーは、信号または信号グループを見やすく区切って、関連オブジェクトを特定しやすくするためのものです。1. 波形ウィンドウで右クリックし、[New Divider] をクリックします。[Name] ダイアログ ボックスが開き、波形ウ

ィンドウに追加するディバイダーの名前を指定します。2. 次の 2 つのディバイダーを追加します。

• Testbench

• SineGen

3. DUT 信号グループの上に SineGen ディバイダーを移動します。ヒント: ディバイダーの名前はいつでも変更できます。ディバイダーの名前を右クリリックし、[Rename] コマンドを選択します。また、色を変えるときは [Divider Color] をクリックします。

サブモジュールからの信号の追加サブモジュールとテストベンチ間のインタラクションを確認する目的で、デザイン階層の異なる階層からの信号を追加することもできます。サブモジュールからの信号を追加する一番簡単な方法は、オブジェクトをフィルターしてから、信号を波形ウィンドウに追加する方法です。インスタンシエート済みの sine_gen_demo module モジュール (DUT) および sinegen モジュール (U_SINEGEN)から信号を追加します。1. [Scopes] ウィンドウで、テストベンチを選択して展開し、[DUT] を選択して展開します。現在選択されているスコープに関連付けられているシミュレーション オブジェクトが [Objects] ウィンドウに表示されます。デフォルトでは、[Objects] ウィンドウにすべてのタイプのシミュレーション オブジェクトが表示されます。ただし、[Objects] ウィンドウの上部にあるフィルターを使用して、表示するオブジェクトのタイプを制限できます。次の図は、入力および出力のポート オブジェクトがイネーブルになっていて、それ以外のオブジェクト タイプがディスエーブルになっている [Objects] ウィンドウです。オブジェクト タイプのツールヒントを表示させるには、カーソルをボタンの上にかざします。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 28UG937 (v2019.2) 2019 年 10 月 30 日

Page 29: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

2. [Objects] ウィンドウのツールバーを使用して、異なるオブジェクト タイプをイネーブルにしたり、ディスエーブルにしたりします。[Objects] ウィンドウでフィルターを掛けることができるオブジェクト タイプは、[Input]、[Output]、[Inout]、[Internal Singal]、[Constant]、[Variable] です。

3. [Scopes] ウィンドウで U_SINEGEN デザイン ユニットを選択します。4. 波形ウィンドウで信号名の下の空いているスペースを右クリックし、[New Group] を選択して、「Inputs」、「Outputs」、「Internal Signals」という名前で 3 つの新しいグループを作成します。ヒント: 波形ウィンドウで現在のオブジェクトの上位に、またはそれを含むグループを作成する場合は、オブジェクトをドラッグ アンド ドロップして、必要に応じてオブジェクトを隔離します。

5. [Objects] ウィンドウで入力フィルターを選択して、入力オブジェクトを表示します。6. [Objects] ウィンドウで入力オブジェクトを選択し、波形ウィンドウで作成した入力グループにそれをドラッグ アンド ドロップします。

次の図のように、出力オブジェクトおよび内部信号に対しても、手順 5 および 6 を繰り返します。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 29UG937 (v2019.2) 2019 年 10 月 30 日

Page 30: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

手順 5: 信号プロパティの変更波形ウィンドウに表示される信号の一部に関しては、プロパティを変更して、シミュレーション結果をより見やすくすることもできます。

階層を含めた信号名の表示デフォルトで、Vivado® シミュレータでは、波形設定に信号を追加するとき、階層参照が削除された省略名で追加されます。信号によっては、どのモジュールに属しているのかを知っておくべきものがあります。1. 波形ウィンドウで Ctrl キーを押しながら SineGen ディバイダーの下にある DUT 信号グループにリストされている sine[19:0] および sineSel[1:0] 信号を選択します。

2. Ctrl を押しながら、SineGen ディバイダーの下にある Outputs にリストされている sine[19:0] 信号を選択します。

3. [Waveform] ウィンドウで右クリックし、[Name] → [Long] をクリックします。信号の階層パスを含めるよう、表示名が変更になります。[DUT] グループの下にある sine[19:0] 信号が、[OUtputs] グループの下にある sine[19:0 信号とは別のデザイン階層のオブジェクトを参照しているのがわかります。次の図を参照してください。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 30UG937 (v2019.2) 2019 年 10 月 30 日

Page 31: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

信号値の表示信号によっては値をデフォルト以外の基数で表示させたほうが (たとえば、16 進数ではなく、2 進数で表示したほうが) 見やすくなるものがあります。デフォルト基数は 16 進数で、このデフォルト設定を変更しない限りは、このフォーマットで表示されます。サポートされている基数は、[Binary]、[Hexadecimal]、[Octal]、[ASCII]、[Signed]、[Unsigned] です。[Default Radix]オプションでこれらの値のいずれかに設定して、デフォルト値を上書きできます。1. 波形ウィンドウで、次の信号を選択します。

s_axis_phase_tdata_sine_high、s_axis_phase_tdata_sine_mid およびs_axis_phase_tdata_sine_low。

2. 波形ウィンドウで右クリックし、[Radix] → [Binary] をクリックします。これらの信号値は指定した基数で表示されます。

手順 6: 波形設定の保存波形ウィンドウの表示をカスタマイズして、その波形設定を保存しておくと、その後のシミュレーション実行に同じ設定を再利用できます。波形設定ファイルでは、表示される信号、およびそれらの信号の特性の表示が定義されます。1. 波形ウィンドウでのタイトル バーにある [Settings] ボタン をクリックします。

[Waveform Options] ダイアログ ボックスが開くので、[General] タブをクリックします。2. [Default Radix] が [Hexadecimal] に設定されていることを確認します。これで、波形ウィンドウでのすべての信号のデフォルト番号フォーマットが定義されます。基数は波形ウィンドウの個々のオブジェクトに対しても設定でき、デフォルト値を上書きできます。

3. 次の図のように [Draw Waveform Shadow] をオンにします。このチェック ボックスで信号の波形の影の表示/非表示を切り替えできます。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 31UG937 (v2019.2) 2019 年 10 月 30 日

Page 32: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

デフォルトでは、信号が High に遷移しているときに波形に影が付き、波形ウィンドウでの遷移およびステートを認識しやすくなります。また、波形ウィンドウで各信号または信号グループがインデックス番号で特定されるよう、信号インデックスの表示/非表示を切り替えることもできます。

4. [Show signal indices] チェック ボックスのオン/オフを切り替えて、信号リストの番号の表示/非表示を設定します。

5. [Show grid lines] チェック ボックスのオン/オフを切り替えて、波形ウィンドウでのグリッド ラインの表示/非表示を設定します。

6. [Snap to Transition] チェック ボックスをオンにして、カーソルを遷移エッジに合わせます。7. [Waveform Options] ダイアログ ボックスで [Colors] ビューを選択します。

[Waveform Color Options] ダイアログ ボックスを確認します。表示をカスタマイズするため、波形ウィンドウのエレメントの色を設定できます。ある値の波形を表示するのにカスタムの色を指定して、未知または初期化されていないステートの信号をすみやかに特定できます。波形ウィンドウが設定したプリファレンスで設定されます。現在の波形設定を保存して、後の Vivado® シミュレーション セッションで使用できるようにします。デフォルトで、現在の波形設定が Vivado シミュレータにより testbench_behav.wcfg に保存されます。

8. 波形ウィンドウのサイドバーで [Save Wave Configuration] ボタン を選択します。9. 波形設定を tutorial_1.wcfg というファイル名でプロジェクト フォルダーに保存します。10. [Yes] をクリックします。このファイルは、アーカイブ目的でプロジェクトのシミュレーション ファイルセット

sim_1 に追加されます。ヒント: 保存した波形設定ファイルは、[File] → [Simulation Waveform] → [Open Configuration] コマンドをクリックして、読み込むことができます。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 32UG937 (v2019.2) 2019 年 10 月 30 日

Page 33: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

複数の波形設定の使用一度に複数の波形ウィンドウを開き、波形設定ファイルを開くこともできます。表示させる必要のある信号の数が 1つのウィンドウで表示できる数を超える場合に、便利です。画面の解像度によりますが、1 つの波形ウィンドウで同時にすべての信号を表示させることができない場合があります。そういうときは、複数の波形ウィンドウを開き、各ウィンドウに特定数の信号および信号プロパティを表示し、ウィンドウ間でそれをコピー アンド ペーストします。1. 新しい波形ウィンドウを追加するには、[File] → [Simulation Waveform] → [New Configuration] をクリックします。名前の付いていない波形ウィンドウが表示されます。この波形ウィンドウだけに表示させる信号を追加し、グループを定義し、ディバイダーを追加し、プロパティおよび色を設定します。

2. 1 番目の波形ウィンドウの信号グループを、Ctrl キーを押しながら選択します。選択するグループは [Inputs]、[Outputs]、[Internal Signals] です。

3. ウィンドウを右クリックして [Copy] を選択するか、または選択したグループに Ctrl+C のショートカット キーを使用して、現在の波形ウィンドウからコピーします。

4. 新しい波形ウィンドウを選択して、アクティブにします。5. 波形ウィンドウを右クリックして [Paste] を選択するか、Ctrl+V のショートカット キーを使用して、前のウィンドウからコピーした信号グループを貼り付けます。

6. [File] → [Simulation Waveform] → [Save Configuration] をクリックするか、または [Save Wave Configuration] ボタンをクリックして、波形設定を tutorial_2.wcfg という名前のファイルに保存します。

7. 波形設定をプロジェクトに追加するかどうかを尋ねるダイアログ ボックスが表示されたら、[No] をクリックします。

8. アイコンをクリックして、新しい波形ウィンドウを閉じます。

手順 7: デザインの再シミュレーションさまざまな信号、信号グループ、ディバイダー、属性を波形ウィンドウに追加したので、デザインを再度シミュレーションすることにします。

1. [Restart] ボタン をクリックして、回路を初期ステートにリセットします。2. [Run All] ボタン をクリックします。シミュレーションが約 7005 ns 間実行します。[Run All] コマンドを実行する前にシミュレータを再起動しない場合は、シミュレータは割り込みがあるまで継続的に実行します。

3. シミュレーションが完了したら、[Zoom Fit] ボタン をクリックして、波形ウィンドウでシミュレーションのタイムライン全体を確認します。次の図は現在のシミュレーション結果を示しています。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 33UG937 (v2019.2) 2019 年 10 月 30 日

Page 34: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

手順 8: カーソル、マーカーの使用および時間の計測デザインの最上位に使用されている有限ステート マシン (U_FSM) モジュールは、SineGen ブロックの特定出力に対し、3 つの異なる正弦波セレクト信号を生成します。マーカーを使用してこれらの波形セレクトをハイライトして見やすくできます。1. 次の図のように、波形ウィンドウで /testbench/dut/sineSel[1:0] 信号を選択します。

2. 波形ウィンドウのサイドバーで [Go to Time 0] ボタン をクリックします。現在のマーカーがシミュレーション実行の始点に移動します。

3. [General] タブで [Snap to Transition] チェック ボックスをオンにして、カーソルを遷移エッジに合わせます。4. 波形ウィンドウのサイドバーで [Next Transition] ボタン をクリックします。現在のマーカーが選択されている sineSel[1:0] 信号の 3.5225 マイクロ秒の位置にある最初の値に移動します。

5. [Add Marker] ボタン をクリックします。6. sineSel 信号での遷移をすべて検索し、各遷移にマーカーを追加します。

sineSel の遷移を特定するマーカーを付けると、波形ウィンドウは次の図のようになるはずです。前に確認したように、sinSel 信号の値が 0 のとき、低周波数信号は間違っています。メインの波形ウィンドウのカーソルを使用して、異なるシミュレーション時間にナビゲートしたり、値が変化した時点を確認したりすることもできます。次の手順では、sineSel が 0 のとき、出力信号 sine[19:0] のステータスを確認し、間違った動作がどこで始まっているのかを特定するため、このカーソルを使用して波形ウィンドウを拡大表示します。低周波数波形制御の時間を計測するために、このカーソルを使用することもできます。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 34UG937 (v2019.2) 2019 年 10 月 30 日

Page 35: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

ヒント: デフォルトでは、波形ウィンドウに表示される時間単位はマイクロ秒です。ただし、シミュレーション実行中に、または現在のシミュレーション時間を変更する場合は、必要な時間単位に変更することが可能で、波形ウィンドウはそれに合わせて調整されます。

7. 波形ウィンドウで [Go to Time 0] ボタン をクリックしてから [Zoom in] ボタン をクリックします。この作業を繰り返して、シミュレーション実行の冒頭にズームインします。

8. Low にアサートされているリセット信号を確認できるまで、必要に応じて波形ウィンドウにズームインすると、クロック信号 sys_clk_p および sys_clk_n が次の図のような状態で確認できます。

カーソルを置いた場所を中心に波形ウィンドウがズームインまたはズームアウトします。9. 波形の特定時間または時点をクリックして、メインの波形ウィンドウのカーソルをそこへ配置します。メインのカーソルをクリックして、それを特定の時間にドラッグすることもできます。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 35UG937 (v2019.2) 2019 年 10 月 30 日

Page 36: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

10. 0 が初期出力またはデフォルトの FSM 出力なので、次の図のように、リセットが Low にアサートされた後、102.5ns で、カーソルを sys_clk_p の最初の posedge に移動させます。波形ウィンドウを使用して、タイムラインの 2 点間の時間を計測します。

11. [Add Marker] ボタン をクリックして、102.5 ns の時点にマーカーを設定します。12. クリックしてマーカーを選択します。波形の [Settings] の [General] タブにある [Floating Ruler] オプションを使用すると、波形ウィンドウの下部にルーラーが表示され、2 点間の時間を計測するのに便利です。このルーラーを使用して、sineSel 制御信号の時間、およびフレーム内のそれに対応する output_sine[19:0] の値を計測します。マーカーを選択すると、波形ウィンドウの下部にフローティング ルーラーが表示され、選択したマーカー位置の時間が 0 になります。タイムラインに沿ってカーソルを移動させると、ルーラーを使用してカーソルとマーカーとの間の時間を計測できます。

ヒント: マーカーを選択するときにルーラーが表示されない場合は、波形の [Settings] の [General] タブで [FloatingRuler] チェック ボックスをオンにします。

カーソルはタイムラインに沿ってさまざまな方法で動かすことができます。波形ウィンドウ下部にある水平方向のスクロール バーを使用してスクロールできます。カーソルの位置を必要に応じて変更可能です。タイムラインをさらに広げて確認する場合はズームアウト、タイムライン全体を表示させる場合はズームフィット、詳細を確認する場合はズームインします。

13. 波形ウィンドウの信号リストから sineSel を選択し、[Next Transition] コマンドを使用して、特定の遷移に移動します。上の図に示すように、FSM が低周波数出力を選択した時間は 3.420 ns とルーラーに表示されます。

手順 9: ブレークポイントを使用したデバッグカーソル、マーカー、複数の波形ウィンドウを使用してデザインを確認しました。ここでは、ブレークポイントや行ステップなどの Vivado® シミュレータのデバッグ機能を使用して、デザインをデバッグし、間違った出力の原因を特定します。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 36UG937 (v2019.2) 2019 年 10 月 30 日

Page 37: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

1. まず、チュートリアル デザインのテストベンチを開き、シミュレータでどのように各デザイン入力が生成されるのかを学びます。

2. ファイルが開いていない場合は、[Sources] ウィンドウで testbench.v ファイルをダブルクリックして開きます。次の図のように Vivado IDE のテキスト エディターでソース ファイルが開きます。

注記: またはメイン メニューから [File] → [Text Editor] → [Open File] をクリックするか、[Sources] ウィンドウを右クリックして [Open File] をクリックします。[Sources] ウィンドウまたは [Objects] ウィンドウで適切なデザイン オブジェクトを選択するか、またはウィンドウを右クリックして、[Go to Source Code] を選択します。

ブレークポイントの使用ブレークポイントは、ユーザーの指定するソース コード内の停止地点のことで、デザインをデバッグする際に使用します。ブレークポイントが設定されたデザインをシミュレーションすると、各ブレークポイントでシミュレーションが停止し、デザインの動作を確認できます。シミュレーションが停止すると、テキスト エディターでブレークポイントが設定されている行の横にマークが表示されるので、その HDL ソースの特定イベントと波形ウィンドウの結果を比較できます。先ほど確認した低周波数信号出力のエラーをデバッグするため、ブレークポイントを使用します。この問題のあるsine[19:0] 出力は sineGen VHDL ブロックから駆動されています。このブロックのデバッグを開始します。1. [Scope] ウィンドウで [U_SINEGEN] スコープを選択し、[Objects] ウィンドウにそのスコープのオブジェクトをリ

ストさせます。2. [Objects] ウィンドウで [sine[19:0]] を右クリックし、[Go to Source Code] を選択して、テキスト エディターで

sinegen.vhd ソース ファイルを開きます。ヒント: [Objects] ウィンドウで sine[19:0] 信号を確認できない場合は、[Objects] ウィンドウ上部のフィルターが出力オブジェクトを含めるように正しく設定されていることを確認します。

HDL コードをざっと確認すると、clk、reset、および sel 入力が予期どおりで、正しいことがわかります。この rest が 137 行目で Low にアサートされた後に最初のブレークポイントを設定します。

3. ファイルの 137 行目までスクロールします。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 37UG937 (v2019.2) 2019 年 10 月 30 日

Page 38: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

sinegen.vhd の 137 行目にブレークポイントを追加します。ブレークポイントは実行可能な行にのみ設定できます。Vivado® シミュレータでは、実行可能な行には、テキスト エディターの左端の行番号の横に中が白抜きの赤い丸 が付いています。このコードがシミュレータで処理されるたび、または、カウンターがカウントされて 1 増えるたびに、シミュレータはこのブレークポイントで停止します。

4. テキスト エディターの左端の赤い丸 をクリックして、次の図のようにブレークポイントを設定します。この白抜きの赤い丸が赤く塗りつぶされた丸 になると、この行にブレークポイントが設定されたことを示します。この赤い丸 をクリックすると、ブレークポイントが削除され、白抜きの赤い丸 に戻ります。

注記: ファイル内のすべてのブレークポイントを削除するには、設定されているブレークポイントの 1 つを右クリックし、[Delete All Breakpoints] を選択します。Vivado シミュレータでブレークポイントを設定し、ステップごとにデバッグしていくときは、次の図のように、[Tcl Console] ウィンドウ、波形ウィンドウ、HDL ソース ファイルを同時に確認しながら実行するのがベストです。

5. これらのウィンドウのサイズを調整し、ウィンドウの [Float] コマンド または [New Vertical Group] コマンドを使用して、これらのウィンドウをすべて一度に確認できるように並べます。

6. [Restart] ボタン をクリックして、時間 0 からシミュレーションを再開します。7. [Run All] ボタン をクリックしてシミュレーションを開始します。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 38UG937 (v2019.2) 2019 年 10 月 30 日

Page 39: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

8. シミュレーションは時間 102.5 ns まで、または最初のカウントの開始地点あたりまで実行し、137 行目のブレークポイントで停止します。Vivado IDE 内のテキスト エディターで、ブレークポイントのマーク が表示され、その行がハイライトされています。[Tcl Console] ウィンドウにはメッセージも表示され、シミュレータが停止した時間 (ピコ秒で表示) およびシミュレータで実行されたソース コードの行が表示されます。注記: 特定のタスク (この場合はシミュレーション デバッグ) を実行するためにウィンドウを並べ替えたときは、その表示レイアウトを保存しておくと、次にまた使用できます。メイン メニューから [Layout] → [Save LayoutAs] コマンドをクリックし、レイアウトを保存します。ウィンドウの並べ替えおよび表示レイアウトについての詳細は、『Vivado Design Suite ユーザー ガイド: Vivado IDE の使用』 (UG893: 英語版、日本語版) を参照してください。

9. [Run All] ボタン をクリックしてシミュレーションを続けます。ブレークポイントでシミュレーションがまた停止します。波形ウィンドウの値を確認します。[Internal Signals]グループの sine_l[15:0] 信号、および [Outputs] グループの sine[19:0] 信号が初期化されていません。

10. テキスト エディターで、sinegen.vhd ソース ファイルの 144 行目に別のブレークポイントを追加します。この行は sel が 0 のときに実行します。このコードは、ビット拡張を使用して、低周波数信号 sine_l を出力、サインに割り当てます。

11. 波形ウィンドウで、[Internal Siglans] グループの sine_l[15:0] を選択し、Ctrl キーを押しながら [Outputs] グループの sine[19:0] を選択します。選択された信号は波形ウィンドウでハイライトされており、確認しやすくなっています。

12. [Run All] ボタン をクリックしてシミュレーションを開始します。再びシミュレーションがブレークポイントで停止しますが、今度は 144 行目で停止します。

ソース コードのステップ実行Vivado® シミュレータのデバッグ ツールには、行ステップという便利な機能もあります。この機能を利用すると、シミュレータを 1 つのシミュレーション単位ごと (行、プロセス、タスク) に実行できます。これは、ソース コードの各行がシミュレーション結果にどのように影響するかを調べる場合に便利です。ソース コードを行ごとにステップ実行し、低周波数の波形がどのように選択されているか、DDC Compiler 出力が正しいかどうかを確認します。

1. Vivado シミュレータのツールバー メニューで [Step] ボタン をクリックします。シミュレーションは次の実行可能な行まで進みます。この場合は、別のソース ファイルに進みます。fsm.vdhファイルはテキスト エディターで開きます。前回と同じ配置ですべてのウィンドウを表示させるため、テキストエディターのウィンドウを別の場所に移動させる必要がある場合があります。注記: Tcl プロンプトでステップ コマンドを入力することもできます。

2. sinegen.vhd の 144 行目にコードが戻るまで、ステップ実行を続けます。これで回路全体をステップ実行できました。波形ウィンドウで、sel は 0 ですが、sine_l は低周波数の正弦波として出力の sine に割り当てられている点に注目してください。また、sine_l は初期化されていないままの状態です。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 39UG937 (v2019.2) 2019 年 10 月 30 日

Page 40: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

3. 次のように、デバッグ目的で [Tcl Console] ウィンドウに add_force コマンドを入力し、sine_l の値を初期化します。add_force /testbench/dut/U_SINEGEN/sine_l 0110011011001010

このコマンドにより、sine_l の値が特定の既知のコンディションになります。必要であれば、さらに徹底して信号を実行するため、値の繰り返しセットを作成することも可能です。add_force の詳細は、『Vivado Design Suiteユーザー ガイド: ロジック シミュレーション』 (UG900: 英語版、日本語版) を参照してください。

4. [Run All] ボタン をクリックしてシミュレーションを続けます。波形ウィンドウで、sine_l[15:0] の値が add_force コマンドで指定されている値に設定されていること、また、sel の値が 0 のままなので、sine_l[15:0] の値が出力信号 sine[19:0] に割り当てられていることに注目してください。HDL ソース ファイルで sine_l 信号をトレースし、sine_l の入力を特定します。

5. テキスト エディターで右クリックして [Find in files] を選択し、sine_l を検索します。6. 次の図のように、[Match whole word] および [Enabled design sources] チェック ボックスをオンにし、[Find] をクリックします。

[Find in Files] の検索結果は Vivado IDE の下部に表示され、sinegen.vhd ファイルで検出された sine_l がすべて表示されます。

7. sinegen.vhd ファイルでの検索結果を表示させるため、表示スペースを広げます。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 40UG937 (v2019.2) 2019 年 10 月 30 日

Page 41: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

111 行目にある 2 番目の検索結果を見ると、デザインに問題があることがわかります。sinegen.vhd ファイルの 111 行目で、m_axis_data_tdata_sine_low 信号が sine_l に割り当てられています。111 行目はコメントアウトされているので、sine_l 信号は低周波数の DDS Compiler 出力には接続されていないか、または、ほかのどの入力にも接続されていません。

8. sinegen.vhd ファイルの 111 行目のコメントアウトを取り消し、[Save File] ボタン をクリックします。9. [Tcl Console] ウィンドウで sine_l: remove_forces -all を実行して、強制を解除します。

手順 10: シミュレーションの再実行ブレークポイントおよび行ステップを使用して、デザインの低周波数の出力に問題があることを突き止め、修正しました。このデザインに関連付けられているソース ファイルを変更したので、HDL ソースを再コンパイルし、新しいシミュレーション スナップショットを作成する必要があります。この場合は、ただシミュレーションを時間 0 から再起動するのではなく、シミュレーションを最初から再構築します。1. sinegen.vhd でブレークポイントの 1 つを選択し、右クリックして、[Delete All Breakpoints] をクリックしま

す。2. メイン ツールバーの [Relaunch] ボタン をクリックします。

注記: 波形設定ファイルを保存するようにダイアログ ボックスが表示されるので、[yes] をクリックします。Vivado® シミュレータの xelab によりソース ファイルが再コンパイルされ、シミュレーション スナップショットが再生成されます。これで、正しいデザイン ファイルを使用してシミュレーションする準備が整いました。[Relaunch] ボタンは、launch_simulation を使用して Vivado シミュレータが実行された後にのみ、アクティブになります。シミュレーションをバッチ/スクリプト モードで実行している場合は、[Relaunch] ボタンがグレー表示されます。

3. [Run All] ボタン をクリックして、シミュレーションを実行します。波形設定でアナログ信号 sine[19:0] を確認します。低周波数の正弦波は予期どおりに見えます。[TclConsole] ウィンドウは次のようになります。[@3518000] LEDS_n = 0100[@3523000] LEDS_n = 0001[@3523000] LEDS_n = 0001[@6008000] LEDS_n = 0101[@6013000] LEDS_n = 0010[@6013000] LEDS_n = 0010$finish called at time : 7005 ns : File "ug937/sim/testbench.v" Line 63

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 41UG937 (v2019.2) 2019 年 10 月 30 日

Page 42: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

まとめシミュレーション結果を確認したら、シミュレーションを閉じ、プロジェクトも閉じます。これで演習 2 は終了です。このチュートリアルの演習 1 および 2 で、次のことを学びました。• Vivado® IDE のプロジェクト モード フローを使用して Vivado® シミュレータを実行しました。• プロジェクトを作成し、ソース ファイルおよび IP を追加しました。• シミュレーション専用ファイル (testbench.v) を追加しました。• シミュレーション プロパティを設定し、ビヘイビアー シミュレーションを起動しました。• 波形ウィンドウに信号を追加しました。• 波形設定ファイルを設定し保存しました。• ブレークポイントおよび行ステップを使用してデザインのバグをデバッグしました。• エラーを修正し、シミュレーションを再起動して、デザインを検証しました。演習 3 では、Vivado シミュレータのバッチ モードについて学びます。

第 3 章: 演習 2: デザインのデバッグ

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 42UG937 (v2019.2) 2019 年 10 月 30 日

Page 43: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

第 4 章

演習 3: バッチ モードのシミュレーションの実行

Vivado® 統合設計環境 (IDE) でプロジェクトを設定せずにデザインをシミュレーションするには、Vivado® シミュレータを非プロジェクト モード フローで使用します。このフローでは、次のタスクを実行します。• Vivado シミュレータ プロジェクト スクリプトを作成して、手動でシミュレーション プロジェクトを準備します。• Vivado シミュレータの xelab ユーティリティを使用して、シミュレーションのスナップショット ファイルを作成します。

• 作成したスナップショットを使用して xsim コマンドを実行し、Vivado シミュレータの GUI を起動します。

手順 1: シミュレーションの準備Vivado® IDE でプロジェクトを設定せずにデザインをシミュレーションするには、Vivado® シミュレータを非プロジェクト モード フローで使用します。デザインの HDL ファイルをコンパイルし、次のいずれかの方法でシミュレーション スナップショットを作成できます。• Vivado シミュレータ プロジェクト スクリプトを作成し、すべての HDL ファイルをコンパイルするよう指定し、シミュレーション スナップショットを作成する xelab コマンドを使用します。

• Vivado シミュレータの解析コマンド、xvlog および xvhdl を使用して、個々のソース ファイルを解析し、ディスク上の HDL ライブラリにこれらのファイルを書き込み、xelab を使用して解析済みファイルからシミュレーション スナップショットを作成します。

Vivado シミュレータ プロジェクト ファイルの作成Vivado® シミュレータ プロジェクト スクリプトは、シミュレーション用に解析およびコンパイルするデザイン ソース ファイルおよびライブラリを指定します。シミュレーション プロジェクト スクリプトの作成に便利で、プロジェクト開発中に繰り返し実行が可能です。Vivado シミュレータ プロジェクト スクリプト (PRJ ファイル) は、次のようなフォーマットになっています。verilog | vhdl| sv <library_name> {<file_name>.v|.vhd

説明:

• verilog | vhdl | sv は、デザインのソースが Verilog、VHDL、または SV ファイルであることを示します。

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 43UG937 (v2019.2) 2019 年 10 月 30 日

Page 44: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

• <library_name> は、ソース ファイルをコンパイルするライブラリを指定します。指定がない場合は、コンパイル用のデフォルト ライブラリ work が使用されます。

• <file_name>.v|.vhd は、コンパイルするデザイン ソース ファイルの名前を指定します。重要: Verilog の場合は、1 つのコマンド ラインに複数のソース ファイルを指定できますが、VHDL の場合は、1 つのコマンド ラインに 1 つのソース ファイルしか指定できません。この手順では、既存のプロジェクト スクリプトを編集し、不足のソース ファイルを追加して、Vivado シミュレータプロジェクト スクリプトを構築します。プロジェクト スクリプトのコマンド ラインは、上記の構文を使用したものになっているはずです。1. <Extract_Dir>/scripts フォルダーを参照します。2. テキスト エディターで simulate_xsim.prj プロジェクト スクリプトを開きます。3. プロジェクト スクリプトに次のコマンドを追加します。

vhdl xil_defaultlib "../sources/sinegen.vhd"vhdl xil_defaultlib "../sources/debounce.vhd"vhdl xil_defaultlib "../sources/fsm.vhd"vhdl xil_defaultlib "../sources/sinegen_demo.vhd"verilog xil_defaultlib "../sim/testbench.v"

4. ファイルを保存して閉じます。ソースをリストするときに、特定の依存順序で並べる必要はありません。xelab コマンドで、依存関係の順序が確認され、自動的にその順番でファイルが処理されます。ヒント: 参考のため、このチュートリアル ファイルの完成版が ug937-design-files/completed フォルダーにあります。

デザイン ファイルの手動解析Vivado® シミュレータ プロジェクト スクリプトを作成する代わりに、xvlog または xvhdl を使用して直接コマンドラインから個々のデザイン ソース ファイルをコンパイルし、デザイン ソースを解析して、HDL ライブラリに書き込むことができます。単純なシミュレーション実行に、またはシェル スクリプトおよび makefile コンパイル フローの定義に、この方法を使用できます。xvlog コマンドを次の構文で実行し、Verilog ファイルを個々にまたは複数同時に解析します。xvlog [options] <verilog_file | list_of_files>

xvhdl コマンドを次の構文で実行し、VHDL ファイルを個々にまたは複数同時に解析します。xvhdl [options] <VHDL_file>

xvlog および xvhdl コマンドに使用できるオプションの詳細は、『Vivado Design Suite ユーザー ガイド: ロジック シミュレーション』 (UG900: 英語版、日本語版) を参照してください。<Extract_Dir>/scripts または<Extract_Dir>/completed にある parse_standalone.bat ファイルには、xvlog および xvhdl を直接実行する例が含まれています。

第 4 章: 演習 3: バッチ モードのシミュレーションの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 44UG937 (v2019.2) 2019 年 10 月 30 日

Page 45: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

手順 2: シミュレーション スナップショットの構築この手順では、先ほど編集したプロジェクト スクリプト (simulate_xsim.prj) 上で xelab コマンドを実行し、デザインのすべてのソースをエラボレート、コンパイル、リンクします。xelab ユーティリティにより、Vivado® シミュレータでデザインをシミュレーションするためのシミュレーション スナップショットが作成されます。一般的な xelab コマンドの構文は次のとおりです。xelab -prj <project_file> -s <simulation snapshot> <library>.<top_unit>

説明:

• -prj <project_file>: 入力として使用する Vivado シミュレーション プロジェクト スクリプトを指定します。

• -s <simulation_snapshot>: 出力されるシミュレーション スナップショットの名前を指定します。• <library>.<top_unit>: デザインのライブラリおよび最上位モジュールを指定します。

xelab の実行この手順では、手順 1 で完了させたプロジェクト ファイルに xelab コマンドを実行し、シミュレーション スナップショットを作成するため、すべてのデザイン ソースをエラボレート、コンパイル、リンクします。xelab コマンドを実行するには、コマンド ウィンドウを開きます。1. Windows の場合は、コマンド プロンプトを開きます。Linux の場合は、この手順を飛ばして次に進みます。2. ザイリンクス がインストールされているディレクトリに移動し、settings64.bat を実行して、必要に応じて ザイリンクス ツールを設定します。cd install_path\Vivado\2019.x\settings64.bat

注記: settings64.bat は、Vivado® Design Suite を実行するため、使用コンピューターにパスを設定するためのものです。

ヒント: バッチ ファイルまたはスクリプトで xelab、xsc、xsim、xvhdl、または xvlog コマンドを実行する場合、XILINX_VIVADO 環境変数で Vivado Design Suite のインストール ディレクトリをポイントするよう定義する必要がある場合があります。XILINX_VIVADO 変数を設定するには、次のいずれかをスクリプトまたはバッチ ファイルに追加します。Windows の場合set XILINX_VIVADO=<Vivado_install_area>/Vivado/2019.x

Linux の場合setenv XILINX_VIVADO <Vivado_install_area>/Vivado/2019.x

3. <Extract_Dir>/scripts フォルダーに移動します。提供の xelab バッチ ファイル (xelab_batch.bat) は完成していないので、前に説明したように、正しいシミュレーション スナップショットを作成するよう、xelab 構文を使用してこのファイルを変更する必要があります。

4. 次のオプションを追加するため、xelab_batch.bat ファイルを変更します。• プロジェクト ファイルを指定します: -prj simulate_xsim.prj

第 4 章: 演習 3: バッチ モードのシミュレーションの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 45UG937 (v2019.2) 2019 年 10 月 30 日

Page 46: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

• 出力されるシミュレーション スナップショットの名前を指定します: -s run_sineGen

• ライブラリおよび最上位デザイン ユニットを指定します: xil_defaultlib.testbench

xelab コマンドに使用可能なオプションの詳細は、『Vivado Design Suite ユーザー ガイド: ロジック シミュレーション』 (UG900: 英語版、日本語版) を参照してください。

5. バッチ ファイルを保存し、閉じます。6. コマンド ウィンドウで xelab_batch.bat ファイルを実行してコンパイルし、シミュレーション スナップショットを作成します。xelab_batch.bat

7. xelab の出力が、コマンド プロンプト ウィンドウに出力された内容と同じであることを確認します。注記: xelab コマンドにより、このコマンドが実行されたディレクトリに xelab.log ファイルも生成されます。このログ ファイルには、xelab コマンドを実行したときに表示されたすべてのメッセージおよび結果が記録されているので、後で確認ができます。

ヒント: xvlog および xvhdl コマンドにより HDL デザイン ソースが解析されたら、xelab コマンドを使用して、指定のシミュレーション ライブラリを読み出すこともできます。xelab コマンドはここで説明されているのと同じように使用できますが、シミュレーション プロジェクト ファイルがないので、-prj オプションは不要です。

手順 3: デザインの手動シミュレーションこの手順では、手順 2 で xelab コマンドで生成したシミュレーション スナップショットを使用して xsim コマンドを実行し、Vivado® シミュレータの GUI を起動します。この手順を完了したら、Vivado シミュレータ GUI を使用して、デザインを詳しく確認できます。手順 2 で使用した同じコマンド ウィンドウに、次のコマンドを入力します。xsim run_sineGen -gui -wdb simulate_xsim.wdb -view xsim_waveConfig

説明:

• run_sineGen -gui: xelab を使用して生成したシミュレーション スナップショットを指定し、Vivado シミュレータを GUI モードで起動します。

• -wdb: シミュレーション実行が完了したときに出力するシミュレーション波形データベースのファイル名を指定します。

• -view: 指定の波形設定ファイルを Vivado シミュレータ GUI 内で開きます。注記: 上記で指定した波形設定ファイル、またはこのチュートリアルの演習 2 で作成した tutorial_1.wcfg ファイルを使用できます。Vivado シミュレータ GUI が開き、デザインが読み込まれます (次の図を参照)。シミュレーション時間は、実行時間を指定するまでは、0 ns のままです。シミュレーションを実行して、デザインを確認します。

第 4 章: 演習 3: バッチ モードのシミュレーションの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 46UG937 (v2019.2) 2019 年 10 月 30 日

Page 47: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

まとめこのチュートリアルでは、次のことを学びました。• Vivado® IDE プロジェクトを作成しました。• ソース ファイルをダウンロードして、Vivado シミュレーションを実行しました。• シミュレーション カスタマイズ機能を確認しました。• ソース ファイル内の既知の問題をデバッグし、修正しました。• Vivado シミュレーション実行ファイルおよびスイッチ オプションを使用し、バッチ モードで Vivado シミュレーションを実行しました。

第 4 章: 演習 3: バッチ モードのシミュレーションの実行

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 47UG937 (v2019.2) 2019 年 10 月 30 日

Page 48: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

第 5 章

演習 4: SystemVerilog の機能Vivado® シミュレータでは、SystemVerilog IEEE 1800-2012 の合成可能なテストベンチまたは検証機能がサポートされています。この章では、SystemVerilog の例を使用して、Vivado シミュレータに追加されたさまざまなデバッグ機能について学びます。Vivado で提供されている IP サンプル デザインを使用します。

サンプル デザインの作成AXI-VIP サンプル デザインを生成します。1. Vivado® を開きます。2. Vivado Tcl コンソールで次のコマンドを実行し、「mySystemVerilog」という名前のプロジェクトを作成します。

create_project mySystemVerilog ./mySystemVerilog

3. 次の機能が含まれている AXI-VIP サンプル デザインを作成します。• ランダム制約• ダイナミック型およびクラス• 仮想インターフェイス

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 48UG937 (v2019.2) 2019 年 10 月 30 日

Page 49: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

• アサーション• クロッキング ブロック

4. Tcl コンソールで次のコマンドを実行します。a. create_ip -name axi_vip -vendor xilinx.com -library ip -version 1.1 -

module_name axi_vip_0

b. open_example_project -force [get_ips axi_vip_0]

これで、axi_vip_0_ex という名前の AXI-VIP サンプル デザインが作成できました。

シミュレーションの起動サンプル プロジェクトが既にあります。次は、ビヘイビアー シミュレーションを実行します。デフォルトで、シミュレーションはプリコンパイル モードで実行されます。このモードでは、スタティック IP のソース コードがプロジェクトには追加されません。この機能をよりよく理解するため、プリコンパイルではないモードでシミュレーションを実行します。Tcl コンソールで次のコマンドを実行します。• set_property sim.use_ip_compiled_libs 0 [current_project]

• launch_simulation

これでシミュレーションが 1000 ns 間実行されます。

Vivado シミュレータを使用したデバッグVivado® シミュレータでは SystemVerilog 機能がサポートされています。この演習では、次の SystemVerilog 機能について学びます。• [Scope] ウィンドウ• [Objects] ウィンドウ• [Tcl Console] ウィンドウ

[Scope] ウィンドウSystemVerilog には、インターフェイスと呼ばれる構築ブロックがあります。モジュールと比較すると、機能に違いがあります。1. [Scope] ウィンドウで [Expand All] ボタン をクリックします。2. これで IF および PC インターフェイスのインスタンスが表示されます。IF および PC インターフェイスのインスタンスのアイコンは、モジュール アイコンとは異なります。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 49UG937 (v2019.2) 2019 年 10 月 30 日

Page 50: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

3. [IF] を右クリックして [Go to Source Code] をクリックします。これでインターフェイス定義が表示されます。

[Objects] ウィンドウSystemVerilog では、ネット/変数はすべてスタティック タイプです。これらはシミュレーションの間常に存在します。SystemVerilog には、ダイナミック タイプという新しいタイプがあり、スタティック タイプと並行して使用されます。クラス、キュー、アソシエイティブ配列などがダイナミック タイプです。スタティック タイプの変数 (int a; wire [7:0] b;) とは異なり、ダイナミック タイプの変数にはシミュレーションを通じて固定されたサイズはありません。変数はランタイム中に変化し続けます。ダイナミック タイプの変数の値は、[Objects] ウィンドウでシミュレーション中に確認できます。

1. [Restart] ボタンをクリックします。

2. [Scope] ウィンドウで最上位モジュールの下にあるスコープ [generic_tb] を選択します。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 50UG937 (v2019.2) 2019 年 10 月 30 日

Page 51: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

3. [Objects] ウィンドウを最大化します。シミュレーションはこれから開始するところなので、[Data Type] 列でキュー (Queue) とクラス (Class) のダイナミック タイプを確認します。キューの値は空のようですが、クラスの値はnull のようです。

4. [Scope] ウィンドウで [generic_tb] をダブルクリックして、このテキスト ファイルを確認します。

5. テキスト エディターのウィンドウで 64 行目の丸をクリックして、ブレークポイントを追加します。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 51UG937 (v2019.2) 2019 年 10 月 30 日

Page 52: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

6. [Run All] ボタンをクリックすると、シミュレーションが 64 行目で停止します。[Objects] ウィンドウではmaster_monitor_transaction_queue の値が空に見えます。

7. Vivado® シミュレータのツールバー メニューで [Step] ボタン をクリックします。シミュレーションが現在停止している 64 行目の文が実行されます。この文を実行すると、エレメントがプッシュされます。キューに 1つのエレメントが自動的に入力されます。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 52UG937 (v2019.2) 2019 年 10 月 30 日

Page 53: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

8. [Objects] ウィンドウで master_monitor_transaction_queue の値が自動入力されています。このようにしてダイナミック タイプの値は [Objects] ウィンドウで確認できます。

[Tcl Console] ウィンドウ[Objects] ウィンドウのように、ダイナミック タイプの変数の値を [Tcl Console] ウィンドウでも確認できます。

1. [Restart] ボタン をクリックします。2. [Scope] ウィンドウで最上位モジュールの下にあるスコープ [generic_tb] を選択します。

3. [Tcl Console] ウィンドウで report_objects コマンドを起動し、選択したスコープにあるオブジェクトをすべて表示させます。「Queue」や「Class」もオブジェクト タイプとして表示されます。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 53UG937 (v2019.2) 2019 年 10 月 30 日

Page 54: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

4. get_value コマンドを起動して、オブジェクトの現在の値を確認します。mst_monitor_transaction の値には、Class タイプの null、slave_monitor_transaction_queue の値には、Queue タイプの空のかっこが表示されます。

5. [Run All] ボタン をクリックします。シミュレーションがブレークポイントを追加した行で停止します。6. get_value master_moniter_transaction_queue コマンドを起動すると、かっこの中がやはり空になっています。

7. Vivado® シミュレータのツールバー メニューで [Step] ボタン をクリックします。シミュレーションが現在停止している 64 行目の文が実行されます。この文を実行すると、エレメントがプッシュされます。キューに 1つのエレメントが自動的に入力されます。

8. get_value master_moniter_transaction_queue コマンドを実行すると、キューに 1 エントリが入っているのがわかります。[Objects] ウィンドウのように、ダイナミック タイプの変数の値を [Tcl Console] ウィンドウにも読み込むことができます。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 54UG937 (v2019.2) 2019 年 10 月 30 日

Page 55: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

機能カバレッジ機能カバレッジは、ユーザーが定義するメトリクスで、テスト プランに機能として挙げられているデザイン仕様がどの程度実行されたかを計測するためのものです。テスト プランに機能として取り上げられているさまざまな使用ケース、コーナー ケース、仕様など、デザイン コンディションが確認され、検証され、テストされたかどうかを計測できます。Vivado® シミュレータでは機能カバレッジがサポートされています。デザインに機能カバレッジ文が含まれている場合は、データベース (カバレッジ データベース) が生成されます。カバレッジ データベースを表示するには、Vivado®

シミュレータの xcrg (Xilinx Coverage Report Generator) というユーティリティを使用します。機能カバレッジおよびxcrg の詳細は、『Vivado Design Suite ユーザー ガイド: ロジック シミュレーション』 (UG900: 英語版、日本語版) を参照してください。現在のサンプル デザインで xcrg を表示させるには、機能カバレッジ コードを追加します。

covergroup 宣言covergroup my_cover_group @(posedge aclk); m_axi_awlen_cp : coverpoint m_axi_awlen; m_axi_awcache_cp : coverpoint m_axi_awcache { option.comment = "cp with transition bins"; bins a1 = (1=>2); bins b1 = (1,3=>4,5); bins b2[] = (1,3=>4,5); bins b3 = (1=>2), ([4:6] => 11,12); }m_axi_bresp_cp : coverpoint m_axi_bresp;endgroupmy_cover_group obj1 = new();

この例では、covergroup を my_cover_group という名前で、サンプリング イベントを posedge aclk という名前で宣言しています。この covergroup には 3 つのカバーポイントがあります。この covergroup 宣言をサンプル デザインに追加します。1. [Tcl Console] ウィンドウに次のコマンドを入力します。

current_scope /axi_vip_0_exdes_adv_mst_active__pt_passive__slv_comb/DUT/ex_design/axi_vip_mst

2. [axi_vip_mst] スコープをダブルクリックして、ソース コードを開きます。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 55UG937 (v2019.2) 2019 年 10 月 30 日

Page 56: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

3. テキスト エディターに次のファイル パスが表示されるので、covergroup 宣言を endmodule の前に追加して保存します。axi_vip_0_ex/axi_vip_0_ex.ip_user_files/bd/ex_sim/ip/ex_sim_axi_vip_mst_0/sim/ex_sim_axi_vip_mst_0.sv

4. [Tcl Console] ウィンドウで close_sim コマンドを実行して、前に実行していたシミュレーションを閉じます。5. [Tcl Console] ウィンドウで、reset_simulation コマンドを実行して、シミュレーション ディレクトリをクリーンにします。

6. [Tcl Console] ウィンドウで、launch_simulation コマンドを実行して、シミュレーションを実行します。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 56UG937 (v2019.2) 2019 年 10 月 30 日

Page 57: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

7. [Run All] ボタン をクリックします。シミュレーションは $finish 文に達すると停止します。Vivado® シミュレータにより、次の場所に xsim.covdb という名前 (デフォルト名) でカバレッジ データベースが生成されました。./axi_vip_0_ex.sim/sim_adv_mst_active__pt_passive__slv_comb/behav/xsim/

レポートを生成するには、次のコマンドを実行します。xcrg -report_format html -dir ./axi_vip_0_ex.sim/sim_adv_mst_active__pt_passive__slv_comb/behav/xsim/xsim.covdb/

これで、xcrg_report という名前のディレクトリが生成され、そこには .html レポートが含まれます。次はサンプル レポートの例です。1. dashboard.html ファイルを開きます。このファイルには、コマンド、バージョン、日付、カバレッジ サマリ

(合計 bin の 8.85% のみが表示されている) などの詳細が含まれています。

2. [Groups] ボタンをクリックします。3. グループ レポートの下にあるリンクをクリックします。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 57UG937 (v2019.2) 2019 年 10 月 30 日

Page 58: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

4. 次の図のような詳細レポートが表示されます。

これでカバレッジを確認でき、カバレッジを改善するためテストベンチまたはシード値を変更できます。

アサーションSystemVerilog には次の 2 タイプのアサーションがあります。• 即時アサーション• 並列アサーション

即時アサーションif 文の式のように評価されます。always@(posedge clk)assert(data == 4’b1010);

並列アサーションこのアサーションはクロック セマンティクスを基準にし、その式のサンプルされた値が使用されます。これらのアサーションは複数のサイクルにわたって拡張可能です。always@ (posedge clk) a1: assert property (a ##2 b);

a2: assert property (@(posedge clk) a ##2b);

Vivado®シミュレータでは、プロシージャブロックの外で使用される 2 番目の形式の並列アサーションがサポートされています。1. [Tcl Console] ウィンドウで、close_sim コマンドを実行して、前に実行していたシミュレーションを閉じます。2. [Tcl Console] ウィンドウで、reset_simulation コマンドを実行して、シミュレーション ディレクトリをクリーンにします。

3. [Tcl Console] ウィンドウで、launch_simulation コマンドを実行して、シミュレーションを実行します。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 58UG937 (v2019.2) 2019 年 10 月 30 日

Page 59: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

4. [Tcl Console] ウィンドウに次のコマンドを入力します。current_scope /axi_vip_0_exdes_adv_mst_active__pt_passive__slv_comb/DUT/ex_design/axi_vip_passthrough/inst/IF/PC

5. [PC] スコープをダブルクリックして、ソース コードを開きます。6. 行番号 1669 以降に注目してください。すべてのプロパティ宣言およびアサーションが使用されています。

ランダム制約SystemVerilog にはランダム制約があり、ランダム値を生成するのに使用されます。この機能を使用して、制約にランダム変数を設定することもできます。各シミュレーションで固定数の値を生成するよう、シミュレータはサポートされています。この例では、ランダム化呼び出しは 10 回実行され、シミュレータにより毎回、変数「b1」に対し異なる値が割り当てられます。シミュレーションを閉じ、もう一度実行すると、前回の実行と同じようにまた 10 セットの値が割り当てられます。これはランダム安定性と呼ばれます。module top();class c1;rand bit [3:0] b1;endclassc1 obj1 = new();initialbegin for(int i = 0; i < 10; i++) begin

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 59UG937 (v2019.2) 2019 年 10 月 30 日

Page 60: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

#5 obj1.randomize(); $display("At time %t the value is %p", $time, obj1); endendendmodule

セット数を変更する場合は、ランダム シード値を変更する必要があります。Vivado® シミュレータでは、xsim に -seed オプションを使用すると、この変更が可能です。[Tcl Console] ウィンドウに次のコマンドを入力します。set_property -name {xsim.simulate.xsim.more_options} -value {-seed 2000} -objects [get_filesets sim_adv_mst_active__pt_passive__slv_comb]

シードには整数値を指定する必要があります。このシード値を変更するだけで、異なるセット数を設定できます。この変更を加えた後に、もう一度コンパイルやエラボレーションを実行する必要はありません。1. ファイルに次のコードを追加し、ファイル名を random.sv にします。

module top();class c1;rand bit [3:0] b1;endclassc1 obj1 = new();initialbegin for(int i = 0; i < 10; i++) begin #5 obj1.randomize(); $display("At time %t the value is %p", $time, obj1); endendendmodule

2. [Tcl Console] ウィンドウで次のコマンドを実行します。a. xvlog -sv random.sv コマンドを実行して、コードをコンパイルします。b. xelab top -s top コマンドを実行して、コードをエラボレートします。c. xsim top -R コマンドを実行して、コードをシミュレーションします。出力に注目してください。run-all

At time 5000 the value is '{b1:3}At time 10000 the value is '{b1:7}At time 15000 the value is '{b1:7}At time 20000 the value is '{b1:0}At time 25000 the value is '{b1:0}At time 30000 the value is '{b1:5}At time 35000 the value is '{b1:9}At time 40000 the value is '{b1:3}At time 45000 the value is '{b1:12}At time 50000 the value is '{b1:0}exit

3. 手順 2b をもう一度実行し、値が前回の値と似ていることを確認します。4. 異なる SystemVerilog シード (xsim top -R -sv_seed 5000) でコードをシミュレーションし、値が異なることを確認します。これで、コンパイルおよびエラボレーションを実行せずに、異なる値を生成できます。

第 5 章: 演習 4: SystemVerilog の機能

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 60UG937 (v2019.2) 2019 年 10 月 30 日

Page 61: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

付録 A

その他のリソースおよび法的通知

ザイリンクス リソースアンサー、資料、ダウンロード、フォーラムなどのサポート リソースは、ザイリンクス サポート サイトを参照してください。

Documentation Navigator およびデザイン ハブザイリンクス Documentation Navigator (DocNav) では、ザイリンクスの資料、ビデオ、サポート リソースにアクセスでき、特定の情報を取得するためにフィルター機能や検索機能を利用できます。DocNav を開くには、次のいずれかを実行します。• Vivado® IDE で [Help] → [Documentation and Tutorials] をクリックします。• Windows で [スタート] → [すべてのプログラム ] → [Xilinx Design Tools] → [DocNav] をクリックします。• Linux コマンド プロンプトに「docnav」と入力します。ザイリンクス デザイン ハブには、資料やビデオへのリンクがデザイン タスクおよびトピックごとにまとめられており、これらを参照することでキー コンセプトを学び、よくある質問 (FAQ) を参考に問題を解決できます。デザイン ハブにアクセスするには、次のいずれかを実行します。• DocNav で [Design Hub View] タブをクリックします。• ザイリンクス ウェブサイトでデザイン ハブ ページを参照します。注記: DocNav の詳細は、ザイリンクス ウェブサイトの Documentation Navigator ページを参照してください。DocNav からは、日本語版は参照できません。ウェブサイトのデザイン ハブ ページをご利用ください。

お読みください: 重要な法的通知本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には「貴殿」、法人その他の団体の場合には「貴社」。以下同じ) に開示される情報 (以下「本情報」といいます) は、ザイリンクスの製品を選択および使用することのためにのみ提供されます。適用される法律が許容する最大限の範囲で、(1) 本情報は「現状有姿」、およびすべて受領者の責任で (with all faults) という状態で提供され、ザイリンクスは、本通知をもって、明示、黙示、法定を問わず (商品性、非侵害、特定目的適合性の保証を含みますがこれらに限られません)、すべての保証および条件を負わない (否認する) ものとします。また、(2) ザイリンクスは、本情報 (貴殿または貴社による本情報の使用を含む) に関係し、起

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 61UG937 (v2019.2) 2019 年 10 月 30 日

Page 62: Vivado Design Suite チュートリアル: ロジック シ …...Vivado Design Suite チュート リアル ロジック シミュレーション UG937 (v2019.1) 2019 年 6 月 4

因し、関連する、いかなる種類・性質の損失または損害についても、責任を負わない (契約上、不法行為上 (過失の場合を含む)、その他のいかなる責任の法理によるかを問わない) ものとし、当該損失または損害には、直接、間接、特別、付随的、結果的な損失または損害 (第三者が起こした行為の結果被った、データ、利益、業務上の信用の損失、その他あらゆる種類の損失や損害を含みます) が含まれるものとし、それは、たとえ当該損害や損失が合理的に予見可能であったり、ザイリンクスがそれらの可能性について助言を受けていた場合であったとしても同様です。ザイリンクスは、本情報に含まれるいかなる誤りも訂正する義務を負わず、本情報または製品仕様のアップデートを貴殿または貴社に知らせる義務も負いません。事前の書面による同意のない限り、貴殿または貴社は本情報を再生産、変更、頒布、または公に展示してはなりません。一定の製品は、ザイリンクスの限定的保証の諸条件に従うこととなるので、https://japan.xilinx.com/legal.htm#tos で見られるザイリンクスの販売条件を参照してください。IP コアは、ザイリンクスが貴殿または貴社に付与したライセンスに含まれる保証と補助的条件に従うことになります。ザイリンクスの製品は、フェイルセーフとして、または、フェイルセーフの動作を要求するアプリケーションに使用するために、設計されたり意図されたりしていません。そのような重大なアプリケーションにザイリンクスの製品を使用する場合のリスクと責任は、貴殿または貴社が単独で負うものです。https://japan.xilinx.com/legal.htm#tos で見られるザイリンクスの販売条件を参照してください。

自動車用のアプリケーションの免責条項オートモーティブ製品 (製品番号に「XA」が含まれる) は、ISO 26262 自動車用機能安全規格に従った安全コンセプトまたは余剰性の機能 (「セーフティ設計」) がない限り、エアバッグの展開における使用または車両の制御に影響するアプリケーション (「セーフティ アプリケーション」) における使用は保証されていません。顧客は、製品を組み込むすべてのシステムについて、その使用前または提供前に安全を目的として十分なテストを行うものとします。セーフティ設計なしにセーフティ アプリケーションで製品を使用するリスクはすべて顧客が負い、製品責任の制限を規定する適用法令および規則にのみ従うものとします。

Copyright

© Copyright 2012-2019 Xilinx, Inc. Xilinx、Xilinx のロゴ、Alveo、Artix、Kintex、Spartan、Versal、Virtex、Vivado、Zynq、およびこの文書に含まれるその他の指定されたブランドは、米国およびその他各国のザイリンクス社の商標です。 すべてのその他の商標は、それぞれの保有者に帰属します。

この資料に関するフィードバックおよびリンクなどの問題につきましては、[email protected] まで、または各ページの右下にある [フィードバック送信] ボタンをクリックすると表示されるフォームからお知らせください。フィードバックは日本語で入力可能です。いただきましたご意見を参考に早急に対応させていただきます。なお、このメール アドレスへのお問い合わせは受け付けておりません。あらかじめご了承ください。

付録 A: その他のリソースおよび法的通知

UG937 (v2019.1) 2019 年 6 月 4 日 japan.xilinx.comロジック シミュレーション 62UG937 (v2019.2) 2019 年 10 月 30 日