109
Vivado Design Suite ユーザー ガイド 合成 UG901 (v2013.1) 2013 4 10

Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

Vivado Design Suite ユーザー ガイ ド

合成

UG901 (v2013.1) 2013 年 4 月 10 日

Page 2: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

Notice of Disclaimer The information disclosed to you hereunder (the “Materials”) is provided solely for the selection and use of Xilinx products.To the maximum extent permitted by applicable law:(1) Materials are made available "AS IS" and with all faults, Xilinx hereby DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and (2) Xilinx shall not be liable (whether in contract or tort, including negligence, or under any other theory of liability) for any loss or damage of any kind or nature related to, arising under, or in connection with, the Materials (including your use of the Materials), including for any direct, indirect, special, incidental, or consequential loss or damage (including loss of data, profits, goodwill, or any type of loss or damage suffered as a result of any action brought by a third party) even if such damage or loss was reasonably foreseeable or Xilinx had been advised of the possibility of the same.Xilinx assumes no obligation to correct any errors contained in the Materials or to notify you of updates to the Materials or to product specifications.You may not reproduce, modify, distribute, or publicly display the Materials without prior written consent.Certain products are subject to the terms and conditions of the Limited Warranties which can be viewed at http://www.xilinx.com/warranty.htm; IP cores may be subject to warranty and support terms contained in a license issued to you by Xilinx.Xilinx products are not designed or intended to be fail-safe or for use in any application requiring fail-safe performance; you assume sole risk and liability for use of Xilinx products in Critical Applications:http://www.xilinx.com/warranty.htm#critapps.© Copyright 2013 Xilinx, Inc. Xilinx, the Xilinx logo, Artix, ISE, Kintex, Spartan, Virtex, Vivado, Zynq, and other designated brands included herein are trademarks of Xilinx in the United States and other countries.All other trademarks are the property of their respective owners.

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

こ の資料に関する フ ィ ード バッ クおよび リ ン ク などの問題につき ま し ては、[email protected] までお知らせ く ださ い。 いただき ま し たご意見を参考に早急に対応させていただき ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受け付け てお り ません。 あ らかじめご了承 く ださ い。

合成 japan.xilinx.com 2UG901 (v2013.1) 2013 年 4 月 10 日

Page 3: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

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

日付 バージ ョ ン 改訂内容

2013 年 4 月 10 日 2013.1 次のよ う に変更 • XST 合成情報を削除

• XST 警告を追加および削除

• 合成ス ト ラ テジの図を追加

• 新しい合成ス ト ラ テジの説明を追加

• 「run ス ト ラ テジの作成」 に合成オプシ ョ ン -bugf、 -directive、 -no_lc、 -control_set_opt_threshold、 -resource_sharing を追加

• 「run ス ト ラ テジの作成」 から -no_iobuf を削除

• 19 ページの 「ボ ト ムア ッ プ フ ローの設定」 を追加

• 使用可能な Tcl コマン ド オプシ ョ ンの リ ス ト をア ッ プデー ト

• 付録 A 「合成属性」 に SHREG_EXTRACT を追加 • 付録 C 「HDL コーデ ィ ング手法」 を追加

合成 japan.xilinx.com 3UG901 (v2013.1) 2013 年 4 月 10 日

Page 4: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

目次

改訂履歴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

Vivado 合成概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

合成手法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

合成の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

フ ロ アプラ ンおよび使用率の表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

ロ ジ ッ ク の解析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

非プロ ジェ ク ト モード での合成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

付録 A : 合成属性概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

サポー ト される属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

付録 B : SystemVerilog サポー ト概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

特定のフ ァ イルで SystemVerilog を使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

データ型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

プロセス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

手続きプロ グ ラ ム代入文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

タ ス クおよび関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

モジュールおよび階層 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

イ ン ターフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

付録 C : HDL コーデ ィ ング手法概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

VHDL の利点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

VHDL の利点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

SystemVerilog の利点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

フ リ ッ プフ ロ ッ プ、 レジス タ、 およびラ ッチ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

ラ ッチ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

ト ラ イ ステー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

シフ ト レジス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

ダ イナ ミ ッ ク シフ ト レジス タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

乗算器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

乗加算および乗累算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

RAM の HDL コーデ ィ ング手法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

付録 D : その他のリ ソースザイ リ ン ク ス リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

ソ リ ューシ ョ ン セン ター . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

合成 japan.xilinx.com 4UG901 (v2013.1) 2013 年 4 月 10 日

Page 5: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

Vivado 資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

合成 japan.xilinx.com 5UG901 (v2013.1) 2013 年 4 月 10 日

Page 6: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

Vivado 合成

概要合成は、 RTL で記述されたデザイ ンをゲー ト レベル記述に変換するプロセスです。 Vivado™ 統合設計環境 (IDE) の 合成はタ イ ミ ング ド リ ブンであ り 、 メ モ リ 使用量およびパフ ォーマン スで 適化されています。 SystemVerilog およ び VHDL と Verilog の混合もサポー ト されています。 Vivado IDE では、 業界標準の Synopsys Design Constraints (SDC) に基づ く ザイ リ ン ク ス デザイ ン制約 (XDC) がサポー ト されています。

重要 : UCF 制約は、Vivado 合成ではサポー ト されません。UCF 制約は XDC 制約に変換する必要があ り ます。詳細は、 『Vivado Design Suite 移行手法ガ イ ド』 (UG911) [参照 6] の 「UCF 制約の XDC 制約への移行」 を参照し て く ださ い。

合成を設定し て実行するには、 次の 2 つの方法があ り ます。

• プロジェ ク ト モード を使用

• 非プロジェ ク ト モード を使用 (Tcl コマン ド synth_design を実行し、 デザイ ン フ ァ イルをユーザーが制御)

操作モード の詳細は、 『Vivado Design Suite ユーザー ガ イ ド : デザイ ン フ ローの概要』 (UG892) [参照 7] を参照し て く だ さい。 この章では、 両方のモード を使用し た合成を個別のセ ク シ ョ ンで説明し ます。

合成手法Vivado IDE では、 合成およびイ ンプ リ メ ンテーシ ョ ン run をボタ ンを ク リ ッ クするだけで実行可能な環境が提供され ています。 run のデータは自動的に管理され、 さ まざ まな RTL ソース バージ ョ ン、 ターゲ ッ ト デバイ ス、 合成およ びイ ンプ リ メ ンテーシ ョ ン オプシ ョ ン、 物理制約およびタ イ ミ ング制約を使用し て繰 り 返し実行でき ます。 Vivado IDE では、 次の操作を実行でき ます。

• ス ト ラ テジを作成および保存。 ス ト ラ テジ と は、 合成またはイ ンプ リ メ ンテーシ ョ ンのデザイ ン run に適用され る コマン ド オプシ ョ ンの設定です。 詳細は、 11 ページの 「run ス ト ラ テジの作成」 を参照し て く ださ い。

• 複数の合成およびイ ンプ リ メ ンテーシ ョ ン run を設定し、 順次に、 またはマルチプロセ ッ サ マシンで同時に実 行。 詳細は、 15 ページの 「合成の実行」 を参照し て く ださ い。

• 合成またはイ ンプ リ メ ンテーシ ョ ンの進捗状況を監視、ロ グ レポー ト を確認、run をキ ャ ンセル。詳細は、22 ペー ジの 「合成実行の監視」 を参照し て く だ さい。

合成 japan.xilinx.com 6UG901 (v2013.1) 2013 年 4 月 10 日

Page 7: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

合成の使用こ のセ ク シ ョ ンでは、 Vivado IDE を使用し て Vivado 合成を設定および実行する方法を説明し ます。 各 Vivado IDE 操 作の下に、 同等の Tcl コマン ド が リ ス ト されています。

Tcl コマン ド の詳細および Tcl の使用方法は、 次のガイ ド を参照し て く ださ い。

• 『Vivado Design Suite Tcl コマン ド リ フ ァ レ ンス ガ イ ド』 (UG835) [参照 3]

• 『Vivado Design Suite ユーザー ガイ ド : Tcl ス ク リ プ ト 機能の使用』 (UG894) [参照 4]

合成設定 デザイ ンの合成オプシ ョ ンを設定するには、 次の手順に従います。

1. Flow Navigator で [Synthesis] → [Synthesis Settings] を ク リ ッ ク し ます (図 1)。

図 2 に示す [Project Settings] ダ イ ア ロ グ ボ ッ ク スが開き ます。

X-Ref Target - Figure 1

図 1 : Flow Navigator : [Synthesis] セクシ ョ ン

合成 japan.xilinx.com 7UG901 (v2013.1) 2013 年 4 月 10 日

Page 8: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

X-Ref Target - Figure 2

図 2 : [Project Settings] ダイアログ ボ ッ ク ス

合成 japan.xilinx.com 8UG901 (v2013.1) 2013 年 4 月 10 日

Page 9: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

2. [Project Settings] ダ イ アロ グ ボ ッ ク スで、 次のよ う に設定し ます。

a. [Synthesis] ページの [Constraints] で、 [Default Constraint Set] にア ク テ ィ ブな制約セ ッ ト とする制約セ ッ ト を 選択し ます。 制約セ ッ ト は、 ザイ リ ン ク ス デザイ ン制約 (XDC) で記述されたデザイ ン制約を含む複数の制 約フ ァ イルのセ ッ ト です。 デザイ ン制約には、 次の 2 種類があ り ます。

- 物理制約 : ピ ン配置、 ブロ ッ ク RAM、 LUT、 フ リ ッ プフ ロ ッ プなどのセルの絶対配置または相対配置、 およびデバイ スのコ ンフ ィ ギュ レーシ ョ ン設定を定義し ます。

- タ イ ミ ング制約 : デザイ ンの周波数要件を定義し ます。 タ イ ミ ング制約を設定し ない場合、 デザイ ンが ワ イヤの長さおよび配線の密集度にのみ基づいて 適化されます。

選択し た制約セ ッ ト は新しい run に使用され、 デザイ ンの変更も こ の制約セ ッ ト に保存されます。

同等の Tcl コマン ド : -constrset <arg>

b. [Options] エ リ アで、[Strategy] ド ロ ッ プダウ ン リ ス ト から合成 run に使用する合成ス ト ラ テジを選択し ます。

あ ら かじめ定義されたス ト ラ テジから選択するか、 または独自のス ト ラ テジを定義でき ます。 合成ス ト ラ テジを選択する と、 使用可能な Vivado ス ト ラ テジがダ イ ア ロ グ ボ ッ ク スに表示されます。 オプシ ョ ンの値を 変更する と、 合成ス ト ラ テジの設定を変更でき ます。

表 1 に、 run ス ト ラ テジ、 そのデフ ォル ト 設定、 およびその他のオプシ ョ ンを示し ます。 表の後に、 オプシ ョ ンの詳細を説明し ます。

c. 表示されているオプシ ョ ンを選択し ます。 次のオプシ ョ ンがあ り ます。

- [tcl.pre] および [tcl.post] : 合成の前後に実行する Tcl フ ァ イルを指定し ます。

注記 : tcl.pre および tcl.post ス ク リ プ ト 内のパスは、 現在のプロ ジ ェ ク ト に関連付け られている run デ ィ レ ク ト リ <project>/<project.runs>/<run_name> を基準 と し ています。

Tcl ス ク リ プ ト の詳細は、『Vivado Design Suite ユーザー ガイ ド : Tcl ス ク リ プ ト 機能の使用』 (UG894) [参 照 4] を参照し て く だ さい。

現在のプロジェ ク ト または現在の run の DIRECTORY プロパテ ィ を使用し て、 ス ク リ プ ト 内の相対パス を定義でき ます。

get_property DIRECTORY [current_project] get_property DIRECTORY [current_run]

表 1 : Vivado の run ス ト ラテジおよびデフ ォル ト オプシ ョ ン

run ス ト ラ テジ オプシ ョ ンVivadoSynthesisDefaults

デフ ォル ト 設定Flow_RuntimeOptimized

デ フ ォル ト 設定その他のオプシ ョ ン

-flatten_hierarchy rebuilt none full

-gated_clock_conversion off off on

-bufg 12 12 ユーザー選択

-fanout_limit 10,000 10,000 ユーザー選択

-directive default RunTimeOptimized な し

-fsm_extraction auto off one_hot、 sequential、johnson、 gray

-keep_equivalent_registers オフ オフ オン

-resource_sharing on auto off

-control_set_opt_threshold 1 1 ユーザー選択

-no_lc オフ オフ オン

合成 japan.xilinx.com 9UG901 (v2013.1) 2013 年 4 月 10 日

Page 10: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

- [-flatten_hierarchy] : Vivado 合成での階層の制御方法を指定し ます。

- [none] : 階層を フ ラ ッ ト 化し ません。 合成の出力には、 元の RTL と同じ階層が含まれます。

- [full] : 上位以外の階層をすべてフ ラ ッ ト 化し ます。

- [rebuilt] : これがデフ ォル ト です。 階層をフ ラ ッ ト 化し て合成を実行し た後に、 元の RTL に基づいて階 層を再構築し ます。 こ の設定を使用する と、 境界を越えた 適化を実行でき るので QoR が向上し、 終的な階層は RTL と似た ものになるので解析しやす く な り ます。

- [-gated_clock_conversion] : ゲーテ ッ ド ク ロ ッ ク を イネーブルに変換する機能をオン/オフにし ます。ゲー テ ッ ド ク ロ ッ ク の変換を使用するには、 RTL 属性も必要です。 詳細は、 付録 A 「合成属性」 を参照し て く だ さい。

- [-bufg] : デザイ ンで推論可能な BUFG の 大数を指定し ます。 こ のオプシ ョ ンは、 デザイ ンで使用され るネ ッ ト リ ス ト のほかの BUFG が合成プロセスで認識されない場合に使用し ます。

RTL にイ ン ス タ ンシエー ト されている BUFG の数が検出され、 指定された数までの BUFG が推論され ます。 た と えば、 –bufg オプシ ョ ンを 12 に設定し、 RTL に 3 つの BUFG がイ ン ス タ ンシエー ト されて いる とする と、 あ と 9 個の BUFG を推論可能です。

- [-fanout_limit] : 信号で駆動可能なロード の 大数を指定し ます。 ロード の数がこれよ り 大き く なる場合 は、 ロ ジ ッ ク が複製されます。 このグ ローバル設定は一般的なガ イ ド ラ イ ンであ り 、 ツールで必要と判断された場合は無視されます。 制限を強制する必要があ る場合は、 付録 A 「合成属性」 に説明されてい る MAX_FANOUT を参照し て く だ さい。

注記 : -fanout_limit オプシ ョ ンは、 制御信号 (セ ッ ト 、 リ セ ッ ト 、 ク ロ ッ ク イネーブルなど) には適 用されません。 これらの信号を複製する必要があ る場合は、 MAX_FANOUT を使用し て く ださい。

- [-directive] : [-effort_level] に置き換わるオプシ ョ ンで、 Vivado 合成の 適化方法を指定し ます。 設定可 能な値は [Default] と [RuntimeOptimized] です。 [RuntimeOptimized] を選択する と、 合成が 適化を少な く し て高速に実行されます。

- [-fsm_extraction] : 有限ステー ト マシンの抽出およびマ ッ プ方法を指定し ます。 [off] に設定する と、 ス テー ト マシンはロ ジ ッ ク と し て合成されます。 ステー ト マシンのエン コード タ イプを [off]、 [one_hot]、 [sequential]、 [johnson]、 [gray]、 または [auto] から選択でき ます。 付録 C の 「FSM コ ンポーネン ト 」 に、 これらのオプシ ョ ンがよ り 詳細に説明されています。

- [-keep_equivalent_registers] : 同じ入力ロジ ッ ク を使用する レジス タが統合されないよ う にし ます。

- [-resource_sharing] : 異なる信号間での算術演算子の共有を設定し ます。設定可能な値は [auto]、[on]、[off] です。

[auto] に設定する と リ ソ ース の共有はデザ イ ンの タ イ ミ ン グに応じ て実行 さ れ、 [on] に設定する と リ ソースの共有は常にオン、 [off] に設定する と常にオフです。

- [-control_set_opt_threshold] : ク ロ ッ ク イ ネーブル 適化のし きい値を設定し、 制御セ ッ ト の数を削減し ます。 デフ ォル ト 値は 1 です。

制御セ ッ ト を レジス タの D ロ ジ ッ ク に移動する ために必要なフ ァ ンア ウ ト の数を指定し ます。 フ ァ ン ア ウ ト が指定の値よ り 大きい場合は、その信号でレジス タの control_set_pin が駆動さ れる よ う 試みられ ます。

- [-no_lc] : オンにする と、 LUT の結合がオフにな り ます。

ヒ ン ト : レジス タが統合されないよ う にするには、 KEEP 属性を使用でき ます。 KEEP 属性は、 信号が削除された り ロ ジ ッ ク ブ ロ ッ ク に吸収さ れる よ う な 適化が実行さ れない よ う に し ます。 こ の属性が設定さ れた信号は保持さ れ、 ネ ッ ト リ ス ト に含まれます。 詳細は、 38 ページの 「KEEP」 を参照し て く だ さい。

合成 japan.xilinx.com 10UG901 (v2013.1) 2013 年 4 月 10 日

Page 11: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

run ス ト ラ テジの作成

ス ト ラ テジは、合成ツールおよびイ ンプ リ メ ンテーシ ョ ンで実行される さ まざ まなユーテ ィ リ テ ィ やプロ グ ラ ムのオプシ ョ ンのあ ら かじめ定義されたセ ッ ト です。 ス ト ラ テジは、 ツールおよびバージ ョ ン特定です。 各 メ ジャー リ リ ー スには、 そのバージ ョ ン専用のス ト ラ テジがあ り ます。

1. フ ローの現在のス ト ラ テジを確認するには、 [Tools] → [Options] を ク リ ッ ク し、 左側のペイ ンで [Strategies] を ク リ ッ ク し ます。

2. [Flow] ド ロ ッ プダウ ン リ ス ト から [Vivado Synthesis] を選択し ます。 右側に表示されるオプシ ョ ンは、 [Project Settings] ダ イ ア ロ グ ボ ッ ク スの [Synthesis] ページに表示される もの と同じです。

カス タ ム ス ト ラ テジを作成するには、 次のいずれかを実行し ます。

• [User Defined Strategies] を右ク リ ッ ク し、 [Create New Strategy] を ク リ ッ ク し ます。

• ツールバーの [Create New Strategy] ボタ ン を ク リ ッ ク し、 [New Strategy] ダ イ ア ロ グ ボ ッ ク ス (図 3) を開き ます。

.

[New Strategy] ダ イ ア ロ グ ボ ッ ク スでス ト ラ テジの名前、 ス ト ラ テジのタ イプ、 およびツール バージ ョ ンを指定し ま す。 説明も入力でき ます。 オプシ ョ ンを設定し た ら [OK] を ク リ ッ ク し ます。

X-Ref Target - Figure 3

図 3 : [New Strategy] ダイアログ ボ ッ クス

合成 japan.xilinx.com 11UG901 (v2013.1) 2013 年 4 月 10 日

Page 12: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

合成への入力

Vivado 合成には、 RTL ソース コードおよびタ イ ミ ング制約を入力でき ます。

RTL ま たは制約フ ァ イ ルを追加する には、 Flow Navigator で [Project Manager] → [Add Sources] を ク リ ッ ク し、 Add Sources ウ ィ ザード (図 4) を開き ます。

制約、 RTL、 またはその他のプロ ジェ ク ト フ ァ イルを追加し ます。 Add Sources ウ ィ ザード の詳細は、 『Vivado Design Suite ユーザー ガイ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照し て く だ さい。

Vivado 合成では、 ザイ リ ン ク ス ツールでサポー ト される VHDL、 Verilog、 または SystemVerilog のフ ァ イルの合成可 能なサブセ ッ ト を読み込むこ と ができ ます。 付録 B 「SystemVerilog サポー ト 」 に、 サポー ト される SystemVerilog コ ンス ト ラ ク ト が説明されています。

Vivado 合成では、 合成での処理を制御するい く つかの RTL 属性もサポー ト されています。 これらの属性は、 付録 A 「合成属性」 を参照し て く ださ い。

Vivado 合成は、 タ イ ミ ング制約に XDC フ ァ イルが使用されます。

重要 : Vivado Design Suite では、 UCF フ ォーマ ッ ト はサポー ト されません。 UCF から XDC への変換手順は、 『Vivado Design Suite 移行手法ガイ ド』 (UG911) [参照 6] を参照し て く ださい。

X-Ref Target - Figure 4

図 4 : Add Sources ウ ィ ザー ド

合成 japan.xilinx.com 12UG901 (v2013.1) 2013 年 4 月 10 日

Page 13: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

フ ァ イルのコ ンパイル順

あ る フ ァ イルに宣言が含まれ、別のフ ァ イルがその宣言に依存し ている場合、特定のコ ンパイル順が必要にな り ます。Vivado IDE では、 RTL ソース フ ァ イルのコ ンパイル順は、 [Sources] ビ ューの [Compile Order] タブに上から下への順 序で表示されます。

Vivado IDE では、 上位モジュール と し て適切なモジュールが自動的に特定され、 設定されます。 コ ンパイル順も自 動的に管理されます。 ア ク テ ィ ブ階層に含まれる 上位モジ ュール フ ァ イルおよびすべての ソース フ ァ イルが、 合 成およびシ ミ ュ レーシ ョ ンで正しい順序で使用されます。

[Sources] ビ ューのポ ッ プア ッ プ メ ニ ューには [Hierarchy Update] コマン ド があ り 、 上位モジュールへの変更、 デザ イ ンの ソース フ ァ イルへの変更などの処理方法を指定し て階層をア ッ プデー ト でき ます。

デフ ォル ト 設定は [Automatic Update and Compile Order] で、 次のよ う に処理されます。

• [Compile Order] タブに示すよ う にコ ンパイル順が管理されます。

• [Hierarchy] タブにどのモジュールが使用され、 階層ツ リ ーのど こ に位置するかが表示されます。

ソース フ ァ イルを変更する と、 コ ンパイル順が自動的に更新されます。

合成の前にコ ンパイル順を変更するには、 次の手順に従います。

1. [Hierarchy Update] → [Automatic Update, Manual Compile Order] を ク リ ッ ク し、 デザイ ンに 適な 上位モジュー ルは自動的に選択され、 コ ンパイル順は手動で指定でき る よ う にし ます。

2. [Sources] ビ ューの [Compile Order] タブで、 フ ァ イルを ド ラ ッ グするか、 ポ ッ プア ッ プ メ ニ ューの [Move Up] ま たは [Move Down] コマン ド を使用し て、 コ ンパイル順を変更し ます。

[Sources] ビ ューの詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照し て く だ さい。

グローバル イ ン クルー ド フ ァ イルの定義 Vivado IDE では、 1 つまたは複数の Verilog または Verilog ヘッ ダー フ ァ イルをグ ローバル イ ン クルード フ ァ イル と し て指定でき ます。グ ローバル イ ン クルード と し てマーク されている フ ァ イルは、ほかの ソースの前に処理されます。

Verilog では通常、 別の Verilog フ ァ イルやヘッ ダー フ ァ イルからの内容を参照する Verilog ソース フ ァ イルの冒頭に `include 文を含める必要があ り ます。 共通ヘッ ダー フ ァ イルを使用するデザイ ンでは、 複数の Verilog ソースにそ れぞれ複数の `include 文を含める必要があ る場合も あ り ます。

Verilog フ ァ イルまたは Verilog ヘッ ダー フ ァ イルをグ ローバル イ ン クルー ド フ ァ イル と し て指定するには、 次のい ずれかを実行し ます。

1. [Sources] ビ ューでフ ァ イルを右ク リ ッ ク し ます。

2. [Set Global Include] を ク リ ッ ク し ます。 または、 [Source Node Properties] ビ ューで [Global Include] チェ ッ ク ボ ッ ク ス をオンにし ます (図 5)。

合成 japan.xilinx.com 13UG901 (v2013.1) 2013 年 4 月 10 日

Page 14: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

ヒ ン ト : 1 つの Verilog ソースのみに適用する必要のあ る Verilog ヘッ ダー フ ァ イル (特定の `define マ ク ロなど) は、 グ ローバル イ ン クルード フ ァ イル と し て指定するのではな く `include 文を使用し て参照する必要があ り ます。

[Sources] ビ ューの詳細は、 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照し て く だ さい。

X-Ref Target - Figure 5

図 5 : [Source Node Properties] ビュー

合成 japan.xilinx.com 14UG901 (v2013.1) 2013 年 4 月 10 日

Page 15: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

合成の実行

合成 run では、 合成中に使用されるデザイ ンの詳細を定義および設定でき ます。 合成 run は次を定義し ます。

• 合成中にターゲ ッ ト とするザイ リ ン ク ス デバイ ス

• 適用する制約セ ッ ト

• 1 つまたは複数の合成 run を起動するオプシ ョ ン

• 合成エンジンの結果を制御するオプシ ョ ン

RTL ソース フ ァ イルの run および制約を定義するには、 次の手順に従います。

1. メ イ ン メ ニューから [Flow] → [Create Runs] を ク リ ッ クするか、[Design Runs] ビ ューのツールバーの [Create Runs] ボ タ ン を ク リ ッ ク し ます。

Create New Runs ウ ィ ザード が開き ます (図 6)。

X-Ref Target - Figure 6

図 6 : Create New Runs ウ ィ ザー ド

合成 japan.xilinx.com 15UG901 (v2013.1) 2013 年 4 月 10 日

Page 16: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

2. [Synthesis] をオンにし、 [Next] を ク リ ッ ク し ます。

[Configure Synthesis Runs] ページが表示されます (図 7)。

3. 制約セ ッ ト ([Constraints set])、デバイ ス ([Part])、およびス ト ラ テジ ([Strategy]) を選択し、[Next] を ク リ ッ ク し ます。

Vivado IDE にはデフ ォル ト のス ト ラ テジが含まれています。 ス ト ラ テジ run には、 特定の名前を指定するか、 デ フ ォル ト 名 (synth_1、 synth_2 など) を使用し ます。

制約の詳細は、 『Vivado Design Suite ユーザー ガイ ド : 制約の使用』 (UG903) [参照 8] を参照し て く ださい。

カス タ ム ス ト ラ テジの作成方法は、 11 ページの 「run ス ト ラ テジの作成」 を参照し て く ださ い。

X-Ref Target - Figure 7

図 7 : [Configure Synthesis Runs] ページ

合成 japan.xilinx.com 16UG901 (v2013.1) 2013 年 4 月 10 日

Page 17: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

[Next] を ク リ ッ ク し ます。 [Launch Options] ページが表示されます (図 8)。

4. [Launch Options] ページで次のオプシ ョ ンを設定し、 [Next] を ク リ ッ ク し ます。

° [Launch Directory] ド ロ ッ プダウ ン リ ス ト から run を実行するデ ィ レ ク ト リ を選択し ます。

° [Options] エ リ アで次のいずれかをオンにし ます。

- [Launch Runs on Local Host] : 作業中のマシンで run を実行し ます。 [Number of jobs] で起動する run の数 を指定し ます。

- [Launch Runs on Remote Host] : Linux のみのオプシ ョ ンで、 run を リ モー ト ホス ト で実行し、 そのホ ス ト を設定し ます。

Linux の リ モー ト ホス ト での run の実行については、 『Vivado Design Suite ユーザー ガ イ ド : イ ンプ リ メ ンテーシ ョ ン』 (UG904) [参照 5] の付録 A 「 リ モー ト ホ ス ト の使用」 を参照し て く だ さ い。 [Configure Hosts] を ク リ ッ クする と、 ホ ス ト を設定するダ イ ア ロ グ ボ ッ ク スが開き ます。

- [Generate scripts only] : 後で実行する ス ク リ プ ト を生成し ます。runme.bat (Windows) または runme.sh (Linux) を使用し て run を開始し ます。

- [Do not launch now] : 前のページの設定を保存し、 run を後で実行でき る よ う にし ます。

Create New Runs ウ ィ ザード でオプシ ョ ンを設定し て run を実行する と、 [Design Runs] ビ ューに結果が表示されます (図 9)。

X-Ref Target - Figure 8

図 8 : [Launch Options] ページ

合成 japan.xilinx.com 17UG901 (v2013.1) 2013 年 4 月 10 日

Page 18: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

[Design Runs] ビ ューの使用

[Design Runs] ビ ューには、 プロ ジ ェ ク ト で作成さ れた合成 run と イ ンプ リ メ ンテーシ ョ ン run のすべてが表示され、 それら を設定、 管理、 実行する ためのコマン ド を実行でき ます。

[Design Runs] ビ ューが表示されていない場合は、 [Window] → [Design Runs] を ク リ ッ ク し ます。

1 つの合成 run に、 複数のイ ンプ リ メ ンテーシ ョ ン run を含める こ と ができ ます。 プラ ス記号 (+) やマイナス記号 (-) を ク リ ッ クする と、 合成 run のツ リ ー表示を展開し た り 、 閉じ た り でき ます。

[Design Runs] ビ ューには、 run のステータ スが実行されていないか、 進行中か、 完了し たか、 新の状態でないかが 示されます。

ソース フ ァ イル、 制約、 またはプロジェ ク ト 設定を変更する と、 run は 新の状態ではな く な り ます。 特定の run を リ セ ッ ト または削除するには、 run を右ク リ ッ ク し て [Reset Runs] または [Delete] を ク リ ッ ク し ます。

アク テ ィ ブ run の設定

Vivado IDE で一度にア ク テ ィ ブにでき るには、 1 つの合成 run と 1 つのイ ンプ リ メ ンテーシ ョ ン run のみです。 すべ てのレポー ト およびビ ューには、 ア ク テ ィ ブな run の情報が表示されます。 [Project Summary] ビ ューには、 ア ク テ ィ ブな run のコ ンパイル、 リ ソース、 およびサマ リ 情報が表示されます。

別の run を ア ク テ ィ ブにする には、 [Design Runs] ビ ューで run を右ク リ ッ ク し、 ポ ッ プア ッ プ メ ニ ューか ら [Make Active] コマン ド を ク リ ッ ク し ます。

合成 run の起動

合成 run を実行するには、 次のいずれかを実行し ます。

• Flow Navigator で [Run Synthesis] を ク リ ッ ク し ます。

• メ イ ン メ ニューから [Flow] → [Run Synthesis] を ク リ ッ ク し ます。

• [Design Runs] ビ ューで run を右ク リ ッ ク し、 [Launch Runs] を ク リ ッ ク し ます。

初の 2 つのオプシ ョ ンでは、ア ク テ ィ ブな合成 run が実行されます。3 つ目のオプシ ョ ンでは、[Launch Selected Runs] ダ イ ア ロ グ ボ ッ ク スが開き ます。 このダ イ ア ロ グ ボ ッ ク スで、 run を ローカル ホス ト または リ モー ト ホ ス ト で実行するか、 あ るいはス ク リ プ ト を生成するかを指定でき ます。

リ モー ト ホス ト の使用については、『Vivado Design Suite ユーザー ガ イ ド : イ ンプ リ メ ンテーシ ョ ン』 (UG904) [参 照 5] の付録 A 「 リ モー ト ホス ト の使用」 を参照し て く ださ い。

ヒ ン ト : run を実行する たびに、 別のプロ セスが開始されます。 メ ッ セージを確認する際は、 プロセス特定の ものに 注意し て く だ さい。

X-Ref Target - Figure 9

図 9 : [Design Runs] ビ ュー

合成 japan.xilinx.com 18UG901 (v2013.1) 2013 年 4 月 10 日

Page 19: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

ボ ト ムア ッ プ フ ローの設定

HDL オブジェ ク ト を OOC (Out-of-Context) モジュール と し て実行する こ と によ り 、ボ ト ムア ッ プ フ ローを設定でき ま す。 これには、 オブジェ ク ト を右ク リ ッ ク し て [Set As Out-of-Context Module] を ク リ ッ ク し ます (図 10)。

OOC フ ローを設定する と、新しい run が設定されます。こ の run を実行するには、run を右ク リ ッ ク し て [Launch Runs] を ク リ ッ ク し ます (18 ページの 「合成 run の起動」 を参照)。

X-Ref Target - Figure 10

図 10 : [Set As Out-of-Context] コマン ド

合成 japan.xilinx.com 19UG901 (v2013.1) 2013 年 4 月 10 日

Page 20: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

これによ り 下位モジ ュールが 上位モジ ュール と し て設定され、 I/O バ ッ フ ァーを作成せずに合成が実行さ れます。 合成で生成されたネ ッ ト リ ス ト が保存され、 後で使用でき る よ う にス タブ フ ァ イルが作成されます。 ス タブ フ ァ イ ルは、 ブラ ッ ク ボ ッ ク ス属性が設定された、 入力と出力を持つ下位モジュールです。

上位モジュールを再実行する と、ボ ト ムア ッ プ合成によ り ス タブ フ ァ イルがフ ローに挿入され、下位モジュールが ブラ ッ ク ボ ッ ク ス と し てコ ンパイルされます。

イ ンプ リ メ ンテーシ ョ ン run では下位ネ ッ ト リ ス ト が挿入され、 デザイ ンを完了し ます。

重要 : 下位ネ ッ ト リ ス ト に動作を制御するパラ メ ーターまたはジェネ リ ッ クが含まれる場合は、 こ のオプシ ョ ンを使 用する際に注意が必要です。 ボ ト ムア ッ プ合成と し て イ ンプ リ メ ン ト する と、 パラ メ ーターまたはジェネ リ ッ ク のデフ ォル ト 値が使用されます。 モジュールが複数回イ ン ス タ ンシエー ト されている場合、 またはパラ メ ーターが変更されている場合は、 不正な ロジ ッ クが生成される こ と があ り ます。

こ のフ ローは、 主に Vivado IP で使用されます。 詳細は、 『Vivado Design Suite ユーザー ガ イ ド : IP を使用し た設計』 (UG896) [参照 9] を参照し て く だ さい。

[Synthesis Settings] を ク リ ッ ク し て [More Options] に 「-mode out-of-context」 と入力する こ と も可能です。 こ の よ う に設定する と、 合成でモジュールに I/O バッ フ ァーは挿入されません。

X-Ref Target - Figure 11

図 11 : [Launch Runs] コ マン ド

合成 japan.xilinx.com 20UG901 (v2013.1) 2013 年 4 月 10 日

Page 21: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

プロセスのバッ クグラウン ドへの移動

Vivado IDE で合成またはイ ンプ リ メ ンテーシ ョ ンを実行する と、 ダ イ ア ロ グ ボ ッ ク スにプロセス をバッ ク グ ラ ウ ン ド で実行するオプシ ョ ンが表示されます。 run をバッ ク グ ラ ウ ン ド に移動する と、 レポー ト を表示する など、 Vivado IDE でほかの機能を実行でき る よ う にな り ます。

X-Ref Target - Figure 12

図 12 : [Project Settings] ダイアログ ボ ッ クスの [Synthesis] ページの [More Options] フ ィ ールド

合成 japan.xilinx.com 21UG901 (v2013.1) 2013 年 4 月 10 日

Page 22: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

合成実行の監視

合成 run のステータ スは、 [Log] ビ ュー (図 13) で確認し ます。 合成中にこ のビ ューに表示される メ ッ セージは、 合成 ロ グ フ ァ イルにも含まれます。

合成終了後のフ ロー run が完了する と、 [Synthesis Completed] ダ イ ア ロ グ ボ ッ ク スが表示されます (図 14)。

次のいずれかをオンにし ます。

° [Run Implementation] :イ ンプ リ メ ンテーシ ョ ンを現在のイ ンプ リ メ ンテーシ ョ ン プロ ジェ ク ト 設定を使用し て実行し ます。

° [Open Synthesized Design] : 合成済みネ ッ ト リ ス ト 、 ア ク テ ィ ブな制約セ ッ ト 、 ターゲ ッ ト デバイ ス を合成済 みデザイ ン環境で開き、 I/O ピン配置、 デザイ ン解析、 フ ロ アプラ ンを実行でき る よ う にし ます。

° [View Reports] : [Reports] ビ ューを開き、 レポー ト を表示でき る よ う にし ます。

[Don't show this dialog again] をオンにする と、 次回から こ のダ イ ア ロ グ ボ ッ ク スは表示されな く な り ます。

ヒ ン ト : こ のダ イ ア ロ グ ボ ッ ク ス を再び表示される よ う にするには、 [Tools] → [Options] を ク リ ッ ク し、 左側のペイ ンで [Window Behavior] を ク リ ッ ク し ます。

X-Ref Target - Figure 13

図 13 : [Log] ビ ュー

X-Ref Target - Figure 14

図 14 : [Synthesis Completed] ダイアログ ボ ッ クス

合成 japan.xilinx.com 22UG901 (v2013.1) 2013 年 4 月 10 日

Page 23: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成の使用

合成結果の解析

合成が終了し た ら、 合成レポー ト を表示し、 合成済みデザイ ンを開いて解析でき ます。 [Reports] ビ ューには、 合成お よびイ ンプ リ メ ンテーシ ョ ンで生成されたレポー ト の リ ス ト が表示されます。

[Reports] ビ ュー (図 15) を開き、 レポー ト を開いて特定の run の詳細を確認し ます。

合成済みデザイ ン環境の使用

Vivado IDE には、 デザイ ンを さ まざまな面から解析する環境が含まれています。 合成済みデザイ ンを開 く と、 合成済 みネ ッ ト リ ス ト 、 ア ク テ ィ ブな制約セ ッ ト 、 およびターゲ ッ ト デバイ スが読み込まれます。

詳細は、 『Vivado Design Suite ユーザー ガイ ド : Vivado IDE の使用』 (UG893) [参照 2] を参照し て く ださ い。

合成済みデザイ ンを開 く には、 次のいずれかを実行し ます。

• Flow Navigator で [Synthesis] → [Open Synthesized Design] を ク リ ッ ク し ます。

• メ イ ン メ ニューから [Flow] → [Open Synthesized Design] を ク リ ッ ク し ます。

X-Ref Target - Figure 15

図 15 : [Reports] ビ ュー

合成 japan.xilinx.com 23UG901 (v2013.1) 2013 年 4 月 10 日

Page 24: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

フ ロアプ ラ ンおよび使用率の表示

合成済みデザイ ンを開 く と、 [Device] ビ ュー (図 16) が表示されます。

こ の環境か ら、 デザ イ ン ロ ジ ッ ク と 階層の確認、 リ ソ ース使用率およびタ イ ミ ング予測の表示、 デザ イ ン ルール チェ ッ ク (DRC) を実行でき ます。

フ ロアプ ラ ンおよび使用率の表示リ ソース使用率は、 展開可能な階層ツ リ ーに棒グ ラ フで表示されます。 各 リ ソース タ イプを展開する と、 論理階層の 各レベルを表示でき ます。

デバイ ス リ ソース予測をグ ラ フ ィ カルに表示するには、 合成済みデザイ ンを開いて次のいずれかを ク リ ッ ク し ます。

• Flow Navigator → [Report Utilization]

• [Tools] → [Report Utilization]

X-Ref Target - Figure 16

図 16 : [Device] ビ ュー

合成 japan.xilinx.com 24UG901 (v2013.1) 2013 年 4 月 10 日

Page 25: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

フ ロアプ ラ ンおよび使用率の表示

[Utilization] ビ ュー (図 17) が開き ます。

ロジ ッ ク イ ンス タ ンスの使用率の表示

Vivado IDE には、 デザイ ンに含まれるデバイ ス リ ソース数を予測する機能があ り ます。

上位を含むロ ジ ッ ク イ ン ス タ ン スの使用率は、 [Instance Properties] ビ ューに表示されます。 [Netlist] ビ ューで 上 位モジュールまたは任意のイ ンス タ ンス を選択し ます (図 18)。

表示されない場合は、モジュールを右ク リ ッ ク し、ポ ッ プア ッ プ メ ニューで [Net Properties] または [Instance Properties] を ク リ ッ ク し ます。

X-Ref Target - Figure 17

図 17 : [Utilization] ビ ュー

X-Ref Target - Figure 18

図 18 : [Netlist] ビ ュー

合成 japan.xilinx.com 25UG901 (v2013.1) 2013 年 4 月 10 日

Page 26: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

フ ロアプ ラ ンおよび使用率の表示

[Netlist Properties] または [Instance Properties] ビ ューで [Statistics] タブを ク リ ッ ク し ます (図 19)。

[Statistics] タブには、 [Primitive Statistics] (プ リ ミ テ ィ ブ統計) および [Net Boundary Statistics] (ネ ッ ト 境界統計) などの 情報が表示されます。

[Properties] ビ ューには、 タ イプに応じ て さ まざまなタブが表示されます。 図 19 の clkgen イ ンス タ ンスに対し ては、 次のタブが表示されます。

• [General] : 選択し た イ ンス タ ンスの名前 ([Name])、 セル ([Cell])、 およびタ イプ ([Type]) を示し ます。

• [Attributes] : フ ァ イル属性を リ ス ト し ます。

• [Instance Pins] : イ ン ス タ ン ス ピンの ID、 名前、 方向、 BEL ピン、 およびネ ッ ト を リ ス ト し ます。

• [Children] : 子イ ン ス タ ン スの ID、 名前、 セル、 およびイ ンス タ ンス ピン数を リ ス ト し ます。

• [Nets] : ネ ッ ト の ID、名前、イ ン ス タ ン ス ピン、フ ラ ッ ト ピン数、ド ラ イバー、および配線ステータ ス を示し ます。

• [Power] : 信号レー ト ([Signal Rate])、 High に駆動される期間の割合 ([% High])、 および階層のチェ ッ ク ボ ッ ク ス ([Hierarchy]) を示し ます (設定可能)。

X-Ref Target - Figure 19

図 19 : [Instance Properties] ビ ュー

合成 japan.xilinx.com 26UG901 (v2013.1) 2013 年 4 月 10 日

Page 27: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ロジ ッ クの解析

ロジ ッ クの解析Vivado IDE では、 ロジ ッ ク を解析する ビ ューが複数あ り ます。

• [Netlist] および [Hierarchy] ビ ューには、 ナビゲー ト 可能な階層ツ リ ー形式の表示が含まれます。

• [Schematic] ビ ューでは、 選択し たロ ジ ッ ク を展開し た り 階層表示にでき ます。

• [Device] ビ ューは、 デバイ ス、 配置ロ ジ ッ ク オブジェ ク ト 、 および接続をグ ラ フ ィ カルに表示し ます。

1 つのビ ューで選択し た情報はほかのビ ューでも選択される よ う になってお り 、 必要な情報をすばや く 見つけ る こ と ができ ます。

ロジ ッ ク階層の表示

[Netlist] ビ ューには、 合成済みデザイ ンのロ ジ ッ ク階層が表示されます。 ネ ッ ト リ ス ト 内のロ ジ ッ ク イ ン ス タ ン ス ま たはネ ッ ト を、 展開し て選択でき ます。

別のビ ューでロジ ッ ク オブジェ ク ト を選択する と、[Netlist] ビ ューが自動的に展開されて選択し たロ ジ ッ ク オブジェ ク ト が表示され、 [Instance Properties] または [Net Properties] ビ ューにイ ン ス タ ン ス またはネ ッ ト に関する情報が表示 されます。

[Hierarchy] ビ ューには、 RTL ロ ジ ッ ク階層がグ ラ フ ィ カルに表示さ れます。 各モジ ュールの大き さ が、 その他のモ ジュールに相対的な比率で表示されるので、 選択し た ロジ ッ ク モジュールのサイ ズや位置を判断でき ます。

[Hierarchy] ビ ューを開 く には、 次の手順に従います。

1. [Netlist] ビ ューを右ク リ ッ ク し ます。

2. [Show Hierarchy] を ク リ ッ ク し ます (図 20)。

F6 キーを押し て も [Hierarchy] ビ ューを開 く こ と ができ ます。

ロジ ッ ク回路図の解析

[Schematic] ビ ューでは、 選択し た ロ ジ ッ ク を展開し て表示でき ます。 [Schematic] ビ ューを表示するには、 少な く と も 1 つのロジ ッ ク オブジェ ク ト を選択する必要があ り ます。

[Schematic] ビ ューで、 任意のロ ジ ッ ク を選択および表示し ます。 タ イ ミ ング パスのグループを表示し て、 そのパス 上のすべてのイ ンス タ ンス を表示でき ます。 これによ り 、 タ イ ミ ング ク リ テ ィ カルなモジュールが含まれる箇所を視 覚的に表示でき るので、 フ ロ アプラ ン しやす く な り ます。

[Schematic] ビ ューを開 く には、 次の手順に従います。

1. 1 つまたは複数のイ ンス タ ンス、 ネ ッ ト 、 タ イ ミ ング パス を選択し ます。

2. ツールバーまたはポ ッ プア ッ プ メ ニューで [Schematic] を ク リ ッ クするか、 F4 キーを押し ます。

[Schematic] ビ ューが開き、 選択し たモジュールが表示されます (図 21)。

X-Ref Target - Figure 20

図 20 : [Show Hierarchy] コマン ド

合成 japan.xilinx.com 27UG901 (v2013.1) 2013 年 4 月 10 日

Page 28: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ロジ ッ クの解析

この後、 ピ ン、 イ ンス タ ンス、 階層モジュールを選択し て、 ロジ ッ ク を展開でき ます。

タ イ ミ ング解析の実行

合成済みデザイ ンのタ イ ミ ング解析は、 イ ンプ リ メ ンテーシ ョ ンを効率的に実行するために必要な制約がパスに設定されているかど う かを確認するのに有益です。 Vivado 合成はタ イ ミ ング ド リ ブンであ り 、 設定し た制約に基づいて 出力が調整されます。

Pblock や LOC 制約のよ う な物理制約をデザイ ンに割 り 当ててい く と、 よ り 正確な タ イ ミ ング解析結果が得られる よ う にな り ますが、 これらの結果に含まれるのはパス遅延の予測値です。 合成済みデザイ ンでは、 予測される配線遅延を使用し て解析が実行されます。

この時点でタ イ ミ ング解析を実行する と、パスが正し く 制約されているか、およびタ イ ミ ング パスの全体的な状況を 確認でき ます。

重要 : 実際の配線遅延が含まれるのは、 イ ンプ リ メ ンテーシ ョ ン (配置配線) 後のタ イ ミ ング解析のみです。 合成済み デザイ ンのタ イ ミ ング解析は、 イ ンプ リ メ ン ト 済みデザイ ンのタ イ ミ ング解析ほど正確ではあ り ません。

X-Ref Target - Figure 21

図 21 : [Schematic] ビ ュー

合成 japan.xilinx.com 28UG901 (v2013.1) 2013 年 4 月 10 日

Page 29: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ロジ ッ クの解析

[Report Timing Summary] コ マン ドの使用

タ イ ミ ング解析を実行するには、 Flow Navigator で [Synthesis] → [Synthesized Design] → [Report Timing Summary] を ク リ ッ ク し ます。

図 22 に示す [Report Timing Summary] ダ イ ア ロ グ ボ ッ ク スが開き ます。

[Options] タブで次のよ う にオプシ ョ ンを設定し、 [OK] を ク リ ッ ク し ます。

• [Results name] : レポー ト 結果の名前を指定し ます。

• [Report] : [Path delay type] (パス遅延タ イプ) を [max]、 [min]、 または [min_max] に設定し、 制約されていないパス を レポー ト するかど う か ([Report unconstrained paths] チェ ッ ク ボ ッ ク ス) およびデータ シー ト を レポー ト するか ど う か ([Report datasheet] チェ ッ ク ボ ッ ク ス) を指定し ます。

X-Ref Target - Figure 22

図 22 : [Report Timing Summary] ダイアログ ボ ッ ク ス

合成 japan.xilinx.com 29UG901 (v2013.1) 2013 年 4 月 10 日

Page 30: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ロジ ッ クの解析

• [Path Limits] : こ のセ ク シ ョ ンでは、 次のオプシ ョ ンを設定し ます。

° [Maximum number of paths per clock or path group] : ク ロ ッ ク またはパス グループご と にレポー ト するパスの 大数を指定し ます。

° [Maximum number of worst paths per endpoint] : エン ド ポイ ン ト ご と にレポー ト するパスの 大数を指定し ます。

• [Path Display] : このセ ク シ ョ ンでは、 次のオプシ ョ ンを設定し ます。

° [Display paths with slack less than] : ス ラ ッ ク が指定し た値未満のパス を表示する よ う 指定し ます。 デフ ォル ト を使用する場合は、 [Use default (1e+30)] チェ ッ ク ボ ッ ク ス をオンにし ます。

° [Significant Digits] : 出力結果の有効桁数を指定し ます。

• [Command] : 現時点での report_timing コマン ド を選択されたオプシ ョ ン も含めて表示し ます。 また、 [Open in a new tab] チェ ッ ク ボ ッ ク スで別の タ ブに表示する か、 [Open in Timing Analysis layout] チェ ッ ク ボ ッ ク スで Timing Analyzer のレ イ アウ ト で表示するかを指定し ます。

図 23 に [Advanced] タブを示し ます。

[Advanced] タブには、 次のオプシ ョ ンがあ り ます。

• [Pins] : [Show input pins in path] チェ ッ ク ボ ッ ク スでパスの入力ピンを表示するかど う かを指定し ます。

• [File Output] : [Write results to file] チェ ッ ク ボ ッ ク スで結果を フ ァ イルに記述するかを指定し、 フ ァ イルを選択し ます。 フ ァ イルに上書きするか ([Overwrite])、 追加するか ([Append]) を選択でき ます。

• [Miscellaneous] : 次のオプシ ョ ンがあ り ます。

° [Ignore command errors (quiet mode)] : コマン ド エラーを無視し ます。

° [Suspend messsage limits during command execution] : プロ グ ラ ム実行中 メ ッ セージの制限を解除し、 すべての メ ッ セージを表示し ます。

X-Ref Target - Figure 23

図 23 : [Report Timing Summary] ダイアログ ボ ッ クスの [Advanced] タ ブ

合成 japan.xilinx.com 30UG901 (v2013.1) 2013 年 4 月 10 日

Page 31: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ロジ ッ クの解析

図 24 に、 [Timer Settings] タブを示し ます。

[Timer Settings] タブには、 次のオプシ ョ ンがあ り ます。

• [Interconnect] : イ ン ターコ ネ ク ト 遅延と し て予測値を使用するか ([estimated])、 実際の値を使用するか ([actual])、 遅延を使用し ないか ([none]) を指定し ます。

• [Speed grade] : ターゲ ッ ト デバイ スのス ピード グレード を指定し ます。

• [Multi-Corner Configuration] : ス ロー コーナー ([Slow]) およびフ ァース ト コーナー ([Fast]) の遅延タ イプを指定し ます。

• [Disable flight delays] : フ ラ イ ト 遅延をデ ィ スエーブルにし ます。

X-Ref Target - Figure 24

図 24 : [Report Timing Summary] ダイアログ ボ ッ クスの [Timer Settings] タ ブ

合成 japan.xilinx.com 31UG901 (v2013.1) 2013 年 4 月 10 日

Page 32: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

非プロジ ェ ク ト モー ド での合成

非プロジ ェ ク ト モー ド での合成 合成を実行する Tcl コ マン ド は synth_design です。 通常こ のコ マン ド は、 次の例のよ う に複数のオプシ ョ ンを使 用し て実行し ます。

synth_design -part xc7k30tfbg484-2 -top my_top

この例では、 synth_design が –part オプシ ョ ンおよび –top オプシ ョ ンを使用し て実行されます。

Tcl コ ン ソールから、Tcl コマン ド オプシ ョ ンを使用し て合成オプシ ョ ンを設定し て合成を実行でき ます。[Tcl Console] ビ ューで 「synth_design –help」 と入力する と、 オプシ ョ ンの リ ス ト を取得でき ます。 次に、 -help オプシ ョ ン を使用し た と きのコマン ド出力の一部を示し ます。

synth_design [-name <arg>] [-part <arg>] [-constrset <arg>] [-top <arg>] [-include_dirs <args>] [-generic <args>] [-verilog_define <args>] [-flatten_hierarchy <arg>] [-gated_clock_conversion <arg>] [-directive <arg>] [-rtl] [-bufg <arg>] [-no_lc] [-fanout_limit <arg>] [-mode <arg>] [-fsm_extraction <arg>] [-keep_equivalent_registers] [-resource_sharing <arg>] [-control_set_opt_threshold <arg>] [-quiet] [-verbose]

Returns: design object

Usage: Name Description-----------------------------------------[-name] Design name[-part] Target part[-constrset] Constraint fileset to use[-top] Specify the top module name[-include_dirs] Specify verilog search directories[-generic] Specify generic parameters.Syntax: -generic <name>=<value> -generic <name>=<value> ...[-verilog_define] Specify verilog defines.Syntax: -verilog_define <macro_name>[=<macro_text>] -verilog_define <macro_name>[=<macro_text>] [-flatten_hierarchy] Flatten hierarchy during LUT mapping.Values: full, none, rebuilt Default: rebuilt[-gated_clock_conversion] Convert clock gating logic to flop enable. Values: off, on, auto Default: off[-directive] Synthesis directive.Values: default, runtimeoptimized Default: default[-rtl] Elaborate and open an rtl design[-bufg] Max number of global clock buffers used by synthesis.Default:12[-no_lc] Disable LUT combining.Do not allow combining LUT pairs into single dual output LUTs.[-fanout_limit] Fanout limit.Default:10000[-mode] The design mode.Values: default, out_of_context Default: default

合成 japan.xilinx.com 32UG901 (v2013.1) 2013 年 4 月 10 日

Page 33: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

非プロジ ェ ク ト モー ド での合成

[-fsm_extraction] FSM Extraction Encoding.Values: off, one_hot, sequential, johnson, gray, auto Default: auto[-keep_equivalent_registers] Prevents registers sourced by the same logic from being merged.(Note that the merging can otherwise be prevented using the synthesis KEEP attribute)[-resource_sharing] Sharing arithmetic operators.Value: auto, on, off Default: auto[-control_set_opt_threshold] Threshold for synchronous control set optimization to lower number of control sets. Default:1[-quiet] Ignore command errors[-verbose] Suspend message limits during command execution

-generic オプシ ョ ンで VHDL ブール値および std_logic ベク ター型を指定する場合、これらはほかの形式には存 在し ないので特別な処理が必要です。 た と えば、true/false または 0010 の代わ り に Verilog 標準を使用する必要が あ り ます。

ブール値の場合、 false の値は次のよ う に指定し ます。

-generic my_gen=1‘b0

std_logic ベク ターでは、 次のよ う に指定し ます。

-generic my_get=4‘b0010

また、 文字列ジェネ リ ッ ク またはパラ メ ーターの変更は現在の と こ ろサポー ト されていません。

コ マン ド の詳細は、 『Vivado Design Suite Tcl コ マン ド リ フ ァ レ ン ス ガ イ ド』 (UG835) [参照 3] を参照し て く だ さ い。 Vivado IDE での操作に対応する Tcl コマン ド を確認するには、 Vivado IDE でコマン ド を実行し、 [Tcl Console] ビ ュー またはロ グ フ ァ イルを参照し て く ださ い。

次に、 synth_design の Tcl ス ク リ プ ト 例を示し ます。

# Setup design sources and constraintsread_vhdl -library bftLib [ glob ./Sources/hdl/bftLib/*.vhdl ]read_vhdl ./Sources/hdl/bft.vhdlread_verilog [ glob ./Sources/hdl/*.v ]read_xdc ./Sources/bft_full.xdc# Run synthesissynth_design -top bft -part xc7k70tfbg484-2 -flatten_hierarchy rebuilt# Write design checkpointwrite_checkpoint -force $outputDir/post_synth# Write report utilization and timing estimatesreport_utilization -file utilization.txtreport_timing > timing.txt

制約の設定

表 2 に、 Vivado タ イ ミ ング制約にサポー ト される Tcl コマン ド を示し ます。

これらのコマン ド の詳細は、 次の資料を参照し て く だ さい。

• 『Vivado Design Suite ユーザー ガイ ド : Vivado IDE の使用』 (UG893) [参照 2]

• 『Vivado Design Suite Tcl コマン ド リ フ ァ レ ンス ガ イ ド』 (UG835) [参照 3]

• 『Vivado Design Suite ユーザー ガイ ド : 制約の使用』 (UG903) [参照 8]

合成 japan.xilinx.com 33UG901 (v2013.1) 2013 年 4 月 10 日

Page 34: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

非プロジ ェ ク ト モー ド での合成

表 2 : サポー ト される合成 Tcl コマン ド

コマン ド タ イプ コ マン ド

タ イ ミ ング制約

create_clock create_generate_clock set_false_path set_input_delay

set_output_delay set_max_delay set_multicycle_path

set_clock_latency set_clock_groups set_disable_timing

オブジ ェ ク ト ア クセス

all_clocks all_inputs all_outputs get_cells

get_clocks get_nets get_pins get_ports

合成 japan.xilinx.com 34UG901 (v2013.1) 2013 年 4 月 10 日

Page 35: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

付録 A

合成属性

概要Vivado™ 合成では、 さ まざまな タ イプの合成属性を使用でき ます。 ほ と んどの場合、 これらの属性は同じ構文で、 同 じ動作にな り ます。

• Vivado 合成で属性がサポー ト される場合、 その属性が使用され、 その属性を反映し た ロジ ッ ク が作成されます。

• 指定し た属性がツールで認識されない場合、 その属性と値は生成されたネ ッ ト リ ス ト に渡されます。

認識されない属性は、 フ ローのダウ ン ス ト リ ームで使用される と想定されます。 た と えば、 LOC 制約は合成では使用 されませんが、 配置ツールで使用されるので、 合成ツールから転送されます。

サポー ト される属性

BLACK_BOXBLACK_BOX 属性は、 すべての階層レベルをオフにし、 合成でそのモジュールまたはエンテ ィ テ ィ に対し てブラ ッ ク ボ ッ ク ス を作成でき る よ う にするデバ ッ グ用の属性です。 こ の属性を指定する と、 モジュールまたはエンテ ィ テ ィ に対し て有効な ロジ ッ クがあった と し て も、合成ツールでそのレベルに対し てブラ ッ ク ボ ッ ク スが作成されます。 こ の 属性はモジュール、 エンテ ィ テ ィ 、 コ ンポーネン ト に配置でき ます。

BLACK_BOX の Verilog 例

(* black_box *) module test(in1, in2, clk, out1);

重要 : Verilog では、 値は必要あ り ません。 この属性があれば、 ブラ ッ ク ボ ッ ク スが作成されます。

BLACK_BOX の VHDL 例

attribute black_box : string;attribute black_box of beh : architecture is "yes";

ブラ ッ ク ボ ッ ク スのコーデ ィ ング ス タ イルのよ り 詳細な情報は、付録 C の「ブラ ッ ク ボ ッ ク ス」を参照し て く だ さい。

合成 japan.xilinx.com 35UG901 (v2013.1) 2013 年 4 月 10 日

Page 36: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

サポー ト される属性

BUFFER_TYPEBUFFER_TYPE は入力に設定し、 使用するバ ッ フ ァーのタ イプを指定し ます。

デフ ォル ト では、 ク ロ ッ クには IBUF/BUFG または BUFGP が、 入力には IBUF が使用されます。

有効な値は次の とお り です。

• ibuf : IBUF/BUFG ペアに ク ロ ッ ク ポー ト が不要な場合に使用し ます。この場合にのみ、ク ロ ッ ク に対し て IBUF が推論されます。

• none : 入力または出力バッ フ ァーを使用し ないよ う 指定し ます。 ク ロ ッ ク ポー ト に none を指定する と、 バッ フ ァーは使用されません。

BUFFER_TYPE の Verilog 例

(* buffer_type = "none" *) input in1; //this will result in no buffers(* buffer_type = "ibuf" *) input clk1; //this will result in a clock with no bufg

BUFFER_TYPE の VHDL 例

entity test is port(in1 : std_logic_vector (8 downto 0);clk : std_logic;out1 : std_logic_vector(8 downto 0));

attribute buffer_type : string;attribute buffer_type of in1 : signal is "none";end test;

DONT_TOUCHKEEP または KEEP_HIERARCHY の代わ り に DONT_TOUCH 属性を使用し て く だ さい。DONT_TOUCH 属性は KEEP また は KEEP_HIERARCHY 属性 と同じ よ う に機能し ますが、 KEEP および KEEP_HIERARCHY と は異な り 配置配線にフ ォ ワード ア ノ テー ト されるので、 ロ ジ ッ ク 適化で削除される こ と はあ り ません。

KEEP お よ び KEEP_HIERARCHY 属性 と 同様に、 DONT_TOUCH を使用す る 際には注意が必要です。 ほかの属性が DONT_TOUCH 属性と競合する場合、 DONT_TOUCH 属性が優先されます。

DONT_TOUCH 属性に有効な値は、 true/false または yes/no です。

重要 : KEEP および KEEP_HIERARCHY 属性を DONT_TOUCH に置換し ます。

DONT_TOUCH の Verilog 例

(* dont_touch = "true" *) wire sig1;assign sig1 = in1 & in2;assign out1 = sig1 & in2;

合成 japan.xilinx.com 36UG901 (v2013.1) 2013 年 4 月 10 日

Page 37: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

サポー ト される属性

DONT_TOUCH の VHDL 例

signal sig1 : std_logicattribute dont_touch : string;attribute dont_touch of sig1 : signal is "true";........sig1 <= in1 and in2;out1 <= sig1 and in3;

FULL_CASE (Verilog のみ)FULL_CASE は、 case、 casex または casez 文で可能性のあ るすべての case 値が指定される こ と を示し ます。 case 値が指定されている場合、 Vivado 合成で case 値に対し て余分な ロジ ッ クは作成されません。

(* full_case *)case select3’b100 : sig = val1;3’b010 : sig = val2;3’b001 : sig = val3;endcase

重要 : こ の属性は、 RTL でのみ制御でき ます。

GATED_CLOCK Vivado 合成では、ゲーテ ッ ド ク ロ ッ クの変換が可能です。こ の変換を実行するには、次の 2 つの方法を使用でき ます。

• Vivado GUI のオプシ ョ ンで変換が実行される よ う 指定し ます。

• RTL 属性でゲーテ ッ ド ロ ジ ッ ク のどの信号が ク ロ ッ クかを指定し ます。

GUI のオプシ ョ ンを指定するには、 次の手順に従います。

1. Flow Navigator で [Synthesis Settings] を ク リ ッ ク し ます。

2. [Options] フ ィ ール ド で -gated_clock_conversion オプシ ョ ンを次のいずれかの値に設定し ます。

° [off] : ゲーテ ッ ド ク ロ ッ クの変換をデ ィ スエーブルにし ます。

° [on] : gated_clock 属性が RTL コード で設定されている場合に、ゲーテ ッ ド ク ロ ッ クの変換を実行し ます。 この設定では、 結果を よ り 制御でき ます。

° [auto] : 次のいずれかの条件が満た される場合に、 ゲーテ ッ ド ク ロ ッ クの変換を実行し ます。

- gated_clock 属性が true に設定されている。

- Vivado 合成でゲー ト が検出され、 有効な ク ロ ッ ク制約セ ッ ト があ る。

この設定では、 ツールで自動的に判断されます。

GATED_CLOCK の Verilog 例 :

(* gated_clk = "true" *) input clk;

合成 japan.xilinx.com 37UG901 (v2013.1) 2013 年 4 月 10 日

Page 38: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

サポー ト される属性

GATED_CLOCK の VHDL 例

entity test is port (in1, in2 : in std_logic_vector(9 downto 0);en : in std_logic;clk : in std_logic;out1 : out std_logic_vector( 9 downto 0));attribute gated_clock : string;attribute gated_clock of clk : signal is "true";end test;

IOBIOB は合成属性ではな く 、 Vivado イ ンプ リ メ ンテーシ ョ ンで使用され、 レジス タ を I/O バッ フ ァーに配置する必要が あ るかど う かを指定し ます。 有効な値は true または false です。

IOB の Verilog 例

(* IOB = "true" *) reg sig1;

IOB の VHDL 例

signal sig1:

std_logic attribute

IOB: string

attribute IOB of sig1 : signal is "true";

KEEPKEEP 属性は、 信号が削除された り ロ ジ ッ ク ブロ ッ ク に吸収される よ う な 適化が実行されないよ う に指定し ます。 この属性が設定された信号は保持され、 ネ ッ ト リ ス ト に含まれます。

た と えば、 2 ビ ッ ト の AND ゲー ト の出力で別の AND ゲー ト を駆動する信号に KEEP 制約を設定する と、 信号は両方 の AND ゲー ト を含むよ り 大きい LUT には統合されません。

KEEP は、 タ イ ミ ング制約と も よ く 併用されます。通常は 適化される信号にタ イ ミ ング制約が設定されている場合、 KEEP を設定する と 適化されな く な り 、 正しいタ イ ミ ング規則が使用されます。

注意 : RTL で後の方で使用されない信号に KEEP 属性を設定する場合は、 注意が必要です。 合成ではこれらの信号は 保持されますが、 何も駆動し ません。 これによ り 、 フ ローの後の方で問題が発生する可能性があ り ます。

注意 : KEEP をほかの属性 と 共に使用する場合は注意が必要です。 ほかの属性が KEEP 属性 と 競合する場合、 通常 KEEP 属性が優先されます。

次に例を示し ます。

• あ る信号に MAX_FANOUT 属性が設定されてお り 、 こ の信号で駆動される信号に KEEP 属性が設定されている場 合、 KEEP 属性が設定されている信号ではフ ァ ンア ウ ト 複製は実行されません。

• RAM STYLE= "block" が使用されてお り 、その RAM の一部と なるべき レジス タに KEEP が設定されている と、 KEEP 属性のためにブロ ッ ク RAM が推論されません。

合成 japan.xilinx.com 38UG901 (v2013.1) 2013 年 4 月 10 日

Page 39: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

サポー ト される属性

有効な値は、 次の とお り です。

• true : 信号を保持し ます。

• false : 信号が必要に応じ て 適化される よ う にし ます。 false を使用し て も、 信号が無条件に削除される こ と はあ り ません。 デフ ォル ト は false です。

注記 : KEEP 属性を使用し て も、 配置配線では信号は保持されません。 DONT_TOUCH 属性を使用し て く ださ い。

KEEP の Verilog 例

(* keep = "true" *) wire sig1;assign sig1 = in1 & in2;assign out1 = sig1 & in2;

KEEP の VHDL 例

signal sig1 : std_logic;attribute keep : string;attribute keep of sig1 : signal is "true";........sig1 <= in1 and in2;out1 <= sig1 and in3;

KEEP_HIERARCHYKEEP_HIERARCHY は、 階層レベルが変更さ れないよ う に し ます。 Vivado 合成では、 RTL で指定さ れたの と 同じ階 層が保持される よ う 試みられますが、 QoR (結果の品質) のために階層がフ ラ ッ ト に さ れた り 、 変更される こ と も あ り ます。

イ ンス タ ンスに KEEP_HIERARCHY を指定する と、合成でその階層レベルは変更されません。 これが QoR に影響を与 え る場合があ り ます。 また、 ト ラ イ ステー ト 出力および I/O バッ フ ァーの制御ロ ジ ッ ク を記述するモジュールには使 用し ないで く だ さい。 KEEP_HIERARCHY は、 モジュール、 アーキテ クチャ レベル、 またはイ ン ス タ ン スに指定でき ます。

KEEP_HIERARCHY の Verilog 例

モジ ュールの場合

(* keep_hierarchy = "yes" *) module bottom (in1, in2, in3, in4, out1, out2);

イ ンス タ ンスの場合

(* keep_hierarchy = "yes" *)bottom u0 (.in1(in1), .in2(in2), .out1(temp1));

KEEP_HIERARCHY の VHDL 例

モジ ュールの場合

attribute keep_hierarchy : string;attribute heep_hierarchy of beh : architecture is "yes";

イ ンス タ ンスの場合

attribute keep_hierarchy : string;attribute keep_hierarchy of u0 : label is "yes";

合成 japan.xilinx.com 39UG901 (v2013.1) 2013 年 4 月 10 日

Page 40: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

サポー ト される属性

MAX_FANOUTMAX_FANOUT は、 レジス タおよび信号のフ ァ ンア ウ ト の制限を設定し ます。 信号に KEEP 制約も設定する必要があ り ます。 これは、 RTL またはプロ ジェ ク ト への入力と し て指定でき ます。 整数値を指定し ます。

この属性は、 レジス タおよび組み合わせ信号にのみ使用でき ます。 フ ァ ンアウ ト の制限に従 う ため、 レジス タ または組み合わせ信号を駆動する信号が複製されます。

MAX_FANOUT は、 合成のグ ローバル オプシ ョ ン -fanout_limit のデフ ォル ト 値よ り も優先されます。 デザイ ン全 体のデフ ォル ト 値は、 [Project Settings] ダ イ ア ロ グ ボ ッ ク スの [Synthesis] ページまたは synth_design コ マン ド の -fanout_limit オプシ ョ ンを使用し て設定し ます。

MAX_FANOUT 属性は強制的に適用されますが、 -fanout_limit はガ イ ド ラ イ ン と し て使用され、 強制されません。 フ ァ ンア ウ ト を厳密に制御する必要があ る場合は、 MAX_FANOUT を使用し て く だ さ い。 また、 -fanout_limit オ プシ ョ ン と は異な り 、MAX_FANOUT は制御信号にも適用されます。-fanout_limit オプシ ョ ンは制御信号 (セ ッ ト 、 リ セ ッ ト 、 ク ロ ッ ク イ ネーブル な ど) には適用 さ れな いの で、 こ れ ら の信号 を 複製す る 必要が あ る 場合は MAX_FANOUT を使用し て く ださい。

注記 : 入力、ブラ ッ ク ボ ッ ク ス、EDIF (EDF),および NGC (Native Generic Circuit) フ ァ イルはサポー ト されていません。

MAX_FANOUT の Verilog 例

Vivado の場合

(* keep = "true", max_fanout = 50 *) reg sig1;

MAX_FANOUT の VHDL 例

signal sig1 : std_logic;attribute keep : string;attribute max_fanout : integer;attribute keep of sig1 : signal is "true";attribute max_fanout : signal is 50;

注記 : max_fanout の値は、 VHDL の Vivado 合成では整数です。

PARALLEL_CASE (Verilog のみ)PARALLEL_CASE は、 case 文がパラ レル構文で構築される必要のあ る こ と を示し ます。 ロジ ッ クは if-elsif 構文 では作成されません。

(* parallel_case *) case select3’b100 : sig = val1;3’b010 : sig = val2;3’b001 : sig = val3;endcase

重要 : こ の制約は、 Verilog RTL でのみ制御でき ます。

合成 japan.xilinx.com 40UG901 (v2013.1) 2013 年 4 月 10 日

Page 41: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

サポー ト される属性

RAM_STYLERAM_STYLE は、 合成での メ モ リ の推論方法を指定し ます。 有効な値は次の とお り です。

• block : RAMB タ イプのコ ンポーネン ト が推論される よ う 指定し ます。

• distributed : LUT RAM が推論される よ う 指定し ます。

デフ ォル ト では、 ほ と んどのデザイ ンで 適な結果が生成される RAM が推論されます。

RAM_STYLE の Verilog 例

(* ram_style = "distributed" *) reg [data_size-1:0] myram [2**addr_size-1:0];

RAM_STYLE の VHDL 例

attribute ram_style : string;attribute ram_style of myram : signal is "distributed";

RAM のコーデ ィ ング ス タ イルの詳細は、付録 C の 「RAM の HDL コード記述のガイ ド ラ イ ン」 を参照し て く ださ い。

ROM_STYLEROM_STYLE は、 合成での ROM メ モ リ の推論方法を指定し ます。 有効な値は次の とお り です。

• block : RAMB タ イプのコ ンポーネン ト が推論される よ う 指定し ます。

• distributed :LUT ROM が推論される よ う 指定し ます。 デフ ォル ト では、 ほ と んどのデザイ ンで 適な結果 が生成される ROM が推論されます。

ROM_STYLE の Verilog 例(* rom_style = "distributed" *) reg [data_size-1:0] myrom [2**addr_size-1:0];

ROM_STYLE の VHDL 例

attribute rom_style : string;attribute rom_style of myrom : signal is "distributed";

ROM のコーデ ィ ング ス タ イルの詳細は、 付録 C の 「ROM の HDL コーデ ィ ング手法」 を参照し て く ださ い。

SHREG_EXTRACTSHREG_EXTRACT は、 SRL 構造を推論するかど う かを指定し ます。 有効な値は次の とお り です。

• Yes : SRL 構造が推論されます。

• No : SRL 構造は推論されず、 レジス タが作成されます。

SHREG_EXTRACT の Verilog 例

(* shreg_extract = "no" *) reg [16:0] my_srl;

SHREG_EXTRACT の VHDL 例attribute shreg_extract : string;attribute shreg_extract of my_srl : signal is "no";

合成 japan.xilinx.com 41UG901 (v2013.1) 2013 年 4 月 10 日

Page 42: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

サポー ト される属性

TRANSLATE_OFF/TRANSLATE_ONTRANSLATE_OFF および TRANSLATE_ON は、合成でコード のブロ ッ ク を無視する よ う 指定し ます。 これらの属性は、 RTL のコ メ ン ト 内で指定し ます。 コ メ ン ト は、 次のいずれかのキーワード で開始し ます。

• synthesis

• synopsys

• pragma

translate_off で無視が開始され、 translate_on で終了し ます。 これらのコマン ド はネス ト 化でき ません。

TRANSLATE_OFF/TRANSLATE_ON の Verilog 例

// synthesis translate_offCode....// synthesis translate_on

TRANSLATE_OFF/TRANSLATE_ON の VHDL 例

-- synthesis translate_offCode...-- synthesis translate_on

注意 : translate 文の間に含める コード の種類には、注意が必要です。デザイ ンの動作に影響する コード の場合、 シ ミ ュ レータで使用され、 シ ミ ュ レーシ ョ ンで不一致が発生する こ と があ り ます。

USE_DSP48USE_DSP48 は、 合成の演算構造を どのよ う に処理するかを指定し ます。 デフ ォル ト では、 乗算器、 乗加算器、 乗減 算器、 乗累算器タ イ プの構造が DSP48 ブロ ッ ク に含まれます。 加算器、 減算器、 アキ ュ ム レータ も これら のブロ ッ ク に含める こ と はでき ますが、 デフ ォル ト では DSP48 ブ ロ ッ ク ではな く フ ァ ブ リ ッ ク にイ ンプ リ メ ン ト さ れます。 USE_DSP48 制約を使用する と、 このデフ ォル ト 動作が変更され、 これらの構造が DSP48 ブロ ッ ク に含まれる よ う に な り ます。

有効な値は、 yes および no です。 こ の属性は、 RTL の信号、 アーキテ クチャおよびコ ンポーネン ト 、 エンテ ィ テ ィ およびモジュールに指定でき ます。 優先順位は次の とお り です。

1. 信号

2. アーキテ クチャおよびコ ンポーネン ト

3. モジュールおよびエンテ ィ テ ィ

この属性を指定し ない場合は、 Vivado 合成で 適な動作が決定されます。

USE_DSP48 の Verilog 例

(* use_dsp48 = "yes" *) module test(clk, in1, in2, out1);

USE_DSP48 の VHDL 例

attribute use_dsp48 : string;attribute use_dsp48 of P_reg : signal is "no"

合成 japan.xilinx.com 42UG901 (v2013.1) 2013 年 4 月 10 日

Page 43: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

付録 B

SystemVerilog サポー ト

概要Vivado™ 合成では、 合成可能な SystemVerilog RTL の一部がサポー ト されます。 次のセ ク シ ョ ンに、 これらのデータ 型を説明し ます。

特定のフ ァ イルで SystemVerilog を使用デフ ォル ト では、 *.v フ ァ イルは Verilog 2001 構文で、 *.sv フ ァ イルは SystemVerilog 構文でコ ンパイルされます。

Vivado IDE で特定の *.v フ ァ イルに SystemVerilog を使用するには、 次の手順に従います。

1. フ ァ イルを右ク リ ッ ク し、 [Source Node Properties] を ク リ ッ ク し ます。

2. [Source Node Properties] ビ ューで、[Type] を [Verilog] から [SystemVerilog] に変更し し、[Apply] を ク リ ッ ク し ます。

または、 [Tcl Console] ビ ューで次の Tcl コマン ド を使用し ます。

set_property file_type SystemVerilog [get_files <filename>.v]

次のセ ク シ ョ ンで、 Vivado IDE でサポー ト される SystemVerilog のデータ型を説明し ます。

合成 japan.xilinx.com 43UG901 (v2013.1) 2013 年 4 月 10 日

Page 44: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

データ型

データ型次のデータ型と その制御方法がサポー ト されています。

宣言

RTL の変数は次のよ う に宣言し ます。

[var] [DataType] name;

説明 :

° var はオプシ ョ ンで、 宣言文にない場合は自動的に推測されます。

° DataType は次のいずれかにな り ます。

- integer_vector_type : bit、 logic、 または reg

- integer_atom_type : byte、 shortint、 int、 longint、 integer、 または time

- non_integer_type : shortreal、 real、 または realtime

- struct

- enum

整数データ型

SystemVerilog では、 次の整数型がサポー ト されます。

• shortint : 2 値の 16 ビ ッ ト 符号付き整数

• int : 2 値の 32 ビ ッ ト 符号付き整数

• longint : 2 値の 64 ビ ッ ト 符号付き整数

• byte : 2 値の 8 ビ ッ ト 符号付き整数

• bit : 2 値のユーザー定義のベク ター サイ ズ

• logic : 4 値のユーザー定義のベク ター サイ ズ

• reg : 4 値のユーザー定義のベク ター サイ ズ

• integer : 4 値の 32 ビ ッ ト 符号付き整数

• time : 4 値の 64 ビ ッ ト 符号なし整数

4 値および 2 値と は、 これら のデータ型に割 り 当てる こ と のでき る値を示し ています。

• 2 値の場合は 0 および 1 を使用でき ます。

• 4 値の場合は X と Z も使用でき ます。

X と Z 値は常に合成でき るわけではないので、 2 値と 4 値は同じ よ う に合成されます。

注意 : 4 値の変数を使用する場合、RTL と シ ミ ュ レーシ ョ ンの不一致が発生する可能性があるので、注意し て く ださい。

• デフ ォル ト では、byte、shortint、int、integer、および longint のデータ型は符号付きの値にな り ます。

• bit、 reg、 および logic は符号な しの値にな り ます。

合成 japan.xilinx.com 44UG901 (v2013.1) 2013 年 4 月 10 日

Page 45: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

データ型

実数

合成で実数がサポー ト されますが、ビヘイ ビアーには使用できず、パラ メーター値 と し て使用でき ます。SystemVerilogでは、 次の実数型がサポー ト されます。

• real

• shortreal

• realtime

Void データ型 void データ型は、 戻 り 値のない関数でのみサポー ト されます。

ユーザー定義型

Vivado 合成では、 typedef キーワード を使用し てユーザーが定義し たデータ型がサポー ト されます。 次の構文を使 用し ます。

typedef data_type type_identifier {size};

または

typedef [enum, struct, union] type_identifier;

列挙型

列挙型は、 次の構文で宣言でき ます。

enum [type] {enum_name1, enum_name2...enum_namex} identifier

データ型を指定し ない場合は、 デフ ォル ト で int にな り ます。 次に例を示し ます。

enum {sun, mon, tues, wed, thurs, fri, sat} day_of_week;

こ のコー ド では、 7 つの値を含む int の enum が生成されます。 これら の名前には 0 から開始する値が割 り 当て ら れ、 sun = 0 および sat = 6 と な り ます。

デフ ォル ト 値を変更するには、 次の例のよ う なコード を使用し ます。

enum {sun=1, mon, tues, wed, thurs, fri, sat} day_of week;

この場合、 sun の値は 1 で sat の値は 7 にな り ます。

次の例は、 デフ ォル ト 値を変更する別の方法を示し ます。

enum {sun, mon=3, tues, wed, thurs=10, fri=12, sat} day_of_week;

この場合、 sun=0、 mon=3、 tues=4、 wed=5、 thurs=10、 fri=12、 および sat=13 にな り ます。

列挙型は、 typedef キーワード でも使用でき ます。

typedef enum {sun,mon,tues,wed,thurs,fri,sat} day_of_week;day_of_week my_day;

この例では、day_of_week と い う データ型の my_day と い う 信号を定義し ています。enum の範囲を指定する こ と もでき ます。 た と えば、 上記の例の場合は次のよ う に指定でき ます。

enum {day[7]} day_of_week;

合成 japan.xilinx.com 45UG901 (v2013.1) 2013 年 4 月 10 日

Page 46: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

データ型

これによ り 、 day0、 day1…day6 と い う N-1 個の要素を含む day_of_week と い う 列挙型が作成されます。

次は、 これを別の方法で使用し た例です。

enum {day[1:7]} day_of_week; // creates day1,day2...day7enum {day[7] = 5} day_of_week; //creates day0=5, day1=6... day6=11

定数

SystemVerilog には、 次の 3 種類のエラ ボレーシ ョ ン時間定数があ り ます。

• parameter : Verilog 規格 と同じで、 同様に使用でき ます。

• localparam : parameter と似ていますが、 上位モジュールのものよ り も優先されます。

• specparam : 遅延 と タ イ ミ ング値を指定する ために使用されますが、 Vivado 合成ではサポー ト されません。

const と い う ラ ン タ イ ム定数宣言も あ り ます。

型演算子

型演算子を使用する と、 パラ メ ーターをデータ型と し て指定でき、 モジュールの異なる イ ン ス タ ン スに異なるデータ型のパラ メ ーターを設定でき ます。

キャス ト 演算子

SystemVerilog では、 あ るデータ型の値を別のデータ型の値に割 り 当てる こ と はでき ませんが、 キ ャ ス ト 演算子 (’) を 使用する と可能にな り ます。 キ ャ ス ト 演算子を使用する と、 データ型を変換でき ます。 次のよ う に使用し ます。

casting_type’(expression)

casting_type は次のいずれかにな り ます。

° integer_type

° non_integer_type

° real_type

° 符号な しの定数値

° ユーザーが作成し た符号付き値型

複合データ型

複合データ型には、 構造体 (struct) と共用体 (union) があ り ます。 次にこれらについて説明し ます。

構造体 (struct)

構造体と は、 異なるデータ型の値を 1 つにま と めて格納し、 参照でき る よ う にし た ものです。 各要素は メ ンバーと呼 ばれます。 これは、 VHDL のレ コード型と類似し ています。 構造体の構文は次のよ う にな り ます。

struct {struct_member1; struct_member2;...struct_memberx;} structure_name;

合成 japan.xilinx.com 46UG901 (v2013.1) 2013 年 4 月 10 日

Page 47: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

プロセス

共用体 (union)

共用体は、 複数のデータ型を含むデータ型ですが、 その う ち 1 つのみが使用されます。 これは、 データ型が使用方法 によ って変化する場合などに便利な方法です。 次に例を示し ます。

typedef union {int i; logic [7:0] j} my_union;my_union sig1;my_union sig2;sig1.i = 32; //sig1 will get the int formatsig2.j = 8’b00001111; //sig2 will get the 8bit logic format.

パッ ク配列と アンパッ ク配列

Vivado 合成では、 パッ ク配列と アンパッ ク配列のどち ら もサポー ト されます。

logic [5:0] sig1; //packed arraylogic sig2 [5:0]; //unpacked array

幅が決ま っているデータ型では、 パ ッ ク される次元を宣言する必要はあ り ません。

integer sig3; //equivalent to logic signed [31:0] sig3

プロセス

always プロシージャ

always プロ シージャには、 次の 4 つがあ り ます。

• always

• always_comb

• always_latch

• always_ff

always_comb プロシージャは、 組み合わせロジ ッ ク を記述し ます。 センシテ ィ ビテ ィ リ ス ト は、 always_comb 文 を駆動する ロジ ッ クによ り 推論されます。

always 文では、 ユーザーがセンシテ ィ ビテ ィ リ ス ト を指定する必要があ り ます。 次の例では、 in1 および in2 セ ンシテ ィ ビテ ィ リ ス ト が使用されます。

always@(in1 or in2)out1 = in1 & in2;always_comb out1 = in1 & in2;

always_latch プロ シージ ャでは、 ラ ッ チをすばや く 作成でき ます。 always_comb と 同様、 センシテ ィ ビテ ィ リ ス ト は推論されますが、 次の例に示すよ う にラ ッチ イネーブルの制御信号を指定する必要があ り ます。

always_latch if(gate_en) q <= d;

always_ff プロ シージャでは、 フ リ ッ プフ ロ ッ プが作成されます。 always と同様、 ユーザーがセンシテ ィ ビテ ィ リ ス ト を指定する必要があ り ます。

always_ff@(posedge clk)out1 <= in1;

合成 japan.xilinx.com 47UG901 (v2013.1) 2013 年 4 月 10 日

Page 48: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

プロセス

ブロ ッ ク文

ブロ ッ ク文は、 複数の文をグループ化し ます。 シーケンシ ャル ブロ ッ ク の場合は、 文が begin と end で囲まれま す。 ブロ ッ ク では、 そのブロ ッ ク特有の変数を宣言でき ます。 シーケンシャル ブロ ッ ク には、 そのブロ ッ ク に関連し た名前を付ける こ と もでき ます。 フ ォーマ ッ ト は次の とお り です。

begin [: block name][declarations][statements]

end [: block name]

begin : my_blocklogic temp;temp = in1 & in2;out1 = temp;end : my_block

上記の例では、 ブロ ッ ク名が end の後に も指定されていますが、 これはコード を読みやす く する ためで、 必須では あ り ません。

注記 : パラ レル ブロ ッ ク (fork-join ブロ ッ ク ) は Vivado 合成ではサポー ト されません。

手続き タ イ ミ ング制御

SystemVerilogでは、 次の 2 種類のタ イ ミ ング制御がサポー ト されます。

• 遅延制御 : 文と それが実行される までの時間を指定し ます。 これを合成に使用する利点はないので、 Vivado 合成 では、 代入する ロジ ッ クは作成されますが、 タ イ ム文は無視されます。

• イベン ト 制御 : always@(posedge clk) など、 指定し た イベン ト が発生し た と きに代入が実行される よ う に し ます。 これは Verilog の規格ですが、 SystemVerilog では機能が追加されています。

論理 or 演算子を使用する と、任意の数のイベン ト を指定でき、いずれかのイベン ト で文の実行を ト リ ガーでき ます。 これには、センシテ ィ ビテ ィ リ ス ト でイベン ト を or またはカンマで区切 り ます。た と えば、次の 2 つの文は同じです。

always@(a or b or c)always@(a,b,c)

SystemVerilog では、 event_expression @* もサポー ト されるので、 センシテ ィ ビテ ィ リ ス ト の問題によ る シ ミ ュ レーシ ョ ンでの不一致を回避でき ます。 次に例を示し ます。

Logic always@* begin

演算子

Vivado 合成では、 次の SystemVerilog の演算子がサポー ト されます。

• 代入演算子 (=、 +=、 -=、 *=、 /=、 %=、 &=、 |=、 ^=、 <<=、 >>=、 <<<=、 >>>=)

• 単項演算子 (+、 -、 !、 ~、 &、 ~&、 |、 ~|、 ^、 ~^、 ^~)

• イ ン ク リ メ ン ト /デク リ メ ン ト 演算子 (++、 --)

• 2 項演算子 (+、-、*、/、%、==、~=、===、~==、&&、||、**、< 、<=、>、>=、&、|、^、^~、~^、>>、<<、>>>、<<<)

注記 : A**B は、 A が 2 のべき乗であ るか、 B が定数の場合にサポー ト されます。

• 条件演算子 ( ? :)

• 連結演算子 ({…})

合成 japan.xilinx.com 48UG901 (v2013.1) 2013 年 4 月 10 日

Page 49: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

手続きプログラム代入文

符号付き演算式

Vivado 合成では、 符号付き演算 と符号な し演算のどち ら もサポー ト されます。 信号は、 符号あ り と なしのどち らにで も宣言でき ます。 次に例を示し ます。

logic [5:0] reg1;logic signed [5:0] reg2;

手続きプログラム代入文

if-else 条件文

if-else 条件文の構文は、 次のよ う にな り ます。

if (expression)command1;

elsecommand2;

else 文はオプシ ョ ンで、 ク ロ ッ ク文の有無によ って ラ ッチまたはフ リ ッ プフ ロ ッ プが想定されます。 次のよ う な複 数の if および else 文もサポー ト されます。

If (expression1)Command1;

else if (expression2)command2;

else if (expression3)command3;

elsecommand4;

このコード は、 priority if 文と し て合成され、 初の条件文が true であ る場合、 その他の条件文は評価されません。 Vivado 合成では、 unique if-else 文は parallel_case と し て、 priority if-else 文は full_case と し て処理さ れます。

case 文case 文の構文は、 次のよ う にな り ます。

case (expression)value1: statement1;value2: statement2;value3: statement3;default: statement4;

endcase

case 文内の default 文はオプシ ョ ンです。 値は順番に評価さ れるので、 value1 と value3 の両方が true の場 合、 statement1 が実行されます。

case 文のほかに casex 文および casez 文があ り ます。casex では ド ン ト ケアを、casez では ト ラ イ ステー ト 条件 を処理でき ます。

Vivado 合成では、 unique case 文は parallel_case と し て、 priority case 文は full_case と し て処理されます。

合成 japan.xilinx.com 49UG901 (v2013.1) 2013 年 4 月 10 日

Page 50: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

タ スクおよび関数

ループ文

Vivado 合成および SystemVerilog では、 数種のループ文がサポー ト されます。 も よ く 使用されるのは for ループ文 です。 構文は次の とお り です。

for (initialization; expression; step)statement;

for 文では、 まず初期化が実行されてから、 条件式が評価されます。 結果が 0 の場合は停止し、 1 の場合は文の実行 が続行されます。 文の実行が終了し た ら、 ステ ッ プ関数が実行されます。

• repeat ループ文では、 指定し た回数分だけ関数が繰 り 返し実行されます。 構文は次の とお り です。

repeat (expression)statement;

条件式をあ る値に対し て評価し、 文をその回数だけ実行し ます。

• for-each ループ文では、 配列内の各エレ メ ン ト に対し て文が実行されます。

• while ループ文では、 演算式が false になる までその文が実行されます。

• do-while ループ文は while ループ文と同じですが、 文の後に条件式が評価される点が異な り ます。

• forever ループはずっ と実行され続けます。 無限ループにな ら ないよ う にするため、 ループを脱出する ための break 文と共に使用し て く ださい。

タ スクおよび関数

タ スク

タ ス ク宣言の構文は、 次の とお り です。

task name (ports);[optional declarations];statements;endtask

タ ス クには、 次の 2 種類があ り ます。

• ス タ テ ィ ッ ク タ スク : 宣言文に、 次にタ ス クが呼び出された と きに前の値が保持されます。

• 自動タ スク : 宣言文には前の値は保持されません。

注意 : Vivado 合成ではすべてのタ ス ク が自動タ ス ク と し て処理されるので、 タ ス ク を使用する際は注意が必要です。

多 く のシ ミ ュ レータでは、 ス タ テ ィ ッ ク か自動かを指定し ない場合のデフ ォル ト がス タ テ ィ ッ ク タ ス ク なので、 シ ミ ュ レーシ ョ ンで不一致が発生する可能性があ り ます。 タ ス ク を自動またはス タ テ ィ ッ クに指定する方法は、 次の とお り です。

task automatic my_mult...//or task static my_mult ...

合成 japan.xilinx.com 50UG901 (v2013.1) 2013 年 4 月 10 日

Page 51: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

モジュールおよび階層

関数 (自動またはス タ テ ィ ッ ク )関数はタ ス ク と類似し ていますが、 値が返される点が異な り ます。 関数の構文は、 次の とお り です。

function data_type function_name(inputs);declarations;statements;

endfunction : function_name

後の function_name はオプシ ョ ンですが、この方がコード が読みやす く な り ます。関数は値を返すので、return 文を使用するか、 文で特定し てお く 必要があ り ます。

function_name = ....

タ ス ク と同様、 関数も自動またはス タ テ ィ ッ クにでき ます。 Vivado 合成ではすべての関数が自動と し て処理されます が、 シ ミ ュ レータによ っては動作が異な り ます。 関数を使用する場合は注意が必要です。

モジュールおよび階層SystemVerilog のモジュールは Verilog と似ていますが、 次のセ ク シ ョ ンで説明する よ う にさ らに機能が追加されてい ます。

モジュールの接続

モジ ュールのイ ンス タ ンシエー ト および接続には、 主に 3 つの方法があ り ますが、 初の 2 つ (順序付き リ ス ト およ び名前によ る方法) は Verilog と同じです。 3 つ目はポー ト 名によ る方法です。

モジュールのポー ト 名がイ ンス タ ンシエー ト モジュールの信号と名前およびタ イプが同じ場合、下位モジュールを名 前で接続でき ます。 次に例を示し ます。

module lower (output [4:0] myout;input clk;input my_in;input [1:0] my_in2;

......endmodule//in the instantiating level.lower my_inst (.myout, .clk, .my_in, .my_in2);

ワイルド カー ド ポー ト を使用し たモジュールの接続

ワ イル ド カード を使用し てモジュールを接続する こ と もでき ます。 た と えば、 上記の例は次のよ う にな り ます。

// in the instantiating modulelower my_inst (.*);

上位モジュールの名前と タ イプが正し ければ、 イ ンス タ ンス全体が接続されます。

また、 これら を混合し て使用でき ます。 次に例を示し ます。

lower my_inst (.myout(my_sig), .my_in(din), .*);

こ の例では、 myout ポー ト が my_sig 信号に、 my_in ポー ト が din 信号に、 clk および my_in2 が clk および my_in2 信号に接続されます。

合成 japan.xilinx.com 51UG901 (v2013.1) 2013 年 4 月 10 日

Page 52: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

イン ターフ ェ イス

イ ン ターフ ェ イスイ ン ターフ ェ イ スは、 ブロ ッ ク間の通信を指定する ために使用し ます。 イ ン ターフ ェ イ ス と は、 モジュール間の接続を記述しやす く する目的でま と められたネ ッ ト および変数のグループです。

基本的な イ ン ターフ ェ イ スの構文は、 次の とお り です。

interface interface_name;parameters and ports;items;

endinterface : interface_name

後の interface_name はオプシ ョ ンで、 コード を読みやす く する目的で追加されています。 次に例を示し ます。

module bottom1 (input clk,input [9:0] d1,d2,input s1,input [9:0] result,output logic sel,output logic [9:0] data1, data2,output logic equal);

//logic//

endmodule

module bottom2 (input clk,input sel,input [9:0] data1, data2,output logic [9:0] result);

//logic//

endmodule

module top (input clk,input s1,input [9:0] d1, d2,output equal);

logic [9:0] data1, data2, result;logic sel;

bottom1 u0 (clk, d1, d2, s1, result, sel, data1, data2, equal);bottom2 u1 (clk, sel, data1, data2, result);endmodule

上記のコード では、 共通する信号を持つ 2 つの下位モジュールがイ ン ス タ ンシエー ト されています。 これらの共通信 号はすべて イ ン ターフ ェ イ ス を使用し て指定でき ます。

interface my_intlogic sel;logic [9:0] data1, data2, result;

endinterface : my_int

合成 japan.xilinx.com 52UG901 (v2013.1) 2013 年 4 月 10 日

Page 53: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

イン ターフ ェ イス

これで 2 つの bottom モジュールを次のよ う に変更でき ます。

module bottom1 (my_int int1,input clk, input [9:0] d1, d2,input s1,output logic equal);

および

module bottom2 (my_int int1,input clk);

これらのモジュール内では、 sel、 data1、 data2、 result へのア ク セス方法を変更する こ と もでき ます。 これは、 モジュールの視点からは、 これらの名前のポー ト が存在し ないからです。 その代わ り に、 my_int と い う 名前のポー ト があ り ます。 これには、 次の変更を加え る必要があ り ます。

if (sel)result <= data1;

上記を次のよ う に変更し ます。

if (int1.sel)int1.result <= int1.data1;

後に、 上位にそのイ ン ターフ ェ イ ス を イ ン ス タ ンシエー ト する必要があ り ます。 これで、 イ ン ス タ ン スでそのイン ターフ ェ イ スが参照されます。

module top(input clk,input s1,input [9:0] d1, d2,output equal);

my_int int3(); //instantiation

bottom1 u0 (int2, clk, d1, d2, s1, equal);bottom2 u1 (int2, clk);endmodule

合成 japan.xilinx.com 53UG901 (v2013.1) 2013 年 4 月 10 日

Page 54: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

イン ターフ ェ イス

modport キーワー ド

上記の例では、 イ ン ターフ ェ イ ス内の信号が入力または出力と し て記述されな く なっています。 イ ン ターフ ェ イ スが追加される前は、 sel ポー ト が bottom1 の出力および bottom2 の入力でし た。

イ ン ターフ ェ イ スが追加される と、 それが明確ではな く な り ます。 実際、 Vivado 合成エンジンではこ れら が双方向 ポー ト と考慮される よ う になった こ と に対し て警告 メ ッ セージは表示されず、階層を使用し て生成されたネ ッ ト リ スト ではこれらが入出力と し て定義されます。 これは、 生成された ロジ ッ クの観点からは問題ではあ り ませんが、 混乱の原因と な り ます。

方向を指定するには、 次のコード例に示すよ う に modport キーワード を使用し ます。

interface my_int; logic sel; logic [9:0] data1, data2, result;

modport b1 (input result, output sel, data1, data2); modport b2 (input sel, data1, data2, output result);endinterface : my_int

この後、 bottom モジュールの宣言に次を使用し ます。

module bottom1 (my_int.b1 int1,

これで、 入力と出力が正し く 関連付け られます。

その他のイ ン ターフ ェ イス機能

イ ン ターフ ェ イ スには、 信号だけでな く 、 タ ス クおよび関数も含める こ と ができ、 そのイ ン ターフ ェ イ スに特有のタス ク を作成でき ます。

イ ン ターフ ェ イ スのパラ メ ーターも指定でき ます。前述の例の場合、data1 および data2 は両方と も 10 ビ ッ ト のベ ク ターですが、 パラ メ ーターを設定する こ と によ り 任意のサイ ズに変更でき ます。

package 文package 文を使用する と、 さ まざ まなコ ン ス ト ラ ク ト を共有でき ます。 これは、 VHDL のパッ ケージ文と 同じ よ う に 動作し ます。 package 文には、 関数、 タ ス ク、 データ型、 列挙型など を含める こ と ができ ます。 package 文の構文は、 次の とお り です。

package package_name;items

endpackage : package_name

後の package_name は、 コード を読みやす く する ためで、 必須ではあ り ません。

パッ ケージは、 ほかのモジュールで import コマン ド を使用し て参照されます。 構文は次の とお り です。

import package_name::item or *;

import コマン ド では、 イ ンポー ト するパッ ケージからのア イ テムを指定するか、 パッ ケージ全体を指定する必要が あ り ます。

合成 japan.xilinx.com 54UG901 (v2013.1) 2013 年 4 月 10 日

Page 55: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

付録 C

HDL コーデ ィ ング手法

概要ハード ウ ェ ア記述言語 (HDL) のコーデ ィ ング手法を使用する と、 次が可能にな り ます。

• デジ タル ロ ジ ッ ク回路でよ く 使用される機能を記述でき ます。

• ザイ リ ン ク ス デバイ スのアーキテ クチャ機能を利用でき ます。

• Vivado™ IDE から テンプレー ト を使用でき ます。

° [Window] → [Language Templates] を ク リ ッ ク

VHDL の利点• 規則が厳し く 、 データ型が厳格に定義されている ため、 自由度が低 く 、 エラーが発生しに く い

• HDL ソース コード での RAM コ ンポーネン ト の初期化が簡単 (Verilog の初期ブロ ッ ク の方が困難)

• パッ ケージ サポー ト

• カス タ ム型

• 列挙型

• reg と wire の混乱がない

VHDL の利点• C 言語のよ う な構文

• コード が VHDL よ り も コ ンパク ト

• ブロ ッ ク コ メ ン ト

• VHDL のよ う にコ ンポーネン ト イ ン ス タ ンシエーシ ョ ンが多 く ない

合成 japan.xilinx.com 55UG901 (v2013.1) 2013 年 4 月 10 日

Page 56: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

SystemVerilog の利点

SystemVerilog の利点• コード が Verilog よ り も コ ンパク ト

• 構造体、 共同体、 列挙型によ り ス ケーラ ビ リ テ ィ に優れている

• 高抽象度のイ ン ターフ ェ イ ス

• Vivado 合成でサポー ト

フ リ ッ プ フ ロ ッ プ、 レジス タ、 およびラ ッ チVivado 合成では、 次の制御信号付きのフ リ ッ プフ ロ ッ プ、 レジス タが認識されます。

• 立ち上が り エッ ジまたは立ち下が り エ ッ ジの ク ロ ッ ク

• 非同期セ ッ ト / リ セ ッ ト

• 同期セ ッ ト / リ セ ッ ト

• ク ロ ッ ク イネーブル

フ リ ッ プフ ロ ッ プ、 レジス タ、 およびラ ッチは、 次を使用し て記述されます。

• 順次処理文 (VHDL)

• always ブロ ッ ク (Verilog)

• フ リ ッ プフ ロ ッ プには always_ff、 ラ ッ チには always_latch (SystemVerilog)

process または always ブロ ッ クのセンシテ ィ ビテ ィ リ ス ト には、 次を含める必要があ り ます。

• ク ロ ッ ク信号

• すべての非同期制御信号

フ リ ッ プ フ ロ ッ プおよびレジス タの制御信号

フ リ ッ プフ ロ ッ プおよびレジス タの制御信号には、 次の ものがあ り ます。

• ク ロ ッ ク

• 非同期および同期のセ ッ ト / リ セ ッ ト 信号

• ク ロ ッ ク イネーブル

コー ド記述のガイ ド ラ イ ン

• レジス タ を非同期にセ ッ ト / リ セ ッ ト し ないで く だ さい。

° 制御セ ッ ト をマ ッ プし直すこ と ができ な く な り ます。

° ブロ ッ ク RAM コ ンポーネン ト および DSP ブロ ッ ク などのデバイ ス リ ソースの順次機能は、 同期的にしか セ ッ ト または リ セ ッ ト でき ません。

° デバイ ス リ ソース を使用でき な く なるか、 適にコ ンフ ィ ギュ レーシ ョ ン されな く な り ます。

合成 japan.xilinx.com 56UG901 (v2013.1) 2013 年 4 月 10 日

Page 57: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

フ リ ッ プ フ ロ ッ プ、 レジス タ、 およびラ ッ チ

• セ ッ ト と リ セ ッ ト の両方を持つフ リ ッ プフ ロ ッ プを記述し ないで く ださい。

° 同期または非同期のどち ら であって も、セ ッ ト と リ セ ッ ト の両方を持つフ リ ッ プフ ロ ッ プ プ リ ミ テ ィ ブはあ り ません。

° セ ッ ト と リ セ ッ ト の両方を持つフ リ ッ プフ ロ ッ プは、エ リ アおよびパフ ォーマン スに悪影響を与え る可能性があ り ます。

• でき る限 り 、 セ ッ ト / リ セ ッ ト ロ ジ ッ ク を使用し ないで く ださ い。 初期内容を定義し て回路のグ ローバル リ セ ッ ト を使用する など、 必要な機能を達成でき る コ ス ト が低いその他の方法があ る可能性があ り ます。

• フ リ ッ プフ ロ ッ プ プ リ ミ テ ィ ブの ク ロ ッ ク イ ネーブル、セ ッ ト / リ セ ッ ト 制御入力は常にア ク テ ィ ブ High にし ま す。 ア ク テ ィ ブ Low にする と、 反転ロ ジ ッ クによ り 回路パフ ォーマン スが悪化する こ と があ り ます。

フ リ ッ プ フ ロ ッ プおよびレジス タの推論

Vivado 合成では、 HDL コード の記述方法によ って、 4 種類のレジス タ プ リ ミ テ ィ ブが推論されます。

• FDCE : ク ロ ッ ク イ ネーブルおよび非同期ク リ ア付き D フ リ ッ プフ ロ ッ プ

• FDPE : ク ロ ッ ク イ ネーブルおよび非同期プ リ セ ッ ト 付き D フ リ ッ プフ ロ ッ プ

• FDSE : ク ロ ッ ク イ ネーブルおよび同期セ ッ ト 付き D フ リ ッ プフ ロ ッ プ

• FDRE : ク ロ ッ ク イ ネーブルおよび同期 リ セ ッ ト 付き D フ リ ッ プフ ロ ッ プ

フ リ ッ プ フ ロ ッ プおよびレジス タの初期化

回路に電源が投入された と きにレジス タの内容を初期化するには、 信号宣言でデフ ォル ト 値を指定し ます。

フ リ ッ プ フ ロ ッ プおよびレジス タのレポー ト

• HDL 合成中にレジス タが推論される と、 レポー ト に記述されます。

• HDL 合成中に推論されたレジス タの数は、 Design Summary セク シ ョ ンのフ リ ッ プフ ロ ッ プ プ リ ミ テ ィ ブの数と 完全に一致し ない こ と があ り ます。

• フ リ ッ プフ ロ ッ プ プ リ ミ テ ィ ブの数は、 次の処理によ り 異な り ます。

° DSP ブロ ッ ク またはブロ ッ ク RAM コ ンポーネン ト へのレジス タの吸収

° レジス タの複製

° 定数または等価フ リ ッ プフ ロ ッ プの削除

フ リ ッ プ フ ロ ッ プおよびレジス タのレポー ト 例

---------------------------------------------------------------------------------RTL Component Statistics ---------------------------------------------------------------------------------Detailed RTL Component Info : +---Registers : 8 Bit Registers := 1

Report Cell Usage: -----+----+----- |Cell|Count-----+----+-----3 |FDCE| 8-----+----+-----

合成 japan.xilinx.com 57UG901 (v2013.1) 2013 年 4 月 10 日

Page 58: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

フ リ ッ プ フ ロ ッ プ、 レジス タ、 およびラ ッ チ

フ リ ッ プ フ ロ ッ プおよびレジス タのコー ド例

次に、 フ リ ッ プフ ロ ッ プ と レジス タの VHDL および Verilog コード例を示し ます。

コード 例は、 次のサイ ト から ダウ ン ロード でき ます。

http://japan.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip

フ リ ッ プ フ ロ ッ プおよびレジス タの VHDL コー ド 例

-- File: HDL_Coding_Techniques/registers/register6.vhd-- Flip-Flop with-- Rising-edge Clock-- Active-high Synchronous Clear-- Active-high Clock Enablelibrary IEEE;use IEEE.std_logic_1164.all;

entity top is port ( clr, ce, clk : in std_logic; d_in : in std_logic_vector(7 downto 0); dout : out std_logic_vector(7 downto ));end entity top;architecture rtl of top isbegin process (clk) is begin if clr = '1' then dout <= “00000000”; elsif rising_edge(clk) then if ce = '1' then dout <= d_in; end if; end if; end process;end architecture rtl;

合成 japan.xilinx.com 58UG901 (v2013.1) 2013 年 4 月 10 日

Page 59: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ラ ッ チ

フ リ ッ プ フ ロ ッ プおよびレジス タの Verilog コー ド例

// http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip// File: HDL_Coding_Techniques/registers/registers_6.v// 8-bit Register with// Rising-edge Clock// Active-high Synchronous Clear// Active-high Clock Enablemodule top(d_in,ce,clk,clr,dout); input [7:0] d_in; input ce; input clk; input clr; output [7:0] dout; reg [7:0] d_reg;

always @ (posedge clk) begin if(clr) d_reg <= 8’b0; else if(ce) d_reg <= d_in; end assign dout = d_reg;endmodule

ラ ッ チコード 例は、 次のサイ ト から ダウ ン ロード でき ます。 http://japan.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip

ラ ッ チのレポー ト

• Vivado ロ グ フ ァ イルに認識された ラ ッチのタ イプ と サイ ズがレポー ト されます。

• ラ ッチが推論される原因は、if 文や case 文が不完全であ るなど、HDL コード の間違いであ る こ と がほ と んどです。

• Vivado 合成では、 ラ ッ チが推論される と、 次のレポー ト 例に示すよ う に警告 メ ッ セージが生成されます。 これに よ り 、 ラ ッ チの推論が意図された ものであ るかど う かを確認でき ます。

合成 japan.xilinx.com 59UG901 (v2013.1) 2013 年 4 月 10 日

Page 60: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ラ ッ チ

ラ ッ チのレポー ト 例

=========================================================================* Vivado.log *=========================================================================

WARNING: [Synth 8-327] inferring latch for variable 'Q_reg'

========================================================================= Report Cell Usage: -----+----+----- |Cell|Count-----+----+-----2 |LD | 1-----+----+-----

=========================================================================

ラ ッ チのコー ド 例

次に、 正ゲー ト および非同期 リ セ ッ ト 付き ラ ッチの VHDL および Verilog コード例を示し ます。

正ゲー ト および非同期リ セ ッ ト 付き ラ ッ チの VHDL コー ド例

--//Download: --// http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- //File: HDL_Coding_Techniques/latches/latches_2.vhd

-- Latch with Positive Gate and Asynchronous Reset----library ieee;use ieee.std_logic_1164.all;

entity latches_2 is port(G, D, CLR : in std_logic; Q : out std_logic);end latches_2;

architecture archi of latches_2 isbegin process (CLR, D, G) begin if (CLR='1') then Q <= '0'; elsif (G='1') then Q <= D; end if; end process;end archi;

合成 japan.xilinx.com 60UG901 (v2013.1) 2013 年 4 月 10 日

Page 61: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ト ラ イステー ト

ト ラ イステー ト• ト ラ イ ステー ト は、 通常次の ものでモデ リ ング されます。

° 信号

° if-else 文

• これは、 バッ フ ァーが次のどち ら を駆動する場合に も適用されます。

° 内部バス

° デバイ スが搭載されているボード上の外部バス

• if-else の分岐の 1 つで信号がハイ イ ンピーダン スに割 り 当て られています。

コード 例は、 次のサイ ト から ダウ ン ロード でき ます。

http://japan.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip

ト ラ イステー ト のイ ンプ リ メ ンテーシ ョ ン

推論された ト ラ イ ス テー ト バ ッ フ ァーは、 次のいずれかを駆動するかによ って、 異な るデバイ ス プ リ ミ テ ィ ブを使 用し て イ ンプ リ メ ン ト されます。

• 内部バス (BUFT)

° 推論された BUFT は、 Vivado 合成によ り LUT 内のロ ジ ッ クに自動的に変換されます。

° BUFT を推論する内部バスが 上位モジュールの出力を駆動する場合、 OBUF が推論されます。

• 回路の外部ピ ン (OBUFT)

ト ラ イステー ト のレポー ト

HDL 合成中に ト ラ イ ステー ト バッ フ ァーが推論される と、 レポー ト に記述されます。

ト ラ イステー ト のレポー ト 例

=========================================================================* Vivado log file *=========================================================================Report Cell Usage: -----+-----+----- |Cell |Count-----+-----+-----1 |OBUFT| 1-----+-----+----- =========================================================================

合成 japan.xilinx.com 61UG901 (v2013.1) 2013 年 4 月 10 日

Page 62: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ト ラ イステー ト

ト ラ イステー ト のコー ド例

次に、 ト ラ イ ステー ト の VHDL および Verilog コード例を示し ます。

組み合わせプロセスを使用し た ト ラ イステー ト の VHDL コー ド例

-- Download: http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- File: HDL_Coding_Techniques/tristates/tristates_2.vhd-- Tristate Description Using Combinatorial Process-- Implemented with an OBUFT (IO buffer)----library ieee;use ieee.std_logic_1164.all;

entity three_st_1 is port(T : in std_logic; I : in std_logic; O : out std_logic);end three_st_1;

architecture archi of three_st_1 isbegin

process (I, T) begin if (T='0') then O <= I; else O <= 'Z'; end if; end process;

end archi;

同時処理代入文を使用し た ト ラ イステー ト の VHDL コー ド例

-- Download: http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- File: HDL_Coding_Techniques/tristates/tristates_1.v-- Tristate Description Using Concurrent Assignment----library ieee;use ieee.std_logic_1164.all;

entity three_st_2 is port(T : in std_logic; I : in std_logic; O : out std_logic);end three_st_2;

architecture archi of three_st_2 isbegin O <= I when (T='0') else 'Z';end archi;

合成 japan.xilinx.com 62UG901 (v2013.1) 2013 年 4 月 10 日

Page 63: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ト ラ イステー ト

組み合わせプロセスを使用し た ト ラ イステー ト の VHDL コー ド例

-- Download: http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip

-- Tristate Description Using Combinatorial Process-- Implemented with an OBUF (internal buffer)----library ieee;use ieee.std_logic_1164.all;

entity example is generic ( WIDTH : integer := 8 );

port( T : in std_logic; I : in std_logic_vector(WIDTH-1 downto 0); O : out std_logic_vector(WIDTH-1 downto 0));

end example;

architecture archi of example is signal S : std_logic_vector(WIDTH-1 downto 0);begin

process (I, T) begin if (T = '1') then S <= I; else S <= (others => 'Z'); end if; end process;

O <= not(S);

end archi;

組み合わせ always ブロ ッ ク を使用し た ト ラ イステー ト の Verilog コー ド 例

// Download: http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip// Tristate Description Using Combinatorial Always Block////module v_three_st_1 (T, I, O); input T, I; output O; reg O;

always @(T or I) begin if (~T) O = I; else O = 1'bZ; end

endmodule

合成 japan.xilinx.com 63UG901 (v2013.1) 2013 年 4 月 10 日

Page 64: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

シフ ト レジス タ

同時処理代入文を使用し た ト ラ イステー ト の Verilog コー ド例

//// Tristate Description Using Concurrent Assignment//module v_three_st_2 (T, I, O); input T, I; output O;

assign O = (~T) ?I: 1'bZ;

endmodule

シフ ト レジス タシフ ト レジス タはフ リ ッ プフ ロ ッ プのチェーンで、 固定数 (ス タ テ ィ ッ ク ) のレ イ テンシ段を介し てデータ を伝搬で き ます。「ダ イナ ミ ッ ク シフ ト レジス タ」 では、伝搬チェーンの長さ を回路の操作中にダ イナ ミ ッ クに変更でき ます。

コード 例は、 次のサイ ト から ダウ ン ロード でき ます。

http://japan.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip

ス タ テ ィ ッ ク シ フ ト レジス タの要素

ス タテ ィ ッ ク シフ ト レジス タには、 通常次のものが含まれます。

• ク ロ ッ ク

• ク ロ ッ ク イネーブル (オプシ ョ ン)

• シ リ アル データ入力

• シ リ アル データ出力

シ フ ト レジス タの SRL ベースのイ ンプ リ メ ンテーシ ョ ン

Vivado 合成では、 シフ ト レジス タが推論される と、 通常次のよ う な SRL 型の リ ソースにイ ンプ リ メ ン ト されます。

• SRL16E

• SRLC32E

シフ ト レジス タの長さ によ って、 Vivado 合成で次のよ う に処理されます。

• SRL タ イプのプ リ ミ テ ィ ブにイ ンプ リ メ ン ト

• SRLC タ イプのプ リ ミ テ ィ ブのカス ケード機能を利用

• デザイ ンの残 り の部分でシフ ト レジス タの中間地点のど こかが使用される場合も、こ のカ スケード機能が利用さ れます。

合成 japan.xilinx.com 64UG901 (v2013.1) 2013 年 4 月 10 日

Page 65: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

シフ ト レジス タ

シフ ト レジス タのコー ド 例

次に、 シフ ト レジス タの VHDL および Verilog コード例を示し ます。

32 ビ ッ ト シ フ ト レジス タの VHDL コー ド例 1

次のコード 例では、 連結コード ス タ イルを使用し ています。

-- Download-- http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- File: HDL_Coding_Techniques/shift_registers/shift_registers_0.vhd-- 32-bit Shift Register-- Rising edge clock-- Active high clock enable-- Concatenation-based template----library ieee;use ieee.std_logic_1164.all;

entity shift_registers_0 is

generic ( DEPTH : integer := 32);port ( clk : in std_logic; clken : in std_logic; SI : in std_logic; SO : out std_logic);

end shift_registers_0;

architecture archi of shift_registers_0 is signal shreg: std_logic_vector(DEPTH-1 downto 0);begin

process (clk) begin if rising_edge(clk) then if clken = '1' then shreg <= shreg(DEPTH-2 downto 0) & SI; end if; end if; end process;

SO <= shreg(DEPTH-1);

end archi;

合成 japan.xilinx.com 65UG901 (v2013.1) 2013 年 4 月 10 日

Page 66: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

シフ ト レジス タ

32 ビ ッ ト のシ フ ト レジス タの VHDL コー ド例 2

同じ機能は、 次のよ う に も記述でき ます。

--Download:-- http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- File: HDL_Coding_Techniques/shift_registers/shift_registers_1.vhd-- 32-bit Shift Register-- Rising edge clock-- Active high clock enable-- foor loop-based template----library ieee;use ieee.std_logic_1164.all;

entity shift_registers_1 is

generic ( DEPTH : integer := 32 ); port ( clk : in std_logic; clken : in std_logic; SI : in std_logic; SO : out std_logic);

end shift_registers_1;

architecture archi of shift_registers_1 is signal shreg: std_logic_vector(DEPTH-1 downto 0);begin

process (clk) begin if rising_edge(clk) then if clken = '1' then for i in 0 to DEPTH-2 loop shreg(i+1) <= shreg(i); end loop; shreg(0) <= SI; end if; end if; end process;

SO <= shreg(DEPTH-1);

end archi;

合成 japan.xilinx.com 66UG901 (v2013.1) 2013 年 4 月 10 日

Page 67: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

シフ ト レジス タ

32 ビ ッ ト のシ フ ト レジス タの Verilog コー ド 例 1

次のコード 例では、 連結を使用し てレジス タ チェーンを記述し ています。

// http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip// File: HDL_Coding_Techniques/shift_registers/shift_registers_0.vhd// 8-bit Shift Register// Rising edge clock// Active high clock enable// Concatenation-based templatemodule v_shift_registers_0 (clk, clken, SI, SO);

parameter WIDTH = 32; input clk, clken, SI; output SO; reg [WIDTH-1:0] shreg;

always @(posedge clk) begin if (clken) shreg = {shreg[WIDTH-2:0], SI}; end

assign SO = shreg[WIDTH-1];

endmodule

8 ビ ッ ト のシ フ ト レジス タの Verilog コー ド例 2

// http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip// File: HDL_Coding_Techniques/shift_registers/shift_registers_1.v// 32-bit Shift Register// Rising edge clock// Active high clock enable// For-loop based templatemodule v_shift_registers_1 (clk, clken, SI, SO);

parameter WIDTH = 32; input clk, clken, SI; output SO; reg [WIDTH-1:0] shreg;

integer i;

always @(posedge clk) begin if (clken) begin for (i = 0; i < WIDTH-1; i = i+1) shreg[i+1] <= shreg[i]; shreg[0] <= SI; end end

assign SO = shreg [WIDTH-1];1endmodule

合成 japan.xilinx.com 67UG901 (v2013.1) 2013 年 4 月 10 日

Page 68: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ダイナ ミ ッ ク シフ ト レジス タ

SRL ベース シフ ト レジス タのレポー ト

Report Cell Usage: -----+-------+----- |Cell |Count-----+-------+-----1 |SRLC32E| 1

ダイナ ミ ッ ク シフ ト レジス タダ イナ ミ ッ ク シフ ト レジス タは、 回路の動作中にダ イナ ミ ッ クに長さ を変え る こ と ができ る シフ ト レジス タです。

ダ イナ ミ ッ ク シフ ト レジス タは、 次のよ う に考え る こ と ができ ます。

• 回路の動作中に指定可能な 大長のフ リ ッ プフ ロ ッ プのチェーン

• 指定された ク ロ ッ ク サイ クルで伝搬チェーンからデータ を抽出する段階を選択するマルチプレ クサー

Vivado 合成では、 任意の 大長のダ イナ ミ ッ ク シフ ト レジス タ を推論でき ます。

Vivado ツールでは、 ダ イナ ミ ッ ク レジス タはデバイ ス フ ァ ミ リ で使用可能な SRL タ イプのプ リ ミ テ ィ ブを使用し て 適にイ ンプ リ メ ン ト でき ます。

合成 japan.xilinx.com 68UG901 (v2013.1) 2013 年 4 月 10 日

Page 69: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ダイナ ミ ッ ク シフ ト レジス タ

ダイナ ミ ッ ク シ フ ト レジス タのコー ド例

次に、 ダ イナ ミ ッ ク シフ ト レジス タの VHDL および Verilog コード例を示し ます。

32 ビ ッ ト のダイナ ミ ッ ク シ フ ト レジス タの VHDL コー ド 例

-- http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- File:HDL_Coding_Techniques/dynamic_shift_registers/dynamic_shift_registers_1.vhd-- 32-bit dynamic shift register.--library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;

entity dynamic_shift _register is

generic ( DEPTH : integer := 32; SEL_WIDTH : integer := 5 ); port( CLK : in std_logic; SI : in std_logic; CE : in std_logic; A : in std_logic_vector(SEL_WIDTH-1 downto 0); DO : out std_logic );

end dynamic_shift_register;

X-Ref Target - Figure C-1

図 C-1 : ダイナ ミ ッ ク シフ ト レジス タの図

合成 japan.xilinx.com 69UG901 (v2013.1) 2013 年 4 月 10 日

Page 70: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

ダイナ ミ ッ ク シフ ト レジス タ

architecture rtl of dynamic_shift_register is

type SRL_ARRAY is array (0 to DEPTH-1) of std_logic; -- The type SRL_ARRAY can be array -- (0 to DEPTH-1) of -- std_logic_vector(BUS_WIDTH downto 0) -- or array (DEPTH-1 downto 0) of -- std_logic_vector(BUS_WIDTH downto 0) -- (the subtype is forward (see below)) signal SRL_SIG :SRL_ARRAY;

begin process (CLK) begin if rising_edge(CLK) then if CE = '1' then SRL_SIG <= SI & SRL_SIG(0 to DEPTH-2); end if; end if; end process;

DO <= SRL_SIG(conv_integer(A));

end rtl;

32 ビ ッ ト のダイナ ミ ッ ク シ フ ト レジス タの Verilog コー ド例

//http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip//File: HDL_Coding_Techniques/dynamic_shift_registers/dynamic_shift_registers_1.v// 32-bit dynamic shift register.

module dynamic_shift_register (CLK, CE, SEL, SI, DO);

parameter SELWIDTH = 5; input CLK, CE, SI input [SELWIDTH-1:0] SEL; output DO;

localparam DATAWIDTH = 2**SELWIDTH; reg [DATAWIDTH-1:0] data;

assign DO = data[SEL];

always @(posedge CLK) begin if (CE= 1'b1)

data <= {data[DATAWIDTH-2:0], SI}; end

endmodule

合成 japan.xilinx.com 70UG901 (v2013.1) 2013 年 4 月 10 日

Page 71: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

乗算器

乗算器Vivado 合成では、 ソース コード の乗算から乗算器マ ク ロが推論されます。

• 結果の出力信号のビ ッ ト 数は、2 つのオペラ ン ド の合計ビ ッ ト 数にな り ます。た と えば、16 ビ ッ ト の信号と 8 ビ ッ ト の信号を乗算する場合、 結果は 24 ビ ッ ト にな り ます。

推奨 : デバイ スの上位ビ ッ ト をすべて使用し ない場合、特に乗算器マ ク ロ を ス ラ イ ス ロ ジ ッ ク にイ ンプ リ メ ン ト する 場合は、 オペラ ン ド のビ ッ ト 数を必要 小限に削減する こ と をお勧めし ます。

コード 例は、 次のサイ ト から ダウ ン ロード でき ます。

http://japan.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip

乗算器のイ ンプ リ メ ンテーシ ョ ン

乗算器マ ク ロは、 次の ものにイ ンプ リ メ ン ト でき ます。

• ス ラ イ ス ロ ジ ッ ク

• DSP ブロ ッ ク

どち らにイ ンプ リ メ ン ト されるかは、 次の要素に基づいて決定されます。

• オペラ ン ド のサイ ズ

• パフ ォーマンス を 高にする

乗算器を ス ラ イ ス ロ ジ ッ ク または DSP ブロ ッ ク に強制的にイ ンプ リ メ ン ト するには、 適切な信号、 エンテ ィ テ ィ 、 またはモジュールに USE_DSP48 属性を設定し ます。 こ の属性は、 次のいずれかの値に設定でき ます。

• no (ス ラ イ ス ロジ ッ ク にイ ンプ リ メ ン ト )

• yes (DSP ブロ ッ クにイ ンプ リ メ ン ト )

DSP ブロ ッ クのイ ンプ リ メ ンテーシ ョ ン

乗算器を 1 つの DSP ブロ ッ クにイ ンプ リ メ ン ト する場合、DSP ブロ ッ クのパイプラ イ ン機能が利用されます。Vivado 合成では、 次の箇所にあ る 2 レベルまでのレジス タ を吸収でき ます。

• 乗算オペラ ン ド

• 乗算後

乗算器が 1 つの DSP ブロ ッ ク に収ま ら ない場合、 マ ク ロ を分解し て イ ンプ リ メ ン ト し ます。 こ の場合、 次のいずれ かにイ ンプ リ メ ン ト されます。

• 複数の DSP ブロ ッ ク

• DSP ブロ ッ ク と ス ラ イ ス ロ ジ ッ ク

レジス タが DSP ブロ ッ クに吸収されないよ う にするには、 KEEP 属性を使用し ます。 た と えば、 乗算器のオペラ ン ド にレジス タがあ る場合、 レジス タの出力に KEEP を設定する と、 レジス タが DSP ブロ ッ クに吸収されな く な り ます。 KEEP 属性の詳細は、 付録 A の 「KEEP」 を参照し て く ださ い。

合成 japan.xilinx.com 71UG901 (v2013.1) 2013 年 4 月 10 日

Page 72: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

乗算器

乗算器のコー ド 例

符号な し 16X16 ビ ッ ト 乗算器の VHDL コー ド 例

---- Unsigned 16x16-bit Multiplier--library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity multipliers1 is generic ( WIDTHA : integer := 16; WIDTHB : integer := 16 ); port( A : in std_logic_vector(WIDTHA-1 downto 0); B : in std_logic_vector(WIDTHB-1 downto 0); RES : out std_logic_vector(WIDTHA+WIDTHB-1 downto 0));end multipliers1;

architecture beh of multipliers1 isbegin RES <= A * B;end beh;

符号な し 16x24 ビ ッ ト 乗算器の Verilog コー ド 例

//// Unsigned 16x24-bit Multiplier// 1 latency stage on operands// 3 latency stage after the multiplication//module multipliers2 (clk, A, B, RES);

parameter WIDTHA = 16; parameter WIDTHB = 24; input clk; input [WIDTHA-1:0] A; input [WIDTHB-1:0] B; output [WIDTHA+WIDTHB-1:0] RES;

reg [WIDTHA-1:0] rA; reg [WIDTHB-1:0] rB; reg [WIDTHA+WIDTHB=1:0] M [3:0]; integer i;

always @(posedge clk) begin rA <= A; rB <= B; M[0] <= rA * rB; for (i = 0; i < 3; i = i+1) M[i+1] <= M[i]; end

assign RES = M[3];

endmodule

合成 japan.xilinx.com 72UG901 (v2013.1) 2013 年 4 月 10 日

Page 73: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

乗加算および乗累算

乗加算および乗累算次のマ ク ロが推論されます。

• 乗加算

• 乗減算

• 乗加減算

• 乗累算

これらのマ ク ロは、 次の ものを集約する こ と によ り 推論されます。

• 乗算器

• 加減算器

• レジス タ

乗加算と乗累算のイ ンプ リ メ ンテーシ ョ ン

乗加算と乗累算のイ ンプ リ メ ンテーシ ョ ンでは、 次が実行されます。

• 推論された乗加算または乗累算マ ク ロ を DSP ブロ ッ ク リ ソースにイ ンプ リ メ ン ト でき ます。

• DSP ブロ ッ ク のパイプラ イ ン機能が利用されます。

• 次の ものが吸収されます。

° 乗算オペラ ン ド の 2 レジス タ段

° 乗算後の 1 レジス タ段

° 加算器、 減算器、 加減算器の後ろにあ る 1 レジス タ段

° 加算/減算の選択信号の 1 レジス タ段

° 加算器のオプシ ョ ンのキ ャ リ ー入力の 1 レジス タ段

• Vivado 合成 では、イ ンプ リ メ ンテーシ ョ ンに必要な DSP48 リ ソースが 1 つのみの場合に乗累算 (MAC) を DSP48 ブロ ッ クにイ ンプ リ メ ン ト でき ます。

• マ ク ロが 1 つの DSP48 に収ま ら ない場合は、 次のよ う に処理されます。

° 乗算器と アキ ュ ムレータ (累算) が別々のマク ロ と し て処理されます。

° 各マ ク ロが個別に処理されます。

DSP ブロ ッ ク リ ソースへのマ ク ロのイ ンプ リ メ ンテーシ ョ ン

DSP ブロ ッ ク リ ソースへのマ ク ロのイ ンプ リ メ ンテーシ ョ ンは、 デフ ォル ト で推論されます。

• デフ ォル ト モード では、 次のよ う に処理されます。

° 乗加算マ ク ロ と乗累算マ ク ロがイ ンプ リ メ ン ト されます。

° ターゲ ッ ト デバイ スで使用可能な DSP ブロ ッ クが考慮されます。

° 使用可能なすべての DSP リ ソース を使用でき ます。

° DSP ブロ ッ ク のパイプ ラ イ ン機能をすべて利用し て、 高の回路パフ ォーマン スが得られる よ う 試みられ ます。

° レジス タ を乗加算マ ク ロ または乗累算マ ク ロに吸収でき るかど う かス キ ャ ン されます。

合成 japan.xilinx.com 73UG901 (v2013.1) 2013 年 4 月 10 日

Page 74: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

乗加算および乗累算

• レジス タが DSP ブロ ッ クに吸収されないよ う にするには、 KEEP 属性を使用し ます。 た と えば、 乗算器のオペラ ン ド にあ る レ ジ ス タが DSP ブ ロ ッ ク に吸収さ れない よ う にする には、 レ ジ ス タの出力に KEEP を設定し ます。 KEEP 属性の詳細は、 付録 A の 「KEEP」 を参照し て く だ さい。

乗加算と乗累算のコー ド例

次に、 乗加算および乗累算フ ァ ン ク シ ョ ンの VHDL および Verilog コード例を示し ます。

乗算ア ッ プ アキュムレータ (乗算後にレジス タ付き) の VHDL コー ド 例

---- Multiplier Up Accumulate with Register After Multiplication--library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity multipliers3 is generic (pwidth: integer:=16); port (clk, reset: in std_logic; A, B: in std_logic_vector(pwidth-1 downto 0); RES: out std_logic_vector(pwidth*2-1 downto 0));end multipliers3;

architecture beh of multipliers3 is signal mult, accum: std_logic_vector(pwidth*2-1 downto 0);begin

process (clk) begin if (clk'event and clk='1') then if (reset = '1') then accum <= (others => '0'); mult <= (others => '0'); else accum <= accum + mult; mult <= A * B; end if; end if; end process;

RES <= accum;

end beh;

合成 japan.xilinx.com 74UG901 (v2013.1) 2013 年 4 月 10 日

Page 75: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

乗算ア ッ プ アキュムレータの Verilog コー ド例

// Multiplier Up Accumulate with:// Registered operands// Registered multiplication// Accumulationmodule multipliers4 (clk, rst, A, B, RES);

parameter WIDTH = 16; input clk; input rst; input [WIDTH-1:0] A, B; output [2*WIDTH-1:0] RES;

reg [WIDTH-1:0] rA, rB; reg [2*WIDTH-1:0] mult, accum;

always @(posedge clk)begin if (rst) begin rA <= {WIDTH{1'b0}}; rB <= {WIDTH{1'b0}}; mult <= {2*WIDTH{1'b0}}; accum <= {2*WIDTH{1'b0}}; endelse begin rA <= A; rB <= B; mult <= rA * rB; accum <= accum + mult; end end assign RES = accum;

endmodule

RAM の HDL コーデ ィ ング手法Vivado 合成では、 さ まざ まな RAM のコーデ ィ ング ス タ イルを解釈し、 分散 RAM またはブラ ッ ク RAM にマ ッ プで き ます。 これによ り 、 次が可能にな り ます。

• 手動で RAM プ リ ミ テ ィ ブを イ ンス タ ンシエー ト する必要な し

• 時間を短縮

• HDL ソース コード を移行および拡張しやすい

コード 例は、 次のサイ ト から ダウ ン ロード でき ます。

http://japan.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip

合成 japan.xilinx.com 75UG901 (v2013.1) 2013 年 4 月 10 日

Page 76: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

分散 RAM と専用ブロ ッ ク RAM 間の選択

データは、 両方のタ イプの RAM に同期に書き込まれます。 分散 RAM と ブロ ッ ク RAM の主な違いは、 RAM からの データの読み出し方法にあ り ます。 次の表を参照し て く だ さい。

分散 RAM または専用ブロ ッ ク RAM のどち ら を使用するかは、 次の要素によ り ます。

• HDL ソース コード で記述し た RAM の特性

• ram_style 属性を使用し て特定のイ ンプ リ メ ンテーシ ョ ン ス タ イルを指定し たかど う か。 詳細は、 付録 A の 「RAM_STYLE」 を参照し て く ださ い。

• 使用可能なブロ ッ ク RAM リ ソース

メ モ リの推論

メ モ リ の推論機能には、 次の ものが含まれます。

• 任意のサイ ズおよびデータ幅をサポー ト 。メ モ リ 記述は 1 つまたは複数の RAM プ リ ミ テ ィ ブにマ ッ プされます。

• シングル ポー ト 、 シンプル デュ アル ポー ト 、 完全なデュ アル ポー ト

• 大 2 つの書き込みポー ト

• 複数の読み出しポー ト

記述されている書き込みポー ト が 1 つのみの場合、 Vivado 合成では書き込みア ド レ ス と は異なる ア ド レ スの RAM の 内容にア ク セスする読み出しポー ト が複数あ る RAM 記述を認識でき ます。

• 書き込みイネーブル

• RAM イ ネーブル (ブロ ッ ク RAM)

• データ出力 リ セ ッ ト (ブロ ッ ク RAM)

• オプシ ョ ンの出力レジス タ (ブロ ッ ク RAM)

• バイ ト 幅書き込みイネーブル (ブロ ッ ク RAM)

• 各 RAM ポー ト は、そのク ロ ッ ク、ポー ト イ ネーブル、書き込みイネーブル、データ出力 リ セ ッ ト で制御でき ます。

• 初期内容の指定

• Vivado 合成では、 記述されているデータ幅に対応する ため、 パ リ テ ィ ビ ッ ト を通常のデータ ビ ッ ト と し て使用 でき ます。

注記 : パ リ テ ィ ビ ッ ト の詳細は、 ターゲ ッ ト デバイ スのユーザー ガ イ ド を参照し て く ださい。

表 C-1 : 分散 RAM と専用ブロ ッ ク RAM の違い

操作 分散 RAM 専用ブロ ッ ク RAM

書き込み 同期 同期

読み出し 非同期 同期

合成 japan.xilinx.com 76UG901 (v2013.1) 2013 年 4 月 10 日

Page 77: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

RAM の HDL コー ド記述のガイ ド ラ イ ン

RAM の HDL コード記述のガ イ ド ラ イ ンには、 次が含まれます。

• ブロ ッ ク RAM の読み出し /書き込みの同期モード

• 分散 RAM の例

• シングル ポー ト RAM のコード例

° Read-First (先に読み出し ) モード

° Write-First (先に書き込み) モード

° No-Change (変化な し ) モード

• シンプル デュ アル ポー ト RAM のコード例

° シングル ク ロ ッ ク

° デュ アル ク ロ ッ ク

• 完全なデュ アル ポー ト RAM のコード例

° シングル ク ロ ッ ク

° デュ アル ク ロ ッ ク

• バイ ト 幅書き込みイネーブルのコード例

ブロ ッ ク RAM の読み出し/書き込みの同期モー ド

ブロ ッ ク RAM リ ソースは、読み出し /書き込みポー ト で次の同期モード を提供する よ う コ ンフ ィ ギュ レーシ ョ ンでき ます。

• Read-First (先に読み出し ) : 新しい内容が読み込まれる前に、 既存の内容が読み出されます。

• Write-First (先に書き込み) : 新しい内容がすぐに読み出せる よ う にな り ます。 Read-Through と も呼ばれます。

• No-Change (変化な し ) : 新しい内容が RAM に読み込まれる間、 データ出力は変化し ません。

Vivado 合成では、 これらすべての同期モード の推論がサポー ト されます。 RAM のポー ト ご と に、 異なる同期モード を記述でき ます。

合成 japan.xilinx.com 77UG901 (v2013.1) 2013 年 4 月 10 日

Page 78: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

分散 RAM の例

次に、 分散 RAM の VHDL および Verilog コード例を示し ます。

非同期読み出し付きシングル ポー ト RAM の VHDL コー ド例

--File: HDL_Coding_Techniques/rams/rams_04.v

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rams_04 is port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(5 downto 0); di : in std_logic_vector(15 downto 0); do : out std_logic_vector(15 downto 0)); end rams_04; architecture syn of rams_04 is type ram_type is array (63 downto 0) of std_logic_vector (15 downto 0); signal RAM : ram_type; begin process (clk) begin if (clk'event and clk = '1') then if (we = '1') then RAM(conv_integer(a)) <= di; end if; end if; end process; do <= RAM(conv_integer(a)); end syn;

非同期読み出し付きデュ アル ポー ト RAM の Verilog コー ド例

// Dual-Port RAM with Asynchronous Read (Distributed RAM)// module v_rams_09 (clk, we, a, dpra, di, spo, dpo); input clk; input we; input [5:0] a; input [5:0] dpra; input [15:0] di; output [15:0] spo; output [15:0] dpo; reg [15:0] ram [63:0];

always @(posedge clk) begin if (we) ram[a] <= di; end assign spo = ram[a]; assign dpo = ram[dpra]; endmodule

合成 japan.xilinx.com 78UG901 (v2013.1) 2013 年 4 月 10 日

Page 79: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

Read-First モー ドのシングル ポー ト ブロ ッ ク RAM の VHDL コー ド例

-- http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- Single-Port Block RAM Read-First Mode-- File: HDL_Coding_Techniques/rams/rams_04.vhd

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rams_01 is port (clk : in std_logic; we : in std_logic; en : in std_logic; addr : in std_logic_vector(9 downto 0);di : in std_logic_vector(15 downto 0);do : out std_logic_vector(15 downto 0));end rams_01; architecture syn of rams_01 istype ram_type is array (1023 downto 0) of std_logic_vector (15 downto 0);signal RAM: ram_type;begin process (clk)beginif clk'event and clk = '1' then if en = '1' then if we = '1' then RAM(conv_integer(addr)) <= di; end if; do <= RAM(conv_integer(addr)) ; end if;end if;end process; end syn;

合成 japan.xilinx.com 79UG901 (v2013.1) 2013 年 4 月 10 日

Page 80: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

Read-First モー ドのシングル ポー ト ブロ ッ ク RAM の Verilog コー ド 例

// http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip// Single-Port Block RAM Read-First Mode// Download: // File: HDL_Coding_Techniques/rams/rams_01.v

module v_rams_01 (clk, en, we, addr, di, do); input clk; input we; input en; input [9:0] addr; input [15:0] di; output [15:0] do; reg [15:0] RAM [1023:0]; reg [15:0] do;

always @(posedge clk) begin if (en) begin if (we) RAM[addr]<=di; do <= RAM[addr]; end end endmodule

Write-First モー ド のシングル ポー ト ブロ ッ ク RAM の VHDL コー ド例

-- http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- File: HDL_Coding_Techniques/rams/rams_02a.vhd-- Single-Port Block RAM Write-First Mode (recommended template)----library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rams_02a is port (clk : in std_logic; we : in std_logic; en : in std_logic; addr : in std_logic_vector(9 downto 0); di : in std_logic_vector(15 downto 0); do : out std_logic_vector(15 downto 0)); end rams_02a; architecture syn of rams_02a is type ram_type is array (1023 downto 0) of std_logic_vector (15 downto 0); signal RAM : ram_type; begin process (clk) begin if clk'event and clk = '1' then if en = '1' then

合成 japan.xilinx.com 80UG901 (v2013.1) 2013 年 4 月 10 日

Page 81: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

if we = '1' then RAM(conv_integer(addr)) <= di; do <= di; else do <= RAM( conv_integer(addr)); end if; end if; end if; end process; end syn;

Write-First モー ド のシングル ポー ト ブロ ッ ク RAM の Verilog コー ド例

// http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip// Single-Port Block RAM Write-First Mode (recommended template)//File: HDL_Coding_Techniques/rams/rams_02a.v//module v_rams_02a (clk, we, en, addr, di, do); input clk; input we; input en; input [9:0] addr; input [15:0] di; output [15:0] do; reg [15:0] RAM [1023:0]; reg [15:0] do;

always @(posedge clk) begin if (en) begin if (we) begin RAM[addr] <= di; do <= di; end else do <= RAM[addr]; end end endmodule

No-Change モー ドのシングル ポー ト ブロ ッ ク RAM の VHDL コー ド例

-- Single-Port Block RAM No-Change Mode-- File: HDL_Coding_Techniques/rams/rams_03.vhd

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rams_03 is port (clk : in std_logic; we : in std_logic; en : in std_logic; addr : in std_logic_vector(9 downto 0); di : in std_logic_vector(15 downto 0);

合成 japan.xilinx.com 81UG901 (v2013.1) 2013 年 4 月 10 日

Page 82: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

do : out std_logic_vector(15 downto 0)); end rams_03; architecture syn of rams_03 is type ram_type is array (1023 downto 0) of std_logic_vector (15 downto 0); signal RAM : ram_type; begin process (clk) begin if clk'event and clk = '1' then if en = '1' then if we = '1' then RAM(conv_integer(addr)) <= di; else do <= RAM( conv_integer(addr)); end if; end if; end if; end process; end syn;

No-Change モー ドのシングル ポー ト ブロ ッ ク RAM の Verilog コー ド例

// Single-Port Block RAM No-Change Modemodule v_rams_03 (clk, we, en, addr, di, do); input clk; input we; input en; input [9:0] addr; input [15:0] di; output [15:0] do; reg [15:0] RAM [1023:0]; reg [15:0] do;

always @(posedge clk) begin if (en) begin if (we) RAM[addr] <= di; else do <= RAM[addr]; end end endmodule

合成 japan.xilinx.com 82UG901 (v2013.1) 2013 年 4 月 10 日

Page 83: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

2 つの書き込みポー ト があるデュ アル ポー ト ブロ ッ ク RAM の VHDL コー ド 例

-- Dual-Port Block RAM with Two Write Ports-- Correct Modelization with a Shared Variable-- File: HDL_Coding_Techniques/rams/rams_16b.vhd

library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity rams_16b is port(clka : in std_logic; clkb : in std_logic; ena : in std_logic; enb : in std_logic; wea : in std_logic; web : in std_logic;addra : in std_logic_vector(9 downto 0);addrb : in std_logic_vector(9 downto 0);dia : in std_logic_vector(15 downto 0);dib : in std_logic_vector(15 downto 0);doa : out std_logic_vector(15 downto 0);dob : out std_logic_vector(15 downto 0);end rams_16b; architecture syn of rams_16b istype ram_type is array (1023 downto 0) of std_logic_vector(15 downto 0);shared variable RAM : ram_type;begin process (CLKA)beginif CLKA'event and CLKA = '1' then if ENA = '1' then DOA <= RAM(conv_integer(ADDRA)); if WEA = '1' then RAM(conv_integer(ADDRA)) := DIA; end if; end if;end if;end process; process (CLKB)beginif CLKB'event and CLKB = '1' then if ENB = '1' then DOB <= RAM(conv_integer(ADDRB)); if WEB = '1' then RAM(conv_integer(ADDRB)) := DIB; end if; end if;end if;end process; end syn;

合成 japan.xilinx.com 83UG901 (v2013.1) 2013 年 4 月 10 日

Page 84: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

2 つの書き込みポー ト があるデュ アル ポー ト ブロ ッ ク RAM の Verilog コー ド例

// Dual-Port Block RAM with Two Write Ports// File: HDL_Coding_Techniques/rams/rams_16.v

//module v_rams_16 (clka,clkb,ena,enb,wea,web,addra,addrb,dia,dib,doa,dob); input clka,clkb,ena,enb,wea,web; input [9:0] addra,addrb; input [15:0] dia,dib; output [15:0] doa,dob; reg [15:0] ram [1023:0]; reg [15:0] doa,dob;

always @(posedge clka) begin if (ena) begin if (wea) ram[addra] <= dia; doa <= ram[addra]; end end always @(posedge clkb) begin if (enb) begin if (web) ram[addrb] <= dib; dob <= ram[addrb]; end end endmodule

リ セ ッ ト 可能なデータ出力付きブロ ッ ク RAM の VHDL コー ド 例

-- Block RAM with Resettable Data Output-- File: HDL_Coding_Techniques/rams/rams_18.vhdlibrary ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity rams_18 is port (clk : in std_logic; en : in std_logic; we : in std_logic; rst : in std_logic; addr : in std_logic_vector(9 downto 0); di : in std_logic_vector(15 downto 0); do : out std_logic_vector(15 downto 0)); end rams_18; architecture syn of rams_18 is type ram_type is array (1023 downto 0) of std_logic_vector (15 downto 0); signal ram : ram_type; begin process (clk) begin if clk'event and clk = '1' then

合成 japan.xilinx.com 84UG901 (v2013.1) 2013 年 4 月 10 日

Page 85: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

if en = '1' then -- optional enable if we = '1' then -- write enable ram(conv_integer(addr)) <= di; end if; if rst = '1' then -- optional reset do <= (others => '0'); else do <= ram(conv_integer(addr)); end if; end if; end if; end process; end syn;

リ セ ッ ト 可能なデータ出力付きブロ ッ ク RAM の Verilog コー ド 例

// Block RAM with Resettable Data Output// File: HDL_Coding_Techniques/rams/rams_18.vmodule v_rams_18 (clk, en, we, rst, addr, di, do); input clk; input en; input we; input rst; input [9:0] addr; input [15:0] di; output [15:0] do; reg [15:0] ram [1023:0]; reg [15:0] do;

always @(posedge clk) begin if (en) // optional enable begin if (we) // write enable ram[addr] <= di; if (rst) // optional reset do <= 0; else do <= ram[addr]; end end endmodule

合成 japan.xilinx.com 85UG901 (v2013.1) 2013 年 4 月 10 日

Page 86: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

オプシ ョ ンの出力レジス タ付き ブロ ッ ク RAM の VHDL コー ド例

-- Block RAM with Optional Output Registers-- File: HDL_Coding_Techniques/rams/rams_19.vhd

--library IEEE; library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity rams_19 is port (clk1, clk2 : in std_logic;we, en1, en2 : in std_logic;addr1 : in std_logic_vector(9 downto 0);addr2 : in std_logic_vector(9 downto 0);di : in std_logic_vector(15 downto 0);res1 : out std_logic_vector(15 downto 0);res2 : out std_logic_vector(15 downto 0));end rams_19; architecture beh of rams_19 istype ram_type is array (1023 downto 0) of std_logic_vector (15 downto 0);signal ram : ram_type;signal do1 : std_logic_vector(15 downto 0);signal do2 : std_logic_vector(15 downto 0);begin

process (clk1)beginif rising_edge(clk1) then if we = '1' then ram(conv_integer(addr1)) <= di; end if; do1 <= ram(conv_integer(addr1));end if;end process; process (clk2)beginif rising_edge(clk2) then do2 <= ram(conv_integer(addr2));end if;end process; process (clk1)beginif rising_edge(clk1) then if en1 = '1' then res1 <= do1; end if;end if;end process; process (clk2)beginif rising_edge(clk2) then if en2 = '1' then res2 <= do2;

合成 japan.xilinx.com 86UG901 (v2013.1) 2013 年 4 月 10 日

Page 87: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

end if;end if;end process;

end beh;

オプシ ョ ンの出力レジス タ付き ブロ ッ ク RAM の Verilog コー ド例

// Block RAM with Optional Output Registers// File: HDL_Coding_Techniques/rams/rams_19.vmodule v_rams_19 (clk1, clk2, we, en1, en2, addr1, addr2, di, res1, res2); input clk1; input clk2; input we, en1, en2; input [9:0] addr1; input [9:0] addr2; input [15:0] di; output [15:0] res1; output [15:0] res2; reg [15:0] res1; reg [15:0] res2; reg [15:0] RAM [1023:0]; reg [15:0] do1; reg [15:0] do2;

always @(posedge clk1) begin if (we == 1'b1) RAM[addr1] <= di; do1 <= RAM[addr1]; end always @(posedge clk2) begin do2 <= RAM[addr2]; end

always @(posedge clk1) begin if (en1 == 1'b1) res1 <= do1; end always @(posedge clk2) begin if (en2 == 1'b1) res2 <= do2; end endmodule

合成 japan.xilinx.com 87UG901 (v2013.1) 2013 年 4 月 10 日

Page 88: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

バイ ト 幅書き込みイネーブル (ブロ ッ ク RAM)

ザイ リ ン ク スでは、 ブロ ッ ク RAM でバイ ト 幅の書き込みイ ネーブルをサポー ト し ています。

ブロ ッ クRAM でのバイ ト 幅の書き込みイ ネーブルは、 次の目的で使用し ます。

• RAM へのデータ書き込みを高度に制御

• ア ド レ ス指定された メ モ リ の書き込み可能な 8 ビ ッ ト 部分を個別に指定

HDL モデ リ ング と推論の視点から考え る と、 こ の概念は列ベースの書き込みと し て記述するのが 適です。

• RAM は、 同じサイ ズの列の集合と考えます。

• 書き込みサイ クル中は、 これらの各列への書き込みを個別に制御し ます。

Vivado 合成の推論では、 ブロ ッ ク RAM のバイ ト 幅書き込みイネーブル機能を活用でき ます。

記述された RAM は、 次の条件を満た し ていれば、 バイ ト 書き込みイ ネーブル機能を使用し てブロ ッ ク RAM リ ソー スにイ ンプ リ メ ン ト されます。

• 書き込み列幅が同じ

• 設定可能な書き込み列幅 : 8 ビ ッ ト 、 9 ビ ッ ト 、 16 ビ ッ ト 、 18 ビ ッ ト (8 ビ ッ ト または 9 ビ ッ ト の倍数)

5 ビ ッ ト や 12 ビ ッ ト などの上記以外の書き込み列幅 (8 ビ ッ ト または 9 ビ ッ ト の倍数以外) を設定する と、各列に個別 の RAM が使用されます。

• 書き込み列数 : 任意

• サポー ト される読み出し /書き込み同期モード : Read-First、 Write-First、 No-Change

合成 japan.xilinx.com 88UG901 (v2013.1) 2013 年 4 月 10 日

Page 89: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

バイ ト 書き込みイネーブル付きシングル ポー ト ブロ ッ ク RAM の VHDL コー ド 例

次のコード 例では、ジェネ リ ッ ク と for-loop 文を使用し、必要な書き込み列数と列幅を簡単に変更可能なコ ンフ ィ ギュ レーシ ョ ンになっています。

-- Single-Port BRAM with Byte-wide Write Enable-- 2x8-bit write-- Read-First mode-- Single-process description-- Compact description of the write with a for-loop statement-- Column width and number of columns easily configurablelibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bytewrite_ram_1b is generic (SIZE : integer := 1024;ADDR_WIDTH : integer := 10;COL_WIDTH : integer := 8;NB_COL : integer := 4);

port (clk : in std_logic;we : in std_logic_vector(NB_COL-1 downto 0);addr : in std_logic_vector(ADDR_WIDTH-1 downto 0);di : in std_logic_vector(NB_COL*COL_WIDTH-1 downto 0);do : out std_logic_vector(NB_COL*COL_WIDTH-1 downto 0));

end bytewrite_ram_1b;architecture behavioral of bytewrite_ram_1b is type ram_type is array (SIZE-1 downto 0)of std_logic_vector (NB_COL*COL_WIDTH-1 downto 0);signal RAM : ram_type := (others => (others => '0'));

begin

process (clk)beginif rising_edge(clk) then do <= RAM(conv_integer(addr)); for i in 0 to NB_COL-1 loop if we(i) = '1' then RAM(conv_integer(addr))((i+1)*COL_WIDTH-1 downto i*COL_WIDTH) <= di((i+1)*COL_WIDTH-1 downto i*COL_WIDTH); end if; end loop; end if; end process; end behavioral;

合成 japan.xilinx.com 89UG901 (v2013.1) 2013 年 4 月 10 日

Page 90: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

シングル ポー ト バイ ト 書き込みイネーブルの Verilog コー ド例

次のコード 例では、 パラ メ ーターと generate-for 文を使用し ています。

//File: HDL_Coding_Techniques/rams/vivado_ram_templates_bwwe.v// Single-Port BRAM with Byte-wide Write Enable// 4x9-bit write// Read-First mode// Single-process description// Compact description of the write with a generate-for statement// Column width and number of columns easily configurablemodule v_bytewrite_ram_1b (clk, we, addr, di, do); parameter SIZE = 1024; parameter ADDR_WIDTH = 10; parameter COL_WIDTH = 8; parameter NB_COL = 4;

input clk; input [NB_COL-1:0] we; input [ADDR_WIDTH-1:0] addr; input [NB_COL*COL_WIDTH-1:0] di; output reg [NB_COL*COL_WIDTH-1:0] do; reg [NB_COL*COL_WIDTH-1:0] RAM [SIZE-1:0];

always @(posedge clk) begin do <= RAM[addr]; end generate genvar i; for (i = 0; i < NB_COL; i = i+1) begin always @(posedge clk) begin if (we[i]) RAM[addr][(i+1)*COL_WIDTH-1:i*COL_WIDTH] <= di[(i+1)*COL_WIDTH-1:i*COL_WIDTH]; end end endgenerate

合成 japan.xilinx.com 90UG901 (v2013.1) 2013 年 4 月 10 日

Page 91: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

バイ ト 幅書き込みイネーブル付きの完全なデュ アル ポー ト BRAM の Verilog コー ド例

バイ ト 幅書き込みイネーブル - Rread-First モー ド

// True-Dual-Port BRAM with Byte-wide Write Enable// Read-First mode (2 variants)// Write-First mode// No-Change mode// File: HDL_Coding_Techniques/rams/bytewrite_tdp_ram.vmodule v_bytewrite_tdp_ram_readfirst #(

//---------------------------------------------------------------parameter NUM_COL = 4,parameter COL_WIDTH = 8,parameter ADDR_WIDTH = 10, // Addr Width in bits : //2**ADDR_WIDTH = RAM Depthparameter DATA_WIDTH = NUM_COL*COL_WIDTH // Data Width in bits//-------------------------------------------------------------- ) (input clkA,input enaA, input [NUM_COL-1:0] weA,input [ADDR_WIDTH-1:0] addrA,input [DATA_WIDTH-1:0] dinA,output reg [DATA_WIDTH-1:0] doutA,

input clkB,input enaB,input [NUM_COL-1:0] weB,input [ADDR_WIDTH-1:0] addrB,input [DATA_WIDTH-1:0] dinB,output reg [DATA_WIDTH-1:0] doutB);

// CORE_MEMORYreg [DATA_WIDTH-1:0] ram_block [(2**ADDR_WIDTH)-1:0];

integer i;// PORT-A Operationalways @ (posedge clkA) beginif(enaA) beginfor(i=0;i<NUM_COL;i=i+1) beginif(weA[i]) beginram_block[addrA][i*COL_WIDTH +:COL_WIDTH] <= dinA[i*COL_WIDTH +:COL_WIDTH];

endenddoutA <= ram_block[addrA];

endend

// Port-B Operation:always @ (posedge clkB) beginif(enaB) beginfor(i=0;i<NUM_COL;i=i+1) beginif(weB[i]) begin

合成 japan.xilinx.com 91UG901 (v2013.1) 2013 年 4 月 10 日

Page 92: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

ram_block[addrB][i*COL_WIDTH +:COL_WIDTH] <= dinB[i*COL_WIDTH +:COL_WIDTH];end

end

doutB <= ram_block[addrB];end

end

endmodule // v_bytewrite_tdp_ram_readfirst

バイ ト 幅書き込みイネーブル - 代替 Rread-First モー ド

// ByteWide Write Enable,- Alternate READ_FIRST mode template - Vivado //recommendedmodule v_bytewrite_tdp_ram_readfirst2

#(//--------------------------------------------------------------parameter NUM_COL = 4parameter COL_WIDTH = 8,parameter ADDR_WIDTH = 10, // Addr Width in bits :2**ADDR_WIDTH = RAM Depthparameter DATA_WIDTH = NUM_COL*COL_WIDTH // Data Width in bits//--------------------------------------------------------------) (

input clkA,input enaA, input [NUM_COL-1:0] weA,input [ADDR_WIDTH-1:0] addrA,input [DATA_WIDTH-1:0] dinA,output reg [DATA_WIDTH-1:0] doutA,

input clkB,input enaB,input [NUM_COL-1:0] weB,input [ADDR_WIDTH-1:0] addrB,input [DATA_WIDTH-1:0] dinB,output reg [DATA_WIDTH-1:0] doutB

);

// CORE_MEMORY reg [DATA_WIDTH-1:0] ram_block [(2**ADDR_WIDTH)-1:0];

// PORT-A Operationgenerategenvar i;for(i=0;i<NUM_COL;i=i+1) beginalways @ (posedge clkA) beginif(enaA) beginif(weA[i]) beginram_block[addrA][i*COL_WIDTH +:COL_WIDTH] <= dinA[i*COL_WIDTH +:COL_WIDTH];

endend

endendendgenerate

always @ (posedge clkA) beginif(enaA) begindoutA <= ram_block[addrA];

合成 japan.xilinx.com 92UG901 (v2013.1) 2013 年 4 月 10 日

Page 93: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

endend

// Port-B Operation:generatefor(i=0;i<NUM_COL;i=i+1) beginalways @ (posedge clkB) beginif(enaB) beginif(weB[i]) beginram_block[addrB][i*COL_WIDTH +:COL_WIDTH] <= dinB[i*COL_WIDTH +:COL_WIDTH];

endend

endendendgenerate

always @ (posedge clkB) beginif(enaB) begindoutB <= ram_block[addrB];

endendendmodule // v_bytewrite_tdp_ram_readfirst2

バイ ト 幅書き込みイネーブル - Write-First モー ド

// ByteWide Write Enable, - WRITE_FIRST mode template - Vivado recommendedmodule v_bytewrite_tdp_ram_writefirst#(//--------------------------------------------------------------parameter NUM_COL = 4,parameter COL_WIDTH = 8,parameter ADDR_WIDTH = 10, // Addr Width in bits:2**ADDR_WIDTH= RAM Depthparameter DATA_WIDTH = NUM_COL*COL_WIDTH // Data Width in bits//-------------------------------------------------------------------------) (

input clkA,input enaA, input [NUM_COL-1:0] weA,input [ADDR_WIDTH-1:0] addrA,input [DATA_WIDTH-1:0] dinA,output reg [DATA_WIDTH-1:0] doutA,

input clkB,input enaB,input [NUM_COL-1:0] weB,input [ADDR_WIDTH-1:0] addrB,input [DATA_WIDTH-1:0] dinB,output reg [DATA_WIDTH-1:0] doutB

);

// CORE_MEMORYreg [DATA_WIDTH-1:0] ram_block [(2**ADDR_WIDTH)-1:0];// PORT-A Operation:generategenvar i;for(i=0;i<NUM_COL;i=i+1) beginalways @ (posedge clkA) beginif(enaA) beginif(weA[i]) begin

合成 japan.xilinx.com 93UG901 (v2013.1) 2013 年 4 月 10 日

Page 94: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

ram_block[addrA][i*COL_WIDTH +:COL_WIDTH] <= dinA[i*COL_WIDTH +:COL_WIDTH];doutA[i*COL_WIDTH +:COL_WIDTH] <= dinA[i*COL_WIDTH +:COL_WIDTH] ;

end else begindoutA[i*COL_WIDTH +:COL_WIDTH] <= ram_block[addrA][i*COL_WIDTH +: COL_WIDTH] ;

endend

endendendgenerate

Port-B Operation// Port-B Operation:generatefor(i=0;i<NUM_COL;i=i+1) beginalways @ (posedge clkB) beginif(enaB) beginif(weB[i]) beginram_block[addrB][i*COL_WIDTH +:COL_WIDTH] <= dinB[i*COL_WIDTH

: COL_WIDTH];doutB[i*COL_WIDTH +:COL_WIDTH] <= dinB[i*COL_WIDTH +:

COL_WIDTH] ;end else begin doutB[i*COL_WIDTH +:COL_WIDTH] <= ram_block[addrB][i*COL_WIDTH +:COL_WIDTH] ;

endend

endendendgenerate

endmodule // v_bytewrite_tdp_ram_writefirst

合成 japan.xilinx.com 94UG901 (v2013.1) 2013 年 4 月 10 日

Page 95: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

バイ ト 幅書き込みイネーブル - No-Change モー ド

// ByteWide Write Enable, - NO_CHANGE mode template - Vivado recommendedmodule v_bytewrite_tdp_ram_nochange #(//-------------------------------------------------------------parameter NUM_COL = 4,parameter COL_WIDTH = 8,parameter ADDR_WIDTH = 10, // Addr Width in bits :2**ADDR_WIDTH = RAM Depthparameter DATA_WIDTH = NUM_COL*COL_WIDTH // Data Width in bits //--------------------------------------------------------------- ) (

input clkA,input enaA, input [NUM_COL-1:0] weA,input [ADDR_WIDTH-1:0] addrA,input [DATA_WIDTH-1:0] dinA,output reg [DATA_WIDTH-1:0] doutA,

input clkB,input enaB,input [NUM_COL-1:0] weB,input [ADDR_WIDTH-1:0] addrB,input [DATA_WIDTH-1:0] dinB,output reg [DATA_WIDTH-1:0] doutB

);

// CORE_MEMORY reg [DATA_WIDTH-1:0] ram_block [(2**ADDR_WIDTH)-1:0];

// PORT-A Operationgenerategenvar i;for(i=0;i<NUM_COL;i=i+1) beginalways @ (posedge clkA) beginif(enaA) beginif(weA[i]) beginram_block[addrA][i*COL_WIDTH +:COL_WIDTH] <= dinA[i*COL_WIDTH +: COL_WIDTH];

endend

endendendgenerate

always @ (posedge clkA) beginif(enaA) beginif (~|weA)doutA <= ram_block[addrA];

endend

// Port-B Operation:generatefor(i=0;i<NUM_COL;i=i+1) beginalways @ (posedge clkB) beginif(enaB) begin

合成 japan.xilinx.com 95UG901 (v2013.1) 2013 年 4 月 10 日

Page 96: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

if(weB[i]) beginram_block[addrB][i*COL_WIDTH +:COL_WIDTH] <= dinB[i*COL_WIDTH +:COL_WIDTH];

endend

endendendgenerate

always @ (posedge clkB) beginif(enaB) beginif (~|weB)doutB <= ram_block[addrB];

endendendmodule // v_bytewrite_tdp_ram_nochange

RAM の初期内容

RAM は、 次の方法で初期化でき ます。

• 「HDL ソース コード で RAM の初期内容を指定」

• 「外部データ フ ァ イルで RAM の初期内容を指定」

HDL ソース コー ド で RAM の初期内容を指定

信号のデフ ォル ト 値の メ カニズムを使用し て、 RAM の初期内容を HDL ソース コード で直接記述し ます。

VHDL コー ド例

type ram_type is array (0 to 31) of std_logic_vector(19 downto 0);signal RAM : ram_type :=(X"0200A", X"00300", X"08101", X"04000", X"08601", X"0233A", X"00300", X"08602", X"02310", X"0203B", X"08300", X"04002", X"08201", X"00500", X"04001", X"02500", X"00340", X"00241", X"04002", X"08300", X"08201", X"00500", X"08101", X"00602", X"04003", X"0241E", X"00301", X"00102", X"02122", X"02021", X"0030D", X"08201");

すべてのビ ッ ト 位置を同じ値に初期化する場合

type ram_type is array (0 to 127) of std_logic_vector (15 downto 0);signal RAM : ram_type := (others => (others => '0'));

Verilog コー ド例

すべてのア ド レ ス指定可能なワード を同じ値に初期化する場合

reg [DATA_WIDTH-1:0] ram [DEPTH-1:0];

integer i;initial for (i=0; i<DEPTH; i=i+1) ram[i] = 0;end

合成 japan.xilinx.com 96UG901 (v2013.1) 2013 年 4 月 10 日

Page 97: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

外部データ フ ァ イルで RAM の初期内容を指定

HDL ソース コード でフ ァ イルの読み出し関数を使用して、外部データ フ ァ イルから RAM の初期内容を読み込みます。

• 外部データ フ ァ イルは ASCII 形式のテキス ト フ ァ イルで、 フ ァ イル名は任意です。

• 外部データ フ ァ イルの各行に、 RAM のア ド レ ス位置の初期内容を記述し ます。

• 外部データ フ ァ イルの行数は、 RAM 配列の行数と同じにする必要があ り ます。 行数が足 り ない場合、 メ ッ セー ジが表示されます。

• 行に対応する ア ド レ ス指定可能な位置は、 RAM を記述する信号の主な範囲の方向で定義されます。

• RAM の内容は、 2 進数または 16 進数で記述でき ます。 2 進数と 16 進数を混ぜて使用する こ と はでき ません。

• 外部データ フ ァ イルには、 コ メ ン ト のよ う なその他の内容を含める こ と はでき ません。

• 次の外部データ フ ァ イルは、 8 X 32 ビ ッ ト RAM を 2 進数値で初期化し ています。

0000111100001111000011110000111101001010001000001100000010000100000000000011111000000000010000011111110101000001110001000010010000001111000011110000111100001111010010100010000011000000100001000000000000111110000000000100000111111101010000011100010000100100

VHDL コー ド例

データ を次のよ う に読み込みます。

type RamType is array(0 to 7) of bit_vector(31 downto 0);

impure function InitRamFromFile (RamFileName : in string) return RamType isFILE RamFile : text is in RamFileName;variable RamFileLine : line;variable RAM :RamType;beginfor I in RamType'range loopreadline (RamFile, RamFileLine);read (RamFileLine, RAM(I));end loop;return RAM;end function;

signal RAM : RamType := InitRamFromFile("rams_20c.data");

Verilog コー ド例

2 進数データ を読み込むには $readmemb、 16 進数データ を読み込むには $readmemh を使用し ます。

reg [31:0] ram [0:63];

initial begin$readmemb("rams_20c.data", ram, 0, 63);end

合成 japan.xilinx.com 97UG901 (v2013.1) 2013 年 4 月 10 日

Page 98: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

ブロ ッ ク RAM の初期化の VHDL コー ド例

---- Initializing Block RAM (Single-Port Block RAM)-- http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- File: HDL_Coding_Techniques/rams/rams_20a.vhd

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity rams_20a is port (clk : in std_logic; we : in stad_logic; addr : in std_logic_vector(5 downto 0); di : in std_logic_vector(19 downto 0); do : out std_logic_vector(19 downto 0)); end rams_20a; architecture syn of rams_20a is type ram_type is array (63 downto 0) of std_logic_vector (19 downto 0); signal RAM : ram_type:= (X"0200A", X"00300", X"08101", X"04000", X"08601", X"0233A", X"00300", X"08602", X"02310", X"0203B", X"08300", X"04002", X"08201", X"00500", X"04001", X"02500", X"00340", X"00241", X"04002", X"08300", X"08201", X"00500", X"08101", X"00602", X"04003", X"0241E", X"00301", X"00102", X"02122", X"02021", X"00301", X"00102", X"02222", X"04001", X"00342", X"0232B", X"00900", X"00302", X"00102", X"04002", X"00900", X"08201", X"02023", X"00303", X"02433", X"00301", X"04004", X"00301", X"00102", X"02137", X"02036", X"00301", X"00102", X"02237", X"04004", X"00304", X"04040", X"02500", X"02500", X"02500", X"0030D", X"02341", X"08201", X"0400D"); begin process (clk) begin if rising_edge(clk) then if we = '1' then RAM(conv_integer(addr)) <= di; end if; do <= RAM(conv_integer(addr)); end if; end process; end syn;

合成 japan.xilinx.com 98UG901 (v2013.1) 2013 年 4 月 10 日

Page 99: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

ブロ ッ ク RAM の初期化の Verilog コー ド例

//// Initializing Block RAM (Single-Port Block RAM)// http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip//File: HDL_Coding_Techniques/rams/rams_20a.v

module v_rams_20a (clk, we, addr, di, do); input clk; input we; input [5:0] addr; input [19:0] di; output [19:0] do;

reg [19:0] ram [63:0]; reg [19:0] do;

initial begin ram[63] = 20'h0200A; ram[62] = 20'h00300; ram[61] = 20'h08101; ram[60] = 20'h04000; ram[59] = 20'h08601; ram[58] = 20'h0233A; ram[57] = 20'h00300; ram[56] = 20'h08602; ram[55] = 20'h02310; ram[54] = 20'h0203B; ram[53] = 20'h08300; ram[52] = 20'h04002; ram[51] = 20'h08201; ram[50] = 20'h00500; ram[49] = 20'h04001; ram[48] = 20'h02500; ram[47] = 20'h00340; ram[46] = 20'h00241; ram[45] = 20'h04002; ram[44] = 20'h08300; ram[43] = 20'h08201; ram[42] = 20'h00500; ram[41] = 20'h08101; ram[40] = 20'h00602; ram[39] = 20'h04003; ram[38] = 20'h0241E; ram[37] = 20'h00301; ram[36] = 20'h00102; ram[35] = 20'h02122; ram[34] = 20'h02021; ram[33] = 20'h00301; ram[32] = 20'h00102; ram[31] = 20'h02222; ram[30] = 20'h04001; ram[29] = 20'h00342; ram[28] = 20'h0232B; ram[27] = 20'h00900; ram[26] = 20'h00302; ram[25] = 20'h00102; ram[24] = 20'h04002; ram[23] = 20'h00900; ram[22] = 20'h08201; ram[21] = 20'h02023; ram[20] = 20'h00303; ram[19] = 20'h02433; ram[18] = 20'h00301; ram[17] = 20'h04004; ram[16] = 20'h00301; ram[15] = 20'h00102; ram[14] = 20'h02137; ram[13] = 20'h02036; ram[12] = 20'h00301; ram[11] = 20'h00102; ram[10] = 20'h02237; ram[9] = 20'h04004; ram[8] = 20'h00304; ram[7] = 20'h04040; ram[6] = 20'h02500; ram[5] = 20'h02500; ram[4] = 20'h02500; ram[3] = 20'h0030D; ram[2] = 20'h02341; ram[1] = 20'h08201; ram[0] = 20'h0400D; end always @(posedge clk) begin if (we) ram[addr] <= di; do <= ram[addr]; end endmodule

合成 japan.xilinx.com 99UG901 (v2013.1) 2013 年 4 月 10 日

Page 100: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

外部データ フ ァ イルからのブロ ッ ク RAM の初期化の VHDL コー ド例

---- Initializing Block RAM from external data file----library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use std.textio.all;

entity rams_20c isport(clk : in std_logic;we : in std_logic;addr : in std_logic_vector(5 downto 0);din : in std_logic_vector(31 downto 0);dout : out std_logic_vector(31 downto 0));end rams_20c;

architecture syn of rams_20c is

type RamType is array(0 to 63) of bit_vector(31 downto 0);

impure function InitRamFromFile (RamFileName : in string) return RamType isFILE RamFile: text is in RamFileName;variable RamFileLine : line;variable RAM :RamType;beginfor I in RamType'range loop readline (RamFile, RamFileLine); read (RamFileLine, RAM(I));end loop;return RAM;end function;

signal RAM :RamType := InitRamFromFile("rams_20c.data");beginprocess (clk)begin if clk'event and clk = '1' then if we = '1' then RAM(conv_integer(addr)) <= to_bitvector(din); end if; dout <= to_stdlogicvector(RAM(conv_integer(addr))); end if;end process;

end syn;

合成 japan.xilinx.com 100UG901 (v2013.1) 2013 年 4 月 10 日

Page 101: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

外部データ フ ァ イルからのブロ ッ ク RAM の初期化の Verilog コー ド 例

//// Initializing Block RAM from external data file// Binary data//module v_rams_20c (clk, we, addr, din, dout); input clk; input we; input [5:0] addr; input [19:0] din; output [19:0] dout;

reg [19:0] ram [0:63]; reg [19:0] dout;

initial begin $readmemh("rams_20c.data",ram); end

always @(posedge clk) begin if (we) ram[addr] <= din; dout <= ram[addr];end endmodule

ブ ラ ッ ク ボ ッ クス

デザイ ンには、 次で生成された EDIF または NGC フ ァ イルを含める こ と ができ ます。

• 合成ツール

• 回路図テキス ト エデ ィ ター

• その他のデザイ ン入力方法

これらのモジュールをデザイ ンのほかの部分に接続するには、 イ ンス タ ンシエー ト する必要があ り ます。

HDL ソース コード でブラ ッ ク ボ ッ ク ス イ ン ス タ ンシエーシ ョ ンを使用し ます。

Vivado 合成では、 これらのブラ ッ ク ボ ッ ク ス イ ンス タ ンシエーシ ョ ンに制約を適用でき ます。

デザイ ンをブラ ッ ク ボ ッ ク スにする と、 そのデザイ ンのほかのイ ン ス タ ン ス もブラ ッ ク ボ ッ ク スにな り ます。

コード 例は、 次のサイ ト から ダウ ン ロード でき ます。 http://japan.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip

合成 japan.xilinx.com 101UG901 (v2013.1) 2013 年 4 月 10 日

Page 102: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

BLACK_BOX の Verilog 例

(* black_box *) module test(in1, in2, clk, out1);

BLACK_BOX の VHDL 例

attribute black_box : string;attribute black_box of beh : architecture is "yes";

FSM コ ンポーネン ト

コード 例は、 次のサイ ト から ダウ ン ロード でき ます。

http://japan.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip

Vivado 合成の機能

• 同期有限ステー ト マシン (FSM) コ ンポーネン ト に特定の推論機能

• 適化の目標に対応し たビル ト イ ン FSM エン コード ス ト ラ テジ

• FSM 抽出はデフ ォル ト でイ ネーブル

• FSM 抽出をデ ィ スエーブルにするには -fsm_extraction off を使用

FSM 記述

Vivado 合成では、 ムーア型と ミ ー リ ー型の両方の有限ステー ト マシン (FSM) がサポー ト されます。

FSM には、 次が含まれます。

• ステー ト レジス タ

• 次ステー ト 関数

• 出力関数

FSM の図

次に、 ミ ー リ ー型マシン と ムーア型マシンを組み込んだ FSM の図を示し ます。

X-Ref Target - Figure C-2

図 C-2 : ミ ーリー型マシン とムーア型マシンを組み込んだ FSM

合成 japan.xilinx.com 102UG901 (v2013.1) 2013 年 4 月 10 日

Page 103: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

次に、 3 つのプロセス を使用し た FSM の図を示し ます。

ステー ト レジス タ

• リ セ ッ ト または電源投入ステー ト を指定し て、 有限ステー ト マシン (FSM) を認識させます。

• ステー ト レジス タは、 特定のステー ト に対し て非同期または同期に リ セ ッ ト でき ます。

• FSM には、 非同期 リ セ ッ ト ロ ジ ッ ク よ り も同期 リ セ ッ ト ロジ ッ ク をお勧めし ます。

自動ステー ト エン コー ド

Vivado 合成では、 各 FSM に 適なエン コード方法が自動的に選択されます。

ワンホ ッ ト ステー ト エン コー ド

ワ ンホ ッ ト ステー ト エン コード には、 次のよ う な特徴があ り ます。

• 32 ステー ト までのステー ト マシンのデフ ォル ト エン コード方法です。

• 速度を 適化し た り 、 消費電力を削減する場合に適し ています。

• 各 FSM ステー ト にコード の各ビ ッ ト が割 り 当て られます。

• 各ステー ト に 1 つのフ リ ッ プフ ロ ッ プを使用し たステー ト レジス タ を イ ンプ リ メ ン ト し ます。

• 1 つのク ロ ッ ク サイ クルで 1 つのステー ト レジス タのみがアサー ト されます。

• 2 つのステー ト 間を遷移する際、 2 つのビ ッ ト のみが ト グルし ます。

グレー ステー ト エン コー ド

グレー ステー ト エン コード には、 次のよ う な特徴があ り ます。

• 連続し た 2 つのステー ト 間では、 1 ビ ッ ト しか切 り 替わ り ません。

• 分岐のない長いパス を持つコ ン ト ローラに適し ています。

• ハザード やグ リ ッ チを 小限に抑えます。

• 消費電力を 小限に抑え る ために使用でき ます。

ジ ョ ン ソ ン ステー ト エン コー ド

ジ ョ ン ソ ン ステー ト エン コード は、 グレー ステー ト エン コード と同様、分岐のない長いパス を含むステー ト マシン に適し ています。

X-Ref Target - Figure C-3

図 C-3 : 3 つのプロセスを使用し た FSM

合成 japan.xilinx.com 103UG901 (v2013.1) 2013 年 4 月 10 日

Page 104: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

シーケンシ ャル ステー ト エン コー ド

シーケンシャル ステー ト エン コード には、 次のよ う な特徴があ り ます。

• 長いパス を識別し ます。

• これらのパスのステー ト に連続する基数コード を 2 つ適用し ます。

• 次ステー ト の論理式を 小限に抑えます。

FSM の Verilog 例

// State Machine with single sequential blockmodule fsm_test(clk,reset,flag,sm_out);input clk,reset,flag;output reg sm_out;

parameter s1 = 2'b00;parameter s2 = 2'b01;parameter s3 = 2'b10;parameter s4 = 2'b11;

reg [1:0] state;

always@(posedge clk) begin if(reset) begin state <= s1; sm_out <= 1'b1; end else begin case(state) s1: if(flag)

begin state <= s2; sm_out <= 1'b1; end

else begin

state <= s3;sm_out <= 1'b0;

end

s2: begin state <= s4; sm_out <= 1'b0; end s3: begin state <= s4; sm_out <= 1'b0; end s4: begin state <= s1; sm_out <= 1'b1; end endcase end endendmodule

合成 japan.xilinx.com 104UG901 (v2013.1) 2013 年 4 月 10 日

Page 105: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

FSM の VHDL 例

-- State Machine with single sequential block

library IEEE;use IEEE.std_logic_1164.all;

entity fsm_test isport ( clk, reset, flag :IN std_logic;sm_out:OUT std_logic);end entity;

architecture behavioral of fsm_test is type state_type is (s1,s2,s3,s4); signal state : state_type ;begin

process (clk)beginif rising_edge(clk) thenif (reset ='1') thenstate <= s1;sm_out <= '1'; else

case state iswhen s1 => if flag='1' thenstate <= s2;sm_out <= '1';

else

state <= s3;sm_out <= '0'; end if;when s2 => state <= s4; sm_out <= '0';when s3 => state <= s4; sm_out <= '0';when s4 => state <= s1; sm_out <= '1';end case;end if;end if;end process;

end behavioral;

FSM のレポー ト

Vivado 合成では、 有限ス テー ト マシン (FSM) コ ンポーネン ト およびそのエン コード に関する情報が、 情報 メ ッ セー ジ と し て表示されます。 次に、 メ ッ セージの例を示し ます。

INFO: [Synth 8-802] inferred FSM for state register 'state_reg' in module 'fsm_test'INFO: [Synth 8-3354] encoded FSM with state register 'state_reg' using encoding 'sequential' in module 'fsm_test'

合成 japan.xilinx.com 105UG901 (v2013.1) 2013 年 4 月 10 日

Page 106: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

ROM の HDL コーデ ィ ング手法

読み出し専用 メ モ リ (ROM) は、 HDL 記述およびイ ンプ リ メ ンテーシ ョ ンの点ではラ ンダム ア ク セス メ モ リ (RAM) と類似し ています。 ブロ ッ ク RAM リ ソースに適切にレジス タ付きの ROM を イ ンプ リ メ ン ト するには、 rom_style 属 性を使用し ます。 詳細は、 付録 A の 「ROM_STYLE」 を参照し て く だ さい。

ROM のコー ド例

定数を使用し た ROM の VHDL コー ド例

---- Description of a ROM with a VHDL constant-- Download: http://www.xilinx.com/txpatches/pub/documentation/misc/vivado_synthesis_ug_examples.zip-- File: HDL_Coding_Techniques/rams/roms_constant.vhd--library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity roms_constant isport (clk : in std_logic;en : in std)logic;addr : in std_logic_vector(6 downto 0);data : out std_logic_vector(19 downto 0));end roms_constant;

architecture syn of roms_constant is

type rom_type is array (0 to 127) of std_logic_vector (19 downto 0);constant ROM : rom_type:= (X"0200A", X"00300", X"08101", X"04000", X"08601", X"0233A", X"00300", X"08602",X"02310", X"0203B", X"08300", X"04002", X"08201", X"00500", X"04001", X"02500",X"00340", X"00241", X"04002", X"08300", X"08201", X"00500", X"08101", X"00602",X"04003", X"0241E", X"00301", X"00102", X"02122", X"02021", X"00301", X"00102",X"02222", X"04001", X"00342", X"0232B", X"00900", X"00302", X"00102", X"04002",X"00900", X"08201", X"02023", X"00303", X"02433", X"00301", X"04004", X"00301",X"00102", X"02137", X"02036", X"00301", X"00102", X"02237", X"04004", X"00304",X"04040", X"02500", X"02500", X"02500", X"0030D", X"02341", X"08201", X"0400D",X"0200A", X"00300", X"08101", X"04000", X"08601", X"0233A", X"00300", X"08602",X"02310", X"0203B", X"08300", X"04002", X"08201", X"00500", X"04001", X"02500",X"00340", X"00241", X"04112", X"08300", X"08201", X"00500", X"08101", X"00602",X"04003", X"0241E", X"00301", X"00102", X"02122", X"02021", X"00301", X"00102",X"02222", X"04001", X"00342", X"0232B", X"00870", X"00302", X"00102", X"04002",X"00900", X"08201", X"02023", X"00303", X"02433", X"00301", X"04004", X"00301",X"00102", X"02137", X"FF036", X"00301", X"00102", X"10237", X"04934", X"00304",X"04078", X"01110", X"02500", X"02500", X"0030D", X"02341", X"08201", X"0410D");

begin

process (clk)beginif (clk'event and clk = '1') then if (en = '1') then data <= ROM(conv_integer(addr)); end if;end if;end process;

end syn;

合成 japan.xilinx.com 106UG901 (v2013.1) 2013 年 4 月 10 日

Page 107: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

ブロ ッ ク RAM リ ソースを使用し た ROM の Verilog コー ド例

//// ROMs Using Block RAM Resources.// Verilog code for a ROM with registered output (template 1)////module v_rams_21a (clk, en, addr, data);

input clk;input en;input [50]addr;output reg [19:0] data;

always @(posedge clk) begin if(en)case(addr)6'b000000: data <= 20'h0200A; 6’b100000: data <= 20'h02222;6'b000001: data <= 20'h00300; 6'b100001: data <= 20'h04001;6'b000010: data <= 20'h08101; 6'b100010: data <= 20'h00342;6'b000011: data <= 20'h04000; 6’b100011: data <= 20'h0232B;6'b000100: data <= 20'h08601; 6'b100100: data <= 20'h00900;6'b000101: data <= 20'h0233A; 6'b100101: data <= 20'h00302;6'b000110: data <= 20'h00300; 6'b100110: data <= 20'h00102;6'b000111: data <= 20'h08602; 6'b100111: data <= 20'h04002;6'b001000: data <= 20'h02310; 6'b101000: data <= 20'h00900;6'b001001: data <= 20'h0203B; 6'b101001: data <= 20'h08201;6'b001010: data <= 20'h08300; 6'b101010: data <= 20'h02023;6'b001011: data <= 20'h04002; 6'b101011: data <= 20'h00303;6'b001100: data <= 20'h08201; 6'b101100: data <= 20'h02433;6'b001101: data <= 20'h00500; 6'b101101: data <= 20'h00301;6'b001110: data <= 20'h04001; 6'b101110: data <= 20'h04004;6'b001111: data <= 20'h02500; 6'b101111: data <= 20'h00301;6'b010000: data <= 20'h00340; 6'b110000: data <= 20'h00102;6'b010001: data <= 20'h00241; 6'b110001: data <= 20'h02137;6'b010010: data <= 20'h04002; 6'b110010: data <= 20'h02036;6'b010011: data <= 20'h08300; 6’b110011: data <= 20'h00301;6'b010100: data <= 20'h08201; 6'b110100: data <= 20'h00102;6'b010101: data <= 20'h00500; 6'b110101: data <= 20'h02237;6'b010110: data <= 20'h08101; 6'b110110: data <= 20'h04004;6'b010111: data <= 20'h00602; 6'b110111: data <= 20'h00304;6'b011000: data <= 20'h04003; 6'b111000: data <= 20'h04040;6'b011001: data <= 20'h0241E; 6'b111001: data <= 20'h02500;6'b011010: data <= 20'h00301; 6'b111010: data <= 20'h02500;6'b011011: data <= 20'h00102; 6'b111011: data <= 20'h02500;6'b011100: data <= 20'h02122; 6'b111100: data <= 20'h0030D;6'b011101: data <= 20'h02021; 6'b111101: data <= 20'h02341;6'b011110: data <= 20'h00301; 6'b111110: data <= 20'h08201;6'b011111: data <= 20'h00102; 6'b111111: data <= 20'h0400D; endcaseend

endmodule

合成 japan.xilinx.com 107UG901 (v2013.1) 2013 年 4 月 10 日

Page 108: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

RAM の HDL コーデ ィ ング手法

デュ アル ポー ト ROM の VHDL コー ド 例

---- A dual-port ROM-- Implementation on LUT or BRAM controlled with a ram_style constraint----library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity roms_dualport isport (clk: in std_logic;ena, enb : in std_logicaddra, addrb : in std_logic_vector(5 downto 0);dataa, datab : out std_logic_vector(19 downto 0));end roms_dualport;

architecture behavioral of roms_dualport is

type rom_type is array (63 downto 0) of std_logic_vector (19 downto 0);signal ROM : rom_type:= (X"0200A", X"00300", X"08101", X"04000", X"08601", X"0233A",X"00300", X"08602", X"02310", X"0203B", X"08300", X"04002",X"08201", X"00500", X"04001", X"02500", X"00340", X"00241",X"04002", X"08300", X"08201", X"00500", X"08101", X"00602",X"04003", X"0241E", X"00301", X"00102", X"02122", X"02021",X"00301", X"00102", X"02222", X"04001", X"00342", X"0232B",X"00900", X"00302", X"00102", X"04002", X"00900", X"08201",X"02023", X"00303", X"02433", X"00301", X"04004", X"00301",X"00102", X"02137", X"02036", X"00301", X"00102", X"02237",X"04004", X"00304", X"04040", X"02500", X"02500", X"02500",X"0030D", X"02341", X"08201", X"0400D");-- attribute ram_style : string;-- attribute ram_style of ROM : signal is "distributed";

begin

process (clk)beginif rising_edge(clk) then if (ena = '1') then dataa <= ROM(conv_integer(addra)); end if;end if;end process;

process (clk)beginif rising_edge(clk) then if (enb = '1') then datab <= ROM(conv_integer(addrb)); end if;end if;end process;

end behavioral;

合成 japan.xilinx.com 108UG901 (v2013.1) 2013 年 4 月 10 日

Page 109: Vivado Design Suite - Xilinx...合成 japan.xilinx.com 7 UG901 (v2013.1) 2013 年 4 月 10 日 合成の使用 合成の使用 このセクションでは、Vivado IDE を使用して

合成 japan.xilinx.com 109UG901 (v2013.1) 2013 年 4 月 10 日

付録 D

その他のリ ソース

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

http://japan.xilinx.com/support

ザイ リ ン ク ス資料で使用される用語集は、 次を参照し て く だ さい。

http://japan.xilinx.com/company/terms.htm

ソ リ ューシ ョ ン セン ターデバイ ス、 ツール、 IP のサポー ト については、 ザイ リ ン ク ス ソ リ ューシ ョ ン セン ターを参照し て く だ さい。 ト ピ ッ クには、 デザイ ン アシス タ ン ス、 ア ド バイザ リ 、 ト ラブルシュー ト ヒ ン ト などが含まれます。

Vivado 資料Vivado™ Design Suite 2013.1 の資料

http://japan.xilinx.com/support/documentation/dt_vivado2013-1.htm

1. 『Vivado Design Suite ユーザー ガイ ド : リ リ ース ノ ー ト 、 イ ン ス ト ールおよびラ イセン ス』 (UG973)

2. 『Vivado Design Suite ユーザー ガイ ド : Vivado IDE の使用』 (UG893)

3. 『Vivado Design Suite Tcl コマン ド リ フ ァ レ ンス ガ イ ド』 (UG835)

4. 『Vivado Design Suite ユーザー ガイ ド : Tcl ス ク リ プ ト 機能の使用』 (UG894)

5. 『Vivado Design Suite ユーザー ガイ ド : イ ンプ リ メ ンテーシ ョ ン』 (UG904)

6. 『Vivado Design Suite 移行手法ガ イ ド 』 (UG911)

7. 『Vivado Design Suite ユーザー ガイ ド : デザイ ン フ ローの概要』 (UG892)

8. 『Vivado Design Suite ユーザー ガイ ド : 制約の使用』 (UG903)

9. 『Vivado Design Suite ユーザー ガイ ド : IP を使用し た設計』 (UG896)