Vivado Design Suite ユーザー ガ イ ド System Generator を使用 し た モデル ベースの DSP デザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 本資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資 料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情 報につきましては、必ず最新英語版をご参照ください。 改訂履歴 次の表に、 こ の文書の改訂履歴を示 し ます。 日付 バージ ョ ン 改訂内容 2015 年 4 月 1 日 2015.1 新 し い タ イ ミ ン グ解析機能について説明 し た 「System Generator での タ イ ミ ン グ解析」 の章 を追加 Vivado IP イ ン テ グ レ ー タ ーで開発 さ れた プ ラ ッ ト フ ォ ーム フ レ ーム ワ ー ク の一部で あ る System Generator でア ク セ ラ レー タ を開発す る 方法について説明する 「System Generator での プ ラ ッ ト フ ォーム ベース のア ク セ ラ レー タ の調整」 セ ク シ ョ ン を新規に追加 System Generator で複数の AXI4-Lite イ ン タ ーフ ェ イ ス を含めて IP を作成で き る 新機能を説 明す る 「複数の AXI4-Lite イ ン タ ーフ ェ イ ス の管理」 セ ク シ ョ ン を追加 ハー ド ウ ェ ア協調シ ミ ュ レ ーシ ョ ン に ク ロ ッ ク を供給す る ための新 し い フ リ ー ラ ン ニ ン グ ク ロ ッ ク オプシ ョ ンについて説明す る 「フ リ ー ラ ン ニ ン グ ク ロ ッ ク 」 セ ク シ ョ ン を追加 バー ス ト デー タ 転送を使用 し てポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト のハー ド ウ ェ ア協調 シ ミ ュ レーシ ョ ンの速度を上げ る こ と ので き る 新機能について説明する 「ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト のハー ド ウ ェ ア協調シ ミ ュ レ ーシ ョ ン のバー ス ト デー タ 転送」 セ ク シ ョ ン を追加 「IP カ タ ロ グ フ ロ ー」 の IP カ タ ロ グ コ ンパ イ ル フ ロ ーについての説明に 2 つの設定、 [Use common repository directory] と [Use Plug-in project] の説明を追加 「波形ビ ュ ーアー と モデル間の ク ロ ス プ ロ ーブ」 に、 System Generator モデルか ら 信号を 波形ビ ュ ーアーに ク ロ ス プ ロ ーブで き る 新 し い波形ビ ュ ーアー機能についての説明を 追加 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 2 目次 第 1 章 : 概要 ザ イ リ ン ク ス DSP ブ ロ ッ ク セ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FIR フ ィ ル タ ーの生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MATLAB のサポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . シ ス テ ム統合プ ラ ッ ト フ ォーム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7 8 9 9 第 2 章 : イ ン ス ト ール ダ ウ ン ロ ー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 ザ イ リ ン ク ス イ ン ス ト ー ラ ーの使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 イ ン ス ト ール後の操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 第 3 章 : ISE から Vivado IDE へのデザイ ンの移行 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 ア ッ プグ レー ド 手法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 System Generator を使用 し たデザ イ ン フ ロ ー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 System Generator でのシ ス テ ム レベルのモデ リ ン グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 自動 コ ー ド 生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 MATLAB の FPGA への コ ンパ イ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 System Generator デザ イ ンの大型シ ス テ ムへの イ ン ポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ム と System Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 ハ イ パフ ォーマ ン ス FPGA デザ イ ンに関す る 注記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 FDATool を使用 し たデジ タ ル フ ィ ル タ ー アプ リ ケーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 複数の独立 ク ロ ッ ク のハー ド ウ ェ ア デザ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 AXI イ ン タ ーフ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 AXI4-Lite イ ン タ ーフ ェ イ ス生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 System Generator でのプ ラ ッ ト フ ォーム ベース のア ク セ ラ レー タ の調整 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 第 5 章 : System Generator での タ イ ミ ング解析 タ イ ミ ン グ解析の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . タ イ ミ ン グ解析結果か ら モデルへの ク ロ ス プ ロ ーブ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 既存の タ イ ミ ン グ解析結果へのア ク セ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . タ イ ミ ン グ違反の ト ラ ブルシ ュ ー ト に関す る 推奨事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 115 117 118 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 ハー ド ウ ェ ア ボー ド の イ ン ス ト ール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン用のモデルの コ ンパ イ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの ク ロ ッ ク . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 120 120 121 122 3 JTAG ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン用の KC705 ボー ド の イ ン ス ト ール . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンのための KC705 ボー ド の イ ン ス ト ー ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンのための VC705 ボー ド の イ ン ス ト ー ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト ブ ラ ッ ク ボ ッ ク ス の HDL の要件 と 制限 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ブ ラ ッ ク ボ ッ ク ス の コ ン フ ィ ギ ュ レーシ ョ ン M 関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ブ ラ ッ ク ボ ッ ク ス での複数の独立 ク ロ ッ ク サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . HDL 協調シ ミ ュ レーシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 138 139 153 154 第 8 章 : System Generator の コ ンパイル タ イ プ HDL ネ ッ ト リ ス ト コ ンパ イ ル タ イ プ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン コ ンパ イ ル タ イ プ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IP カ タ ロ グの コ ンパ イ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 合成済みチ ェ ッ ク ポ イ ン ト の コ ンパ イ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . カ ス タ ム コ ンパ イ ル タ ーゲ ッ ト の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 158 158 163 163 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 xilinx_compilation ベース ク ラ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 新規 コ ンパ イ ル タ ーゲ ッ ト の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ベース ク ラ ス のプ ロ パテ ィ お よ び API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . カ ス タ ム コ ンパ イ ル タ ーゲ ッ ト の作成例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 165 167 171 付録 A : System Generator の GUI ユーテ ィ リ テ ィ [Xilinx BlockAdd] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 [Xilinx Tools] → [Save as blockAdd default] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 [Xilinx BlockConnect] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 [Xilinx Tools] → [Terminate] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 [Xilinx View Signal]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 付録 B : その他のソ ースおよび法的通知 ザ イ リ ン ク ス リ ソ ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ソ リ ュ ーシ ョ ン セ ン タ ー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 参考資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ト レーニ ン グ リ ソ ース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 法的通知 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 191 191 191 192 193 4 第 1 章 概要 System Generator は、 FPGA デザ イ ン用に MathWorks モデル ベース の Simulink® デザ イ ン環境を使用で き る よ う にす る ザ イ リ ン ク ス の DSP デザ イ ン ツールです。 System Generator を使用す る のに、 ザ イ リ ン ク ス FPGA ま たは RTL デ ザ イ ン手法の使用経験は必要あ り ません。デザ イ ンは、ザ イ リ ン ク ス のブ ロ ッ ク セ ッ ト を使用 し て、DSP 用の Simulink モデ リ ン グ環境に取 り 込 ま れ ま す。 こ の後、 IP カ タ ロ グ を使用 し て、 System Generator デザ イ ン を Vivado IDE プ ロ ジ ェ ク ト に イ ン ポー ト す る こ と がで き ます。 注記 : System Generator for DSP モデルを作成 し て Vivado IDE プ ロ ジ ェ ク ト に イ ン ポー ト す る 具体的な手順について は、『Vivado Design Suite チ ュ ー ト リ アル : System Generator を使用 し たモデルベース の DSP デザ イ ン』 (UG948) を参照 し て く だ さ い。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 5 第 1 章 : 概要 ザイ リ ン ク ス DSP ブ ロ ッ ク セ ッ ト Simulink 用ザ イ リ ン ク ス DSP ブ ロ ッ ク セ ッ ト には、 90 以上の DSP 構築ブ ロ ッ ク が含まれてい ます。 こ れ ら のブ ロ ッ ク には、 加算器、 乗算器、 レ ジ ス タ な ど の よ く 使用 さ れ る DSP 構築ブ ロ ッ ク が含まれ る ほか、 フ ォ ワ ー ド エ ラ ー訂 正ブ ロ ッ ク 、 FFT、 フ ィ ル タ ー、 メ モ リ な ど の複雑な DSP 構築ブ ロ ッ ク のセ ッ ト も 含まれます。 こ れ ら のブ ロ ッ ク を 使用す る こ と で、 ザ イ リ ン ク ス IP 用 CORE Generator で選択 し たデバ イ ス に最適な結果が得 ら れ る よ う にな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 6 第 1 章 : 概要 FIR フ ィ ル タ ーの生成 System Generator には、 7 シ リ ーズお よ び UltraScale デバ イ ス の、 最適な イ ンプ リ メ ン テーシ ョ ン を作成す る ための専 用 DSP48E1 お よ び DSP48E2 ハー ド ウ ェ ア リ ソ ース を タ ーゲ ッ ト にす る FIR Compiler ブ ロ ッ ク が含まれてい ます。コ ン フ ィ ギ ュ レーシ ョ ン オプシ ョ ン を利用す る と 、 シ ン グル レー ト 、 補間、 間引 き 、 ヒ ルベル ト の イ ンプ リ メ ン テー シ ョ ン を設定す る こ と がで き ます。 fir2 の よ う な標準 MATLAB 関数、 ま たは MathWorks FDA ツールを使用す る と 、 ザ イ リ ン ク ス FIR Compiler の係数が作成で き ます。 FIR Compiler FDA ツール Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 7 第 1 章 : 概要 MATLAB のサポー ト System Generator には、 アルゴ リ ズ ム を利用 し ない MATLAB を使用可能にす る M コ ー ド ブ ロ ッ ク が含 ま れてお り 、 こ れを単純な制御操作のモデ リ ン グお よ び イ ンプ リ メ ン テーシ ョ ンに使用 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 8 第 1 章 : 概要 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン System Generator では、 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン を使用 し て シ ミ ュ レーシ ョ ン を ス ピー ド ア ッ プ さ せ る こ と がで き ます。 System Generator は、 ザ イ リ ン ク ス DSP ブ ロ ッ ク セ ッ ト に取 り 込まれたデザ イ ンに対 し 、 ハー ド ウ ェ ア シ ミ ュ レーシ ョ ン ト ー ク ン を自動的に作成 し 、 サポー ト さ れ る ハー ド ウ ェ ア プ ラ ッ ト フ ォーム で実行 し ます。 こ のハー ド ウ ェ アが残 り の Simulink シ ス テ ム と 一緒に協調シ ミ ュ レーシ ョ ン さ れ る と 、 最大で 1000 倍シ ミ ュ レーシ ョ ン パフ ォーマ ン ス が向上 し ます。 シ ス テム統合プ ラ ッ ト フ ォ ーム System Generator では、DSP FPGA デザ イ ンに対す る シ ス テ ム統合プ ラ ッ ト フ ォームが提供 さ れ、DSP シ ス テ ムの RTL、 Simulink、MATLAB お よ び C/C++ コ ン ポーネ ン ト が 1 つのシ ミ ュ レーシ ョ ンお よ び イ ンプ リ メ ン テーシ ョ ン環境で統 合で き る よ う にな っ てい ます。 ま た、 RTL を Simulink に イ ン ポー ト し 、 ModelSim ま たはザ イ リ ン ク ス Vivado シ ミ ュ レー タ を使用 し て協調シ ミ ュ レー ト で き る ブ ラ ッ ク ボ ッ ク ス ブ ロ ッ ク がサポー ト さ れ る ほか、 C/C++ ソ ース を統合 し てシ ミ ュ レーシ ョ ンで き る Vivado HLS ブ ロ ッ ク が提供 さ れてい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 9 第 2 章 イ ン ス ト ール ダウ ン ロー ド System Generator は、 Vivado® Design Suite の一部であ り 、 ザ イ リ ン ク ス ウ ェ ブ ページか ら ダ ウ ン ロ ー ド で き ます。 ザ イ リ ン ク ス ウ ェ ブ サ イ ト の System Generator for DSP ページか ら 、 System Generator ソ フ ト ウ ェ ア を購入、 登録、 ダ ウ ン ロ ー ド す る こ と がで き ます。 注記 : 特殊な環境下であれば、 System Generator の CD を送付する こ と も で き ます。 ウ ェ ブか ら ソ フ ト ウ ェ ア を ダ ウ ン ロ ー ド で き ない よ う な環境にあ る 場合は、 ザ イ リ ン ク ス の販売代理店ま でご連絡 く だ さ い。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンのサポー ト FPGA 開発ボー ド をお持ちの場合は、 Simulink シ ミ ュ レーシ ョ ン を使用 し て System Generator の FPGA ハー ド ウ ェ ア の協調シ ミ ュ レ ー シ ョ ン 機能 を 利用で き ま す。 System Generator ソ フ ト ウ ェ ア には、 Artex®-7 AC701 開発ボー ド 、 Kintex®-7 KC705 開発ボー ド 、 Virtex®-7 VC707 開発ボー ド 、 Zynq®-7000 シ リ ーズ ZC702 お よ び ZC706 開発ボー ド の サポー ト が含ま れ ます。 System Generator ボー ド サポー ト パ ッ ケージは、 ザ イ リ ン ク ス ウ ェ ブ サ イ ト のボー ド お よ びキ ッ ト ページか ら ダ ウ ン ロ ー ド で き ます。 サポー ト さ れない UNC パス System Generator で は、 UNC (Universal Naming Convention) の パ ス は サ ポ ー ト さ れ て い ま せ ん。 た と え ば、 System Generator では、 最初にその ド ラ イ ブにマ ッ プ し ておかない と 、 共有ネ ッ ト ワ ー ク ド ラ イ ブにあ る デザ イ ン で作業す る こ と はで き ません。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 10 第 2 章 : イ ン ス ト ール ザイ リ ン ク ス イ ン ス ト ー ラ ーの使用 System Generator for DSP は、 Vivado® Design Suite の一部で、 ザ イ リ ン ク ス デザ イ ン ツールの イ ン ス ト ー ラ ーを使用 し て イ ン ス ト ールす る 必要があ り ます。 ザ イ リ ン ク ス デザ イ ン ツールの イ ン ス ト ー ラ ーを開始す る 前に、 MATLAB の イ ン ス タ ン ス がすべて閉 じ てい る こ と を確認 し て く だ さ い。 MATLAB のすべての イ ン ス タ ン ス を閉 じ た ら 、 イ ン ス ト ー ラ ーを開始 し て、 画面の指示に従っ て く だ さ い。 System Generator 用の MATLAB の選択 Windows でのイ ン ス ト ール こ のダ イ ア ロ グ ボ ッ ク ス では、 サポー ト さ れ る MATLAB イ ン ス ト ールを こ のバージ ョ ンの System Generator と 関連 付け る こ と がで き ます。 こ のバージ ョ ン の System Generator と 関連付けたい MATLAB イ ン ス ト ールのチ ェ ッ ク ボ ッ ク ス を オ ン に し 、 関連付 けたいザ イ リ ン ク ス デザ イ ン ツールを選択 し た ら 、 [Apply] を ク リ ッ ク し ます。 [Apply] を ク リ ッ ク す る と 、 [Status] 列が [Not Configured] か ら [Configured] に変わ り ます。 使用可能なすべての MATLAB イ ン ス ト ールが リ ス ト さ れます。 [Status] 列には、 次のいずれかの値が表示 さ れます。 [Unsupported] : こ のバージ ョ ンの MATLAB は こ のバージ ョ ンの System Generator ではサポー ト さ れません。 [Not Configured] : こ のバージ ョ ンの MATLAB は ま だ こ のバージ ョ ンの System Generator に関連付け ら れてい ません。 こ のバージ ョ ンの MATLAB を System Generator と 関連付け る には、 チ ェ ッ ク ボ ッ ク ス をオンに し て [Apply] を ク リ ッ ク し ます。 [Configured] : System Generator は こ のバージ ョ ンの MATLAB と 一緒に使用で き る よ う にな っ てい ます。 MATLAB のバージ ョ ン が リ ス ト さ れていない場合は、 [Find MATLAB] を ク リ ッ ク し て有効なバージ ョ ン を検索 し て く だ さ い。 MATLAB コ ン フ ィ ギ ュ レーシ ョ ン を変更する 場合は、 Windows メ ニ ュ ーか ら 次を ク リ ッ ク し て く だ さ い。 [ ス タ ー ト ] → [ す べ て の プ ロ グ ラ ム] → [Xilinx Design Tools] → [Vivado 2015.1] → [System Generator] → [System Generator MATLAB Configurator] MATLAB が ISE Design Suite な ど のデザ イ ン ツール用に コ ン フ ィ ギ ュ レーシ ョ ン さ れていて、Vivado な ど の別のデザ イ ン ツール用に コ ン フ ィ ギ ュ レーシ ョ ン し 直 し たい場合は、 [Configured] にな っ てい る MATLAB バージ ョ ン のボ ッ ク ス を ク リ ッ ク し 、 [Remove] を ク リ ッ ク し てか ら 、 Vivado 用に コ ン フ ィ ギ ュ レーシ ョ ン し 直 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 11 第 2 章 : イ ン ス ト ール Linux でのイ ン ス ト ール Linux で System Generator を起動す る 場合は、 <Vivado install dir>/bin にあ る sysgen と い う シ ェ ル ス ク リ プ ト で処理 さ れます。 こ の ス ク リ プ ト を起動す る 前に、PATH 環境変数に MATLAB 実行フ ァ イ ルが指定 さ れてい る こ と を確認 し て く だ さ い。 MATLAB 実行フ ァ イ ルが指定 さ れていれば、 sysgen を実行す る と 、 PATH で最初に検出 さ れた MATLAB 実行フ ァ イ ルが起動 さ れ、 System Generator がその MATLAB のセ ッ シ ョ ンに関連付け ら れます。 ま た、 sysgen シ ェ ル ス ク リ プ ト は MATLAB でサポー ト さ れ る オプシ ョ ン をすべてサポー ト し てお り 、 こ れ ら を コ マ ン ド ラ イ ン引数 と し て sysgen ス ク リ プ ト に指定す る こ と がで き ます。 イ ン ス ト ール後の操作 Linux でのイ ン ス ト ール後の操作 ザ イ リ ン ク ス イ ン ス ト ール ウ ィ ザー ド の指示に従っ た後、 「sysgen」 と 入力する と 、 System Generator が起動で き る よ う にな り ます。 こ れで、MATLAB が起動 し 、その MATLAB セ ッ シ ョ ンに System Generator がダ イ ナ ミ ッ ク に追加 さ れます。MATLAB の コ マ ン ド ウ ィ ン ド ウ の一番上には、 次の メ ッ セージが表示 さ れます。 Type xlDoc to open the Xilinx System Generator help documentation. Type demo blockset xilinx to view the demos available for Xilinx System Generator. >> ザイ リ ン ク ス HDL ラ イ ブ ラ リ の コ ンパイル ModelSim SE で使用す る ラ イ ブ ラ リ を コ ンパ イ ルする ためのザ イ リ ン ク ス ツールは、 compile_simlib と いい ます。 ザ イ リ ン ク ス HDL ラ イ ブ ラ リ を コ ン パ イ ル す る に は、 Vivado Design Suite を 起動 し 、 Vivado Tcl コ ン ソ ー ル に 「compile_simlib」 と 入力 し ます。 注記 : Vivado Tcl コ ン ソ ールに 「compile_simlib -help」 と 入力す る と 、 こ の Tcl コ マ ン ド の実行に関す る 詳細が 表示 さ れます。 こ のユーザー ガ イ ド で使用するサン プル デザイ ン 本書で説明す る サンプル デザ イ ンは、 ウ ェ ブか ら ダ ウ ン ロ ー ド で き る ZIP フ ァ イ ルに含まれてい ます。 こ の ZIP フ ァ イ ルの名前は ug897-example-files.zip で、 こ のユーザー ガ イ ド と 同 じ 箇所にあ り ます。 こ こ では、 こ のサンプル デザ イ ンが C:/ug897-example-files デ ィ レ ク ト リ にダ ウ ン ロ ー ド さ れてい る も の と し て説明 し ます。 System Generator キ ャ ッ シ ュの管理 System Generator では、 デザ イ ン プ ロ セ ス を繰 り 返 し 実行す る 場合に時間を短縮す る ため、 デ ィ ス ク キ ャ ッ シ ュ が使 用 さ れます。 シ ミ ュ レーシ ョ ンお よ び生成に関連する フ ァ イ ルに タ グ を付けて保存 し 、 シ ミ ュ レーシ ョ ン ま たは生成 を次に実行す る と き に、 こ れ ら の フ ァ イ ルを再生成する のではな く 、 キ ャ ッ シ ュ にあ る フ ァ イ ルを呼び出す こ と に よ り 、 処理時間を短縮 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 12 第 3 章 ISE から Vivado IDE へのデザイ ンの移行 概要 System Generator for DSP には、 前に ISE System Generator 環境で作成 し たデザ イ ン を Vivado 統合設計環境 (IDE) と 互 換性のあ る デザ イ ンに移行す る ためのア ッ プグ レー ド モデル機能が含まれます。 移行要件は次の と お り です。 • ISE Design Suite デザ イ ン ブ ロ ッ ク に含まれ る デザ イ ンは、 ISE 版の System Generator for DSP の最新バージ ョ ン にア ッ プグ レー ド す る 必要あ り • Vivado IDE と 互換性のない ISE Design Suite デザ イ ン ブ ロ ッ ク は削除す る か、 置換す る 必要あ り ア ッ プグ レー ド 手法 推奨 さ れ る 移行手法は、 (1) ISE 環境を使用 し て移行す る モデルを準備、 (2) Vivado 統合設計環境 (IDE) を使用 し て移 行を完了、 です。 ISE 環境か ら のア ッ プグ レー ド フ ロー ISE 環境でモデルを準備す る 手順は、 次の と お り です。 1. すべてのブ ロ ッ ク を最新版の ISE の System Generator に含まれ る 最新バージ ョ ンにア ッ プグ レー ド し ます。 た と えば、 De-interleaver 7.0 を De-interleaver 7.1 にア ッ プグ レー ド し ます。 2. 非 AXI ブ ロ ッ ク を手動で AXI ブ ロ ッ ク に置換 し ます。 た と えば、 CIC Compiler 2.0 (AXI イ ン タ ーフ ェ イ ス では ない) を CIC Compiler 3.0 (AXI イ ン タ ーフ ェ イ ス) に手動で置 き 換え ます。 3. Vivado IDE と 互換性のない残 り のブ ロ ッ ク をすべて削除 し ます。 た と えば、 ChipScope ブ ロ ッ ク を削除 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 13 第 3 章 : ISE から Vivado IDE へのデザイ ンの移行 手順 1 : ISE System Generator に含まれる最新バージ ョ ンにブ ロ ッ ク を ア ッ プグ レー ド 1. 最新の ISE System Generator リ リ ース で System Generator モデルを開 き ます。 次の表は、 複数のバージ ョ ンがあ る 最新のブ ロ ッ ク を リ ス ト し てい ます。 ブ ロ ッ ク名 ISE の最新バージ ョ ン DSP48 Macro DSP48 Macro 2.1 FIR Compiler 6.2 FIR Compiler 6.3 Interleaver/De-Interleaver 7.0 Interleaver/De-Interleaver 7.1 2. System Generator ト ー ク ン を ダブル ク リ ッ ク し 、 次の図に示す [Model upgrade] ボ タ ン を ク リ ッ ク し ます。 3. 次の図に示す よ う な生成 さ れた ス テー タ ス レ ポー ト の情報を確認 し ます。 • こ の場合、 こ のモデルに含まれ る 2 つのブ ロ ッ ク がア ッ プグ レー ド 可能です。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 14 第 3 章 : ISE から Vivado IDE へのデザイ ンの移行 • Interleaver/De-interleaver 7.0 ブ ロ ッ ク には、 完全な置換サポー ト が含まれます。 [Perform Upgrade] 列で [Upgrade] を ク リ ッ ク す る と 、 そのブ ロ ッ ク がア ッ プグ レー ド さ れます。 • こ の場合、 Complex Multiplier 3.1 ブ ロ ッ ク には完全な置換サポー ト があ り ません。 こ れは、 AXI 3.1 以外のブ ロ ッ ク か ら AXI 5.0 ブ ロ ッ ク への移行には、 手作業が必要 と な る か ら です。 [Upgrade] を ク リ ッ ク す る と 、 サブシ ス テ ムの ワー ク スペース が作成 さ れ、 こ こ で入力/出力信号を新 し い AXI ポー ト に手動で接続 し 直す こ と がで き ます。 手順 2 : ISE 環境で非 AXI ブ ロ ッ ク を AXI ブ ロ ッ ク に手動で置換 前述の よ う に、 非 AXI ブ ロ ッ ク は手動で AXI ブ ロ ッ ク にア ッ プ グ レ ー ド す る 必要が あ り ま す。 ア ッ プ グ レ ー ド ス テー タ ス レ ポー ト で [Upgrade] を ク リ ッ ク す る と 、 サブシ ス テ ム ワ ー ク スペース が作成 さ れ、 こ こ で入力/出力信号 を新 し い AXI ポー ト に手動で接続 し 直す こ と がで き ます。 次の図に示す よ う に、 サブシ ス テ ム ワー ク スペース には、 接続 さ れた古いブ ロ ッ ク と 最新の (接続 さ れていない) AXI ブ ロ ッ ク が含まれてい ます。 ア ッ プグ レー ド さ れた AXI ブ ロ ッ ク のパ ラ メ ー タ ー設定は、 古い非 AXI ブ ロ ッ ク の も の と 同等ですが、 手動で AXI ブ ロ ッ ク を非 AXI ブ ロ ッ ク と 接続 し てか ら 、 こ の非 AXI ブ ロ ッ ク を削除 し てデザ イ ン を シ ミ ュ レー ト し 、 デザ イ ン の動作が変わっ ていないか ど う か を確認す る 必要があ り ます。 ア ッ プ グ レー ド ス テー タ ス レ ポー ト か ら モデルを ア ッ プ グ レー ド し た ら 、 ア ッ プグ レ ー ド ス テー タ ス レ ポー ト の [Details] リ ン ク が利用で き る よ う にな り ます。 注記 : こ の リ ン ク は、 こ の レ ポー ト か ら ア ッ プグ レー ド を実行 し た場合にのみ使用で き る よ う にな り ます。 モデルか ら 直接ア ッ プグ レー ド し た場合は、 使用で き ません。 非 AXI ブ ロ ッ ク を ア ッ プグ レー ド する手順 1. 古いブ ロ ッ ク で 1 つま たは複数のパ ラ メ ー タ ーが MATLAB 関数ま たは変数を使用 し て定義 さ れてい る 場合、 MATLAB 変数を ア ッ プグ レー ド 前に MATLAB コ ン ソ ールで初期化 し てお く 必要があ り ます。 2. 非 AXI ブ ロ ッ ク か ら AXI ブ ロ ッ ク にア ッ プグ レー ド す る と 、 レ イ テ ン シが変わ る 可能性があ り ます。 詳細は、 関連す る LogiCORE IP 製品ガ イ ド を参照 し て く だ さ い。 シ ス テ ム設計者の方には、 制御信号を使用 し てデー タ 信 号を有効にす る こ と をお勧め し ます。 3. 古いブ ロ ッ ク のポー ト 名 と ア ッ プグ レー ド し たブ ロ ッ ク のポー ト 名が違 う 場合は、 「Port Mismatch」 の警告 メ ッ セージが表示 さ れ、 ポー ト 名に変更があ っ た こ と と 、 ア ッ プデー ト さ れたポー ト 名に関する 情報が示 さ れます。 4. かな り 古いブ ロ ッ ク の場合、 [Model upgrade] ボ タ ンが表示 さ れない こ と が まれにあ り ます。 こ の場合、 手動で最 新 AXI ブ ロ ッ ク を コ ン フ ィ ギ ュ レーシ ョ ン し て接続す る こ と をお勧め し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 15 第 3 章 : ISE から Vivado IDE へのデザイ ンの移行 非 AXI ブ ロ ッ ク から AXI ブ ロ ッ ク へのア ッ プグ レー ド する際の推奨事項 こ のセ ク シ ョ ンでは、次の非 AXI ブ ロ ッ ク を AXI ブ ロ ッ ク にア ッ プグ レー ド す る 際の推奨事項について説明 し ます。 互換性のないブ ロ ッ ク を次に リ ス ト し ます。 非 AXI ブ ロ ッ ク (ISE System Generator) 最新の AXI ブ ロ ッ ク (ISE System Generator) 関連する LogiCORE 製品ガ イ ド CIC Compiler 2.0 CIC Compiler 3.0 LogiCORE IP CIC Compiler 3.0 CORDIC4.0 CORDIC5.0 LogiCORE IP CORDIC v5.0 Complex Multiplier 3.0,3.1, 4.0 Complex Multiplier 5.0 LogiCORE IP Complex Multiplier v5.0 Convolution Encoder 6.1, 7.0 Convolution Encoder 8.0 LogiCORE IP Convolution Encoder 8.0 DDS Compiler 4.0 DDS Compiler 5.0 LogiCORE IP DDS Compiler v5.0 Divider Generator 3.0 Divider Generator 4.0 LogiCORE IP Divider Generator 4.0 FIR Compiler 5.0, 6.0, 6.1, FIR Compiler 6.3 6.2 LogiCORE IP FIR Compiler v6.3 Fast Fourier Transform 7.1 Fast Fourier Transform 8.0 LogiCORE IP Fast Fourier Transform v8.0 Interleaver/ De-Interleaver 6.0, 7.0 Interleaver/ De-Interleaver 7.1 LogiCORE IP Interleaver/De-interleaver v7.1 Reed-Soloman Decoder 7.0, 7.1 Reed-Soloman Decoder 8.0 LogiCORE IP Reed-Solomon Decoder v8.0 Reed-Soloman Encoder 7.0, 7.1 Reed-Soloman Encoder 8.0 LogiCORE IP Reed-Solomon Encoder v8.0 Viterbi Decoder 6.1, 6.2, 7.0 Viterbi Decoder 8.0 LogiCORE IP Viterbi Decoder v8.0 CIC Compiler 非 AXI ブ ロ ッ ク のポー ト のほ と ん ど は、 AXI ポー ト に直接マ ッ プで き ます。 AXI イ ン タ ーフ ェ イ ス には、 次の よ う なポー ト も 追加で含ま れます。 1. s_axis_data_tlast : こ のポー ト は、 マルチチ ャ ネルの CIC Compiler にのみ使用で き 、 定数 0 で駆動で き ます。 こ れは、 event_tlast_missing 信号 と even_tlast_unexpected 信号を生成す る 場合以外、 CIC Compiler で使用 さ れません。 2. event_tlast_missing お よ び event_tlast_unexpected : こ れ ら のポー ト は、 s_axis_data_tlast ポー ト が使用 さ れず、 定 数値で駆動 さ れ る 場合は無視で き ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 CORDIC 非 AXI ブ ロ ッ ク のポー ト のほ と ん ど は、 AXI ポー ト に直接マ ッ プで き ます。 AXI イ ン タ ーフ ェ イ ス には、 次の よ う なポー ト も 追加で含ま れます。 1. 入力 tvalid ポー ト : 定数 1 で駆動で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 16 第 3 章 : ISE から Vivado IDE へのデザイ ンの移行 2. 出力 tvalid ポー ト : こ れ ら のポー ト は、 情報がダ ウ ン ス ト リ ーム ブ ロ ッ ク で使用 さ れない場合は無視で き ます。 次に示す よ う に、 AXI イ ン タ ーフ ェ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン の一部でサポー ト さ れない非 AXI ブ ロ ッ ク の出 力ポー ト も い く つかあ り ます。 こ れ ら のポー ト は次の と お り です。 1. x_out : こ のポー ト は、 arc_tan お よ び arc_tanh 関数ではサポー ト さ れません。 こ の コ ン フ ィ ギ ュ レーシ ョ ン でサ ポー ト さ れ る のは、 phase_output ポー ト のみです。 2. y_out : こ のポー ト は、 arc_tan、 arc_tanh お よ び square_root 関数ではサポー ト さ れません。 3. phase_output : こ のポー ト は、square_root、sin_and_cos、sinh_and_cosh、お よ び rotate 関数ではサポー ト さ れません。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 Complex Multiplier 非 AXI ブ ロ ッ ク のポー ト のほ と ん ど は、 AXI ポー ト に直接マ ッ プで き ます。 AXI イ ン タ ーフ ェ イ ス には、 次の よ う なポー ト も 追加で含ま れます。 1. 入力 tvalid ポー ト : 定数 1 で駆動で き ます。 2. dout_tvalid : こ のポー ト は、 情報がダ ウ ン ス ト リ ーム ブ ロ ッ ク で使用 さ れない場合は無視で き ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 出力幅は、 古いブ ロ ッ ク と ア ッ プ グ レ ー ド さ れたブ ロ ッ ク 間で違 う こ と が あ り ま す。 詳細レ ポー ト を使用 し てパ ラ メ ー タ ー値を同 じ に し てお く こ と をお勧め し ます。非 AXI ブ ロ ッ ク の output_lsb 値が 0 よ り 大き い場合、AXI Complex Multiplier は LSB か ら MSB ま での範囲ではな く 、 output_width のみをサポー ト す る ので、 dout 信号で ス ラ イ ス ブ ロ ッ ク を使用 し て必要な結果を得ます。 Convolution Encoder 非 AXI ブ ロ ッ ク のポー ト のほ と ん ど は、 AXI ポー ト に直接マ ッ プで き ます。 AXI イ ン タ ーフ ェ イ ス には、 次の よ う な追加ポー ト も あ り ます。 1. 入力 tvalid ポー ト : nd が非 AXI ブ ロ ッ ク で イ ネーブルにな っ ていない場合、 こ のポー ト は定数 1 で駆動で き ま す。 2. 出力 tvalid ポー ト : こ れ ら のポー ト は、 情報がダ ウ ン ス ト リ ーム ブ ロ ッ ク で使用 さ れない場合は無視で き ます。 AXI イ ン タ ーフ ェ イ ス の コ ン フ ィ ギ ュ レーシ ョ ンの一部でサポー ト さ れない非 AXI 出力ポー ト も い く つかあ り ます。 こ れ ら のポー ト は次の よ う にな っ てい ます。 1. fd_in : こ のポー ト はサポー ト さ れてい ません。 AXI イ ン タ ーフ ェ イ ス は、 各ブ ロ ッ ク の開始時にパルス を必要 と し ません。 こ れを自動的に検出す る には、 s_axis_tvalid が使用 さ れます。 2. rffd : こ のポー ト はサポー ト さ れてい ません。 AXI イ ン タ ーフ ェ イ ス の入力デー タ ス ト リ ームは、 s_axis_data_tready がアサー ト さ れ る と サンプ リ ン グ さ れます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 DDS Compiler 非 AXI ブ ロ ッ ク のポー ト のほ と ん ど は、 AXI ポー ト に直接マ ッ プで き ます。 AXI イ ン タ ーフ ェ イ ス には、 次の よ う な追加ポー ト も あ り ます。 1. 入力 tvalid ポー ト : 定数 1 で駆動で き ます。 2. 出力 tvalid ポー ト : こ れ ら のポー ト は、 情報がダ ウ ン ス ト リ ーム ブ ロ ッ ク で使用 さ れない場合は無視で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 17 第 3 章 : ISE から Vivado IDE へのデザイ ンの移行 3. 入力 tlast ポー ト : 定数 0 で駆動で き ます。 こ れは、 event_tlast_missing 信号 と even_tlast_unexpected 信号を生成す る 場合以外、 DDS Compiler で使用 さ れません。 4. 出力 event 信号 : こ れ ら のポー ト は、 入力 tlast ポー ト が使用 さ れず、 定数値で駆動 さ れ る 場合は無視で き ます。 AXI イ ン タ ーフ ェ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン の一部でサポー ト さ れない、 非 AXI オプシ ョ ン出力ポー ト も い く つかあ り ます。 こ れ ら のポー ト は次の よ う にな っ てい ます。 1. addr : こ の ピ ンは AXI イ ン タ ーフ ェ イ ス ではサポー ト さ れてい ません。 同等のピ ンはあ り ませんが、 イ ン ク リ メ ン ト カ ウ ン タ ーに よ り 、 内部で置き 換え ら れます。 2. reg_select : PINC と POFF の両方が 1 つの転送で書 き 込む こ と がで き る ので、 こ の ピ ンは AXI イ ン タ ーフ ェ イ ス には不要にな っ てい ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 非 AXI の DDS Compiler にチ ャ ネル ピ ン が使用 さ れ る 場合、 同 じ 機能 を AXI イ ン タ ー フ ェ イ ス の data_tuser_chanid ポー ト を使用 し て実現す る こ と がで き ます。 こ のポー ト を イ ネーブルにす る には、 AXI DDS Compiler の GUI を開い て、 [TUSER Options] の下の [DATA Output] の値を [Chan_ID_Field] に変更 し ます。 Divider Generator 非 AXI Divider Generator のポー ト のほ と ん どは、 AXI ポー ト に直接マ ッ プで き ます。 AXI イ ン タ ーフ ェ イ ス には、 次 の よ う な追加ポー ト も あ り ます。 • 入力 tvalid ポー ト : 定数 1 で駆動で き ます。 • dout_tvalid : こ のポー ト は、 こ の情報がダ ウ ン ス ト リ ーム ブ ロ ッ ク で使用 さ れない場合は無視で き ます。 • quotient : こ のポー ト は tdata_quotient にマ ッ プで き ます。 • remainder : こ のポー ト は tdata_remainder にマ ッ プで き ます。 • fractional : こ のポー ト は tdata_fractional にマ ッ プで き ます。 • rfd : こ のポー ト は dividend_tready か divisor_tready のいずれかにマ ッ プで き ます。 こ れ ら のポー ト は、 AXI Divider Generator ブ ロ ッ ク のブ ロ ッ キ ン グ コ ン フ ィ ギ ュ レーシ ョ ンで使用で き ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 FIR Compiler 非 AXI ブ ロ ッ ク のポー ト のほ と ん ど は、 AXI ポー ト に直接マ ッ プで き ます。 AXI イ ン タ ーフ ェ イ ス には、 次の よ う な追加ポー ト も あ り ます。 • s_axis_config_tvalid : 定数 1 で駆動で き ます。 間引 き フ ィ ル タ ーの場合、 こ のポー ト は出力レー ト で駆動 さ れ る 必要があ り ます。 • s_axis_config_tlast : こ のポー ト は、 マルチチ ャ ネルのFIR Compiler にのみ使用で き 、 定数 0 で駆動で き ます。 こ れは、 event_tlast_missing 信号 と even_tlast_unexpected 信号を生成する 場合以外は、 FIR Compiler で使用 さ れませ ん。 • 出力 event 信号 : こ れ ら の信号は、 tlast が使用 さ れず、 定数値で駆動 さ れ る 場合は無視で き ます。 AXI イ ン タ ーフ ェ イ ス の コ ン フ ィ ギ ュ レーシ ョ ン の一部でサポー ト さ れない、 非 AXI オプシ ョ ン出力ポー ト も い く つかあ り ます。 こ れ ら のポー ト は次の よ う にな っ てい ます。 • chan_in : こ のポー ト はサポー ト さ れてい ません。 • coef_filter_sel : リ ロ ー ド チ ャ ネルの フ ォーマ ッ ト は、 coef_filter_sel が s_axis_reload_tdata の リ ロ ー ド パケ ッ ト の 先頭に付け ら れ る よ う に変更 さ れま し た。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 18 第 3 章 : ISE から Vivado IDE へのデザイ ンの移行 coeff_id のビヘ イ ビ アーは変更にな っ てい ます。 coeff_id は s_reload_tlast にマ ッ プで き ますが、 リ ロ ー ド パケ ッ ト の 終わ り でアサー ト さ れ る よ う にな っ てい ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 非 AXI の FIR Compiler に chan_out ポー ト が使用 さ れ る 場合、 同 じ 機能を AXI イ ン タ ーフ ェ イ ス の data_tuser_chanid ポー ト を利用 し て実現で き ます。 こ のポー ト を イ ネーブルにする には、 AXI FIR Compiler の GUI を開いて、 [TUSER] の下の [Output] の値を [Chan_ID_Field] に変更 し ます。 [Coefficient Vector] パ ラ メ ー タ ーは非 AXI フ ロ ーか ら AXI フ ロ ーに変更 さ れ、 すべての式が評価 さ れて、 実際のベ ク タ ー デー タ が戻 さ れます。 こ れに よ り 、 FDATool、 ワ ー ク スペース ま たはマ ス ク パ ラ メ ー タ ーを移動 し た り 、 間違っ て表記 し た り す る こ と な く 、 階層サブシ ス テ ム のア ッ プグ レー ド を検証 し て イ ン プ リ メ ン ト で き る よ う にな り ます。 検証 し て接続を変更 し た ら 、 こ の変数は手動で前の値に変換する こ と がで き ます (ア ッ プグ レー ド ス テー タ ス レ ポー ト の [Details] ページ を参照)。 Fast Fourier Transform 非 AXI ブ ロ ッ ク のポー ト の中には、 AXI ポー ト に直接マ ッ プで き る も のがあ り ます。 次は、 サポー ト さ れな く な っ た非 AXI ポー ト の リ ス ト です。 1. start : AXI FFT は、 s_axis_data_tvalid High でサンプル デー タ がデー タ 入力チ ャ ネルに提供 さ れ る と 自動的に開始 し ます。 2. xn_index : こ のポー ト は AXI イ ン タ ーフ ェ イ ス では さ れポー ト さ れな く な り ま し た。 3. busy : こ のポー ト は AXI イ ン タ ーフ ェ イ ス では さ れポー ト さ れな く な り ま し た。 4. edone : こ のポー ト は AXI イ ン タ ーフ ェ イ ス では さ れポー ト さ れな く な り ま し た。 5. done : こ のポー ト は AXI イ ン タ ーフ ェ イ ス では さ れポー ト さ れな く な り ま し た。 6. unload : AXI FFT は、 m_axis_data_tready がアサー ト さ れ る と 、 処理済みサンプル デー タ があればそれを自動的 にア ン ロ ー ド し 始め ます。 AXI イ ン タ ーフ ェ イ ス には、 次の よ う な追加ポー ト も あ り ます。 1. s_axis_data_tlast : こ のポー ト は、 マルチチ ャ ネル FFT にのみ使用で き 、 定数 0 で駆動で き ます。 こ れは、 event_tlast_missing 信号 と event_tlast_unexpected 信号を生成する 場合以外、 FFT で使用 さ れません。 2. event_tlast_missing お よ び event_tlast_unexpected : こ れ ら のポー ト は、 s_axis_data_tlast ポー ト が使用 さ れず、 定 数値で駆動 さ れ る 場合は無視で き ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 s_axis_data_tvalid は 1 に接続す る 必要があ り ます。 こ れに よ り 、 リ ク エ ス ト があれば常にデー タ を供給で き る 状態に あ る こ と が コ アに伝え ら れ ます。 ただ し 、 FFT は連続 ク ロ ッ ク サ イ ク ルでデー タ を常に使用で き る わけではないの で、 デー タ が FFT に供給 さ れ る ま での フ ロ ーを制御す る ために s_axis_data_tready を使用する 必要があ り ます。 Interleaver/De‐Interleaver 非 AXI ブ ロ ッ ク のポー ト のほ と ん ど は、 AXI ポー ト に直接マ ッ プで き ます。 次は、 サポー ト さ れな く な っ た非 AXI ポー ト の リ ス ト です。 • FD : FD は使用で き な く な っ てい ます。 コ アは、 次の場合にブ ロ ッ ク を開始 し ます。 ° 最初のシ ン ボルが リ セ ッ ト 後に見 ら れ る 場合 ° 最初にシ ン ボルが Rectangular モー ド のブ ロ ッ ク の終わ り の後に見 ら れ る 場合 ° 最初にシ ン ボルが Forney モー ド のブ ロ ッ ク の終わ り の後に見 ら れ る 場合。 こ れは、s_axis_data_tlast がアサー ト さ れた後、 コ ミ ュ ニ ケー タ ーが分岐 0 に到達 し た と き の こ と です。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 19 第 3 章 : ISE から Vivado IDE へのデザイ ンの移行 • FD abort : 使用で き な く な っ てい ます。 ブ ロ ッ ク を自然に終了 さ せる には、 十分なシ ン ボル デー タ が供給 さ れて い る 必要があ り ます。 ま たは、 aresetn を使用 し て コ ア を リ セ ッ ト する 必要があ り ます。 Forney モー ド では、 こ れ はブ ロ ッ ク が、 使用 さ れてい る 分岐数の整数倍でなければな ら な く な っ た こ と を意味 し ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 Reed‐Solomon Decoder 非 AXI ブ ロ ッ ク のポー ト のほ と ん ど は、 AXI ポー ト に直接マ ッ プで き ます。 次は、 サポー ト さ れな く な っ た非 AXI ポー ト です。 sync : AXI バージ ョ ンではな く な っ てい ます。 こ れを自動的に検出する には、 s_axis_tvalid が使用 さ れます。 デザ イ ン は、 適宜手動でア ッ プデー ト す る 必要があ り ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 Reed‐Solomon Encoder 非 AXI ブ ロ ッ ク のポー ト のほ と ん ど は、 AXI ポー ト に直接マ ッ プで き ます。 次は、 サポー ト さ れな く な っ た非 AXI ポー ト です。 start : AXI イ ン タ ーフ ェ イ ス ではサポー ト さ れな く な り ま し た。 こ れを自動的に検出す る には、 s_axis_tvalid が使用 さ れます。 デザ イ ンは、 適宜手動でア ッ プデー ト す る 必要があ り ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 Viterbi Decoder 非 AXI ブ ロ ッ ク のポー ト のほ と ん どは、 AXI ポー ト に直接マ ッ プで き ます。 rst ( リ セ ッ ト ) 信号の ビヘ イ ビ アーは、 非 AXI イ ン タ ーフ ェ イ ス か ら AXI イ ン タ ーフ ェ イ ス に変わ り ます。 AXI イ ン タ ーフ ェ イ ス の場合、 最低 2 サ イ ク ル間は aresetn がア ク テ ィ ブ Low にな っ てい る 必要があ り ます。 手順 3 : Vivado IDE と 互換性のない残 り のブ ロ ッ ク を削除 Vivado IDE と 完全に互換性のないブ ロ ッ ク は、 モデルか ら 削除する 必要があ り ます。 互換性のないブ ロ ッ ク を次に リ ス ト し ます。 Vivado IDE と 互換性のないブ ロ ッ ク 対処法 ChipScope System Generator 14.7 を使用 し 続け る か、 直接 Vivado IDE をデバ ッ グに使用す る Configurable Subsystem Manager Multiple Subsystem Generator 複数 ク ロ ッ ク ド メ イ ン を使用する ための Convert モデルについては、 「複数の独立 ク ロ ッ ク のハー ド ウ ェ ア デザ イ ン」 を参照 Resource Estimator 置換機能が今後の リ リ ース に含まれ る よ う にな る ま で、 こ のブ ロ ッ ク は削除す る EDK Processor こ の機能が今後の リ リ ース に含まれ る よ う にな る ま で、System Generator 14.7 を使用 し 続け る Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 20 第 3 章 : ISE から Vivado IDE へのデザイ ンの移行 Vivado IDE と 互換性のないブ ロ ッ ク 対処法 From FIFO、 To FIFO、 From Register、 To 置換機能が今後の リ リ ース に含まれ る よ う Register、 Shared Memory、 Shared Memory にな る ま で、System Generator 14.7 を使用 し Read、 Shared Memory Write 続け る PicoBlaze Instruction Display PicoBlaze Microcontroller System Generator 14.7 を使用 し 続け る VDMA Interface 5.3 置換機能が今後の リ リ ース に含まれ る よ う にな る ま で、System Generator 14.7 を使用 し 続け る WaveScope Waveform Viewer を使用する 手順 4 : ISE から Vivado IDE への移行 フ ローの完了 1. ISE-System Generator モデルに最新の 14.7 ブ ロ ッ ク のみが含まれ、 Vivado 環境 と 互換性のないブ ロ ッ ク (非 AXI ブ ロ ッ ク な ど) が削除 さ れたか ど う か を確認 し ます。 2. 準備 し た System Generator デザ イ ン を Vivado IDE で開 き ます。 3. モデル シー ト の空白部分を右 ク リ ッ ク し 、 [Tools] → [Upgrade model] を ク リ ッ ク し ます。 重要 : モデルを ア ッ プグ レー ド す る 前に、モデルの コ ンパ イ ル変数がすべて設定 さ れてい る こ と を確認 し て く だ さ い。 変数設定を InitFcn モデルに依存 し てい る 場合は、 モデル ア ッ プグ レー ド を実行する ために、 System Generator では こ のモデルを コ ンパ イ ル し ないため、 ア ッ プグ レー ド はで き ません。 4. [File] → [Save] を ク リ ッ ク し ます。 5. MATLAB でデザ イ ン を シ ミ ュ レーシ ョ ン し 直 し て、 正 し く 機能する か ど う か を確認 し ます。 6. デザ イ ン を閉 じ ます。 こ れで ISE 環境か ら Vivado IDE への移行は終了です。 複数 ク ロ ッ クの ISE デザイ ンの Vivado IDE への移行 複数 ク ロ ッ ク の ISE デザ イ ン を Vivado 環境に移行する には、 手動の操作が必要にな り ます。 次の手順に従い ます。 1. 前述の [Model upgrade] の手順に従っ た ら 、 Vivado バージ ョ ンの System Generator で準備 し たモデル フ ァ イ ルを 開 き ます。 ソ ース デザ イ ンは、 読み出 し イ ン タ ーフ ェ イ スお よ び書 き 込み イ ン タ ーフ ェ イ ス用に ク ロ ッ ク 別のサ ブシ ス テ ムに分割 さ れ る はずです。 2. Xilinx Shared-Memory ブ ロ ッ ク が削除 さ れ、入力ポー ト と 出力ポー ト が Simulink の outport と inport 接続に置 き 換 わ っ てい る か ど う か を確認 し ます。 こ れに よ り 、 ク ロ ッ ク ド メ イ ン を ま たが る ポー ト イ ン タ ーフ ェ イ ス が最上 位サブシ ス テ ムか ら 使用で き 、 接続で き る よ う にな り ます。 3. Vivado System Generator for DSP 非同期 ロ ジ ッ ク を手動で挿入 し て、 デー タ を複数の独立 し た ク ロ ッ ク ド メ イ ン を ま たが っ て転送 さ れ る よ う に し ます。 こ の方法については、 「複数の独立 ク ロ ッ ク のハー ド ウ ェ ア デザ イ ン」 を参照 し て く だ さ い。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 21 第 4 章 System Generator を使用 し たハー ド ウ ェ ア 設計 System Generator は、 FPGA ハー ド ウ ェ ア を設計す る ためのシ ス テ ム レベルのモデ リ ン グ ツールです。 Simulink が さ ま ざ ま な面で拡張 さ れてお り 、 ハー ド ウ ェ ア設計に適 し たモデ リ ン グ環境を提供 し ます。 デザ イ ンは高位記述 さ れ、 ボ タ ン を ク リ ッ ク す る だけで FPGA に コ ンパ イ ル さ れます。 ま た、 低位で基本 FPGA リ ソ ース に も ア ク セ ス で き る の で、 効率的な FPGA デザ イ ン を構築で き ます。 System Generator を使用 し たデザ イ ン フ ロー System Generator を使用 し たデザ イ ン フ ロ ーを説明 し ま す。 System Generator でのシ ス テ ム レベ ルのモデ リ ン グ 柔軟かつ高位のシ ス テ ム モデ リ ン グ環境か ら 、 デバ イ ス を特定 し たハー ド ウ ェ ア デザ イ ン を直接 イ ンプ リ メ ン ト す る System Generator の機能を説明 し ます。 自動 コ ー ド 生成 System Generator デザ イ ンの自動 コ ー ド 生成について説 明 し ます。 MATLAB の FPGA への コ ンパ イ ル MATLAB プ ロ グ ラ ム言語のサブセ ッ ト を使用 し た、 ス テー ト マシ ンお よ び演算フ ァ ン ク シ ョ ンの記述方法を 説明 し ます。 記述 し た フ ァ ン ク シ ョ ンは、 System Generator のブ ロ ッ ク に含め、 等価の HDL に自動的に コ ンパ イ ルで き ます。 System Generator デザ イ ンの大型シ ス テ ムへの イ ン ポー ト System Generator か ら VHDL ネ ッ ト リ ス ト を取 り 出 し て 合成 し 、 大型デザ イ ンに組み込む方法を説明 し ます。 ま た、 System Generator で作成 し た VHDL を シ ス テ ム全 体のシ ミ ュ レーシ ョ ン モデルに組み込む方法 も 説明 し ます。 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ム と System Generator System Generator での コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ム の使用方法を説明 し ます。 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムの定義、 ブ ロ ッ ク の削除 と 追加、 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ム を使用 し た コ ンパ イ ル結果の System Generator デザ イ ンへの イ ン ポー ト と いっ た タ ス ク を説明 し ます。 ハ イ パフ ォーマ ン ス FPGA デザ イ ンに関す る 注記 FPGA に効率的でハ イ パフ ォーマ ン ス のデザ イ ン を イ ンプ リ メ ン ト する ための、 System Generator での設計手 法を提案 し ます。 FDATool を使用 し たデジ タ ル フ ィ ル タ ー アプ リ ケーシ ョ ン FDAToolブ ロ ッ ク を使用 し て、 FIR フ ィ ル タ ーを指定、 イ ンプ リ メ ン ト 、 お よ びシ ミ ュ レー ト す る 例を説明 し ます。 複数の独立 ク ロ ッ ク のハー ド ウ ェ ア デザ イ ン デザ イ ンはサブシ ス テ ム ブ ロ ッ ク のグループにパー テ ィ シ ョ ンで き 、 各サブシ ス テ ムには、 ほかのサブシ ス テ ムのサ イ ク ル周期か ら は独立 し た、 共通サ イ ク ル 周期が使用 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 22 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 AXI イ ン タ ーフ ェ イ ス AMBA AXI4 の概要 と 、System Generator で AMBA AXI4 を使用 し た ケース を説明 し ます。 AXI4-Lite イ ン タ ーフ ェ イ ス生成 System Generator モジ ュ ール用に標準 AXI4-Lite イ ン タ ーフ ェ イ ス を作成 し 、 IP イ ン テ グ レー タ ーを使用 し て大型デザ イ ンに含め る ためにそのモジ ュ ールを Vivado IP カ タ ロ グにエ ク ス ポー ト する 機能を説明 し ま す。 System Generator でのプ ラ ッ ト フ ォーム ベース のア ク セ ラ レー タ の調整 Vivado IP イ ン テ グ レー タ ーで開発 さ れ る プ ラ ッ ト フ ォーム フ レーム ワー ク の一部であ る 、 ア ク セ ラ レー タ を System Generator で開発する 方法を説明 し ます。 System Generator を使用 し たデザイ ン フ ロー System Generator は さ ま ざ ま な ケー ス で便利 さ を発揮 し ます。 デザ イ ン をハー ド ウ ェ アに変換せずにアルゴ リ ズ ム を 検討す る 場合、 System Generator デザ イ ン を大型デザ イ ンの一部 と し て使用す る 場合、 あ る いは、 大型デザ イ ン の一 部 と し てではな く 、 System Generator デザ イ ン その も の を FPGA ハー ド ウ ェ アで使用す る 場合が考え ら れ ます。 こ こ では こ れ ら 3 つのケース について説明 し ます。 アルゴ リ ズムの検討 System Generator は、 特に、 アルゴ リ ズ ムの検討、 デザ イ ン のプ ロ ト タ イ プ作成、 モデル解析において便利な ツール です。 こ う し た目的の場合は、 デザ イ ン で発生す る 可能性のあ る 問題を調査 し た り 、 ハー ド ウ ェ アへの イ ンプ リ メ ン テーシ ョ ンにおけ る コ ス ト やパフ ォ ーマ ン ス を見積 も る ため、 System Generator を使用 し て アルゴ リ ズ ム を具体化 さ せてい く こ と がで き ます。 こ う し た作業は準備作業で、 デザ イ ン をハー ド ウ ェ アに変換す る 必要はほ と ん ど あ り ませ ん。 こ の時点では、細かい点や イ ンプ リ メ ン テーシ ョ ンの詳細は後回 し に し て、まずデザ イ ンの主な部分を組み立て ます。 Simulink ブ ロ ッ ク と MATLAB の M コ ー ド を使用 し て、 シ ミ ュ レーシ ョ ンお よ び結果の解析用に ス テ ィ ミ ュ ラ ス を供 給 し ます。 リ ソ ース予測に よ り 、 ハー ド ウ ェ アに イ ンプ リ メ ン ト し たデザ イ ンの コ ス ト を概算で き ます。 ハー ド ウ ェ ア生成を使用 し た テ ス ト を も と に、 可能なハー ド ウ ェ ア ス ピー ド が提案 さ れます。 う ま く い き そ う なアプ ロ ーチを見極め る こ と がで き た ら 、 今度はデザ イ ンの詳細を固めてい き ます。 System Generator では、 調整を段階的に行 う こ と がで き る ので、 デザ イ ンの一部はハー ド ウ ェ アに イ ンプ リ メ ン ト す る 準備がで き てい て も 、 ほかの部分を高位記述の ま ま に し てお く こ と がで き ます。 特に、 System Generator のハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン機能は、 デザ イ ン を部分ご と に調整 し てい く 場合に特に便利です。 大型デザイ ンの一部 と し てのイ ン プ リ メ ン ト System Generator は、 大型デザ イ ンの一部を イ ンプ リ メ ン ト す る のに よ く 使用 さ れます。 た と えば、 System Generator はデー タ パ スお よ び制御を イ ンプ リ メ ン ト する のには適 し てい ますが、 厳 し い タ イ ミ ン グ要件を持つ、 高度な外部 イ ン タ ーフ ェ イ ス にはあ ま り 適 し てい ません。 こ の場合は、 System Generator を使用 し てデザ イ ン の一部を イ ン プ リ メ ン ト し 、 ほかの部分を別のツールで イ ンプ リ メ ン ト し て、 こ れ ら を組み合わせて 1 つの大型デザ イ ン を構築す る のが よ いで し ょ う 。 こ の フ ロ ーでは、 デザ イ ン全体を表す HDL ラ ッ パーを作成 し 、 System Generator の部分を コ ン ポーネ ン ト と し て使用 す る のが一般的なアプ ロ ーチです。 別の ツールで作成 し た部分 も 、 コ ン ポーネ ン ト と し て ラ ッ パーに含め る か、 ラ ッ パーに直接 イ ン ス タ ン シエー ト で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 23 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 デザイ ン全体のイ ン プ リ メ ン ト デザ イ ン に必要 な も の がすべ て System Generator だ け で構築で き る ケ ー ス も よ く あ り ま す。 こ の場合は、 System Generator ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で [Generate] ボ タ ン を ク リ ッ ク する だけで、 デザ イ ン を HDL に変換 し 、 ダ ウ ン ス ト リ ーム ツールを使用 し て HDL の処理に必要な フ ァ イ ルを生成で き ます。 生成 さ れ る フ ァ イ ル は、 次の と お り です。 • デザ イ ン を イ ンプ リ メ ン ト す る HDL フ ァ イ ル。 • HDL テ ス ト ベンチ。 こ のテ ス ト ベンチを使用す る と 、 Simulink シ ミ ュ レーシ ョ ンの結果を ロ ジ ッ ク シ ミ ュ レー タ の結果 と 比較で き ます。 • System Generator HDL を Vivado IDE プ ロ ジ ェ ク ト と し て使用で き る よ う にす る フ ァ イ ル。 System Generator で生成 さ れ る フ ァ イ ルの詳細は、 「 コ ンパ イ ル結果」 を参照 し て く だ さ い。 DSP 設計に関する注意事項 System Generator は、 Simulink を拡張 し てハー ド ウ ェ ア設計を可能に し た も ので、 高位記述に よ り FPGA にデザ イ ン を自動的に コ ンパ イ ルす る こ と がで き ます。演算の高位記述は Simulink のほ う が適 し てい ますが (離散時間/空間ダ イ ナ ミ ッ ク シ ス テ ム シ ミ ュ レーシ ョ ン)、 System Generator な ら ば基本的な FPGA 機能に も ア ク セ ス で き ます。 並列処理やパ イ プ ラ イ ン処理な ど に関 し て、 ハー ド ウ ェ アでの実現方法について理解が深まれば、 イ ンプ リ メ ン テー シ ョ ンのほ う も う ま く い き ます。 IP コ ア を使用す る こ と に よ り 、 FFT な ど の複雑な フ ァ ン ク シ ョ ン を含んだ効率的な FPGA デザ イ ン を作成で き ます。 ま た、 よ り 正確にアプ リ ケーシ ョ ンに フ ィ ッ ト し たモデルを調整す る こ と も 可能に な り ます。 シ ス テ ム パ ラ メ ー タ ーを使用 し てハー ド ウ ェ ア機能を利用する 方法に関 し ては、 System Generator の資料全体を通 し て説明 さ れてい ます。 ハー ド ウ ェ ア設計に関する注意事項 System Generator は、 ハー ド ウ ェ ア記述言語 (HDL) ベース のデザ イ ン を置 き 換え る も のではな く 、 デザ イ ンの重要な 部分だけに集中す る 場合に使用 し ます。 た と えば、 ほ と ん ど の DSP プ ロ グ ラ ミ ン グ ツールは、 アセ ンブ ラ だけでプ ロ グ ラ ムす る のではな く 、 C 言語の よ う な高位言語でプ ロ グ ラ ム を始め、 パフ ォーマ ン ス要件を満たすのに必要な箇 所だけアセ ンブ リ コ ー ド を記述 し ます。 一般的には、 内部ハー ド ウ ェ ア ク ロ ッ ク を制御す る 必要のあ る 部分 (DDR や位相 ク ロ ッ ク を使用す る な ど) は、 HDL を使用 し て イ ンプ リ メ ン ト す る のが適切です。 比較的重要度の低い部分は System Generator で イ ンプ リ メ ン ト し 、 そ の後 HDL 部分 と System Generator 部分を接続 し ます。 通常、 外部 イ ン タ ーフ ェ イ ス を除き 、 信号処理シ ス テ ムには こ の レ ベルの制御は不要です。 System Generator には、 HDL コ ー ド 部分を デザ イ ン に イ ン ポー ト す る 機能 ( 「HDL モ ジ ュ ールの イ ン ポー ト 」 を参照) が含まれてい ます。 ま た、 System Generator の機能に、 テ ス ト ベ ク タ ーを含む HDL テ ス ト ベンチの自動生成があ り ます。 こ の機能につい ては、 「HDL テ ス ト ベンチ」 を参照 し て く だ さ い。 「ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用」 で説明 さ れてい る ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン イ ン タ ーフ ェ イ ス を使用す る と 、 Simulink の制御下でデザ イ ン をハー ド ウ ェ アで実行で き 、 MATLAB と Simulink のデー タ 解析お よ び可視化の機能を最大限に活用で き る よ う にな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 24 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 System Generator でのシ ス テム レ ベルのモデ リ ング System Generator では、 柔軟かつ高位のシ ス テ ム モデ リ ン グ環境でデバ イ ス を特定 し たハー ド ウ ェ ア デザ イ ン を構築 で き ます。 System Generator デザ イ ン では、 信号は単な る ビ ッ ト ではな く 、 符号付 き ま たは符号な し の固定小数点値 にす る こ と がで き 、 デザ イ ンに変更を加え る と 、 信号型 も 自動的に適切な型に変換 さ れます。 ブ ロ ッ ク は単にハー ド ウ ェ アの代わ り ではな く 、 その周辺に何が配置 さ れてい る のかに応 じ て、 ブ ロ ッ ク 自体が自己調整 し ます。 System Generator では、 さ ま ざ ま な要素か ら デザ イ ン を構築で き ます。 デー タ フ ロ ー モデル、 ハー ド ウ ェ ア設計言語 (VHDL、 Verilog)、 お よ び MATLAB プ ロ グ ラ ム言語に よ る 関数を併用 し 、 一緒にシ ミ ュ レー ト し た り 、 ハー ド ウ ェ ア に合成で き ます。 System Generator のシ ミ ュ レーシ ョ ン結果は、 ビ ッ ト 精度お よ びサ イ ク ル精度であ り 、 ハー ド ウ ェ アでの結果 と 厳密に一致 し ます。 System Generator のシ ミ ュ レーシ ョ ンは、 従来の HDL シ ミ ュ レー タ でのシ ミ ュ レー シ ョ ン よ り も 非常に高速で、 結果 も 解析 し やす く な っ てい ます。 System Generator ブ ロ ッ ク セ ッ ト System Generator ブ ロ ッ ク の ラ イ ブ ラ リ での分類、ブ ロ ッ ク のパ ラ メ ー タ ー設定方法お よ び使用方法 を 説明 し ま す。 すばや く モデル を 作成 し 解析 を 実 行す る ザ イ リ ン ク ス コ マ ン ド Simulink ポ ッ プ ア ッ プ メ ニ ュ ーに追加 さ れたザ イ リ ン ク ス コ マ ン ド を使用 し て、 System Generator モデルを簡 単に作成お よ び解析 し ます。 信号型 System Generator で使用 さ れ る デー タ 型 と 、 ツールで自 動的にデー タ 型を割 り 当て る 方法を説明 し ます。 ビ ッ ト 精度お よ びサ イ ク ル精度の モデ リ ン グ System Generator モデルの Simulink ベース のシ ミ ュ レー シ ョ ン と 、 ハー ド ウ ェ ア での動作 と の関係 を 説明 し ま す。 タ イ ミ ング と ク ロ ッ ク ク ロ ッ ク のハー ド ウ ェ アへの イ ンプ リ メ ン ト 方法、 お よ び System Generator での ク ロ ッ ク イ ンプ リ メ ン テーシ ョ ン制御方法を説明 し ます。System Generator でマルチ レー ト Simulink モ デル が ど の よ う に ク ロ ッ ク 同期 ハー ド ウ ェ アに変換 さ れ る かを説明 し ます。 同期化の メ カ ニズ ム 高位 System Generator デザ イ ン でデー タ パ ス エ レ メ ン ト 間の デー タ フ ロ ー を 同期化す る 方法 と 、 制御パ ス フ ァ ン ク シ ョ ン を イ ン プ リ メ ン ト す る 方法 を 説明 し ま す。 ブ ロ ッ ク マ ス ク と パ ラ メ ー タ ーの 伝搬 Simulink でパ ラ メ ー タ ー指定シ ス テ ム お よ びサブ シ ス テ ム を作成す る 方法を説明 し ます。 System Generator ブ ロ ッ ク セ ッ ト Simulink ブ ロ ッ ク セ ッ ト は、Simulink ブ ロ ッ ク エデ ィ タ ーで接続で き 、 ダ イ ナ ミ ッ ク なシ ス テ ムのフ ァ ン ク シ ョ ン モ デルを作成す る ためのブ ロ ッ ク の ラ イ ブ ラ リ です。 シ ス テ ム モデ リ ン グ用に、 System Generator ブ ロ ッ ク セ ッ ト をほ かの Simulink ブ ロ ッ ク セ ッ ト と 同様に使用で き ます。 ブ ロ ッ ク は、 数値演算、 ロ ジ ッ ク 、 メ モ リ 、 DSP フ ァ ン ク シ ョ ン な ど を表 し た も のであ り 、 高度な信号処理シ ス テ ム な ど のシ ス テ ム を構築す る ために使用で き ます。 ま た、 System Generator コ ー ド 生成 ソ フ ト ウ ェ アだけでな く 、 FDATool、 ModelSim な ど の ソ フ ト ウ ェ ア ツールへの イ ン タ ーフ ェ イ ス を提供す る ブ ロ ッ ク も あ り ます。 System Generator ブ ロ ッ ク は、 ビ ッ ト 精度お よ びサ イ ク ル精度です。 ビ ッ ト 精度ブ ロ ッ ク は、 ハー ド ウ ェ アで生成 さ れ る 対応値に一致 し た値を Simulink で生成 し 、 サ イ ク ル精度ブ ロ ッ ク は対応する 時間に対応する 値を生成 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 25 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 ザイ リ ン ク ス ブ ロ ッ ク セ ッ ト ザ イ リ ン ク ス ブ ロ ッ ク セ ッ ト (Xilinx Blockset) は、 基本的な System Generator ブ ロ ッ ク を含む ラ イ ブ ラ リ を集めた も のです。 デバ イ ス別のハー ド ウ ェ アにア ク セ スする 低位ブ ロ ッ ク と 、 信号処理や高度な通信アルゴ リ ズ ム な ど を イ ン プ リ メ ン ト す る 高位ブ ロ ッ ク があ り ます。 Gateway In/Gateway Out ブ ロ ッ ク な ど幅広 く 応用可能なブ ロ ッ ク は、 複数 の ラ イ ブ ラ リ に含ま れてい ます。 Index ラ イ ブ ラ リ には、 すべてのブ ロ ッ ク が含ま れてい ます。 次に、 こ れ ら の ラ イ ブ ラ リ について説明 し ます。 注記 : デザ イ ンの名前はザ イ リ ン ク ス ブ ロ ッ ク と 同 じ にな ら ない よ う に注意 し て く だ さ い。 た と えば、 デザ イ ンの名 前を black box.mdl にす る と 、 System Generator でエ ラ ー メ ッ セージが表示 さ れ る こ と があ り ます。 ライブラ リ 説明 AXI4 AXI™4 仕様に準拠する イ ン タ ーフ ェ イ ス を使用 し たブ ロ ッ ク Basic Elements デジ タ ル ロ ジ ッ ク の標準基本ブ ロ ッ ク Communication デジ タ ル通信シ ス テ ム で よ く 使用 さ れ る 前方誤 り 訂正ブ ロ ッ ク お よ び モジ ュ レー タ ブ ロ ッ ク Control Logic 制御回路お よ びス テー ト マシ ン用のブ ロ ッ ク Data Types デー タ 型を変換す る ブ ロ ッ ク (Gateway ブ ロ ッ ク を含む) DSP DSP (デジ タ ル信号処理) ブ ロ ッ ク Floating-Point 浮動小数点デー タ 型をサポー ト す る ブ ロ ッ ク Index ザ イ リ ン ク ス ブ ロ ッ ク セ ッ ト のすべてのブ ロ ッ ク Math 数値演算フ ァ ン ク シ ョ ン を イ ンプ リ メ ン ト す る ブ ロ ッ ク Memory メ モ リ を イ ン プ リ メ ン ト す る ブ ロ ッ ク お よ び メ モ リ にア ク セ スす る ブ ロック Tools コ ー ド 生成 (System Generator ト ー ク ン)、 リ ソ ー ス 予測、 HDL 協調シ ミ ュ レーシ ョ ン な ど を実行す る ユーテ ィ リ テ ィ ブ ロ ッ ク ザイ リ ン ク ス リ フ ァ レ ン ス ブ ロ ッ ク セ ッ ト ザ イ リ ン ク ス リ フ ァ レ ン ス ブ ロ ッ ク セ ッ ト (Xilinx Reference Blockset) には、さ ま ざ ま な フ ァ ン ク シ ョ ン を イ ンプ リ メ ン ト す る 複合 System Generator ブ ロ ッ ク が含まれます。 こ のブ ロ ッ ク セ ッ ト のブ ロ ッ ク は、 フ ァ ン ク シ ョ ン別に ラ イ ブ ラ リ に分類 さ れてい ます。 次に、 こ れ ら の ラ イ ブ ラ リ について説明 し ます。 ライブラ リ 説明 Communication デジ タ ル通信シ ス テ ムで よ く 使用 さ れ る ブ ロ ッ ク Control Logic 制御回路お よ びス テー ト マシ ン用のブ ロ ッ ク DSP DSP (デジ タ ル信号処理) ブ ロ ッ ク Imaging イ メ ージ処理ブ ロ ッ ク Math 数値演算フ ァ ン ク シ ョ ン を イ ンプ リ メ ン ト す る ブ ロ ッ ク こ のブ ロ ッ ク セ ッ ト の各ブ ロ ッ ク は複合ブ ロ ッ ク で、 た と えば、 ブ ロ ッ ク を コ ン フ ィ ギ ュ レ ーシ ョ ンす る パ ラ メ ー タ ーを使用 し て、 マ ス ク サブシ ス テ ム と し て イ ンプ リ メ ン ト さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 26 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 リ フ ァ レ ン ス ブ ロ ッ ク セ ッ ト ラ イ ブ ラ リ に含ま れ る ブ ロ ッ ク はその ま ま使用す る こ と も で き ます し 、 同 じ よ う な特 性を持っ たデザ イ ン を構築す る と き に ま ず手始めに使用 し て、 手を加え てい く こ と も 可能です。 各 リ フ ァ レ ン ス ブ ロ ッ ク には、 イ ンプ リ メ ン テーシ ョ ンの説明お よ びハー ド ウ ェ ア リ ソ ース要件があ り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 27 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 すばや く モデルを作成 し 解析を実行するザイ リ ン ク ス コ マ ン ド すばや く System Generator デザ イ ン を作成 し て解析す る ための Simulink ポ ッ プア ッ プ メ ニ ュ ーにグ ラ フ ィ ッ ク コ マ ン ド が追加 さ れてい ます。 次の よ う に、 こ れ ら の コ マ ン ド には、 Simulink モデルのキ ャ ンバ ス で右 ク リ ッ ク し て、 適 切なザ イ リ ン ク ス コ マ ン ド を選択す る と ア ク セ ス で き ます。 こ れ ら の追加のザ イ リ ン ク ス コ マ ン ド の使用方法の詳細は、 「System Generator の GUI ユーテ ィ リ テ ィ 」 を参照 し て く だ さ い。 信号型 ハー ド ウ ェ アのビ ッ ト 精度シ ミ ュ レーシ ョ ン を実行す る には、 System Generator ブ ロ ッ ク がブール値、 浮動少数点値、 お よ び任意の精度の固定小数点値で動作す る 必要があ り ますが、 Simulink の基本的な ス カ ラ ー信号型は、 倍精度浮動 小数点です。 ザ イ リ ン ク ス ブ ロ ッ ク と ザ イ リ ン ク ス 以外のブ ロ ッ ク の間の接続には、 Gateway ブ ロ ッ ク を使用 し ま す。 Gateway In ブ ロ ッ ク は倍精度の信号をザ イ リ ン ク ス信号に変換 し 、 Gateway Out ブ ロ ッ ク はザ イ リ ン ク ス信号を 倍精度の信号に変換 し ます。 Simulink の連続時間信号は、 Gateway In ブ ロ ッ ク でサンプ リ ン グ し ます。 ほ と ん ど のザ イ リ ン ク ス ブ ロ ッ ク は多型で、入力型に応 じ て適切な出力型を推測で き ます。 ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で完全精度が指定 さ れてい る 場合は、精度が失われない よ う に出力型が選択 さ れます。 符号拡張 お よ び 0 の追加は、 必要に応 じ て自動的に行われます。 ユーザー指定の精度 も 使用で き ます。 こ の設定では、 ブ ロ ッ ク の出力型 と 、 量子化お よ びオーバーフ ロ ーの処理方法を指定で き ます。 量子化の処理方法 と し ては、 正ま たは負の 無限大への不偏丸め (符号に よ っ て異な る ) ま たは切 り 捨てがあ り ます。 オーバーフ ロ ーの処理方法には、 正ま たは負 の最大値を使用す る か、 切 り 捨て る か、 オーバーフ ロ ーを エ ラ ー と し て レ ポー ト す る かのオプシ ョ ンがあ り ます。 注記 : System Generator のデー タ 型は、 Simulink で [Display] → [Signals & Ports] → [Port Data Types] を ク リ ッ ク す る と 表示 さ れます。デー タ 型を表示す る と 、モデルの精度を簡単に判断で き ます。た と えば、ポー ト のデー タ 型が Fix_11_9 の場合は、 信号は小数点以下のビ ッ ト が 9 桁の 2 の補数符号付 き 11 ビ ッ ト 値であ り 、 Ufix_5_3 の場合は小数点以下 のビ ッ ト が 3 桁の符号な し 5 ビ ッ ト 値です。 Simulink モデルの System Generator 部分では、 すべての信号をサン プ リ ン グす る 必要があ り ます。 サン プ リ ン グ時間 は、 Simulink の伝搬ルールに よ り 自動的に設定 さ れ る よ う にす る か、 ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で設定で き ます。 フ ィ ー ド バ ッ ク ループがあ る と 、 System Generator でサンプ リ ン グ周期お よ び信号型を推論で き な い場合 も あ り 、 その場合はエ ラ ー メ ッ セージが表示 さ れます。 フ ィ ー ド バ ッ ク ループには Assert ブ ロ ッ ク を挿入 し て、 こ の問題を回避す る 必要があ り ます。 ループ内のすべてのポ イ ン ト に Assert ブ ロ ッ ク を追加す る 必要はあ り ませ ん。 通常、 ループの 1 箇所に追加す る だけで十分です。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 28 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 注記 : Simulink では、 ブ ロ ッ ク と 信号を実行レー ト 別に色分け し て表示で き ます (Simulink メ ニ ュ ーか ら [Display] → [Sample Time] → [Colors] を ク リ ッ ク )。 こ れは、 マルチ レー ト デザ イ ン を解析する のに便利です。 浮動小数点デー タ 型 Floating-Point ラ イ ブ ラ リ の System Generator ブ ロ ッ ク では、 浮動小数点デー タ 型がサポー ト さ れます。 System Generator では、 Floating-Point Operator v6.0 IP を使用 し て、 加算/減算、 乗算、 比較、 デー タ 型変換な ど の演算 が イ ンプ リ メ ン ト さ れます。 浮動小数点デー タ 型のサポー ト は、浮動小数点演算用の IEEE-754 規格に準拠 し ます。サポー ト さ れ る System Generator では、 デザ イ ン入力、 デー タ 型表示、 デー タ レー ト 、 デー タ 型伝搬 (RTP) に対 し て単精度、 倍精度、 カ ス タ ム精度の 浮動小数点デー タ 型がサポー ト さ れます。 浮動小数点型の IEEE‐754 規格 次に示す よ う に、 浮動小数点型は 1 つの符号ビ ッ ト (S)、 X 指数部ビ ッ ト 、 Y 仮数部ビ ッ ト を使用 し て記述で き ます。 符号ビ ッ ト は、 常に最上位ビ ッ ト (MSB) です。 S X ?????? E0 ? Ex-1 Y ?????? F0 ? FY-1 IEEE-754 規格に従い、 浮動小数点値は正規化 さ れた形で記述お よ び格納 さ れ ます。 こ の形式では、 指数値 E がバ イ ア ス/正規化 さ れた値です。 正規化 さ れた指数 E は実際の指数部の値 と バ イ ア ス の合計 と 同 じ にな り ます。 ま た、 こ の形式では、 仮数部の値を格納す る には Y-1 ビ ッ ト が使用 さ れます。 F0 仮数部ビ ッ ト は、 常に隠 し ビ ッ ト で、 値は 1 であ る と みな さ れます。 S はその数値の符号値を表 し ます。 S が 0 の場合、 値は正の浮動小数点にな り 、 それ以外は負の符号小数点にな り ま す。 その後の X ビ ッ ト は、 正規化 さ れた指数部の値 E を格納す る のに使用 さ れ、 最後の Y-1 ビ ッ ト は正規化 さ れた形 式で仮数部の値を格納す る のに使用 さ れます。 指数部のビ ッ ト 幅 (桁数) が決ま っ てい る 場合は、 指数部バ イ ア スは次の演算式を使用 し て計算 さ れます。 Exponent_bias = 2(X - 1) - 1 (X は指数部のビ ッ ト 幅) IEEE 規格では、単精度浮動小数点デー タ は 32 ビ ッ ト を使用 し て記述 さ れます。正規化 さ れた指数部お よ び仮数部は、 それぞれ 8 ビ ッ ト と 24 ビ ッ ト にな り ます。 単精度の指数部バ イ ア ス は 127 です。 同様に、 倍精度浮動小数点デー タ は合計 64 ビ ッ ト を使用 し て記述 さ れ、 指数部の ビ ッ ト 幅は 11、 仮数部のビ ッ ト 幅は 53 にな り ます。 倍精度の指数部 バ イ ア ス は 1023 です。 正規化 さ れた浮動小数点の値は次の よ う に記述 さ れます。 正規化 さ れた浮動小数点 = (-1)S x F0.F1F2 ….FY-2FY-1 x (2)E 実際の指数部の値 (E_actual) = E - Exponent_bias.隠 し ビ ッ ト F0 の値 と E_actual 値を 1 と し た場合、 浮動小数点の数値 は次の よ う に計算で き ます。 FP_Value = (-1)S x 1.F1F2 ….FY-2FY-1 x (2)(E_actual) System Generator での浮動小数点デー タ 表記 System Generator の Gateway In ブ ロ ッ ク では、 以前はブール方お よ び固定小数点デー タ 型のみがサポー ト さ れてい ま し たが、 次に示す よ う に、 Gateway In ブ ロ ッ ク の GUI と 基本 と な る マ ス ク パ ラ メ ー タ ーで も 浮動小数点デー タ 型が Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 29 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 サポー ト さ れ る よ う にな り ま し た。 浮動小数点デー タ 型を指定 し た後、 [Single]、 [Double]、 ま たは [Custom] のいずれ かの精度を選択で き ます。 た と えば、 指数部の幅 9、 仮数部の幅 31 が指定 さ れ る 場合、 浮動小数点のデー タ 値は合計で 40 ビ ッ ト で、 MSB が符 号表記に、 その後の 9 ビ ッ ト がバ イ ア ス指数部に、 残 り の 30 ビ ッ ト が仮数部を格納する ために使用 さ れます。 IEEE-754 規格に準拠す る ので、 [Single] 精度を選択す る と 、 ビ ッ ト 幅は合計 32 ビ ッ ト (指数部 8 ビ ッ ト 、 仮数 24 ビ ッ ト ) に仮定 さ れます。 [Double] 精度を選択する と 、 ビ ッ ト 幅は合計 64 ビ ッ ト (指数部 11 ビ ッ ト 、 仮数部 53 ビ ッ ト ) に 仮定 さ れ ます。 [Custom] 精度を選択す る と 、 [Exponent width] お よ び [Fraction width] フ ィ ール ド が指定で き る よ う に な り 、 ユーザーが値を指定で き ます (デフ ォ ル ト は 8 ビ ッ ト と 24 ビ ッ ト )。 [Custom] 精度のデー タ のビ ッ ト 幅合計は、 指数部ビ ッ ト と 仮数部ビ ッ ト の総数にな り ま す。 [Single] お よ び [Double] 精度デー タ 型の仮数部の ビ ッ ト 幅 と 同様、 [Custom] 精度デー タ 型の仮数部のビ ッ ト 幅に も 隠 し ビ ッ ト F0 を含め る 必要があ り ます。 出力信号のデー タ 型の表示 次に示す よ う に、 レー ト お よ びデー タ 型が問題な く 伝搬 さ れ る と 、 各 System Generator ブ ロ ッ ク の出力に浮動小数点 型が表示 さ れます。 次の図の よ う に信号のデー タ 型を表示す る には、 [Display] → [Signals & Ports] → [Port Data Types] を ク リ ッ ク し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 30 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 浮動小数点デー タ 型の フ ォ ーマ ッ ト は、 「XFloat_<exponent_bit_width>_<fraction_bit_width>」 の よ う に表示 さ れ ま す。 単精度 (Single) デー タ 型は XFloat_8_24、 倍精度 (Double) デー タ 型は XFloat_11_53 と い う 文字列を使用 し て表示 さ れ ます。 カ ス タ ム精度 (Custom) デー タ 型で指数部のビ ッ ト 幅を 9、 仮数部のビ ッ ト 幅を 31 に指定 し た場合は、 XFloat_9_31 の よ う に表示 さ れます。 浮動小数点デー タ 値を格納する ためには、 40 ビ ッ ト が使用 さ れます。 浮動小数点デー タ は基本 形式で格納 さ れ る ので、 仮数部の値は 30 ビ ッ ト に格納 さ れます。 System Generator では、 固定小数点型は XFix_<total_data_width>_<binary_point_width> と い う 形式で表 示 さ れます。た と えば、デー タ 幅 40 お よ び 2 進小数点の幅 31 の固定小数点デー タ 型は、XFix_40_31 と 表示 さ れます。 固定小数点デー タ 型で仮数部の値を格納す る のに使用 さ れた実際の ビ ッ ト 数は、 浮動小数点デー タ 型で使用 さ れ る も の と は異な り ます。 上記の例では、 固定小数点デー タ 型の仮数部ビ ッ ト を格納す る ために 31 ビ ッ ト すべてが使用 さ れます。 System Generator では、 指数部の ビ ッ ト 幅 と 仮数部のビ ッ ト 幅を使用 し て、Floating-Point Operator コ アの イ ン ス タ ン ス を コ ン フ ィ ギ ュ レーシ ョ ンお よ び生成 し ます。 レー ト お よびデー タ 型の伝搬 浮動小数点デー タ をサポー ト す る System Generator でのデー タ レー ト お よ びデー タ 型の伝搬中は、次のデザ イ ン ルー ルが検証 さ れます。 次の違反のいずれかが検出 さ れ る と 、 該当す る エ ラ ー メ ッ セージが表示 さ れます。 1. 浮動小数点デー タ を運ぶ信号が浮動小数点デー タ 型をサポー ト し ない System Generator ブ ロ ッ ク のポー ト に接続 さ れてい る 場合。 2. System Generator ブ ロ ッ ク のデー タ 入力 (あ る 場合は A お よ び B の両方のデー タ 入力) と デー タ 出力が、 浮動小数 点デー タ 型 と は同 じ ではない場合。 ブ ロ ッ ク の 2 つの入力間 と 、 ブ ロ ッ ク の入力 と 出力間で、 DRC チ ェ ッ ク が 実行 さ れます。 [Custom] 精度の浮動小数点デー タ 型を指定 し た場合、 2 つのポー ト の指数部のビ ッ ト 幅お よ び仮数部のビ ッ ト 幅 が比較 さ れ、 同 じ デー タ 型であ る か ど う かが決定 さ れます。 注記 : Convert お よ び Relational ブ ロ ッ ク は、 こ のチ ェ ッ ク の対象外です。 Convert ブ ロ ッ ク では、 2 つの異な る 浮 動小数点デー タ 型間の float-to-float デー タ 型変換がサポー ト さ れます。 Relational ブ ロ ッ ク 出力は、 常に比較演算 に対 し て true か false の結果を出力する ので、 常にブール型です。 3. デー タ 入力が固定小数点型で、 デー タ 出力が浮動小数点の場合、 ま たはその逆の場合。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 31 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 注記 : Convert お よ び Relational ブ ロ ッ ク は、 こ のチ ェ ッ ク の対象外です。 Convert ブ ロ ッ ク では、 fixed-to-float と float-to-fixed がサポー ト さ れ ます。 Relational ブ ロ ッ ク 出力は、 常に比較演算に対 し て true か false の結果を出力 す る ので、 常にブール型です。 4. 浮動小数点デー タ 型をサポー ト す る ブ ロ ッ ク の出力 タ イ プにユーザー定義 (User Defined) の精度が選択 さ れた場 合。 た と えば、 AddSub、 Mult、 CMult、 お よ び MUX の よ う なブ ロ ッ ク の場合に、 デー タ 入力が浮動小数点デー タ 型であれば、 サポー ト さ れ る 出力精度は Full だけです。 5. 浮動小数点デー タ 型の演算を指定 し て、 Carry In ポー ト ま たは Carry Out ポー ト が AddSub ブ ロ ッ ク に使用 さ れ る 場合。 6. Floating-Point Operator IP コ アで、その IP 用に定義 し た DRC ルールに対す る エ ラ ー メ ッ セージが表示 さ れた場合。 AXI 信号グループ AXI4 ラ イ ブ ラ リ に含まれ る System Generator ブ ロ ッ ク には、AXI™ 4 仕様に準拠す る イ ン タ ーフ ェ イ ス が含まれます。 AXI イ ン タ ーフ ェ イ ス を含むブ ロ ッ ク が描画 さ れ、 特定の AXI イ ン タ ーフ ェ イ ス に関す る ポー ト が ま と め ら れ、 同 じ 色で表示 さ れます。 こ れで、 同 じ イ ン タ ーフ ェ イ ス に属す る デー タ お よ び制御信号が見分けやす く な り ます。 同様 の AXI ポー ト を一緒に ま と めて も 、Simulink Bus Creator お よ び Simulink Bus Selector ブ ロ ッ ク を使用 し て、信号グルー プ を接続で き ます。 AXI に関す る 詳細は、 「AXI イ ン タ ーフ ェ イ ス」 を参照 し て く だ さ い。 AMBA AXI4 仕様の詳細 は、 ザ イ リ ン ク ス ウ ェ ブ サ イ ト の [AMBA AXI4 イ ン タ ーフ ェ イ ス プ ロ ト コ ル」 ページ にあ る ザ イ リ ン ク ス AMBA AXI4 の資料を参照 し て く だ さ い。 ビ ッ ト 精度およびサイ ク ル精度のモデ リ ング System Generator でのシ ミ ュ レーシ ョ ンは、ビ ッ ト 精度ま たはサ イ ク ル精度で実行 さ れます。ビ ッ ト 精度のシ ミ ュ レー シ ョ ン と は、 System Generator ブ ロ ッ ク と System Generator 以外のブ ロ ッ ク の境界で、 シ ミ ュ レーシ ョ ン で生成 さ れた 値がハー ド ウ ェ アで生成 さ れた対応値 と ビ ッ ト 単位で同一であ る と い う こ と です。 サ イ ク ル精度のシ ミ ュ レーシ ョ ン と は、 System Generator ブ ロ ッ ク と System Generator 以外のブ ロ ッ ク の境界で、 対応す る 値が対応す る 時間に生成 さ れ る と い う こ と です。 デザ イ ン の境界は、 System Generator の Gateway ブ ロ ッ ク が配置 さ れてい る 箇所です。 デザ イ ン がハー ド ウ ェ アに変換 さ れ る と 、 Gateway In ブ ロ ッ ク は最上位入力ポー ト 、 Gateway Out ブ ロ ッ ク は最上位出力ポー ト にな り ます。 タ イ ミ ング と ク ロ ッ ク 離散時間型シ ス テム System Generator のデザ イ ン は離散時間型シ ス テ ム な ので、 信号 と その信号 を 生成す る ブ ロ ッ ク にはサ ン プ リ ン グ レー ト があ り ま す。 ブ ロ ッ ク のサ ン プ リ ン グ レー ト は、 ブ ロ ッ ク の ス テー ト がア ッ プデー ト さ れ る 頻度を決定 し ま す。 System Generator では、 ほ と ん ど のサンプ リ ン グ レー ト が自動的に設定 さ れますが、 サンプ リ ン グ レー ト を明示 的ま たは黙示的に設定す る 必要のあ る ブ ロ ッ ク も あ り ます。 注記 : Simulink の離散時間シ ス テ ム と サンプ リ ン グ時間の詳細は、 MathWorks 社の資料 『Using Simulink』 を参照 し て く だ さ い。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 32 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 簡単な System Generator モデルで、離散時間シ ス テ ムの動作を示 し ます。次の図に示すモデルがあ る と し ます。Simulink ソ ース (Sine Wave) に よ り Gateway In ブ ロ ッ ク が駆動 さ れ、 Gateway Out ブ ロ ッ ク で Simulink シ ン ク (Scope) が駆動 さ れてい ます。 Gateway In ブ ロ ッ ク は、 サンプ リ ン グ周期 1 秒で コ ン フ ィ ギ ュ レーシ ョ ン さ れてい ます。 Gateway Out ブ ロ ッ ク は、 ザ イ リ ン ク ス固定小数点信号を Simulink の Scope で解析で き る よ う に倍精度に変換 し ますが、 サン プ リ ン グ レー ト は 変更 し ません。 Scope の出力は、 サンプ リ ン グ レー ト が変更 さ れていない、 サンプ リ ン グ さ れたサ イ ン波 と な り ます。 マルチ レー ト モデル System Generator では、信号が複数のサンプ リ ン グ レー ト で動作す る マルチ レー ト デザ イ ンがサポー ト さ れてい ます。 マルチ レー ト モデルは、System Generator で自動的にハー ド ウ ェ アに コ ンパ イ ル さ れます。マルチ レー ト デザ イ ンは、 Simulink に適 し た直接的な方法で イ ンプ リ メ ン ト さ れます。 レー ト 変換ブ ロ ッ ク System Generator には、 サンプ リ ン グ レー ト を変換す る ブ ロ ッ ク が含まれてい ます。 最 も 基本的な レー ト 変換ブ ロ ッ ク は、 Up Sample と Down Sample ブ ロ ッ ク です。 こ れ ら のブ ロ ッ ク は、 次の図に示す よ う にパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で指定 し た固定の値を乗算す る こ と に よ り 、 レー ト を変換 し ます。 Parallel To Serial や Serial To Parallel な ど のその他のブ ロ ッ ク は、ブ ロ ッ ク のパ ラ メ ー タ ー指定で決め ら れた方法で レー ト を変換 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 33 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 次の よ う な単純なマルチ レー ト シ ス テ ムがあ る と し ます。 こ のモデルでは、 SP1 と SP2 の 2 つのサンプ リ ン グ周期が 使用 さ れます。サンプ リ ン グ周期 SP1 は、Gateway In のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で指定 し ます。Down Sample ブ ロ ッ ク に よ り モデルの レー ト が変更 さ れ、 SP1 の 1/2 であ る 新 し い レー ト SP2 が作成 さ れます。 ハー ド ウ ェ ア オーバーサン プ リ ン グ 一部の System Generator ブ ロ ッ ク はオーバーサンプ リ ン グ さ れます。 た と えば、 ブ ロ ッ ク のデー タ レー ト よ り 高速の レー ト で内部処理が行われた り し ま す。 ハー ド ウ ェ アでは、 こ れはデー タ サ ン プルを処理す る のに複数の ク ロ ッ ク サ イ ク ルが必要であ る こ と を意味 し ます。 Simulink では、 こ う し たブ ロ ッ ク のサンプ リ ン グ レー ト に計測可能な変化 はあ り ません。 Simulink ではオーバーサ ン プ リ ン グ さ れ る ブ ロ ッ ク でサ ン プ リ ン グ レー ト が変化す る こ と はあ り ま せんが、 System Generator では、 ハー ド ウ ェ ア イ ンプ リ メ ン テーシ ョ ン用の ク ロ ッ ク ロ ジ ッ ク を生成する 際に、 サンプ リ ン グ レー ト と 共に内部ブ ロ ッ ク レー ト も 考慮 さ れます。 ですか ら 、 System Generator ト ー ク ンのパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で Simulink のシ ス テ ム周期を指定す る 際に、オーバーサンプ リ ン グ さ れ る ブ ロ ッ ク の内部処理レー ト を考慮す る 必 要があ り ます。 非同期ク ロ ッ ク System Generator は、 1 つの ク ロ ッ ク に同期す る ハー ド ウ ェ アの設計に適 し てい ま すが、 場合に よ っ ては、 複数の ク ロ ッ ク を使用す る シ ス テ ムの設計に も 使用で き ます。 こ の場合、 デザ イ ン を ク ロ ッ ク ド メ イ ンに分割 し 、 ド メ イ ン間 での情報転送をデ ュ アル ポー ト メ モ リ お よ び FIFO で制御 し ます。 こ のセ ク シ ョ ン では、 System Generator の ク ロ ッ ク 同期について説明 し ます。 こ の内容は、 1 つの ク ロ ッ ク のデザ イ ンお よ び複数 ク ロ ッ ク のデザ イ ンの両方に関係 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 34 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 同期 ク ロ ッ ク 次の図に示す よ う に、 System Generator ト ー ク ン を使用 し てデザ イ ン をハー ド ウ ェ アに コ ンパ イ ルす る 場合、 [Clock Enables] (デフ ォ ル ト ) オプシ ョ ンがあ り ます。 ク ロ ッ ク イ ネーブル System Generator で [Clock Enables] オプシ ョ ン を オ ン に し てモデルをハー ド ウ ェ アに コ ンパ イ ルす る と 、 ハー ド ウ ェ ア の対応す る 部分が適切な レ ー ト で動作す る よ う にデザ イ ン のサ ン プ リ ン グ レ ー ト 情報が保持 さ れ ま す。 System Generator は、 ク ロ ッ ク と ク ロ ッ ク イ ネーブル (1 つの レー ト に 1 つの イ ネーブル) を組み合わせて、 関連す る レー ト をハー ド ウ ェ アに生成 し ます。 各 ク ロ ッ ク イ ネーブルの周期は、 シ ス テ ム ク ロ ッ ク の周期の整数倍です。 Simulink 内では、 System Generator デザ イ ン の信号 と し て ク ロ ッ ク お よ び ク ロ ッ ク イ ネーブルは必要 あ り ま せん。 System Generator でデザ イ ン をハー ド ウ ェ アに コ ンパ イ ルす る 際、 デザ イ ンのサンプル レー ト か ら 必要な ク ロ ッ ク イ ネーブルが推論 さ れます。 具体的には、 System Generator ト ー ク ンの 2 つのユーザー指定値であ る Simulink シ ス テ ム 周期 と FPGA ク ロ ッ ク 周期が使用 さ れます。 こ れ ら の値は、 Simulink シ ミ ュ レーシ ョ ンの時間、 お よ び実際のハー ド ウ ェ ア イ ンプ リ メ ン テーシ ョ ンでの時間の ス ケー リ ン グ係数を定義 し ます。 Simulink シ ス テ ム周期は、 モデルに含ま れ る サンプ リ ン グ周期の最大公約数 (gcd) にす る 必要があ り 、 FPGA の ク ロ ッ ク 周期 (ns) はシ ス テ ム ク ロ ッ ク の周期 です。 Simulink シ ス テ ム周期を p、 FPGA シ ス テ ム ク ロ ッ ク 周期を c と す る と 、 Simulink で kp かか る 処理は、 ハー ド ウ ェ アではシ ス テ ム ク ロ ッ ク の k サ イ ク ル分 (kc ナ ノ 秒) にな り ます。 た と えば、 3 つの Simulink サンプ リ ン グ周期 2、 3、 4 を含むモデルがあ る と し ます。 こ れ ら のサンプ リ ン グ周期の gcd は 1 で、 そのモデルの [Simulink System Period] フ ィ ール ド で指定す る 必要があ り ます。 FPGA ク ロ ッ ク 周期は 10ns に 設定 さ れてい る と し ます。こ れ ら の情報か ら 、ハー ド ウ ェ アでの対応す る ク ロ ッ ク イ ネーブルの周期を決定で き ます。 Simulink のサンプ リ ン グ周期 2、 3、 4 に対応する ハー ド ウ ェ アでの ク ロ ッ ク イ ネーブルを CE2、 CE3、 CE4 と し ます。 各 ク ロ ッ ク イ ネーブルの周期 と シ ス テ ム ク ロ ッ ク 周期の関係は、 対応す る Simulink サンプ リ ン グ周期を Simulink シ Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 35 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 ス テ ム周期で割 る こ と に よ り 求め ら れます。 こ の結果、 CE2、 CE3、 CE4 の周期はそれぞれ 2、 3、 4 シ ス テ ム ク ロ ッ ク 周期にな り ます。 次の図に、 こ れ ら の ク ロ ッ ク イ ネーブル信号の タ イ ミ ン グ を示 し ます。 同期化の メ カ ニズム System Generator では、 同期化の メ カ ニ ズ ムは自動的には作成 さ れ ません。 設計者が明示的に作成す る 必要があ り ま す。 有効なポー ト System Generator には、 同期化に使用で き る ブ ロ ッ ク (特に FIFO) が複数含まれてい ます。 複数のブ ロ ッ ク でオプシ ョ ンの AXI 信号 イ ン タ ーフ ェ イ ス が提供 さ れてお り 、 サンプルが有効な と き (TValid)、 お よ び イ ン タ ーフ ェ イ ス がデー タ 準備完了にな っ た と き (TReady) を示 し ます。 IP の コ ン フ ィ ギ ュ レーシ ョ ンに よ っ ては、 tvalid/tready ポー ト が確認 で き ない場合場合があ り ます。 次の図に示す よ う に、 ブ ロ ッ ク の各 イ ン タ ーフ ェ イ ス のポー ト 群は色分け さ れてい ま す。 イ ン タ ーフ ェ イ ス のあ る ブ ロ ッ ク はチ ェーン接続可能で、 こ れで簡単に フ ロ ー制御する こ と がで き ます。 AXI イ ン タ ーフ ェ イ ス のあ る ブ ロ ッ ク には、 FFT、 FIR、 DDS な ど があ り ます。 不定デー タ 多 く のハー ド ウ ェ ア シ ミ ュ レ ーシ ョ ン環境では、 不定値が あ る のが一般的です。 こ れ ら は、 「 ド ン ト ケ ア」 ま たは 「X」 と 示 さ れます。 System Generator シ ミ ュ レーシ ョ ン での値は、 不定値であ る 可能性があ り ます。 た と えば、 デ ュ アル ポー ト メ モ リ ブ ロ ッ ク では、 メ モ リ の両方のポー ト で同 じ ア ド レ ス に同時にア ク セ ス し よ う と す る と 、 値が不 定にな り ます。 ハー ド ウ ェ アでの実際の動作は、 ど ち ら のポー ト の ク ロ ッ ク エ ッ ジが先に到着す る かな ど を決定す る イ ンプ リ メ ン テーシ ョ ンの詳細に よ っ て異な り ます。 値が不定にな る と 、 シ ス テ ム設計では柔軟性が増 し ます。 先ほ ど の例で、 メ モ リ で値が不定にな っ て も 、 その後の処理がその値に依存 し ていなければ、 問題あ り ません。 HDL 協調シ ミ ュ レーシ ョ ンに よ り シ ミ ュ レーシ ョ ンに含まれ る HDL モジ ュ ールは、一般的にデー タ サンプルが不定 にな る 原因 と な り ます。 System Generator で HDL 協調シ ミ ュ レーシ ョ ン モジ ュ ールの入力に入力 さ れ る 不定値は、 標 準 ロ ジ ッ ク ベ ク タ ー XXX . . . XX で表 さ れます。 Gateway Out を駆動す る 不定値は、 NaN (Not a Nnumber) と い う 値にな り ます。 Simulink の Scope では、 NaN 値は表 さ れ ません。 Gateway In を駆動す る NaN も 不定値にな り ます。 System Generator には、 不定値を検出す る Indeterminate Probe ブ ロ ッ ク が含まれてい ます。 こ のブ ロ ッ ク は、 ハー ド ウ ェ アには変換 さ れません。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 36 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 System Generator では、 演算信号が不定値にな っ て も か ま い ませんが、 ブール信号を不定値にす る こ と はで き ません。 シ ミ ュ レーシ ョ ン でブール信号が不定値にな る 状況が発生 し た場合は、 シ ミ ュ レーシ ョ ンは中断 さ れ、 エ ラ ー メ ッ セージが表示 さ れます。 ザ イ リ ン ク ス ブ ロ ッ ク には、 ブール信号のみを入力 と し て使用可能な制御ポー ト が含まれて い る も のが多数あ り ます。 こ れ ら のブ ロ ッ ク では、 制御ポー ト のブール信号を不定値にす る こ と はで き ません。 UFix_1_0 は、 ブール信号 と 同等のデー タ 型ですが、 不定値に関す る 上記の制限はあ り ません。 ブ ロ ッ ク マス ク と パラ メ ー タ ーの伝搬 通常の Simulink ブ ロ ッ ク に適用 さ れ る ス コ ーピ ン グ ルール と パ ラ メ ー タ ー伝搬ルールは、 System Generator ブ ロ ッ ク に も 適用 さ れます。 つま り 、 ザ イ リ ン ク ス ブ ロ ッ ク セ ッ ト 内のブ ロ ッ ク は、 MATLAB の変数お よ び論理式を使用 し てパ ラ メ ー タ ー指定で き ます。 こ の機能に よ り 、MATLAB 言語の表現能力お よ び計算能力を活用 し た高度なパ ラ メ ー タ ー指定デザ イ ン を作成で き ます。 ブ ロ ッ ク マ ス ク Simulink では、 マ ス ク と 呼ばれ る メ カ ニズ ムでブ ロ ッ ク のパ ラ メ ー タ ーを指定 し ます。 実際には、 ブ ロ ッ ク にマ ス ク 変数を割 り 当て、 こ の変数の値を ダ イ ア ロ グ ボ ッ ク ス で指定す る か、 マ ス ク 初期化コ マ ン ド で算出 し ます。 こ の変数 は、 マ ス ク ワ ー ク スペース に保存 さ れます。 マ ス ク ワ ー ク スペース は、 マ ス ク が適用 さ れ る ブ ロ ッ ク でのみ使用 さ れ、 外部ブ ロ ッ ク か ら ア ク セ スす る こ と はで き ません。 注記 : マ ス ク でグ ロ ーバル変数お よ び基本ワー ク スペース の変数にア ク セ スす る こ と は可能です。 基本ワー ク スペー ス の変数にア ク セ スす る には、 MATLAB の evalin 関数を使用 し ます。 MATLAB と Simulink の ス コ ーピ ン グ ルールの 詳細は、 MathWorks 社の資料 『Using MATLAB』 お よ び 『Using Simulink』 を参照 し て く だ さ い。 パ ラ メ ー タ ーの伝搬 マ ス ク サブシ ス テ ム内のブ ロ ッ ク に変数を渡す必要があ る こ と が よ く あ り ます。 変数を渡す こ と に よ り 、 サブシ ス テ ム を囲むパ ラ メ ー タ ーに よ り ブ ロ ッ ク の コ ン フ ィ ギ ュ レーシ ョ ン を決め る こ と がで き ます。 こ の手法は、 ザ イ リ ン ク ス ブ ロ ッ ク セ ッ ト 内のブ ロ ッ ク のパ ラ メ ー タ ーに も 適用 さ れます。 た と えば、 Mult ブ ロ ッ ク と Accumulator ブ ロ ッ ク で構成 さ れ る サブシ ス テ ム を構築す る 場合、 結果を切 り 捨て る か丸め る か を指定す る パ ラ メ ー タ ーをサブシ ス テ ム内 に作成で き ます。 次の図では、 こ のパ ラ メ ー タ ーに trunc_round と い う 名前が付け ら れてい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 37 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 Mult ブ ロ ッ ク と Accumulator ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス には、[Truncate] (切 り 捨て) ま たは [Round] (丸め) を選択す る ラ ジオ ボ タ ンがあ り ます。 ラ ジ オ ボ タ ン で は な く パ ラ メ ー タ ー を 使用 し て 選択す る 場合は、 ラ ジ オ ボ タ ン を 右 ク リ ッ ク し て [Define With Expression] を ク リ ッ ク す る と 、 MATLAB の論理式をパ ラ メ ー タ ーの設定に使用で き ま す。 次の例では、 サブシ ス テ ム マ ス ク か ら の trunc_round パ ラ メ ー タ ーを Mult ブ ロ ッ ク と Accumulator ブ ロ ッ ク の両方で使用 し 、 サブシ ス テ ムの マ ス ク 変数か ら の同 じ 設定が適用 さ れ る よ う に し てい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 38 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 自動 コ ー ド 生成 System Generator は、デザ イ ン を自動的に低位表現に コ ンパ イ ル し ます。モデルの コ ンパ イ ル方法は、System Generator ト ー ク ン の設定に よ っ て異な り ます。 ハー ド ウ ェ アの HDL 記述に加え、 補助フ ァ イ ル も 生成 さ れます。 プ ロ ジ ェ ク ト フ ァ イ ルや制約フ ァ イ ルな ど の フ ァ イ ルはダ ウ ン ス ト リ ーム ツールで使用 さ れ、 VHDL テ ス ト ベンチな ど の フ ァ イ ルはデザ イ ンの検証に使用 さ れます。 System Generator ト ー ク ン を使用 し た コ ンパ イ ル と シ ミ ュ レーシ ョ ン System Generator ト ー ク ン を 使用 し て デザ イ ン を 低位 HDL に コ ンパ イ ルする 方法を説明 し ます。 コ ンパ イ ル結果 System Generator ト ー ク ン で [HDL Netlist] を 選択 し て [Generate] ボ タ ン を ク リ ッ ク し た と き に生成 さ れ る 低位 フ ァ イ ルについて説明 し ます。 Vivado プ ロ ジ ェ ク ト System Generator ト ー ク ン で [HDL Netlist] ま た は [IP Catalog] を選択 し て [Generate] ボ タ ン を ク リ ッ ク し た と き に生成 さ れ る サ ン プル プ ロ ジ ェ ク ト につい て説明 し ます。 HDL テ ス ト ベンチ System Generator で生成 さ れ る VHDL テ ス ト ベンチにつ いて説明 し ます。 System Generator ト ー ク ン を使用 し た コ ンパイル と シ ミ ュ レー ション System Generator は、デザ イ ン を自動的に低位表現に コ ンパ イ ル し ます。デザ イ ン を コ ンパ イ ルま たはシ ミ ュ レーシ ョ ンす る には、 System Generator ト ー ク ン を使用 し ます。 こ のセ ク シ ョ ンでは、 こ の ト ー ク ンの使用法を説明 し ます。 System Generator デザ イ ン を シ ミ ュ レーシ ョ ン ま たはハー ド ウ ェ アに変換す る には、デザ イ ンに System Generator ト ー ク ン を含め る 必要があ り ます。 新 し いデザ イ ン を作成す る 際には、 System Generator ト ー ク ン をす ぐ に追加す る よ う にす る こ と をお勧め し ます。 System Generator ト ー ク ンは、 Xilinx Blockset の Basic Element お よ び Tools ラ イ ブ ラ リ に 含まれてい ます。 System Generator ト ー ク ンは、 その他のザ イ リ ン ク ス ブ ロ ッ ク と 同様、 Index ラ イ ブ ラ リ に も 含まれ てい ます。 デザ イ ンには、 System Generator ト ー ク ン を 1 つ以上含め る 必要があ り 、 複数の System Generator ト ー ク ン を異な る レ ベルに含め る こ と が可能です (レ ベルご と に 1 つ)。 上位にほかの System Generator ト ー ク ン があ る も のは ス レーブ、 上位にほかの System Generator ブ ロ ッ ク がない も のはマ ス タ ー と な り ます。1 つの System Generator ト ー ク ンの適用範 囲は、ブ ロ ッ ク が挿入 さ れてい る レベル と 、その レベルの下にあ る すべてのサブシ ス テ ムです。[Simulink system period] な ど の一部のパ ラ メ ー タ ーは、 マ ス タ ーで し か指定で き ません。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 39 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 System Generator ト ー ク ン を 追加 し た ら 、 コ ー ド の生成お よ び合成の処理方法 を 指定で き ま す。 次の図に、 System Generator ト ー ク ンのパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス を示 し ます。 コ ンパイル タ イ プ と [Generate] ボ タ ン [Generate] ボ タ ン を ク リ ッ ク す る と 、 System Generator でデザ イ ンの一部が コ ンパ イ ル さ れ、 等価の低位の も のに生成 さ れます。 コ ンパ イ ル さ れ る 部分は、 ブ ロ ッ ク を含むサブシ ス テ ムがルー ト と な っ てい る 部分です。 デザ イ ン全体を コ ンパ イ ルす る には、System Generator ト ー ク ン をデザ イ ンの最上位に配置 し ます。 コ ンパ イ ル タ イ プ ([Compilation]) は、 生成す る 結果の タ イ プ を指定 し ます。 次のオプシ ョ ンがあ り ます。 • [HDL Netlist] : HDL ネ ッ ト リ ス ト • [Various varieties of hardware co-simulation] : さ ま ざ ま な タ イ プのハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン • [IP Catalog] : デザ イ ン を Vivado IP カ タ ロ グに追加 し て別のデザ イ ンで使用で き る IP コ ア と し てパ ッ ケージ し ま す。 • [Synthesized Checkpoint] : Vivado IDE プ ロ ジ ェ ク ト で使用で き る 合成済みチ ェ ッ ク ポ イ ン ト フ ァ イ ル (synth_1.dcp) を作成 し ます。 GUI 説明 Part 使用す る FPGA デバ イ ス を指定 し ます。 Target directory コ ンパ イ ル結果を保存す る デ ィ レ ク ト リ を指定 し ます。 System Generator お よ び FPGA イ ン プ リ メ ン テーシ ョ ン ツールでは多数の フ ァ イ ルが生成 さ れ る ので、 個別のデ ィ レ ク ト リ (Simulink モデル フ ァ イ ルが含まれ る デ ィ レ ク ト リ と は別のデ ィ レ ク ト リ ) を作成す る こ と をお勧め し ます。 デ ィ レ ク ト リ は、 絶対パ ス (c:\netlist な ど) ま たはモデルを含むデ ィ レ ク ト リ を基準 と し た 相対パ ス (netlist な ど) で指定で き ます。 Hardware description language デザ イ ン の HDL ネ ッ ト リ ス ト で使用す る 言語を指定 し ます。 [VHDL] ま た は [Verilog] を選択で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 40 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 GUI 説明 Create testbench HDL テ ス ト ベンチを作成する よ う 指定 し ます。 HDL シ ミ ュ レー タ でテ ス ト ベンチを シ ミ ュ レーシ ョ ン し 、 コ ンパ イ ル さ れたデザ イ ンのシ ミ ュ レーシ ョ ン結果を Simulink シ ミ ュ レーシ ョ ン結果 と 比較 し ます。 System Generator で は、 デザ イ ン を Simulink でシ ミ ュ レーシ ョ ン し 、 Gateway ブ ロ ッ ク で検出 さ れ る 値を保存す る こ と に よ り 、 テ ス ト ベ ク タ ーを作成 し ま す。 テ ス ト ベン チの最上位 HDL フ ァ イ ルの名前は、<name>_tb.vhd/.v と な り ます (name はテ ス ト す る デザ イ ンの部分か ら 導出 さ れた名前、拡張子はハー ド ウ ェ ア記述言 語に よ り 異な る )。 Create interface document オンに し て [Generate] ボ タ ン を ク リ ッ ク する と 、System Generator でネ ッ ト リ ス ト 記述 さ れ る デザ イ ン を示す HTM フ ァ イ ルが作成 さ れます。 こ の フ ァ イ ルは、 ネ ッ ト リ ス ト フ ォ ルダーの documentation フ ォ ルダーに含まれます。 FPGA clock period シ ス テ ム ク ロ ッ ク の周期を ns で指定 し ます。 値は整数であ る 必要はあ り ま せん。 こ こ で指定 し た周期は、 制約フ ァ イ ルでグ ロ ーバル PERIOD 制約 と し て設定 さ れ、 ザ イ リ ン ク ス イ ン プ リ メ ン テーシ ョ ン ツールに渡 さ れ ま す。 複数サ イ ク ル パス は、 こ の値の整数倍に制約 さ れます。 Clock pin location ハー ド ウ ェ ア ク ロ ッ ク の ピ ン ロ ケーシ ョ ン を指定 し ます。 こ の情報は、 制 約フ ァ イ ルを介 し てザ イ リ ン ク ス イ ンプ リ メ ン テーシ ョ ン ツールに渡 さ れ ます。 DCM input clock period(ns) DCM 入力 ク ロ ッ ク 周期が [FPGA clock period(ns)] オプ シ ョ ン (シ ス テ ム ク ロ ッ ク ) と 異な る 場合に指定 し ます。 こ れで FPGA ク ロ ッ ク 周期 (シ ス テ ム ク ロ ッ ク ) が こ のハー ド ウ ェ ア定義の入力か ら 派生する よ う にな り ます。 Simulink シ ス テム周期 System Generator ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で、Simulink シ ス テ ム周期 ([Simulink system period]) を 指定す る 必要があ り ます。 こ の値は、デザ イ ンのシ ミ ュ レーシ ョ ン を実行する 基準レー ト を秒で指定 し ます。Simulink シ ス テ ム周期は、 デザ イ ン で使用 さ れ る すべてのサンプ リ ン グ周期の公約数にす る 必要があ り ます。 た と えば、 サン プ リ ン グ周期 2、 6、 8 を使用す る ブ ロ ッ ク を含むデザ イ ン では、 使用可能な最大の Simulink シ ス テ ム周期は 2 です が、 1 お よ び 0.5 も 使用可能です。 サ ン プ リ ン グ周期は、 明示的に指定す る か、 自動的に算出 さ れ る か、 内部レー ト が変わ る ブ ロ ッ ク 内で黙示的に決ま り ます。 シ ス テ ム周期のハー ド ウ ェ ア ク ロ ッ ク への影響については、 タ イ ミ ン グ と ク ロ ッ ク を参照 し て く だ さ い。 デザ イ ン を シ ミ ュ レーシ ョ ン ま たは コ ンパ イ ルす る 前に、 System Generator でシ ス テ ム周期がデザ イ ン のすべてのサ ンプ リ ン グ周期の公約数にな っ てい る かが検証 さ れます。 問題が検出 さ れた場合は、 適切な値を推奨す る ダ イ ア ロ グ ボ ッ ク ス が表示 さ れます。 [Update] ボ タ ン を ク リ ッ ク す る と 、 推奨 さ れた値が使用 さ れます。 シ ス テ ム周期競合のサ マ リ を表示す る には、[View Conflict Summary] ボ タ ン を ク リ ッ ク し ます。 [Update] を ク リ ッ ク し た場合は、 シ ミ ュ レー シ ョ ン ま たは コ ンパ イ ルを再実行す る 必要があ り ます。 周期を調整で き ないために、 一貫性がない System Generator モデルにな っ て し ま う 可能性 も あ り ます。 た と えば、 シ ス テ ム レー ト で動作す る 必要のあ る ブ ロ ッ ク でUp Sample ブ ロ ッ ク を駆動す る と 、 一貫性のないモデルにな り ます。 シ ス テ ム周期を ア ッ プデー ト し て も 競合が起 き る 場合は、モデルに一貫性がない と い う こ と であ り 、修正が必要です。 周期は階層で制御 さ れます。 詳細は、 「階層制御」 を参照 し て く だ さ い。 ブ ロ ッ ク ア イ コ ンの表示 モデルに表示す る ブ ロ ッ ク のア イ コ ンの表示を制御 し ます。 モデルを コ ンパ イ ル し た後 (生成ま たはシ ミ ュ レーシ ョ ン を実行、 あ る いは Ctrl + D を押す)、 ブ ロ ッ ク の情報が こ のオプシ ョ ンでの選択に応 じ て表示 さ れます。 • [Default] : ポー ト の方向に関す る 基本的な情報が表示 さ れます。 • [Sample rates] : 各ポー ト のサンプ リ ン グ レー ト が表示 さ れます。 • [Pipeline stages] : パ イ プ ラ イ ン段数が表示 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 41 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 • [HDL port names] : ポー ト 名が表示 さ れます。 • [Input data types] : 各ポー ト の入力デー タ 型が表示 さ れます。 • [Output data types] : 各ポー ト の出力デー タ 型が表示 さ れます。 階層制御 System Generator ト ー ク ンの [Simulink system period] オプシ ョ ン (Simulink シ ス テ ム周期 を参照) は、 階層で制御 さ れ ます。 設定は、 System Generator ト ー ク ンが適用 さ れ る 範囲にのみ適用 さ れ、 下位にあ る System Generator ト ー ク ン で 変更 さ れ ます。 た と えば、 デザ イ ン の最上位にあ る System Generator ト ー ク ン で [Simulink system period] が設定 さ れ てお り 、 サブシ ス テ ムに配置 さ れてい る System Generator ト ー ク ンでは別の値が設定 さ れてい る と し ます。 こ の場合、 サブシ ス テ ム では 2 番目のシ ス テ ム周期が使用 さ れ ますが、 デザ イ ンのその他の部分では最上位の System Generator ト ー ク ンで設定 さ れた シ ス テ ム周期が使用 さ れます。 コ ンパイル結果 こ のセ ク シ ョ ン では、 System Generator ト ー ク ン で [HDL Netlist] を選択 し て [Generate] ボ タ ン を ク リ ッ ク し た と き に 生成 さ れ る 低位フ ァ イ ルについて説明 し ます。 こ の フ ァ イ ルには、 デザ イ ン を イ ンプ リ メ ン テ ト す る HDL が含まれ ます。 ま た、 System Generator では、 1 つの Vivado IDE プ ロ ジ ェ ク ト で HDL フ ァ イ ル と その他のハー ド ウ ェ ア フ ァ イ ルが分け ら れてい ます。 すべての フ ァ イ ルは、 System Generator ト ー ク ンで指定 し たデ ィ レ ク ト リ に生成 さ れます。 テ ス ト ベンチを作成す る よ う 指定 し ていない場合 ([Create testbench] を オ フ)、 生成 さ れ る フ ァ イ ルは次の と お り です。 フ ァ イル名/ タ イ プ 説明 <design_name>.vhd/.v こ の フ ァ イ ルには、 ク ロ ッ ク / ク ロ ッ ク イ ネーブル制御 と 一緒に階層構造ネ ッ ト リ ス ト が含まれます。 <design_name_entity_declarations>.vhd/. v こ の フ ァ イ ルには、デザ イ ンの System Generator ブ ロ ッ ク のモジ ュ ール定義のエン テ ィ テ ィ が含まれます。 <design_name>.xpr Vivado IDE デザ イ ンの属性をすべて記述 し た Vivado IDE プ ロ ジ ェ ク ト フ ァ イ ル。 テ ス ト ベンチを作成す る よ う 指定 し てい る 場合は ([Create testbench] を オン)、上記の フ ァ イ ルに加え、シ ミ ュ レーシ ョ ン結果を比較す る ための フ ァ イ ルが生成 さ れます。 Simulink シ ミ ュ レーシ ョ ン結果 と ModelSim のシ ミ ュ レーシ ョ ン 結果が比較 さ れます。 生成 さ れ る 追加フ ァ イ ルは、 次の と お り です。 フ ァ イル名/ タ イ プ 説明 DAT フ ァ イ ル Simulink でのシ ミ ュ レーシ ョ ン結果が含まれます。 <design_name>_tb.vhd/.v デザ イ ン を ラ ッ プする テ ス ト ベンチ。 シ ミ ュ レーシ ョ ン を実行す る と 、 こ のテ ス ト ベン チに よ り デジ タ ル シ ミ ュ レ ー タ のシ ミ ュ レ ーシ ョ ン結果 と Simulink のシ ミ ュ レ ーシ ョ ン結果が比較 さ れ ます。 Sysmte Generator 制約フ ァ イルの使用 デザ イ ン を コ ンパ イ ルす る と 、 ダ ウ ン ス ト リ ーム ツールでのデザ イ ンの処理方法を指示する 制約が生成 さ れます。 こ の制約フ ァ イ ルに よ り 、 よ り 質の高い イ ンプ リ メ ン テーシ ョ ンが短時間で生成 さ れます。 制約は、 次の情報を供給 し ます。 • シ ス テ ム ク ロ ッ ク の周期 • シ ス テ ム ク ロ ッ ク に対す る デザ イ ンの さ ま ざ ま な部分の ス ピー ド 要件 • ポー ト を配置す る 必要のあ る ピ ン ロ ケーシ ョ ン • ポー ト の動作ス ピー ド Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 42 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 シ ス テ ム ク ロ ッ ク 周期 (デザ イ ン で最速のハー ド ウ ェ ア ク ロ ッ ク の周期) は、System Generator ト ー ク ン で指定で き ま す。 System Generator で指定 し た周期は、 制約フ ァ イ ルに記述 さ れ ます。 ダ ウ ン ス ト リ ーム ツールでデザ イ ンが イ ン プ リ メ ン ト さ れ る 際、 こ の周期が目標 と し て使用 さ れます。 複数サイ ク ル パス制約 多 く のデザ イ ンは、 異な る ク ロ ッ ク レー ト で動作す る 複数の部分か ら 構成 さ れてい ま す。 最速の部分ではシ ス テ ム ク ロ ッ ク が使用 さ れ、 その他の部分の ク ロ ッ ク 周期は、 シ ス テ ム ク ロ ッ ク 周期の整数倍にな り ます。 ダ ウ ン ス ト リ ー ム ツールに、 デザ イ ンの各部分で達成す る 必要のあ る ス ピー ド を伝達す る 必要があ り ます。 こ の情報に よ り 、 ツール の効率お よ び効果が大幅に向上 し 、 短い コ ンパ イ ル時間で よ り 改善 さ れたハー ド ウ ェ ア を実現で き ます。 デザ イ ンの 分割、 それぞれの部分の ス ピー ド は、 制約フ ァ イ ルでマルチサ イ ク ル パス制約を使用 し て指定 さ れます。 IOB タ イ ミ ング制約 と 配置制約 System Generator の Gateway In と Gateway Out ブ ロ ッ ク は、 ハー ド ウ ェ アに変換 さ れ る と 入力ポー ト と 出力ポー ト に な り ます。 こ れ ら のポー ト の位置 と ス ピー ド は、 Gateway In お よ び Gateway Out ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で入力 し ます。 ポー ト の ロ ケーシ ョ ン と ス ピー ド は、 制約フ ァ イ ルで IOB タ イ ミ ン グ ご と に指定 さ れます。 こ のセ ク シ ョ ンでは、System Generator で生成 さ れ る HDL でハー ド ウ ェ ア ク ロ ッ ク が ど の よ う に処理 さ れ る か を説明 し ま す。 <design> と い う 名前のデザ イ ン が あ り 、 こ の名前は HDL 識別子 と し て 有効で あ る と し ま す。 System Generator でデザ イ ン を コ ンパ イ ルす る と 、 複数の HDL エン テ ィ テ ィ ま たはモジ ュ ールが記述 さ れ、 最上位の も のに <design> と い う 名前が付け ら れ、 <design>.vhd/.v と い う フ ァ イ ルに保存 さ れます。 [Clock Enables] マルチ レー ト イ ン プ リ メ ン テーシ ョ ン ク ロ ッ ク と ク ロ ッ ク イ ネーブルは対に し て、 HDL 全体に配置 さ れ ます。 典型的な ク ロ ッ ク 名は clk_1、 clk_2、 clk_3 で、 その対にな る ク ロ ッ ク イ ネーブルの名前はそれぞれ ce_1、 ce_2、 お よ び ce_3 です。 名前か ら ク ロ ッ ク / ク ロ ッ ク イ ネーブルのペアの動作レー ト がわか り ます。 clk_1 お よ び ce_1 で駆動 さ れ る ロ ジ ッ ク はシ ス テ ム レー ト (最速) で 動作 し 、 clk_2 お よ び ce_2 で駆動 さ れ る ロ ジ ッ ク はシ ス テ ム レー ト の 1/2 で動作 し ます。 ク ロ ッ ク お よ び ク ロ ッ ク イ ネーブルは、 <design> エン テ ィ テ ィ ま たはモジ ュ ール内では駆動 さ れず、 最上位入力ポー ト と な り ます。 System Generator で生成 さ れた HDL に含まれ る ク ロ ッ ク と ク ロ ッ ク イ ネーブルの名前か ら 、ク ロ ッ ク 供給はま っ た く 一般的であ る よ う に見え ますが、 そ う ではあ り ま せん。 こ れを説明す る ため、 た と えば、 デザ イ ン に clk_1 と clk_2 と い う ク ロ ッ ク が含ま れてお り 、 対応す る ク ロ ッ ク イ ネーブルが ce_1 お よ び ce_2 であ る と し ます。 こ の場合、 ハー ド ウ ェ アで ce_1 お よ び ce_2 信号を High に し 、clk_2 を clk_1 の 1/2 の レー ト であ る ク ロ ッ ク 信号で駆動すれば よ さ そ う にみえ ますが、 ほ と ん ど の System Generator デザ イ ン では こ れでは う ま く い き ません。 その代わ り 、 clk_1 と clk_2 を同 じ ク ロ ッ ク で駆動 し 、 ce_1 を High に接続 し て、 ce_2 を clk_1 と clk_2 の 1/2 の レー ト に し ます。 Vivado プ ロ ジ ェ ク ト [HDL Netlist] お よ び [IP Calalog] を コ ンパ イ ル タ ーゲ ッ ト に選択す る と 、 サンプルの Vivado プ ロ ジ ェ ク ト も 生成 さ れ ます。 こ れは コ ー ド 生成の結果を統合 さ せた も のです。 [HDL Netlist] を選択 し た場合は、 System Generator でデザ イ ン さ れたモジ ュ ールが、 Vivado プ ロ ジ ェ ク ト で最上位に 設定 さ れ、 IP の イ ン ス タ ン ス も 含まれます。 ま た、 [Create testbench] を System Generator ト ー ク ン で選択 し た場合は、 テ ス ト ベンチお よ びス テ ィ ミ ュ ラ ス フ ァ イ ル (*.dat) も プ ロ ジ ェ ク ト に追加 さ れます。 [IP Catalog] を選択 し た場合は、 サンプル プ ロ ジ ェ ク ト が次の機能を含めた状態で作成 さ れます。 • System Generator か ら 生成 さ れた IP が既にプ ロ ジ ェ ク ト に関連付け ら れた IP カ タ ロ グに追加 さ れてお り 、RTL フ ロ ーお よ び IP イ ン テ グ レー タ ー ベース フ ロ ーで使用で き る よ う にな っ てい ます。 • デザ イ ンには、 RTL フ ロ ーでの IP の イ ン ス タ ン シエー ト 方法を示す <design>_stub の下に、 <ip>_0 と い う 名前の RTL で イ ン ス タ ン シエー ト さ れた IP が含まれます。 • デザ イ ンには、 同 じ IP を RTL フ ロ ーに イ ン ス タ ン シエー ト す る <design>_tb と い う テ ス ト ベンチが含まれます。 注記 : AXI4-Lite イ ン タ ーフ ェ イ ス生成が Gateway In ま たは Gateway Out ブ ロ ッ ク で選択 さ れてい る 場合は、テ ス ト ベンチは作成 さ れません。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 43 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 • こ のサンプル プ ロ ジ ェ ク ト で選択 さ れてい る パーツ が Zynq-7000 AP SoC の場合は、 Zynq-7000 サブシ ス テ ムの あ る サンプル IP イ ン テ グ レー タ ー図 も プ ロ ジ ェ ク ト に含まれます。その他すべてのパーツには、MicroBlaze ベー ス のサブシ ス テ ムが作成 さ れます。 HDL テ ス ト ベン チ 通常、System Generator デザ イ ンはビ ッ ト 精度お よ びサ イ ク ル精度であ り 、Simulink でのシ ミ ュ レーシ ョ ン結果はハー ド ウ ェ アでの動作 と 完全に一致 し ます。 し か し 、 場合に よ っ ては、 Simulink シ ミ ュ レーシ ョ ンの結果 と HDL シ ミ ュ レー タ でのシ ミ ュ レーシ ョ ン結果を比較 し ておいたほ う が よ い こ と があ り ます。デザ イ ンにブ ラ ッ ク ボ ッ ク ス が含ま れてい る 場合は、 特にそ う です。 System Generator ト ー ク ンのパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で [Create testbench] を オンにす る と 、 こ れが可能です。 デザ イ ン の名前が design で、 最上位に System Generator ト ー ク ン が配置 さ れてい る と し ま す。 こ の ト ー ク ン のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス では、 [Compilation] が [HDL Netlist] に設定 さ れてお り 、 [Create testbench] がオンにな っ てい ます。 [Generate] を ク リ ッ ク す る と 、 通常デザ イ ンに対 し て生成 さ れ る フ ァ イ ルに加え、 次の フ ァ イ ルが生成 さ れます。 1. テ ス ト ベンチ HDL エン テ ィ テ ィ を含む <design>_tb.vhd/.v 2. HDL テ ス ト ベンチ シ ミ ュ レーシ ョ ンで使用す る ベス ト ベ ク タ ーを含む DAT フ ァ イ ル 3. Vivado Integrated Design Environment (IDE) を使用する と RTL シ ミ ュ レーシ ョ ンが実行で き ます。詳細は、『Vivado Design Suite ユーザー ガ イ ド : ロ ジ ッ ク シ ミ ュ レーシ ョ ン』 (UG900) を参照 し て く だ さ い。 DAT フ ァ イ ルには、 Gateway ブ ロ ッ ク を通過す る 値が保存 さ れ ます。 HDL シ ミ ュ レーシ ョ ン では、 DAT フ ァ イ ルか ら の入力値が ス テ ィ ミ ュ ラ ス、 出力値が予測結果 と な り ます。 テ ス ト ベンチは、 デザ イ ンの HDL に ス テ ィ ミ ュ ラ ス を供給 し 、 HDL の結果 と 予測結果を比較する ための ラ ッ パーです。 MATLAB の FPGA への コ ンパイル System Generator では、 MCode ブ ロ ッ ク に よ り MATLAB が直接的にサポー ト さ れてい ます。 MCode ブ ロ ッ ク は、 入 力値を M 関数に適用 し 、 ザ イ リ ン ク ス の固定小数点デー タ 型を評価 し ます。 評価は、 サ ン プ リ ン グ周期ご と に行わ れます。 MCode ブ ロ ッ ク では、 持続型変数を使用す る こ と に よ り 、 内部ス テー ト を保持で き ます。 入力ポー ト は指定 の M 関数の入力引数、 出力ポー ト は M 関数の出力引数に よ り 決定 さ れます。 MCode ブ ロ ッ ク は、 有限ス テー ト マシ ン、 制御 ロ ジ ッ ク 、 演算処理の多いシ ス テ ム を構築す る のに便利です。 MCode ブ ロ ッ ク を使用す る には、 M 関数を記述する 必要があ り ます。 M フ ァ イ ルは、 M フ ァ イ ルを使用する モデル のデ ィ レ ク ト リ ま たは MATLAB パ ス に配置 し ます。 次に、 MCode ブ ロ ッ ク を使用す る 例を示 し ます。 • 例 1 : 単純なセ レ ク タ ー - 入力の最大値を返すフ ァ ン ク シ ョ ン を イ ンプ リ メ ン ト す る 方法を示 し ます。 • 例 2 : 単純な数値演算 - 単純な演算処理を イ ンプ リ メ ン ト す る 方法を示 し ます。 • 例 3 : レ イ テ ン シのあ る 複素乗算器 - レ イ テ ン シ を持つ複素乗算器を構築す る 方法を示 し ます。 • 例 4 : シ フ ト 操作 - シ フ ト 操作を イ ンプ リ メ ン ト す る 方法を示 し ます。 • 例 5 : MCode ブ ロ ッ ク へパ ラ メ ー タ ーを渡す - MCode ブ ロ ッ ク にパ ラ メ ー タ ーを渡す方法を示 し ます。 • 例 6 : オプシ ョ ンの入力ポー ト - MCode ブ ロ ッ ク にオプシ ョ ンの入力ポー ト を イ ンプ リ メ ン ト す る 方法を示 し ま す。 • 例 7 : 有限ス テー ト マシ ン - 有限ス テー ト マシ ンの イ ンプ リ メ ン ト 方法を示 し ます。 • 例 8 : パ ラ メ ー タ ー指定可能な ア キ ュ ム レー タ - パ ラ メ ー タ ー指定可能な ア キ ュ ム レー タ を構築す る 方法を示 し ます。 • 例 9 : FIR と シ ス テ ム検証 - FIR ブ ロ ッ ク をモデ リ ン グ し 、 シ ス テ ム検証を実行す る 方法を示 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 44 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 • 例 10 : RPN カ リ キ ュ レー タ ー - RPN カ リ キ ュ レー タ ー (ス タ ッ ク マシ ン) をモデ リ ン グする 方法を示 し ます。 • 例 11 : disp 関数 - disp 関数を使用 し て変数値をプ リ ン ト する 方法を示 し ます。 例 1 と 2 は、 System Generator の イ ン ス ト ー ル デ ィ レ ク ト リ の examples/mcode_block デ ィ レ ク ト リ に あ る mcode_block_tutorial.mdl フ ァ イ ル に、 例 3 と 4 は mcode_block_tutorial2.mdl フ ァ イ ル に、 例 5 と 6 は mcode_block_tutorial3.mdl フ ァ イ ル に、 例 7 と 8 は mcode_block_tutorial4.mdl フ ァ イ ル に、 例 9 は mcode_block_verify_fir.mdl フ ァ イ ルに、 例 10 は mcode_block_rpn_calculator.mdl フ ァ イ ルに含まれます。 単純なセ レ ク タ ー こ の例では、 2 つの入力の最大値を出力に割 り 当て る 、 単純なデー タ パ ス コ ン ト ロ ー ラ ーを示 し ます。 M 関数は次 の よ う に定義 さ れ、 xlmax.m と い う M フ ァ イ ルに保存 さ れます。 function z = xlmax(x, y) if x > y z = x; else z = y; end xlmax.m フ ァ イ ルは、 モデル フ ァ イ ル と 同 じ デ ィ レ ク ト リ ま たは MATLAB パ ス に保存する 必要があ り ます。 xlmax.m を 適切な場所に保存 し た ら 、 MCode ブ ロ ッ ク を モデルに ド ラ ッ グ し てパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス を 開 き 、 [MATLAB Function] に 「xlmax」 と 入力 し ます。 [OK] を ク リ ッ ク す る と 、 ブ ロ ッ ク に入力ポー ト x と y、 出力ポー ト z が表示 さ れます。 次の図に、 モデルを コ ンパ イ ル し た後のブ ロ ッ ク を示 し ます。 ブ ロ ッ ク で計算が実行 さ れ、 出力ポー ト に必要な固定 小数点デー タ 型が設定 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 45 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 単純な数値演算 こ の例では、 単純な数値演算 と 型変換を示 し ます。 xlSimpleArith と い う M 関数を定義す る xlSimpleArith.m フ ァ イ ル の内容は、 次の と お り です。 function [z1, z2, z3, z4] = xlSimpleArith(a, b) % xlSimpleArith demonstrates some of the arithmetic operations % supported by the Xilinx MCode block.The function uses xfix() % to create Xilinx fixed-point numbers with appropriate % container types.% % You must use a xfix() to specify type, number of bits, and % binary point position to convert floating point values to % Xilinx fixed-point constants or variables. % By default, the xfix call uses xlTruncate % and xlWrap for quantization and overflow modes. % const1 is Ufix_8_3 const1 = xfix({xlUnsigned, 8, 3}, 1.53); % const2 is Fix_10_4 const2 = xfix({xlSigned, 10, 4, xlRound, xlWrap}, 5.687); z1 = a + const1; z2 = -b - const2; z3 = z1 - z2; % convert z3 to Fix_12_8 with saturation for overflow z3 = xfix({xlSigned, 12, 8, xlTruncate, xlSaturate}, z3); % z4 is true if both inputs are positive z4 = a>const1 & b>-1; こ の M 関数では、 加算お よ び減算演算子を使用 し てい ます。 MCode ブ ロ ッ ク は、 こ れ ら の演算子を完全精度で計算 し ます。 つま り 、 出力の精度は、 情報を失わずに こ れ ら の演算を実行す る のに十分であ る と い う こ と です。 こ こ で、 xfix と い う 関数の呼び出 し に注目 し て く だ さ い。 こ の関数では、 固定小数点デー タ 型の精度 と 値の 2 つの引 数が必要です。 精度は、 セル配列で指定 し ます。 精度のセル配列の最初の要素はデー タ 型で、 xlUnsigned、 xlSigned、 xlBoolean のいずれかの型にな り ます。 2 番目の要素は固定小数点値の ビ ッ ト 数、 3 番目の要素は 2 進小数点の位置を 指定 し ま す。 デー タ 型が xlBoolean で あ る 場合は、 ビ ッ ト 数お よ び 2 進小数点の位置を指定す る 必要はあ り ま せん。 ビ ッ ト 数 と 2 進小数点の位置は、 対に し て指定す る 必要があ り ます。 4 番目の要素は量子化モー ド 、 5 番目の要素は オーバーフ ロ ー モー ド を指定 し ます。 量子化モー ド は、 xlTruncate、 xlRound、 ま たは xlRoundBanker のいずれかに指 定 し ます。 オーバーフ ロ ー モー ド は、 xlWrap、 xlSaturate、 ま たは xlThrowOverflow のいずれかに指定 し ます。 量子化 モー ド と オーバーフ ロ ー モー ド は、 対に し て指定す る 必要があ り ます。 量子化モー ド と オーバーフ ロ ー モー ド を指 定 し ない場合は、 符号付 き お よ び符号な し の値に対 し て xlTruncate と xlWrap が使用 さ れます。 xfix 関数の 2 番目の引 数は、 倍精度ま たはザ イ リ ン ク ス固定小数点値で指定 し ます。 定数が整数値であ る 場合は、 xfix 関数を使用す る 必要 はあ り ません。 MCode ブ ロ ッ ク で、 自動的に適切な固定小数点値に変換 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 46 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 MCode ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で [MATLAB Function] に 「xlSimpleArith」 を入力 し た場合は、 ブ ロ ッ ク に 2 つの入力ポー ト a お よ び b と 、 4 つの出力ポー ト z1、 z2、 z3、 お よ び z4 が表示 さ れます。 ザ イ リ ン ク ス のデー タ 型お よ び関数を使用す る M 関数は、 MATLAB の [Command Window] でテ ス ト で き ますた と え ば、 MATLAB の [Command Window] に 「[z1, z2, z3, z4] = xlSimpleArith(2, 3)」 と 入力す る と 、 次の行が表示 さ れます。 UFix(9, 3):3.500000 Fix(12, 4):-8.687500 Fix(12, 8):7.996094 Bool: true 2 つの引数 2 お よ び 3 は、 自動的に固定小数点値に変換 さ れてい ます。 引数 と し て浮動小数点値を使用す る 場合は、 xfix 関数呼び出 し が必要です。 レ イ テ ン シのある複素乗算器 こ の例では、 複素乗算器の作成方法を示 し ます。 xlcpxmult 関数を定義する xlcpxmult.m フ ァ イ ルの内容は、 次の と お り です。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 47 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 function [xr, xi] = xlcpxmult(ar, ai, br, bi) xr = ar * br - ai * bi; xi = ar * bi + ai * br; 次の図に、 サブシ ス テ ム を示 し ます。 MCode ブ ロ ッ ク の後に、 2 つの Delay ブ ロ ッ ク が追加 さ れてい ます。 Delay ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス の [Implementation] タ ブで [Implement using behavioral HDL] を オ ン にす る と 、 ダ ウ ン ス ト リ ーム の ロ ジ ッ ク 合成 ツールで、 ハ イ パフ ォーマ ン ス を達成する ために適切な最適化を実行で き ます。 シ フ ト 操作 こ の例では、 MCode ブ ロ ッ ク を使用 し た ビ ッ ト シ フ ト 操作の イ ンプ リ メ ン ト 方法を示 し ます。 シ フ ト 操作は、 2 のべ き 乗での乗算お よ び除算で達成 さ れます。 た と えば、 4 で乗算す る こ と は 2 ビ ッ ト の左シ フ ト と 同 じ であ り 、 8 で割 る こ と は 3 ビ ッ ト の右シ フ ト と 同 じ です。 シ フ ト 操作は、 2 進小数点の位置の移動お よ び必要に応 じ て ビ ッ ト 幅の拡 張に よ り イ ン プ リ メ ン ト さ れ ま す。 Fix_8_4 値 を 4 で乗算す る と Fix_8_2 値に な り 、 Fix_8_4 を 64 で乗算す る と Fix_10_0 値にな り ます。 次に、 1 左シ フ ト と 1 右シ フ ト を定義す る xlsimpleshift.m フ ァ イ ルの内容を示 し ます。 function [lsh3, rsh2] = xlsimpleshift(din) % [lsh3, rsh2] = xlsimpleshift(din) does a left shift % 3 bits and a right shift 2 bits. % The shift operation is accomplished by % multiplication and division of power % of two constant. lsh3 = din * 8; rsh2 = din / 4; Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 48 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 次の図に、 コ ンパ イ ル後のサブシ ス テ ム を示 し ます。 MCode ブ ロ ッ クへパラ メ ー タ ーを渡す こ の例では、 MCode ブ ロ ッ ク にパ ラ メ ー タ ーを渡す方法を示 し ます。 M 関数への入力引数は、 MCode ブ ロ ッ ク の入 力ポー ト と し て、 ま たはブ ロ ッ ク の内部パ ラ メ ー タ ー と し て解釈 さ れます。 次の M コ ー ド は、 xl_sconvert.m に含まれ る M 関数 xl_sconvert を定義 し ます。 function dout = xl_sconvert(din, nbits, binpt) proto = {xlSigned, nbits, binpt}; dout = xfix(proto, din); 次の図に、 M 関数 xl_sconvert を使用す る 2 つの MCode ブ ロ ッ ク を含むサブシ ス テ ム を示 し ます。 M 関数の引数 nbits と binpt には、 各 MCode ブ ロ ッ ク に異な る パ ラ メ ー タ ーを渡す こ と に よ り 、 異な る 値が指定 さ れます。 signed convert1 と い う MCode ブ ロ ッ ク では、 渡 さ れ る パ ラ メ ー タ ーに よ り 入力デー タ が Fix_16_8 か ら Fix_10_5 に変換 さ れ ま す。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 49 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 signed convert2 と い う MCode ブ ロ ッ ク では、渡 さ れ る パ ラ メ ー タ ーに よ り 入力デー タ が Fix_16_8 か ら Fix_8_4 に変換 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 50 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 各 MCode ブ ロ ッ ク にパ ラ メ ー タ ーを渡すには、 MCode ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で [Interface] タ ブ を ク リ ッ ク し 、 M 関数の引数を設定 し ます。 次に、 MCode ブ ロ ッ ク signed convert 1 の設定を示 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 51 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 上図の [Iinterface] タ ブでは、 M 関数の引数 nbits を 10 に、 binpt を 5 に設定 し てい ます。 次に、 MCode ブ ロ ッ ク signed convert 2 の設定を示 し ます。 上図の [Iinterface] タ ブでは、 M 関数の引数 nbits を 8 に、 binpt を 4 に設定 し てい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 52 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 オプ シ ョ ンの入力ポー ト こ の例では、 MCode ブ ロ ッ ク にパ ラ メ ー タ ーを渡す機能を使用 し て、 MCode ブ ロ ッ ク でオプシ ョ ン の入力ポー ト を 使用す る か ど う か を指定す る 方法を示 し ます。 次の M コ ー ド は、 xl_m_addsub.m に含まれ る M 関数 xl_m_addsub を定義 し ます。 function s = xl_m_addsub(a, b, sub) if sub s = a - b; else s = a + b; end 次の図に、 M 関数 xl_m_addsub を使用す る 2 つの MCode ブ ロ ッ ク を含むサブシ ス テ ム を示 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 53 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 次に、 add と い う 名前の MCode ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス を示 し ます。 こ の設定に よ り 、 入力ポー ト a と b が使用 さ れ、 完全精度の加算が実行 さ れ ます。 addsub と い う MCode ブ ロ ッ ク で は、 入力パ ラ メ ー タ ー sub の [Bind to value] に何 も 指定 さ れていないので、 addsub ブ ロ ッ ク では入力ポー ト a、 b、 お よ び sub が使用 さ れ、 入力ポー ト sub の値に応 じ て完全精度の加算ま たは減算が実行 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 54 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 有限ス テー ト マ シ ン こ の例では、 MCode ブ ロ ッ ク と 内部ス テー ト 変数を使用 し て有限ス テー ト マシ ン を作成す る 方法を示 し ます。 次の 図に示すス テー ト マシ ンは、 入力デー タ の 1011 と い う パ タ ーン を検出 し ます。 MCode ブ ロ ッ ク で使用 さ れ る M 関数には、 現在の入力の ス テー ト に基づいて次の ス テー ト を算出する 遷移関数が含 まれてい ます。例 3 と は異な り 、 こ の例の M 関数では持続型ス テー ト 変数を定義 し て、MCode ブ ロ ッ ク に有限ス テー ト マシ ンの ス テー ト を保存 し ます。 次の M コ ー ド は、 detect1011_w_state.m に含まれ る M 関数 detect1011_w_state を 定義 し ます。 function matched = detect1011_w_state(din) % This is the detect1011 function with states for detecting a % pattern of 1011. seen_none = 0; % seen_1 = 1; % % seen_10 = 2; % % seen_101 = 3; % % initial state, if input is 1, switch to seen_1 first 1 has been seen, if input is 0, switch seen_10 10 has been detected, if input is 1, switch to seen_1011 now 101 is detected, is input is 1, 1011 is detected and the FSM switches to seen_1 % the state is a 2-bit register persistent state, state = xl_state(seen_none, {xlUnsigned, 2, 0}); % the default value of matched is false matched = false; switch state case seen_none if din==1 state = seen_1; else state = seen_none; end case seen_1 % seen first 1 if din==1 state = seen_1; else state = seen_10; end Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 55 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 case seen_10 % seen 10 if din==1 state = seen_101; else % no part of sequence seen, go to seen_none state = seen_none; end case seen_101 if din==1 state = seen_1; matched = true; else state = seen_10; matched = false; end end 次の図に、 M 関数 detect1101_w_state を使用す る MCode ブ ロ ッ ク を含むス テー ト マシ ン サブシ ス テ ム を示 し ます。 パラ メ ー タ ー指定可能な アキ ュ ムレー タ こ の例では、 MCode ブ ロ ッ ク を使用 し て、 柔軟な イ ンプ リ メ ン テーシ ョ ン を可能にす る ため持続性ス テー ト 変数 と パ ラ メ ー タ ーを定義 し た ア キ ュ ム レー タ を作成す る 方法を示 し ます。 次の M コ ー ド は、 xl_accum.m に含まれ る M 関数 xl_accum を定義 し ます。 function q = xl_accum(b, rst, load, en, nbits, ov, op, feed_back_down_scale) % q = xl_accum(b, rst, nbits, ov, op, feed_back_down_scale) is % equivalent to our Accumulator block. binpt = xl_binpt(b); init = 0; precision = {xlSigned, nbits, binpt, xlTruncate, ov}; persistent s, s = xl_state(init, precision); q = s; if rst if load % reset from the input port s = b; else % reset from zero s = init; end else if ~en else Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 56 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 % if enabled, update the state if op==0 s = s/feed_back_down_scale + b; else s = s/feed_back_down_scale - b; end end end 次の図に、 M 関数 xl_accum を使用す る ア キ ュ ム レー タ MCode ブ ロ ッ ク を含むサブシ ス テ ム を示 し ます。 MCode ブ ロ ッ ク には、 MCode Accumulator と い う 名前が付いてい ます。 サブシ ス テ ムには、 比較のため、 Accumulator と い う 名 前のザ イ リ ン ク ス ア キ ュ ム レー タ ブ ロ ッ ク も 含まれてい ます。 MCode ブ ロ ッ ク は、 ザ イ リ ン ク ス ア キ ュ ム レー タ ブ ロ ッ ク と 同 じ 機能を持ち ますが、 MCode ブ ロ ッ ク のパ ラ メ ー タ ーを マ ス ク イ ン タ ーフ ェ イ ス (パ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス の [Interface] タ ブ) で指定 し てい る 点が異な り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 57 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 MCode Accumlator のオプシ ョ ンの入力 rst お よ び load は、 [Interface] タ ブでデ ィ ス エーブルに設定 さ れてい ます。 次 に、 MCode Accumulator ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス を示 し ます。 こ の例には、 同 じ M 関数を使用 し た MCode ブ ロ ッ ク のア キ ュ ム レ ー タ サブシ ス テ ム が さ ら に 2 つ含 ま れてい ます が、 異な る パ ラ メ ー タ ー設定を使用 し て、 異な る ア キ ュ ム レー タ を作成 し てい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 58 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 FIR と シ ス テム検証 こ の例では、 MCode ブ ロ ッ ク を使用 し て FIR を モデ リ ン グす る 方法 と 、 MCode ブ ロ ッ ク でシ ス テ ム検証を実行す る 方法を示 し ます。 こ の例には、 FIR ブ ロ ッ ク が 2 つ含ま れてい ます。 こ れ ら のブ ロ ッ ク は MCode ブ ロ ッ ク で定義 さ れてお り 、 ど ち ら も 合成可能です。 次の コ ー ド は、 こ れ ら 2 つのブ ロ ッ ク を定義す る 2 つの関数です。 function y = simple_fir(x, lat, coefs, len, c_nbits, c_binpt, o_nbits, o_binpt) coef_prec = {xlSigned, c_nbits, c_binpt, xlRound, xlWrap}; out_prec = {xlSigned, o_nbits, o_binpt}; coefs_xfix = xfix(coef_prec, coefs); persistent coef_vec, coef_vec = xl_state(coefs_xfix, coef_prec); persistent x_line, x_line = xl_state(zeros(1, len-1), x); persistent p, p = xl_state(zeros(1, lat), out_prec, lat); sum = x * coef_vec(0); for idx = 1:len-1 sum = sum + x_line(idx-1) * coef_vec(idx); sum = xfix(out_prec, sum); end y = p.back; p.push_front_pop_back(sum); x_line.push_front_pop_back(x); function y = fir_transpose(x, lat, coefs, len, c_nbits, c_binpt, o_nbits, o_binpt) coef_prec = {xlSigned, c_nbits, c_binpt, xlRound, xlWrap}; out_prec = {xlSigned, o_nbits, o_binpt}; coefs_xfix = xfix(coef_prec, coefs); persistent coef_vec, coef_vec = xl_state(coefs_xfix, coef_prec); persistent reg_line, reg_line = xl_state(zeros(1, len), out_prec); if lat <= 0 error('latency must be at least 1'); end lat = lat - 1; persistent dly, if lat <= 0 y = reg_line.back; else dly = xl_state(zeros(1, lat), out_prec, lat); Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 59 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 y = dly.back; dly.push_front_pop_back(reg_line.back); end for idx = len-1:-1:1 reg_line(idx) = reg_line(idx - 1) + coef_vec(len - idx - 1) * x; end reg_line(0) = coef_vec(len - 1) * x; パ ラ メ ー タ ーは、 次の よ う に設定 さ れます。 2 つのブ ロ ッ ク の機能が同一であ る こ と を検証する ため、 MCode ブ ロ ッ ク を も う 1 つ使用 し て 2 つのブ ロ ッ ク の出力 を比較 し ます。 2 つの出力が等 し く ない場合は、 エ ラ ー チ ェ ッ ク ブ ロ ッ ク に よ り エ ラ ーが レ ポー ト さ れます。 エ ラ ー チ ェ ッ ク は、 次の関数に よ り 行われます。 function eq = error_ne(a, b, report, mod) persistent cnt, cnt = xl_state(0, {xlUnsigned, 16, 0}); switch mod case 1 eq = a==b; case 2 eq = isnan(a) || isnan(b) || a == b; case 3 eq = ~isnan(a) && ~isnan(b) && a == b; otherwise eq = false; error(['wrong value of mode ', num2str(mod)]); end if report if ~eq error(['two inputs are not equal at time ', num2str(cnt)]); end end cnt = cnt + 1; Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 60 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 こ のブ ロ ッ ク は、 次の よ う に設定 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 61 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 RPN カ リ キ ュ レー タ ー こ の例では、MCode ブ ロ ッ ク を使用 し て、ス タ ッ ク マシ ンであ る RPN カ リ キ ュ レー タ ーを構築す る 方法を示 し ます。 こ のブ ロ ッ ク は、 合成可能です。 次の関数は、 RPN カ リ キ ュ レー タ ーを定義 し ます。 function [q, active] = rpn_calc(d, rst, en) d_nbits = xl_nbits(d); % the first bit indicates whether it's a data or operator is_oper = xl_slice(d, d_nbits-1, d_nbits-1)==1; din = xl_force(xl_slice(d, d_nbits-2, 0), xlSigned, 0); % the lower 3 bits are operator op = xl_slice(d, 2, 0); % acc the the A register persistent acc, acc = xl_state(0, din); % the stack is implemented with a RAM and % an up-down counter persistent mem, mem = xl_state(zeros(1, 64), din); persistent acc_active, acc_active = xl_state(false, {xlBoolean}); persistent stack_active, stack_active = xl_state(false, ... Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 62 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 {xlBoolean}); stack_pt_prec = {xlUnsigned, 5, 0}; persistent stack_pt, stack_pt = xl_state(0, {xlUnsigned, 5, 0}); % when en is true, it's action OP_ADD = 2; OP_SUB = 3; OP_MULT = 4; OP_NEG = 5; OP_DROP = 6; q = acc; active = acc_active; if rst acc = 0; acc_active = false; stack_pt = 0; elseif en if ~is_oper % enter data, push if acc_active stack_pt = xfix(stack_pt_prec, stack_pt + 1); mem(stack_pt) = acc; stack_active = true; else acc_active = true; end acc = din; else if op == OP_NEG % unary op, no stack op acc = -acc; elseif stack_active b = mem(stack_pt); switch double(op) case OP_ADD acc = acc + b; case OP_SUB acc = b - acc ; case OP_MULT acc = acc * b; case OP_DROP acc = b; end stack_pt = stack_pt - 1; elseif acc_active acc_active = false; acc = 0; end end end stack_active = stack_pt ~= 0; Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 63 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 disp 関数 次の MCode 関数は、 disp 関数を使用 し て変数値を指定する 方法を示 し ます。 function x = testdisp(a, b) persistent dly, dly = xl_state(zeros(1, 8), a); persistent rom, rom = xl_state([3, 2, 1, 0], a); disp('Hello World!'); disp(['num2str(dly) is ', num2str(dly)]); disp('disp(dly) is '); disp(dly); disp('disp(rom) is '); disp(rom); a2 = dly.back; dly.push_front_pop_back(a); x = a + b; disp(['a = ', num2str(a), ', ', ... 'b = ', num2str(b), ', ', ... 'x = ', num2str(x)]); disp(num2str(true)); disp('disp(10) is'); disp(10); disp('disp(-10) is'); disp(-10); disp('disp(a) is '); disp(a); disp('disp(a == b)'); disp(a==b); MCode ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス の [Advanced] タ ブで、 [Enable printing with disp] を オンにす る 必 要があ り ます。 次に、 最初のシ ミ ュ レーシ ョ ン ス テ ッ プで MATLAB の [Command Window] に表示 さ れ る 行を示 し ます。 mcode_block_disp/MCode (Simulink time:0.000000, FPGA clock:0) Hello World! num2str(dly) is [0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000] Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 64 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 disp(dly) is type:Fix_11_7, maxlen:8, length:8, 0: binary 0000.0000000, double 0.000000, 1: binary 0000.0000000, double 0.000000, 2: binary 0000.0000000, double 0.000000, 3: binary 0000.0000000, double 0.000000, 4: binary 0000.0000000, double 0.000000, 5: binary 0000.0000000, double 0.000000, 6: binary 0000.0000000, double 0.000000, 7: binary 0000.0000000, double 0.000000, disp(rom) is type:Fix_11_7, maxlen:4, length:4, 0: binary 0011.0000000, double 3.0, 1: binary 0010.0000000, double 2.0, 2: binary 0001.0000000, double 1.0, 3: binary 0000.0000000, double 0.0, a = 0.000000, b = 0.000000, x = 0.000000 1 disp(10) is type:UFix_4_0, binary:1010, double:10.0 disp(-10) is type:Fix_5_0, binary:10110, double:-10.0 disp(a) is type:Fix_11_7, binary:0000.0000000, double:0.000000 disp(a == b) type:Bool, binary:1, double:1 System Generator デザイ ンの大型シス テムへのイ ン ポー ト System Generator デザ イ ンは、 大型 HDL デザ イ ンに組み込まれ る こ と が よ く あ り ます。 こ のセ ク シ ョ ンでは、 2 つの System Generator デザ イ ン を大型デザ イ ン に組み込む方法、 System Generator で作成 し た VHDL を シ ス テ ム全体のシ ミ ュ レーシ ョ ン モデルに組み込む方法を説明 し ます。 HDL ネ ッ ト リ ス ト コ ンパイル [System Generator] ダ イ ア ロ グ ボ ッ ク ス で コ ンパ イ ル タ イ プに [HDL Netlist] を選択す る と 、 デザ イ ン を イ ンプ リ メ ン ト す る ための HDL と その他の関連フ ァ イ ルが生成 さ れます。ま た、Vivado シ ミ ュ レー タ を使用 し たデザ イ ンのシ ミ ュ レーシ ョ ンや Vivado 合成を使用 し た論理合成な ど のダ ウ ン ス ト リ ーム処理を簡略化す る 補助フ ァ イ ル も 生成 さ れ ま す。 詳細は、 「System Generator の コ ンパ イ ル タ イ プ」 を参照 し て く だ さ い。 デザイ ン ルールの統合 System Generator モデルを大型デザ イ ンに組み込む場合、 次の 2 つのデザ イ ン ルールに従 う 必要があ り ます。 ルール 1 : Gateway ブ ロ ッ ク ま たは System Generator ト ー ク ンで IOB/CLK ロ ケーシ ョ ン制約を指定 し ないで く だ さ い。 ま た、 IOB タ イ ミ ン グ制約は none に設定する 必要があ り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 65 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 ルール 2 : 最上位デザ イ ン ま で上げ る 必要のあ る System Generator デザ イ ンか ら の I/O ポー ト があ る 場合、適切なバ ッ フ ァ ーを最上位の HDL コ ー ド に イ ン ス タ ン シエー ト す る 必要があ り ます。 コ ン フ ィ ギ ャ ラ ブル サブ シ ス テム と System Generator コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムは、 Simulink の標準パーツ と し て使用可能なブ ロ ッ ク であ り 、 基本ブ ロ ッ ク を複数 指定で き る ブ ロ ッ ク です。 各ブ ロ ッ ク はそれぞれ可能な イ ンプ リ メ ン テーシ ョ ンであ り 、 ど の イ ンプ リ メ ン テーシ ョ ン を使用す る か を自由に選択で き ます。 た と えば、 System Generator で汎用 FIR フ ィ ル タ ーを コ ン フ ィ ギ ャ ラ ブル サ ブシ ス テ ム と し て指定 し 、 そのサブシ ス テ ムの基にな る ブ ロ ッ ク と し て特定の FIR フ ィ ル タ ーを複数指定 し ます。 高 速だがハー ド ウ ェ ア リ ソ ー ス を多 く 必要 と す る フ ィ ル タ ー、 比較的低速だがハー ド ウ ェ ア リ ソ ース を あ ま り 必要 と し ない フ ィ ル タ ーな ど を指定で き ま す。 フ ィ ル タ ーの選択を切 り 替え る こ と に よ り 、 ハー ド ウ ェ ア コ ス ト ま たは ス ピー ド を優先 し た場合の動作を調べ る こ と がで き ます。 コ ン フ ィ ギ ャ ラ ブル サブ シ ス テムの定義 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ム を定義す る には、 Simulink ラ イ ブ ラ リ を作成 し ます。 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムの基にな る ブ ロ ッ ク は、 こ の ラ イ ブ ラ リ で管理 さ れます。 ラ イ ブ ラ リ を作成す る には、 次の手順に従い ます。 • 空の ラ イ ブ ラ リ を作成 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 66 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 • 作成 し た ラ イ ブ ラ リ に基にな る ブ ロ ッ ク を追加 し ます。 • テ ンプ レー ト ブ ロ ッ ク を ラ イ ブ ラ リ に ド ラ ッ グ し ます([Simulink] ラ イ ブ ラ リ → [Ports & Subsystems] にあ る Configurable Subsystem テ ンプ レー ト を ラ イ ブ ラ リ に追加 し ます)。 • 必要に応 じ て、 テ ンプ レー ト ブ ロ ッ ク の名前を変更 し ます。 • ラ イ ブ ラ リ を保存 し ます。 • テ ンプ レー ト を ダブル ク リ ッ ク し て開 き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 67 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 • [設定ダ イ ア ロ グ] ダ イ ア ロ グ ボ ッ ク ス で、 必要なブ ロ ッ ク のチ ェ ッ ク ボ ッ ク ス を オンに し ます。 • [OK] を ク リ ッ ク し 、 その後 ラ イ ブ ラ リ を保存 し ます。 コ ン フ ィ ギ ャ ラ ブル サブ シ ス テムの使用 デザ イ ンで コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ム を使用する には、 次の手順に従い ます。 • コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ム を定義する ラ イ ブ ラ リ を作成 し ます。 • ラ イ ブ ラ リ を開 き ます。 • ラ イ ブ ラ リ か ら テ ンプ レー ト をデザ イ ンの適切な位置に ド ラ ッ グ し ます。 • ド ラ ッ グ し た テ ンプ レー ト が、 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムの イ ン ス タ ン ス にな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 68 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 • イ ン ス タ ン ス を右 ク リ ッ ク し 、 [Block choice] を ク リ ッ ク し て、 使用する ブ ロ ッ ク を選択 し ます。 コ ン フ ィ ギ ャ ラ ブル サブ シ ス テムから のブ ロ ッ クの削除 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムか ら ブ ロ ッ ク を削除する には、 次の手順に従い ます。 • コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムの ラ イ ブ ラ リ を開き 、 ラ イ ブ ラ リ の ロ ッ ク を解除 し ます。 • テ ンプ レー ト を ダブル ク リ ッ ク し 、 削除す る ブ ロ ッ ク のチ ェ ッ ク ボ ッ ク ス をオ フ に し ます。 • [OK] を ク リ ッ ク し 、 その後ブ ロ ッ ク を削除 し ます。 • ラ イ ブ ラ リ を保存 し ます。 • Ctrl + D を押 し 、 デザ イ ン を コ ンパ イ ル し ます。 • 必要に応 じ て、 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムの各 イ ン ス タ ン ス の選択を ア ッ プデー ト し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 69 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 コ ン フ ィ ギ ャ ラ ブル サブ シ ス テムへのブ ロ ッ ク の追加 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムにブ ロ ッ ク を追加する には、 次の手順に従い ます。 • コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムの ラ イ ブ ラ リ を開き 、 ラ イ ブ ラ リ の ロ ッ ク を解除 し ます。 • ブ ロ ッ ク を ラ イ ブ ラ リ に ド ラ ッ グ し ます。 • テ ンプ レー ト を ダブル ク リ ッ ク し 、 追加 し たブ ロ ッ ク のチ ェ ッ ク ボ ッ ク ス をオンに し ます。 • [OK] を ク リ ッ ク し 、 その後 ラ イ ブ ラ リ を保存 し ます。 • Ctrl + D を押 し 、 デザ イ ン を コ ンパ イ ル し ます。 • 必要に応 じ て、 コ ン フ ィ ギ ャ ラ ブル サブシ ス テ ムの各 イ ン ス タ ン ス の選択を ア ッ プデー ト し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 70 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 ハイ パフ ォ ーマ ン ス FPGA デザイ ン に関する注記 バ ッ ク エン ド イ ンプ リ メ ン テーシ ョ ン ツールを使用 し て最適化エ フ ォー ト に重点を置いた場合、 次の理由か ら タ イ ミ ン グ ク ロ ージ ャ が達成で き ない こ と があ り ます。 • System Generator デザ イ ンに含まれ る FIR Compiler お よ び FFT の よ う な よ り 複雑な IP ブ ロ ッ ク が生成 さ れ、 こ れ ら は合成ツールお よ び イ ン プ リ メ ン テーシ ョ ン ツールに高度に最適化 さ れたネ ッ ト リ ス ト と し て提供 さ れ る の で、 さ ら に詳細な最適化がで き ない こ と があ り ます。 • System Generator ネ ッ ト リ ス ト で多 く の イ ン ス タ ン シエー ト 済みプ リ ミ テ ィ ブ (レ ジ ス タ 、 BRAM、 DSP48E1 な ど ) を含めて HDL コ ー ド が生成 さ れます。 こ れ ら のエ レ メ ン ト を最適化で き る 合成ツールはあ ま り あ り ません。 次の ヒ ン ト は、 イ ン プ リ メ ン テーシ ョ ン プ ロ セ ス を開始す る 前にデザ イ ン パフ ォ ーマ ン ス を上げ る ために、 System Generator でで き る こ と を示 し てい ます。 • 各ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス に含ま れてい る 「Hardware Notes」 を読む • デザ イ ンの入力 と 出力に レ ジ ス タ を付け る • パ イ プ ラ イ ン レ ジ ス タ を挿入す る • [Saturate] お よ び [Round] オプシ ョ ンは必要な場合以外は使用 し ない • すべての Gateway ブ ロ ッ ク でデー タ レー ト オプシ ョ ン を設定する • その他の方法を試 し てみ る 各ブ ロ ッ ク のパラ メ ー タ ー ダ イ ア ログ ボ ッ ク スに含まれている 「Hardware Notes」 を読む ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス に含まれてい る 「Hardware Notes」 を読む よ う に し て く だ さ い。 ザ イ リ ン ク ス ブ ロ ッ ク セ ッ ト ラ イ ブ ラ リ の多 く のブ ロ ッ ク では、 最 も 効率の良いハー ド ウ ェ ア イ ンプ リ メ ン テーシ ョ ン を 達成す る 方法が記載 さ れてい ます。 た と えば、 Scale ブ ロ ッ ク には こ のブ ロ ッ ク にハー ド ウ ェ ア コ ス ト がかか ら ない こ と が記述 さ れてい ますが、 同 じ 目的で使用す る こ と のあ る Shift ブ ロ ッ ク では場合に よ っ てハー ド ウ ェ アが使用 さ れ る こ と が記述 さ れてい ます。 デザイ ンの入力 と 出力に レ ジ ス タ を付ける デザ イ ンの入力 と 出力に レ ジ ス タ を付け ます。 次の図に示す よ う に、 レ ジ ス タ を付け る には、 Gateway In ブ ロ ッ ク の 後お よ び Gateway Out ブ ロ ッ ク の前に、 レ イ テ ン シ 1 の Delay ブ ロ ッ ク ま たは Register ブ ロ ッ ク を 1 つま たは複数配 置 し ます。 Register ブ ロ ッ ク の機能のいずれか を追加す る と 、 追加のハー ド ウ ェ ア リ ソ ース が必要にな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 71 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 I/O に 2 つの レ ジ ス タ を付け る と 、 有益な場合があ り ます。 こ の場合、 Register ブ ロ ッ ク を 2 つ イ ン ス タ ン シエー ト す る か、 レ イ テ ン シが 1 の Delay ブ ロ ッ ク を 2 つ イ ン ス タ ン シエー ト し ます。 こ の よ う にする と 、1 つの レ ジ ス タ が IOB 内に配置 さ れ、 も う 1 つの レ ジ ス タ が FPGA の ロ ジ ッ ク の横に配置 さ れます。 Delay ブ ロ ッ ク の レ イ テ ン シ を 2 に し て も 、 レ イ テ ン シ 2 のブ ロ ッ ク が SRL16 を使用 し て イ ン プ リ メ ン ト さ れ、 IOB 内に配置 さ れないので、 同 じ 結果に はな り ません。 パイ プ ラ イ ン レ ジ ス タ を挿入する 可能な限 り 、 パ イ プ ラ イ ン レ ジ ス タ を挿入 し て く だ さ い。 パ イ プ ラ イ ンは、 Delay ブ ロ ッ ク を使用 し て効率的に イ ン プ リ メ ン ト で き ます (SRL16 プ リ ミ テ ィ ブが使用 さ れ る )。 レ ジ ス タ に初期値を指定す る 必要があ る 場合は、 Register ブ ロ ッ ク を使用 し て く だ さ い。 ま た、 SRL16 の入力パ ス が タ イ ミ ン グ を満た さ ない場合は、 関連する Delay ブ ロ ッ ク の前に Register ブ ロ ッ ク を配置 し 、 Delay ブ ロ ッ ク の レ イ テ ン シ を 1 に削減 し ます。 こ れに よ り 、 配線ツールの柔軟 性が さ ら に増 し 、 Register お よ び Delay ブ ロ ッ ク (SRL + Register) を離 し て配置 し て、 こ のパ ス の配線遅延のマージ ン を最大にで き ます。 次に示す よ う に、 Convert ブ ロ ッ ク を エンベデ ッ ド レ ジ ス タ 段 と パ イ プ ラ イ ン接続する と 、 最大パフ ォーマ ン ス を達 成で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 72 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 ザ イ リ ン ク ス ブ ロ ッ ク で よ り 効率的な イ ンプ リ メ ン テーシ ョ ン を達成す る には、 [Implement using behavioral HDL] オ プシ ョ ン を オンに し ます。 次に示す よ う に、 Delay ブ ロ ッ ク の遅延が 32 以上の場合、 ザ イ リ ン ク ス合成に よ り 1 つの LUT にマ ッ プ さ れ る SRLC32E (32 ビ ッ ト のシ フ ト レ ジ ス タ ) が推論 さ れます。 BRAM (ブ ロ ッ ク RAM) には、 内部出力レ ジ ス タ を使用 し て く だ さ い。 こ れはレ イ テ ン シ を 1 (デフ ォ ル ト ) か ら 2 に 設定す る と 使用で き ます。 こ れに よ り 、 BRAM 出力レ ジ ス タ が イ ネーブルにな り ます。 DSP48E1 を使用す る 場合は、 入力、 出力、 お よ び内部レ ジ ス タ を、 FIFO を使用する 場合は、 エンベデ ッ ド レ ジ ス タ オプシ ョ ン を使用 し ます。 ま た、 すべての高位 IP ブ ロ ッ ク のパ イ プ ラ イ ン オプシ ョ ン を確認 し ます。 [Saturate] および [Round] オプ シ ョ ンは必要な場合以外は使用 し な い こ れ ら のオプシ ョ ン を使用す る と 、 リ ソ ース が多 く 使用 さ れ、 パフ ォーマ ン ス が低下 し ます。 必要な場合にのみ使用 し て く だ さ い。 た と えば、 Reinterpret ブ ロ ッ ク の場合、 ど の ロ ジ ッ ク も 失われ る こ と はあ り ません。 Convert (cast) ブ ロ ッ ク の場合、 量子化 (Quantization) が切 り 捨て (Truncate) でオーバーフ ロ ー (Overflow) が折 り 返 し (Wrap) に設定 さ れていれば、 ど の ロ ジ ッ ク も 失 う こ と はあ り ません。 デー タ 型に丸め (Rounding) お よ び飽和 (Saturation) オプシ ョ ン を使用す る 必要があ る 場合は、 Convert ブ ロ ッ ク をエンベデ ッ ド レ ジ ス タ 段 と パ イ プ ラ イ ン接続 し ます。 DSP48E1 を 使用す る 場合、 丸めは DSP48E1 内で実行で き ます。 すべての Gateway ブ ロ ッ ク でデー タ レー ト オプ シ ョ ン を設定す る Gateway In ブ ロ ッ ク と Gateway Out ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で、 [IOB timing constraint] に [Data rate] を選択 し ま す。 こ のオプシ ョ ン を選択す る と 、 IOB が動作す る デー タ レ ー ト で制約 さ れ ま す。 こ の レ ー ト は、 System Generator ト ー ク ンの [Simulink system period(sec)] の値、お よ びデザ イ ン内のその他のサンプ リ ン グ周期に対す る Gateway ブ ロ ッ ク のサンプ リ ン グ レー ト に よ っ て決定 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 73 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 その他の方法を試 し てみる • ソ ース デザ イ ン を変更す る ° パ イ プ ラ イ ン を追加で使用す る BRAM お よ び DSP48 内の出力レ ジ ス タ お よ びパ イ プ ラ イ ン レ ジ ス タ を使用する ° パ ラ レルで関数を実行す る 遅い ク ロ ッ ク レー ト でパ ラ レルに関数を実行する ° リ タ イ ミ ン グ手法を使用す る 組み合わせ ロ ジ ッ ク を使用 し て既存レ ジ ス タ を移動す る ° ハー ド コ ア を可能な箇所で使用する 分散 RAM の代わ り にブ ロ ッ ク RAM を使用する ° • 関数に対 し て さ ま ざ ま なデザ イ ン アプ ロ ーチを使用する デザ イ ンに制約を付けすぎ ない デザ イ ンに制約を付けすぎ ないで、 適宜、 ア ッ プ/ダ ウ ン サンプル ブ ロ ッ ク を使用す る • ク リ テ ィ カルなデザ イ ン モジ ュ ールの周波数を削減する • イ ンプ リ メ ン テーシ ョ ン ツールで調整する ° さ ま ざ ま な合成オプシ ョ ン を試 し てみ る ° ク リ テ ィ カル モジ ュ ールを フ ロ アプ ラ ンする FDATool を使用 し たデジ タ ル フ ィ ル タ ー ア プ リ ケー ション 次の例では、 FDATool ブ ロ ッ ク を使用 し て FIR フ ィ ル タ ーを指定、 イ ンプ リ メ ン ト 、 シ ミ ュ レーシ ョ ンす る 1 つの方 法を示 し ます。 FDATool ブ ロ ッ ク を フ ィ ル タ ーの次数お よ び係数を定義す る ために使用 し 、 ザ イ リ ン ク ス ブ ロ ッ ク Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 74 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 セ ッ ト を使用 し て MAC ベース の FIR フ ィ ル タ ーを 1 つの MAC エン ジ ン で イ ンプ リ メ ン ト し ます。 その後、 周波数 応答の質を倍精度の Simulink フ ィ ル タ ー モデル と 比較す る こ と に よ り 検証 し ます。 こ の例では 1 つの MAC エン ジ ンの FIR フ ィ ル タ ーが使用 さ れてい ますが、ザ イ リ ン ク ス リ フ ァ レ ン ス ブ ロ ッ ク セ ッ ト の一部 と し て提供 さ れてい る DSP ラ イ ブ ラ リ のブ ロ ッ ク を見てみ る こ と をお勧め し ます。DSP ラ イ ブ ラ リ には、複 数の MACを含む例や、 メ モ リ の タ イ プが異な る マルチ チ ャ ネル イ ンプ リ メ ン テーシ ョ ンの例が含まれてい ます。 System Generator デモ ラ イ ブ ラ リ に も 、MAC ベース の補間フ ィ ル タ ーを効率的に イ ンプ リ メ ン ト す る 例が示 さ れてい ます。 こ のデモを参照す る には、 MATLAB の [Command Window] に次の よ う に入力 し ます。 >> demo blockset xilinx 表示 さ れた ウ ィ ン ド ウ で、 デモ デザ イ ンの リ ス ト か ら [Polyphase 1:8 filter using SRL16Es] を ク リ ッ ク し ます。 デザイ ンの概要 こ のデザ イ ン では、 [Signal Processing Blockset] → [Signal Processing Source] にあ る Random Source ブ ロ ッ ク を使用 し 、 FIR フ ィ ル タ ーの 2 つの イ ンプ リ メ ン テーシ ョ ン を駆動 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 75 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 • 最初の フ ィ ル タ ーは、 ザ イ リ ン ク ス デバ イ ス に イ ンプ リ メ ン ト し ます。 こ の フ ィ ル タ ーは、 デ ュ アル ポー ト ブ ロ ッ ク メ モ リ と MAC を使用 し て イ ンプ リ メ ン ト さ れた、 固定小数点 FIR フ ィ ル タ ーです。 • 2 つ目の フ ィ ル タ ーは Reference Filter で、 倍精度の直接型 II 転置フ ィ ル タ ーです。 各フ ィ ル タ ーの周波数応答は、 伝達関数ス コ ープで表示 さ れます。 FIR フ ィ ル タ ーの係数の生成 1. MATLAB の [Command Window] で、 cd コ マ ン ド を使用 し て C:/ug897-example-files/mac_df2t デ ィ レ ク ト リ に移動 し ます。 2. 「mac_df2t」 と 入力 し 、 デザ イ ン モデルを開 き ます。 こ の演習のため、 変数 coef、 coef_width、 coef_binpt、 data_width、 data_binpt、 お よ び Fs は定義 さ れてい ません。 こ れ ら の変数は、 MAC Based FIR ブ ロ ッ ク のマ ス ク パ ラ メ ー タ ー と し て使用 し 、 FDATool を使用 し て フ ィ ル タ ーを設計 し 、 割 り 当て ます。 完全に機能す る モデルが、 同 じ デ ィ レ ク ト リ に mac_df2t_soln.mdl と い う 名前で含まれてい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 76 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 MAC Based FIR ブ ロ ッ ク のパラ メ ー タ ー指定 1. MAC Based FIR ブ ロ ッ ク を右 ク リ ッ ク し 、 [Edit Mask] を ク リ ッ ク し ます。 2. [Parameters] タ ブ を ダブル ク リ ッ ク し 、 coef、 data_width お よ び data_binpt パ ラ メ ー タ ーを追加 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 77 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 FIR フ ィ ル タ ーの係数の生成 と 割 り 当て 1. [Xilinx Blockset] → [DSP] にあ る FDATool ブ ロ ッ ク を ド ラ ッ グ し てモデルに追加 し ます。 2. FDATool ブ ロ ッ ク を ダブル ク リ ッ ク し 、 オーデ ィ オ シ ス テ ムで高周波数 ノ イ ズ を除去す る ロ ーパ ス フ ィ ル タ の 次の仕様を入力 し ます。 ° [Response Type] : Lowpass ° [Filter Order] : Minimum order ° [Frequency Specifications] : ° 3. - [Units] : Hz - [Fs] : 44100 - [Fpass] : 6000 - [Fstop] : 7725 [Magnitude Specifications] : - [Units] : dB - [Apass] : 1 - [Astop] : 48 [Design Filter] を ク リ ッ ク し 、 フ ィ ル タ 次数 と 振幅応答を確認 し ます。 ツールバー ボ タ ン を ク リ ッ ク し て、 位相応答、 イ ンパルス応答、 フ ィ ル タ 係数な ど も 表示で き ます。 上記の仕様 を満たすには、 43 タ ッ プ FIR フ ィ ル タ ー (順番 0-42) が必要であ る こ と が示 さ れます。 フ ィ ル タ ー係数を表示す る には、 MATLAB の [Command Window] で次の よ う に入力 し ます。 >> xlfda_numerator('FDATool') 次の コ マ ン ド を使用す る と 、 係数幅 と 2 進小数点を正 し く 指定す る ための最大係数値お よ び最小係数値を知 る こ と がで き ます。 >> max(xlfda_numerator('FDATool')) Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 78 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 >> min(xlfda_numerator('FDATool')) こ の演習では、 係数 タ イ プは Fix_12_12 (2 進小数点が 12 番目のビ ッ ト の左側にあ る 12 ビ ッ ト 値) に設定 さ れて い ます。 max() 関数の結果、 最大係数は 0.3022 であ り 、 2 進小数点を最上位ビ ッ ト の左側に配置で き ます。 こ れ は、 Fix_12_12 の値の範囲が -0.5 ~ 0.4998 であ り 、 2 進小数点を最上位ビ ッ ト の左側に配置す る こ と で、 ダ イ ナ ミ ッ ク 範囲を最大限にで き る か ら です。 2 進小数点を右に移動す る と (Fix_12_11 値を使用)、 Fix_12_11 値の範囲 が -1 ~ 0.9995 で係数を表現す る のに必要以上あ る ため、 ダ イ ナ ミ ッ ク 範囲が 1 ビ ッ ト 失われます。 4. Reference Filter ブ ロ ッ ク お よ び MAC Based FIR ブ ロ ッ ク を ク リ ッ ク し 、 coef、 coef_width、 coef_binpt、 data_width、 data_binpt お よ び Fs パ ラ メ ー タ ーの値が次の よ う にな っ てい る か ど う かか確認 し ます。 各ダ イ ア ロ グ ボ ッ ク ス の [OK] を ク リ ッ ク し ます。 ザイ リ ン ク ス フ ィ ル タ ー ブ ロ ッ ク の理解 次に、 こ の演習の MAC Based FIR を イ ンプ リ メ ン ト し たブ ロ ッ ク 図を示 し ます。 こ の時点では、 MAC Based FIR は 10 ビ ッ ト の符号付 き 入力デー タ (Fix_10_8)、12 ビ ッ ト の符号付き 係数 (Fix_12_12)、 43 タ ッ プに設定 さ れてい ます。 こ れ ら のパ ラ メ ー タ ーは、 MAC Based FIR ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で直接変更で き ます。 係数 と デー タ は、 メ モ リ シ ス テ ムに保存す る 必要があ り ます。 こ の演習では、 デー タ と 係 数の保存にデ ュ アル ポー ト メ モ リ を使用 し ます。デー タ のキ ャ プチ ャ お よ び読み出 し には、循環 RAM バ ッ フ ァ を使 用 し ます。 RAM は混合モー ド コ ン フ ィ ギ ュ レーシ ョ ンで使用 さ れ、 ポー ト A で値の書 き 込みお よ び読み出 し が行わ れ (RAM モー ド )、 ポー ト B で係数の読み出 し のみが行われます (ROM モー ド )。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 79 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 乗算器は、 最速のパフ ォーマ ン ス を達成す る ため、 ザ イ リ ン ク ス 7 シ リ ーズ デバ イ ス に含まれてい る エンベデ ッ ド 乗 算器 リ ソ ース を使用 し 、レ イ テ ン シが 3 にな る よ う 設定 さ れてい ます。乗算器お よ びア キ ュ ム レー タ に必要な精度は、 フ ィ ル タ ー タ ッ プ (係数) と タ ッ プ数の関数です。 こ れ ら の数値は設計時に固定 さ れ る ので、 フ ィ ル タ ー仕様を満た す よ う ハー ド ウ ェ ア リ ソ ース を調整で き ます。 ア キ ュ ム レー タ の精度は、 フ ィ ル タ ー タ ッ プに対 し て最大入力を累 積す る のに十分であれば よ く 、 次の式で算出 さ れます。 acc_nbits = ceil(log2(sum(abs(coef*2^coef_width_bp)))) + data_width+ 1; ア キ ュ ム レー タ を リ セ ッ ト す る と 、0 ではな く 現在の入力値に初期化 さ れ る ので、MAC エン ジ ン でデー タ を停止す る こ と な く 送信 し 続け る こ と がで き ます。 MAC エ ン ジ ンは、 出力サン プルの最後の部分積を算出 し た後ア キ ュ ム レー タ に入力サンプルを読み込むので、 ス ト リ ー ミ ン グ操作ではキ ャ プチ ャ レ ジ ス タ が必要です。 最後に、 Down Sample ブ ロ ッ ク でキ ャ プチ ャ レ ジ ス タ のサンプ リ ン グ周期を出力サンプ リ ン グ周期に変換 し ます。 効 率的なハー ド ウ ェ ア イ ン プ リ メ ン テーシ ョ ン を達成す る ため、 こ のブ ロ ッ ク は レ イ テ ン シ を持つ よ う コ ン フ ィ ギ ュ レーシ ョ ン さ れます。 サンプ リ ン グ レー ト は、 係数ア レ イ の長 さ と 同 じ です。 シ ミ ュ レーシ ョ ンの実行 1. シ ミ ュ レーシ ョ ン時間を 0.05 に変更 し てシ ミ ュ レーシ ョ ン を実行 し ます。 次の よ う な メ ッ セージが表示 さ れ る はずです。 System Generator では、 din と い う Gateway In ブ ロ ッ ク か ら 入力サ ン プ リ ン グ周期を取得 し ま すが、 こ の周期は 1/Fs に設定 さ れてい ます。 MAC Based FIR フ ィ ル タ は、 タ ッ プ数に応 じ てオーバーサンプ リ ン グ さ れ る ので、 シ ス テ ム ク ロ ッ ク 周期は常に 1 (フ ィ ル タ ー タ ッ プ数 X Fs) です。 2. System Generator ト ー ク ン を ダブル ク リ ッ ク し 、 Simulink シ ス テ ム周期を変更 し て、 シ ス テ ム ク ロ ッ ク 周期を 5.273427e-007 = 1/(43 * 44100) に指定 し て く だ さ い。 3. シ ミ ュ レーシ ョ ン を実行 し 直す と 、MAC Based FIR フ ィ ル タ のザ イ リ ン ク ス イ ンプ リ メ ン テーシ ョ ンは元の フ ィ ル タ の仕様を満た し 、 周波数応答は倍精度の Simulink モデル と ほぼ同一にな り ます。 フ ィ ル タ ーのパ スバン ド 応答 と 0 が明確に示 さ れます。 次の図 と 同 じ よ う な周波数応答にな る はずです。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 80 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 フ ィ ル タ ーの精度を上げた り 下げた り す る こ と に よ り 、 デザ イ ンの仕様に必要な範囲、 パフ ォーマ ン ス、 質のバ ラ ン ス を取 る こ と がで き ます。 シ ミ ュ レ ー シ ョ ン を 停止 し 、 ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で係数幅 を FIX_10_10、 デー タ 幅 を FIX_8_6 に変更 し ます。 Ctrl + D を押 し てモデルを ア ッ プデー ト し 、 MAC engine ブ ロ ッ ク の階層を表示 し ます。 デー タ パ ス が、 乗算器の出力では 18 ビ ッ ト に、 ア キ ュ ム レー タ では 20 ビ ッ ト にア ッ プデー ト さ れてい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 81 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 シ ミ ュ レーシ ョ ン を再開 し 、 周波数応答が ど の よ う に変化 し たか を観察 し ます。 固定ワー ド 長に よ り 、 減衰が悪化 し てい ます (40dB 未満)。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 82 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 複数の独立ク ロ ッ クのハー ド ウ ェ ア デザイ ン 概要 System Generator for DSP は、サ イ ク ル精度の高度なハー ド ウ ェ ア モデ リ ン グ を使用す る イ ンプ リ メ ン テーシ ョ ン ツー ルで、 そのサ イ ク ルの概念はハー ド ウ ェ アの ク ロ ッ ク の概念 と 類似 し てい ます。 デザ イ ンはサブシ ス テ ム ブ ロ ッ ク の グループにパーテ ィ シ ョ ンで き 、 各サブシ ス テ ムではその他のサブシ ス テ ムのサ イ ク ル周期 と は独立 し た共通のサ イ ク ル周期が使用 さ れます。 こ のセ ク シ ョ ンでは、 グループ を 1 つのサ イ ク ルま たは ク ロ ッ ク ド メ イ ンに ま と め る 方法 と 、 こ れ ら のサ イ ク ル ド メ イ ン間のデー タ の転送方法について説明 し ます。 ま た、 こ のセ ク シ ョ ンでは、 「サ イ ク ル」 と 「 ク ロ ッ ク 」 が同 じ 意味で使用 さ れます。 ク ロ ッ ク ド メ イ ン内のブ ロ ッ ク のグループ分け ブ ロ ッ ク は、 「サブシ ス テ ム」 を使用 し て System Generator と 一緒に ま と め ら れます。 1 つの ク ロ ッ ク ド メ イ ン内でブ ロ ッ ク を グループ分けす る 場合は、 System Generator ト ー ク ン を ク ロ ッ ク ド メ イ ン と し てマー ク す る サブシ ス テ ム内 に配置す る 必要があ る 点が異な り ます。 こ れを次の図に示 し ます。 こ の図では、 src_domain と い う ク ロ ッ ク ド メ イ ンのサブシ ス テ ムが作成 さ れて、 System Generator ト ー ク ンが追加 さ れてお り 、 System Generator ト ー ク ンの [Clocking] タ ブが選択 さ れた状態です。 こ の タ ブでは、 FPGA ク ロ ッ ク 周期が (1000/368) ns (368 MHz) に、 Simulink シ ス テ ム周期が 1 に設定 さ れてお り 、 1 Simulink 秒の前進が FPGA ク ロ ッ ク の (1000/368) ns に該当す る こ と を意味 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 83 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 同様に、 次の図に示す よ う に、 別の ク ロ ッ ク ド メ イ ン を示す別のブ ロ ッ ク グループが dest_domain と い う サブシ ス テ ムに含まれます。 こ のデザ イ ンでは、dest_domain サブシ ス テ ムは 1000/245 ns(245MHz) の FPGA ク ロ ッ ク 周期で実行 さ れ る よ う に コ ン フ ィ ギ ュ レーシ ョ ン さ れ ます。 Simulink シ ス テ ム周期は 368/245 に設定 さ れます。 こ れは、 src_domain サブシ ス テ ム の Simulink シ ス テ ム周期が 1 に設定 さ れてい る ためです。 こ のため、 よ り 速い src_domain か ら のシ ス テ ム周期で標 準化 し ます。 非同期ク ロ ッ ク ド メ イ ン を作成する ために使用する System Generator ブ ロ ッ ク src_domain ? dest_domain ???????????????????????????????????? 1. FIFO ブ ロ ッ ク 2. Dual Port RAM ブ ロ ッ ク 3. Register ブ ロ ッ ク 4. Black Box ブ ロ ッ ク (既存の VHDL、Verilog、お よ び EDIF をデザ イ ンに追加で き ます)。Black Box ユーテ ィ リ テ ィ の詳細は、 第 6 章を参照 し て く だ さ い。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 84 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 こ れ ら のブ ロ ッ ク は、 デザ イ ン コ ン テ キ ス ト に基づいて Synchronous シ ン グル ク ロ ッ ク ブ ロ ッ ク か Multiple ク ロ ッ ク ブ ロ ッ ク のいずれかに自動的に コ ン フ ィ ギ ュ レーシ ョ ン さ れます。 こ のデザ イ ンの場合、 次の図に示す よ う に、 ク ロ ッ ク ド メ イ ン を ま た ぐ ために FIFO ブ ロ ッ ク が使用 さ れてい ます。 デザ イ ン を完了す る には、 デザ イ ン の最上位の FIFO ブ ロ ッ ク と 追加の System Generator ブ ロ ッ ク を含めて、 コ ー ド 生成を イ ネーブルに し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 85 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 最上位 System Generator ト ー ク ンの コ ン フ ィ ギ ュ レーシ ョ ン 最上位 System Generator ト ー ク ンは、 マルチ ク ロ ッ ク デザ イ ンの場合は コ ー ド 生成を開始す る 必要があ る こ と を示す よ う に コ ン フ ィ ギ ュ レーシ ョ ンす る 必要があ り ます。 こ れには、 最上位 System Generator ト ー ク ンで [Enable multiple clocks] チ ェ ッ ク ボ ッ ク ス をオンに し ます。 こ れに よ り 、 src_domain お よ び dest_domain サブシ ス テ ムの ク ロ ッ ク 情報 を こ れ ら のサブシ ス テ ムに含ま れ る System Generator ト ー ク ンか ら 取得する 必要があ る こ と が コ ー ド 生成エン ジ ンに 伝わ り ます。 こ のチ ェ ッ ク ボ ッ ク ス がオ フ の場合、 デザ イ ンは Single Clock デザ イ ン と し て扱われ、 すべての ク ロ ッ ク 情報が最上位 System Generator ブ ロ ッ ク か ら 引 き 継がれます。 ク ロ ッ ク 伝搬アルゴ リ ズム こ こ では、 ク ロ ッ ク 伝搬アルゴ リ ズ ムについて簡単に説明 し ます。 src_domain 内のすべての System Generator ブ ロ ッ ク では、 ク ロ ッ キ ン グが src_domain サブシ ス テ ムの System Generator ト ー ク ンで管理 さ れます。 dest_domain サブシ ス テ ム も 同様です。 FIFO ブ ロ ッ ク の場合、 ク ロ ッ ク はデザ イ ンのその コ ン テ キ ス ト か ら 派生 さ れ ます。 we と din ポー ト は、 src_domain サブシ ス テ ムか ら 出 る 信号で駆動 さ れ る ので、 FIFO の wr_clk は src_domain ク ロ ッ ク に接続 さ れま す。 dout、 %full お よ び re ポー ト は、 dest_domain か ら の信号を駆動する か読み込むので、 FIFO の rd_clk は dest_domain ク ロ ッ ク に接続 さ れ ます。 ク ロ ッ ク ド メ イ ン を横切っ て こ れ ら の信号を混ぜた り 、 一致 さ せた り 、 ま たは ク ロ ッ ク ド メ イ ン を超え てその他のブ ロ ッ ク を使用す る と 、 DRC エ ラ ーにな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 86 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 ク ロ ッ ク 伝搬のデバ ッ グ 最上位 System Generator ト ー ク ン を 使用す る と 、 [General] タ ブ の [Block icon display] を 使用 し て すべ て の System Generator ブ ロ ッ ク ア イ コ ン の 表示 が 制御 で き ま す。 こ の タ ブ か ら 、 [Normalized sample periods] ま た は [Sample frequencies] のいずれか を選択す る と 、 ク ロ ッ ク がデザ イ ン で ど の よ う に伝搬 さ れ る かが理解 し やす く で き ま ます。 マルチ ク ロ ッ ク デザ イ ンの場合、[Normalized sample periods] の ビヘ イ ビ アーでは、一番小 さ い [Simulink system period] がすべてのサンプル周期を標準化す る ために使用 さ れます。 上記の表示を有効にす る には、 最上位 System Generator ト ー ク ンの [Block icon display] を [Normalized Sample Periods] に設定 し 、 [Apply] を ク リ ッ ク し ます。 [Sample Frequencies] の場合、 ポー ト ア イ コ ンのテ キ ス ト 表示が次の計算結果にな り ます。 (1e6/FPGA ク ロ ッ ク 周期) * Simulink シ ス テ ム周期/ポー ト サンプル周期 説明 : [FPGA clock period] : ド メ イ ンの System Generator ト ー ク ンでナ ノ 秒 (ns) で指定 し た FPGA ク ロ ッ ク 周期 [Simulink system period] : ド メ イ ンの System Generator ト ー ク ンで秒単位で指定 し た FPGA ク ロ ッ ク 周期 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 87 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 正 し い ク ロ ッ ク 伝搬を承認す る には、 次の図に示す よ う に [Sample frequencies] を使用す る こ と も で き ます。 シ ミ ュ レーシ ョ ンでハー ド ウ ェ ア ビヘ イ ビ アーが ク ロ ッ ク に関 し てモデ リ ン グ さ れ る よ う にする には、各 ド メ イ ンの Simulink シ ス テ ム周期対 FPGA ク ロ ッ ク 周期の比率が同 じ であ る 必要があ り ます。 こ の関係が正 し い比率で コ ンパ イ ル さ れない と 、 次の図の よ う な警告 メ ッ セージが表示 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 88 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 シ ミ ュ レーシ ョ ン シ ミ ュ レーシ ョ ン を実行す る と 、 dest_domain ス コ ープ と 同 じ く 、 次の よ う な結果にな り ます。 上記に示す よ う に、 シ ミ ュ レーシ ョ ン結果には取得 し たデー タ が予測 し たデー タ であ る こ と が示 さ れます。 注記 : こ の ク ロ ス ク ロ ッ ク ド メ イ ンのシ ミ ュ レーシ ョ ン ビヘ イ ビ アーのサ イ ク ル精度は高 く あ り ません。 複数 ク ロ ッ ク ド メ イ ン信号のデバ ッ グ System Generator では、 ポ ッ プア ッ プ メ ニ ュ ーの [Xilinx View Signal] オプシ ョ ンで複数の さ ま ざ ま な ク ロ ッ ク ド メ イ ンか ら の信号の表示がサポー ト さ れます。 こ れに よ り 、 さ ま ざ ま なサブシ ス テ ムか ら の信号を 1 つのビ ュ ーで表示す る タ ス ク が簡単にな り ます。 ま た、 波形ビ ュ ーアー と Simulink ダ イ ア グ ラ ム間の ク ロ ス プ ロ ーブ機能に よ り 、 デバ ッ グ プ ロ セ ス も 簡単にな っ てい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 89 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 波形ビ ュ ーアーに信号を追加す る には、 モデルで信号を右 ク リ ッ ク し て、 [Xilinx Add To Viewer] を ク リ ッ ク し ます。 デザ イ ン を シ ミ ュ レーシ ョ ンす る と 、 次の図の よ う に波形ビ ュ ーアーが起動 さ れます。 同 じ ク ロ ッ ク ド メ イ ン の 信 号 す べ て が 同様 に 色分 け さ れ ま す。 上記 の 図 で は、 src_domain/Slice/Out1 お よ び dest_domain/Relational/Out1 が異な る ク ロ ッ ク ド メ イ ンにあ り ます。 コ ー ド 生成 マルチ ク ロ ッ ク デザ イ ンの コ ー ド 生成では、 次の コ ンパ イ ル タ ーゲ ッ ト がサポー ト さ れます。 • HDL ネ ッ ト リ ス ト • IP カ タ ロ グ • 合成済みチ ェ ッ ク ポ イ ン ト 次は、 最上位ハー ド ウ ェ アの ス ク リ ーン シ ョ ッ ト です。 ク ロ ッ ク ド メ イ ン と 同 じ 数の ク ロ ッ ク ポー ト が最上位で使用で き 、 MMCM や PLL な ど の さ ま ざ ま なザ イ リ ン ク ス ク ロ ッ キ ン グ構造で駆動で き ます。 こ れ ら の ク ロ ッ ク は完全に非同期で、 次の PERIOD 制約が作成 さ れ る と し ます。 IP に追加の ク ロ ッ ク ド メ イ ン制約が埋め込まれてい る FIFO ま たは Dual Port RAM だけが使用で き る ので、 必要な制 約は こ れだけです。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 90 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 複数 ク ロ ッ クの ISE デザイ ンの Vivado IDE への移行 複数の非同期 ク ロ ッ ク を含む ISE デザ イ ン を Vivado 環境に移行する 方法については、 「複数 ク ロ ッ ク の ISE デザ イ ン の Vivado IDE への移行」 を参照 し て く だ さ い。 既知の問題 次は、 既知の問題の一部です。 • HWCosim コ ンパ イ ル タ ーゲ ッ ト はマルチ ク ロ ッ ク デザ イ ンではサポー ト さ れません。 • 複数 ク ロ ッ ク を使用す る 場合、 FIFO お よ び Dual Port RAM ブ ロ ッ ク のみを最上位にで き ます。 • 複数 ク ロ ッ ク ド メ イ ンの ク ロ ッ シ ン グ を支援す る ブ ロ ッ ク のビヘ イ ビ アーのサ イ ク ル精度は高 く あ り ません。 • 未接続ま たは終端の出力ポー ト は波形ビ ュ ーアーで表示で き ません。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 91 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 AXI イ ン タ ー フ ェ イ ス 概要 AMBA® AXI™4 (Advanced eXtensible Interface 4) は、 ARM® で定義 さ れ制御 さ れ る 4 世代目の AMBA イ ン タ ーフ ェ イ ス で、 ザ イ リ ン ク ス では FPGA デザ イ ンの次世代の イ ン タ ーコ ネ ク ト と し て採用 さ れてい ます。 ザ イ リ ン ク スお よ び ARM は密接に連携 し 、 AXI4 仕様が FPGA のニーズ を満たす よ う に し てい ます。 AXI はオープ ン イ ン タ ーフ ェ イ ス規格で、 公開 さ れていて、 使用料無料、 業界標準であ る ため、 多 く のサー ド パー テ ィ IP ベン ダーで広 く 使用 さ れてい ます。 AMBA AXI4 イ ン タ ーフ ェ イ ス の接続はポ イ ン ト ツー ポ イ ン ト で、 AXI4、 AXI4-Lite、 AXI4-Stream の 3 種類です。 • AXI4 はバース ト ト ラ ンザ ク シ ョ ン をサポー ト す る メ モ リ マ ッ プの イ ン タ ーフ ェ イ ス です。 • AXI4-Lite は AXI4 の簡易バージ ョ ンで、 イ ン タ ーフ ェ イ スはバース ト 対応ではあ り ません。 • AXI4-Stream は一方向のデー タ 転送 (マ ス タ ーか ら ス レーブ) のハ イ パフ ォーマ ン ス の ス ト リ ー ミ ン グ イ ン タ ー フ ェ イ ス で、 AXI4 に比べ る と 信号要件が少な く な っ てい ます。 AXI4-Stream では、 同 じ ワ イ ヤ セ ッ ト の複数チ ャ ネルのデー タ がサポー ト さ れます。 次の資料では、 AXI4 は AXI4 メ モ リ マ ッ プ イ ン タ ーフ ェ イ ス を、 AXI4-Lite お よ び AXI4-Stream はそれぞれ AMBA AXI4 イ ン タ ーフ ェ イ ス の該当 タ イ プ を示 し ま す。 イ ン タ ーフ ェ イ ス の コ レ ク シ ョ ン を示す場合は、 「AMBA AXI4」 が使用 さ れます。 こ のセ ク シ ョ ンでは、AMBA AXI4 の概要を示 し 、System Generator に関す る AMBA AXI4 の詳細を説明 し ます。AMBA AXI4 仕様の詳細は、 ザ イ リ ン ク ス ウ ェ ブ サ イ ト の [AMBA AXI4 イ ン タ ーフ ェ イ ス プ ロ ト コ ル」 ページにあ る ザ イ リ ン ク ス AMBA AXI4 の資料を参照 し て く だ さ い。 System Generator での AXI4‐Stream のサポー ト 最 も よ く 使用 さ れ る AXI4-Stream 信号は、 TVALID、 TREADY、 TDATA の 3 つです。 AXI4-Stream 信号すべての中で 必須なのは TVALID だけで、 それ以外はオプシ ョ ンです。 情報を伝達す る 信号はすべて TVALID と 同 じ 方向に伝搬 さ れますが、 TREADY だけは反対方向に伝搬 さ れます。 AXI4-Steam はポ イ ン ト ツー ポ イ ン ト イ ン タ ーフ ェ イ ス なので、 マ ス タ ーお よ び ス レーブ イ ン タ ーフ ェ イ ス の概念 はデー タ フ ロ ーの方向性を示す上で重要です。 マ ス タ ーがデー タ を生成 し 、 ス レーブがデー タ を消費 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 92 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 命名規則 AXI4-Stream 信号は、 次の よ う に命名 さ れます。 <Role>_<ClassName>[_<BusName>]_[<ChannelName>]<SignalName> 次は、 その例です。 m_axis_tvalid こ の場合、 m は Role (マ ス タ ー )、 axis は ClassName (AXI4-Stream)、 tvalid は SignalName です。 s_axis_control_tdata こ の場合、 s は Role (ス レーブ)、 axis は ClassName、 control は特定 IP の同 じ ク ラ ス の複数 イ ン ス タ ン ス間を区別 す る BusName、 tdata は SignalName です。 TREADY/TVALID ハン ド シ ェ イ ク に関する注意事項 TREADY/TVALID ハン ド シ ェ イ ク は AXI の基本的概念で、双方向フ ロ ーが制御で き る よ う に、マ ス タ ーお よ びス レー ブ間でのデー タ の交換を制御 し ます。 TDATA お よ びその他すべての AXI-Streaming 信号 (TSTRB、 TUSER、 TLAST、 TID、 TDEST) はすべて TREADY/TVALID ハン ド シ ェ イ ク で認証 さ れます。 マ ス タ ーは TVALID がアサー ト さ れ る と デー タ の有効な ビー ト を示 し 、 TREADY がアサー ト さ れ る ま でデー タ ビー ト を維持す る 必要があ り ま す。 TVALID は、 アサー ト さ れ る と 、 TREADY がアサー ト さ れ る ま でデ ィ アサー ト で き ません。 AXI では、 TREADY を TVALID に依存 さ せて も TVALID のアサー ト が TREADY に依存 し ない よ う にす る 規則 も 追加 さ れます。 こ の規則に よ り 、 タ イ ミ ン グ ループが循環 さ れな く な り ます。 次の タ イ ミ ン グ図は、 TREADY/TVALID ハン ド シ ェ イ ク の例です。 ハン ド シ ェ イ ク の例 • TREADY お よ び TVALID の両方が同 じ サ イ ク ルで High にな る と 、 指定 し たチ ャ ネルで転送が発生 し ます。 • TVALID がアサー ト さ れた場合、転送が終了 し た後にのみデ ィ アサー ト で き ます (TREADY は High にサンプ リ ン グ さ れます)。 転送は取 り 消 し た り 、 中止 し た り で き ない可能性があ り ます。 • TVALID がアサー ト さ れ る と 、 同 じ チ ャ ネルのそれ以外の信号 (TREADY 以外) の値は転送が終了す る (TREADY のアサー ト 後のサ イ ク ル) ま で変化 し ません。 • TREADY は TVALID のアサー ト 前、 アサー ト 中ま たはアサー ト 後のサ イ ク ルでアサー ト で き ます。 • TVALID のアサー ト は、 TREADY の値には依存 し ませんが、 TREADY のアサー ト は、 TVALID の値には依存す る こ と があ り ます。 • マ ス タ ーお よ びス レーブ イ ン タ ーフ ェ イ ス の両方で入力お よ び出力信号間に組み合わせパ ス がない よ う にす る 必要があ り ます。 ° ° AXI4-Stream IP に適用 さ れます。 つま り 、 TREADY ス レーブ出力は TVALID ス レーブ入力か ら 組み合わせて 生成で き ません。 TVALID で認証 さ れたデー タ を即座に受信可能な ス レーブは、 デー タ を受信す る ま でその TREADY 信号をプ レ アサー ト す る 必要があ り ます。 ま たは、 TREADY に レ ジ ス タ を付けて、 TVALID アサー ト の次のサ イ ク ルを駆動す る こ と も で き ます。 デフ ォ ル ト のデザ イ ン規則では、 ス レーブは TREADY を独立 し て駆動する か、 TREADY をプ レ アサー ト し て、 レ イ テ ン シ を最小限に抑え る 必要があ り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 93 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 ° 入力信号 と 出力信号間の組み合わせパ ス は別々の AXI4-Stream チ ャ ネル間で使用で き ますが、 同 じ イ ン タ ー フ ェ イ ス (一緒に動作す る チ ャ ネルの関連グループ) に属す る 複数チ ャ ネルには、入力信号お よ び出力信号間 に組み合わせパ ス を使用す る べ き ではあ り ません。 • 該当す る チ ャ ネルでは、 TREADY を除いてすべての信号が ソ ース (通常はマ ス タ ー ) か ら デス テ ィ ネーシ ョ ン ( 通常は ス レーブ) ま で伝搬 さ れます。それ以外の反対方向へ伝搬す る 必要のあ る 情報伝達信号ま たは制御信号は、 すべて別のチ ャ ネルの一部 (別の TREADY/TVALID ハン ド シ ェ イ ク を使用 し たバ ッ ク チ ャ ネル) であ る か、 ア ウ ト オブ バン ド 信号 (ハン ド シ ェ イ ク 以外) のいずれかであ る 必要があ り ます。 ス レーブか ら マ ス タ ーへの反対方 向への情報の転送には、 TREADY を使用す る べ き ではあ り ません。 • AXI4-Stream では、 TREADY が削除で き ます (デフ ォ ル ト の値は 1)。 こ れに よ り 、 TREADY を生成す る IP での 相互運用に制限が出 る こ と があ り ます。 AXI4-Stream マ ス タ ーは前方向の フ ロ ー制御 (TVALID) にのみ接続で き ます。 System Generator での AXI4‐Stream ブ ロ ッ ク AXI4-Stream イ ン タ ーフ ェ イ ス を含む System Generator ブ ロ ッ ク は、AXI4 と い う 名前の付いたザ イ リ ン ク ス ブ ロ ッ ク セ ッ ト ラ イ ブ ラ リ にあ り ます。 こ の ラ イ ブ ラ リ のブ ロ ッ ク は、 通常の (AXI4-Stream 以外の) ブ ロ ッ ク と は、 記述がわ ずかに違っ てい ます。 ポー ト グループ AXI4-Stream イ ン タ ーフ ェ イ ス を提供す る ブ ロ ッ ク では、AXI4-Stream チ ャ ネルが ま と め ら れ色分け さ れてい ます。 た と えば、 上記の DDS Compiler 5.0 ブ ロ ッ ク では、 一番上の入力ポー ト の data_tready と 2 出力ポー ト の data_tvalid お よ び data_tdata が同 じ AXI4-Stream チ ャ ネルにあ り ます。 phase_tready、 phase_tvalid、 phase_tdata も 同 じ チ ャ ネルにあ り ます。 AXI4-Stream チ ャ ネルには含まれない信号は、 ブ ロ ッ ク と 同 じ 背景色で表示 さ れます。 rst はその例です。 ポー ト 名の省略 次の例では、 AXI4-Stream 信号の名前が省略 さ れ、 ブ ロ ッ ク で読みやす く な っ てい ます。 名前の省略はあ く ま で表記 上の も ので、ネ ッ ト リ ス ト では完全な AXI4-Stream 名が使用 さ れます。名前の省略はデフ ォ ル ト でオンにな り ますが、 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 94 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス の [Display shortened port names] を オ フ に し てその完全名を表示 さ せ る よ う にす る こ と も で き ます。 マルチチ ャ ネル TDATA の分割 AXI4-Stream では、 TDATA に複数チ ャ ネルのデー タ を含め る こ と がで き ます。 System Generator では、 TDATA のチ ャ ネルが分割 さ れます。 た と えば、 次の dout ポー ト の TDATA には、 現実 と 仮想の コ ン ポーネ ン ト の両方が含まれます。 マルチチ ャ ネル TDATA を分割 し て も デザ イ ンに ロ ジ ッ ク は追加 さ れません。 こ れはユーザーの都合を考え て System Generator で分割 さ れます。 分割 さ れた TDATA ポー ト のデー タ も 正 し く バ イ ト ア ラ イ メ ン ト さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 95 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 AXI4‐Lite イ ン タ ー フ ェ イ ス生成 概要 System Generator を使用 し て開発 し たデザ イ ン モジ ュ ールは、 通常 よ り 大 き な DSP ま たは Vivado シ ス テ ムのサブシ ス テ ム を形成 し ます。 こ れ ら の System Generator モジ ュ ールは演算お よ びデー タ パ ス が多 く 、 通常 MATLAB/Simulink の よ う な資格化が優れた環境で作成す る のがベス ト です。 よ り 大き なシ ス テ ムは、 通常 Vivado IP カ タ ロ グの IP か ら アセ ンブル さ れます。 こ れ ら の IP は、 標準ス ト リ ーム を使用 し 、 AXI4-Lite の よ う な イ ン タ ーフ ェ イ ス を制御 し ます。 よ り 大 き なシ ス テ ムでは、 Vivado IP イ ン テ グ レー タ ーの よ う な ツールを使用 し て アセ ンブル さ れます。 こ こ では、 System Generator モジ ュ ール用に標準 AXI4-Lite イ ン タ ーフ ェ イ ス を作成 し 、 後で IP イ ン テ グ レー タ ーを 使用 し て大型デザ イ ンに含め る ためにそのモジ ュ ールを Vivado IP カ タ ロ グにエ ク ス ポー ト す る 機能について説明 し ます。System Generator は、複数の ク ロ ッ ク ド メ イ ンで複数の AXI4-Lite イ ン タ ーフ ェ イ ス を作成す る こ と も で き ます。 System Generator での AXI4‐Lite イ ン タ ー フ ェ イ ス合成 デザ イ ン作成お よ び検証は、 AXI4-Lite イ ン タ ーフ ェ イ ス を含ま ない System Generator デザ イ ン と ま っ た く 同 じ です。 次の example_dds デザ イ ンについて説明 し ます。 こ のデザ イ ン には DDS Compiler が含 ま れ、 出力周波数を制御す る ために 2 つの入力、 phase_valid お よ び phase_data が使用 さ れます。 こ のデザ イ ンのシ ミ ュ レーシ ョ ン結果は次の よ う にな り 、 出力周波数が徐々に増加 し てい る のがわか り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 96 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 AXI4‐Lite イ ン タ ー フ ェ イ ス用デザイ ンの コ ン フ ィ ギ ュ レーシ ョ ン example_dds デザ イ ン では、 Gateway In お よ び Gateway Out ブ ロ ッ ク に よ り 、 Simulink デザ イ ンのサ イ ク ルお よ びビ ッ ト 精度の正確な FPGA 部分のバ ウ ン ダ リ が マー ク さ れ ま す。 DDS Compiler の周波数は、 Gateway In の出力ポー ト (phase_valid お よ び phase_data) に 接続 さ れ た 信号 に 正 し い 値 を 挿入す る こ と で 制御 で き ま す。 こ れ に は、 次 の phase_valid ブ ロ ッ ク の例で示す よ う に [Interface] オプシ ョ ン を変更 し ます。 System Generator for デザ イ ン では [Interface] が ス レーブ AXI4-Lite イ ン タ ーフ ェ イ ス に指定 さ れてい る ので、 最上位 イ ン タ ーフ ェ イ ス に変換 さ れます。 次のオプシ ョ ン を使用す る こ と も で き ます。 [Auto assign address offset] (オン) : 各 Gateway が AXI4-Lite イ ン タ ーフ ェ イ ス内の レ ジ ス タ に接続 さ れ、AXI4-Lite イ ン タ ーフ ェ イ ス にマ ッ プ さ れた異な る Gateway In の番号に基づいて、 ア ド レ ス オ フ セ ッ ト の自動割 り 当てが実行 さ れ る よ う に指定 し ます。 ア ド レ ス は、 32 ビ ッ ト デー タ 幅にバ イ ト でア ラ イ メ ン ト さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 97 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 [Address offset] (オ フ) : こ のオプシ ョ ンは、 [Auto assign address offset] がオ フ の場合にのみオンにで き る よ う にな り ま す。 こ れに よ り 、 ユーザーがア ド レ ス オ フ セ ッ ト を手動で上書き で き る よ う にな り ます。 [Interface Name] : イ ン タ ーフ ェ イ ス に名前を付け ます。 デザ イ ンに複数の AXI4-Lite イ ン タ ーフ ェ イ ス があ る 場合は、 こ の名前でそれぞれの イ ン タ ーフ ェ イ ス が識別 さ れます。 重要 : こ こ で指定す る 名前には、 英数文字 (アルフ ァ ベ ッ ト は小文字)、 ま たはア ン ダー ス コ ア (_) のみが使用で き ま す。 ま た、 名前は小文字のアルフ ァ ベ ッ ト か ら 始めて く だ さ い。 た と えば、 「axi4_lite1」 と い う 名前は使用で き ます が、 「1Axi4-Lite」 は使用で き ません。 [Description] : こ こ に入力 し た情報は、 デザ イ ンが Vivado IP カ タ ロ グにエ ク ス ポー ト さ れ る と 自動的に作成 さ れ る イ ン タ ーフ ェ イ ス の資料に含まれます。 その他の Gateways も 同 じ 方法で コ ン フ ィ ギ ュ レーシ ョ ン さ れます。 Vivado IP イ ンテグレー タ ーで使用するためのデザイ ンのパ ッ ケージ System Generator での検証が終了 し たので、 デザ イ ン を IP イ ン テ グ レー タ ーで使用で き る よ う にパ ッ ケージ し ます。 まず、 [Compilation] を [IP Catalog] に設定 し ます (デフ ォ ル ト の生成 タ ーゲ ッ ト )。 こ れに よ り 、 System Generator か ら 作成 さ れたすべてのハー ド ウ ェ ア ソ ース (RTL + IP + 制約) が IP に ま と め ら れます。 選択 さ れ る パー ツ は、 ザ イ リ ン ク ス Zynq-7000 ZC702 評価ボー ド で使用可能 な パー ツ と 同 じ です。 ま た、 System Generator ト ー ク ンの [Settings] ボ タ ン を使用 し て も IP に含まれ る 情報を変更で き ます。 こ の場合、 次に示すデフ ォ ル ト 値が使用 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 98 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 System Generator ト ー ク ン の GUI で [Generate] ボ タ ン を ク リ ッ ク す る と 、 RTL + IP + 制約が ま と め ら れて、 パ ッ ケー ジが作成 さ れます。 生成結果の詳細 前述の System Generator 設定に基づいて、 次の フ ォ ルダーお よ びフ ァ イ ルが作成 さ れます。 1. <target directory>/ip : こ のデ ィ レ ク ト リ には、 IP 関連のハー ド ウ ェ ア フ ァ イ ルお よ び ソ フ ト ウ ェ ア ド ラ イ バー が含まれます。 IP カ タ ロ グに追加す る 必要があ る のは こ のデ ィ レ ク ト リ です。 2. <target directory>/ip_catalog : こ のデ ィ レ ク ト リ には example_dds.xpr と い う Vivado IDE プ ロ ジ ェ ク ト のサンプル が含まれます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 99 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 AXI4‐Lite イ ン タ ー フ ェ イ スへのマ ッ プ AXI4-Lite レ ジ ス タ と し て タ グ付け さ れた Gateway Ins お よ び Gateway Outs は、次の回路図に示す よ う に、 メ モ リ マ ッ プ内の異な る 32 ビ ッ ト レ ジ ス タ にマ ッ プ さ れます。 注記 : 次の回路図は、1 つの AXI4-Lite イ ン タ ーフ ェ イ スへのマ ッ プ例で、すべてのゲー ト ウ ェ イ に同 じ イ ン タ ーフ ェ イ ス名が指定 さ れてい る も の と し ます。 複数の AXI4-Lite イ ン タ ーフ ェ イ ス があ る 回路図では、 同 じ イ ン タ ーフ ェ イ ス名のあ る ゲー ト ウ ェ イ のグループご と に、 それぞれ AXI4-Lite イ ン タ ーフ ェ イ ス があ り ます。 図に示す と お り 、 axi_lite_interface_example_dds と い う モジ ュ ールが RTL デザ イ ンに挿入 さ れ、 System Generator デザ イ ンの phase_valid お よ び phase_data ポー ト を駆動 し ます。 最上位では、 ス レーブ AXI4-Lite イ ン タ ーフ ェ イ ス が使用 さ れます。 ア ド レ ス デ コ ー ド が実行 さ れ、 phase_valid ま たは phase_data ポー ト がプ ロ セ ッ サか ら 取得 さ れた ア ド レ ス に基づいて駆動 さ れ る のは、 こ のモジ ュ ール内です。 ア ド レ ス指定 (s_axi_araddr お よ び s_axi_awaddr) に必要な ビ ッ ト 数は、AXI4-Lite イ ン タ ーフ ェ イ ス レ ジ ス タ の数 と 各 AXI4-Lite レ ジ ス タ のオ フ セ ッ ト 仕様に よ っ て決定 さ れ ます。 モジ ュ ール生成中には各レ ジ ス タ を別々にデ コ ー ド す る のに十分な ビ ッ ト が提供 さ れます。 こ の例の場合、 phase_data と phase_valid と い う 2 つのゲー ト ウ ェ イ があ り 、 各 ポー ト がア ド レ ス オ フ セ ッ ト 0x0000 お よ び 0x0004 を割 り 当て ます。 こ の結果、 3 つのア ド レ ス ビ ッ ト がア ロ ケー ト さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 100 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 複数の AXI4‐Lite イ ン タ ー フ ェ イ スの管理 System Generator 2015.1 リ リ ース よ り 、 System Generator は、 複数の AXI4-Lite イ ン タ ーフ ェ イ ス を使用 し た IP 生成を サポー ト し てい ます。 Gateway In お よ び Gateway Out ブ ロ ッ ク を、 異な る AXI4-Lite イ ン タ ーフ ェ イ ス に ま と め る こ と がで き ます。 こ の機能はマルチ ク ロ ッ ク デザ イ ンで も 使用で き ます。 ソ フ ト ウ ェ ア ド ラ イ バー も 提供 さ れます。 AXI4-Lite イ ン タ ーフ ェ イ ス に名前を付け る には、イ ン タ ーフ ェ イ ス に関連付け ら れてい る Gateway In お よ び Gateway Out ブ ロ ッ ク に対 し 、 [Interface Name] で名前を設定 し ます。 同 じ イ ン タ ーフ ェ イ ス名を持つ Gateway In お よ び Gateway Out ブ ロ ッ ク は 1 つの AXI4-Lite イ ン タ ーフ ェ イ ス に ま と め ら れます。 イ ン タ ーフ ェ イ ス名は、 小文字のアルフ ァ ベ ッ ト で始め る 必要があ り 、 英数字 (アルフ ァ ベ ッ ト は小文 字) ま たはア ン ダース コ ア ( _ ) のみで指定 し ます。 複数の ク ロ ッ ク ド メ イ ン で同 じ イ ン タ ーフ ェ イ ス名を使用す る こ と はサポー ト さ れてい ません。 ネ ッ ト リ ス ト を生成す る には、 [IP Catalog] ま たは [HDL Netlist] を コ ンパ イ ル タ ーゲ ッ ト に選択 し ます。 System Generator で [HDL Netlist] を選択す る 場合は、 Vivado でデザ イ ン をエ ラ ボ レー ト す る と 、 AXI Lite デ コ ーダー が 2 つ作成 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 101 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 [IP Catalog] を選択す る 場合は、複数の AXI4-Lite イ ン タ ーフ ェ イ ス と aresetn 信号のあ る サンプル BD も 生成 さ れます。 イ ン タ ーフ ェ イ ス の命名規則は次の よ う にな っ てい ます。 <clock domain name/design name>_<interface name>_s_axi AXI4-Lite イ ン タ ー フ ェ イ ス ご と に パ ッ ケージ さ れ る 同 じ ク ロ ッ ク ド メ イ ン の すべ て の AXI4-Lite イ ン タ ー フ ェ イ ス に対 し 1 つの aresetn 信号 IP を説明す る フ ァ イ ルを生成す る には、 コ ンパ イ ルを実行する 前に、 System Generator ト ー ク ンの [Compilation] タ ブ で [Create interface document] オプシ ョ ン を選択 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 102 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 こ の フ ァ イ ルには、 ほかの Vivado IP フ ァ イ ル と 同 じ 方法でア ク セ ス で き ます。 Vivado 回路図で IP を ダブル ク リ ッ ク し 、 [Documentation] → [Product Guide] を ク リ ッ ク し ます。 次の よ う な フ ァ イ ル (HTML) が開 き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 103 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 X-Ref Target - Figure 4-1 こ の資料には、 IP の メ モ リ マ ッ プについてのセ ク シ ョ ンが含まれてい ます。 AXI4-Lite イ ン タ ーフ ェ イ ス の Gateway In ま たは Gateway Out ポー ト で [Auto assign address offset] を選択 し た場合は、 イ ン タ ーフ ェ イ ス がマ ッ プ さ れてい る ア ド レ ス を検索で き ます。 X-Ref Target - Figure 4-2 ソ フ ト ウ ェ ア ド ラ イ バーは自動的に生成 さ れ、 SDK にパ ッ ケージ さ れます。 ソ フ ト ウ ェ ア ド ラ イ バーの資料は SDK にあ り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 104 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 X-Ref Target - Figure 4-3 ア ド レ ス生成 自動ア ド レ ス生成プ ロ セ ス では、 次が前提 と な り ます。 1. 各 AXI4-Lite はそれぞれ独自のア ド レ ス オ フ セ ッ ト に関連付け ら れ、 それが 32 ビ ッ ト ワ ー ド バ ウ ン ダ リ (た と えば 4 の倍数) にア ラ イ メ ン ト さ れます。 2. ア ド レ ス は 0 か ら 始ま り ます。 3. ア ド レ ス は、 ゲー ト ウ ェ イ の辞書順に イ ン ク リ メ ン タ ルに割 り 当て ら れます。 2 つのゲー ト ウ ェ イ に同 じ 名前が 付いてい る 場合、 任意の名前が付 き ます。 4. すべての AXI4-Lite のゲー ト ウ ェ イ の幅は 32 ビ ッ ト 未満に し ておかない と 、 エ ラ ーが発生 し ます。 5. AXI4-Lite のゲー ト ウ ェ イ の幅が 32 ビ ッ ト 未満であれば、内部レ ジ ス タ か ら LSB が DUT (Design Under Test) 内に 割 り 当て ら れます。 6. 次は、 ユーザーの指定 し たオ フ セ ッ ト ア ド レ ス を管理する ために使用 さ れ る 条件です。 a. すべてのユーザー指定のア ド レ ス は、 自動ア ロ ケーシ ョ ンの前に AXI4-Lite のゲー ト ウ ェ イ にア ロ ケー ト さ れます。 b. ユーザー指定のア ド レ ス の 2 つが同 じ 場合、 生成中にのみエ ラ ーが発生 し ます (それ以外の場合は無視 さ れ ます)。 c. 残りの AXI4-Lite のゲー ト ウ ェ イ でア ド レ ス が自動的にア ロ ケー ト さ れ る よ う に設定 さ れてい る 場合、 System Generator はユーザー指定のア ド レ ス に よ っ て残 さ れた穴を埋め よ う と し ます。 Vivado IDE サン プル プ ロ ジ ェ ク ト の特徴 Vivado IDE サンプル プ ロ ジ ェ ク ト (example_dds.xpr) を使用する と 、System Generator か ら 作成 さ れた IP を使用す る 方 法を簡単に理解で き る よ う にな っ てい ます。 こ のプ ロ ジ ェ ク ト は次の よ う にな っ てい ます。 1. System Generator か ら 生成 さ れた IP が既にプ ロ ジ ェ ク ト に関連付け ら れた IP カ タ ロ グに追加 さ れてお り 、RTL フ ロ ーお よ び IP イ ン テ グ レー タ ー ベース フ ロ ーで使用で き る よ う にな っ てい ます。 2. デザ イ ンには、 example_dds_0 と い う RTL で イ ン ス タ ン シエーシ ョ ン さ れた IP のほか、 その よ う な IP を RTL フ ロ ーで ど の よ う に イ ン ス タ ン シエー ト す る かを示 し た example_dds_stub が含まれます。 3. デザ イ ンには、 同 じ IP を RTL フ ロ ーに イ ン ス タ ン シエー ト する ために、 example_dds_tb と い う テ ス ト ベンチが 含まれます。 4. こ のサンプル プ ロ ジ ェ ク ト で選択 さ れてい る パーツは Zynq-7000 AP SoC なので、 デザ イ ンには Zynq-7000 サブ シ ス テ ム のあ る サ ン プル IP イ ン テ グ レー タ ー図が含ま れ ます。 その他すべてのパーツ には、 MicroBlaze ベース のサブシ ス テ ムが作成 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 105 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 5. 選択 さ れたパーツがサポー ト さ れ る ボー ド の 1 つ と 同 じ であれば、 プ ロ ジ ェ ク ト は同 じ パーツ設定の最初のボー ド に設定 さ れます。 6. ブ ロ ッ ク デザ イ ン を イ ン ス タ ン シエー ト する ラ ッ パーが作成 さ れ、 Top と し て設定 さ れます。 ヒ ン ト : IP に関連付け ら れてい る イ ン タ ーフ ェ イ ス の資料には各ブ ロ ッ ク の GUI か ら ア ク セ ス で き ます。資料にア ク セ スす る には、 GUI で System Generator IP を ダブル ク リ ッ ク し 、 ダ イ ア ロ グ ボ ッ ク ス で [Documentation] を ク リ ッ ク し ます。 ソ フ ト ウ ェ ア ド ラ イバー ベア メ タ ル ソ フ ト ウ ェ ア ド ラ イ バーは、 ゲー ト ウ ェ イ に割 り 当て ら れた ア ド レ ス オ フ セ ッ ト に基づいて作成 さ れま す。 こ れ ら の ド ラ イ バーは、 <target_directory>/ip/drivers と い う フ ォ ルダーに保存 さ れます。 こ れ ら の ド ラ イ バーを使 用す る には、 SDK 検索パ ス に <target_directory>/ip を追加す る 必要があ り ます。 AXI4-Lite イ ン タ ーフ ェ イ ス にマ ッ プ さ れた Gateway In それぞれに対 し て、 次の 2 つの API が作成 さ れます。 /** * Write to <Gateway In id> of <design name>.Assignments are LSB-justified. * * @paramInstancePtr is the <Gateway In id> instance to operate on. * @paramData is value to be written to gateway <Gateway In id>. * * @returnNone. * * @note <Text from Description control of the Gateway In GUI> * */ void <Gateway In id>_write(example_dds *InstancePtr, u32 Data); /** * Read from <Gateway In id> of <design name>.Assignments are LSB-justified. * * @paramInstancePtr is the phase_valid instance to operate on. * * @returnu32 * Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 106 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 * @note Phase Valid Port That Must Be Asserted. * */ u32 <Gateway In id>_read(example_dds *InstancePtr); <Gateway In id> :<design_name>_<gateway_name> の <design_name> は デ ザ イ ン の VHDL/Verilog 最上位名 で <gateway_name> はゲー ト ウ ェ イ の省略名にな り ます。 Gateway Outs では同 じ よ う な ド ラ イ バーが生成 さ れますが、 読み出 し 専用にな り ます。 AXI4‐Lite イ ン タ ー フ ェ イ ス生成での既知の問題 ゲー ト ウ ェ イ (Gateway In ま たは Gateway Out) が AXI4-Lite イ ン タ ーフ ェ イ ス と し て設定 さ れてい る デザ イ ン に対 し ては、 テ ス ト ベンチ生成はサポー ト さ れません。 System Generator でのプ ラ ッ ト フ ォ ーム ベースのア ク セ ラ レー タ の調整 プ ラ ッ ト フ ォーム ベース のア ク セ ラ レー タ は、大型シ ス テ ム を開発 し やす く する ため、 ボ ト ム ア ッ プの設計手法を使 用 し ます。 ボー ド レベルの イ ン タ ーフ ェ イ ス をプ ロ セ ッ シ ン グ シ ス テ ムに接続する プ ラ ッ ト フ ォーム と 、 SoC 内部の デー タ パ ス で、 プ ラ ッ ト フ ォーム デザ イ ンに よ っ て制御 さ れ信号を供給 さ れ る ア ク セ ラ レー タ の 2 つのセ ク シ ョ ン が作成 さ れます。 DSP デー タ パ ス ま たはア ク セ ラ レー タ は、 プ ラ ッ ト フ ォーム ベース シ ス テ ム と 、 外部デバ イ スへ の イ ン タ ーフ ェ イ ス の自動接続機能を利用す る こ と がで き ます。 Vivado IP イ ン テ グ レ ー タ ーでのデザ イ ン の作成 を ス ピ ー ド ア ッ プ さ せ る には (デザ イ ン の ア ク セ ラ レ ー タ 部分が System Generator で開発 さ れ る よ う にす る には)、 次の手順に従っ て く だ さ い。 1. Vivado IP イ ン テ グ レー タ ーでデザ イ ンのブ ロ ッ ク 図 (BD) を作成 し ます。 こ れがプ ラ ッ ト フ ォーム フ レーム ワー ク にな り ます。 2. System Generator に こ のプ ラ ッ ト フ ォーム フ レーム ワ ー ク を イ ン ポー ト し ます。 3. System Generator で、 デザ イ ンのア ク セ ラ レー タ 部分を入力 し ます。 4. System Generator で、IP カ タ ロ グ フ ロ ーを使用 し て ア ク セ ラ レー タ モデルを コ ンパ イ ル し 、元のデザ イ ン (Vivado BD フ ァ イ ルか ら ) お よ び System Generator モデルの回路を含む Vivado プ ロ ジ ェ ク ト を作成 し ます。 手順 1 : IP イ ン テグ レー タ ー ブ ロ ッ ク図 (.bd) と し て Vivado で プ ラ ッ ト フ ォ ーム フ レームワー ク を作成 まず、 Vivado IP イ ン テ グ レー タ ーでプ ラ ッ ト フ ォーム デザ イ ン を含むブ ロ ッ ク 図を作成す る 必要があ り ます。 デザ イ ンのア ク セ ラ レー タ 部分を含むプ ラ ッ ト フ ォーム ベース シ ス テ ム と し て、 コ ン フ ィ ギ ャ ラ ラ ブル サンプル デザ イ ン、 リ フ ァ レ ン ス デザ イ ン、 ま たはカ ス タ ム デザ イ ン を使用す る こ と が可能です。 次の例では、 プ ラ ッ ト フ ォ ーム デザ イ ン には Zynq-7000 プ ロ セ ッ シ ン グ シ ス テ ムお よ び AXI DMA が含ま れてい ま す。 こ のプ ラ ッ ト フ ォーム デザ イ ンは、 DMA を使用 し て DDR メ モ リ と デー タ を送受信 し 、 DDR か ら 受信 し たデー タ での DES 暗号化を実行 し 、 そ し て暗号化 さ れたデー タ を DDR に戻す こ と を目的 と し てい ます。 AXI Stream ポー ト であ る M_AXIS_MM2S お よ び S_AXIS_S2MM (デー タ パ ス) は、ブ ロ ッ ク 図 (BD) の外部にあ り ます。System Generator BD の イ ン ポー ト 時に、 こ れ ら の イ ン タ ーフ ェ イ ス を System Generator が使用で き る よ う にな っ てい ます。 AXI4-Lite イ ン タ ーフ ェ イ ス であ る M00_AXI も 外部 イ ン タ ーフ ェ イ ス にな っ ていて、 ア ク セ ラ レー タ IP の制御 イ ン タ ーフ ェ イ ス にな る こ と を示 し てい ます。 IP イ ン テ グ レー タ ーでのデザ イ ンの要件は次の と お り です。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 107 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 • こ のシ ス テ ムは特定ボー ト ま たはパーツに対 し て ビル ド す る 必要があ り ます。 こ れでポー ト お よ び イ ン タ ーフ ェ イ ス の一部に ロ ケーシ ョ ン属性が割 り 当て ら れ る よ う にな り ます。 • デザ イ ンのア ク セ ラ レー タ 部分に設定 し たい AXI イ ン タ ーフ ェ イ スは外部 イ ン タ ーフ ェ イ ス にな っ てい る 必要 があ り ます。 X-Ref Target - Figure 4-4 現時点では、 プ ラ ッ ト フ ォーム フ レーム ワ ー ク に関 し ては、 次の イ ン タ ーフ ェ イ ス がサポー ト さ れてい ます。 イ ン ターフ ェ イス マス タ ー ス レーブ AXI4 サポー ト あ り サポー ト な し AXI4-Lite サポー ト あ り サポー ト な し AXI4-Stream サポー ト あ り サポー ト あ り 手順 2 : BD フ ァ イルを処理 し 、 ロ ケーシ ョ ンが割 り 当て られてい ないポー ト および イ ン タ ー フ ェ イ ス を System Generator に イ ン ポー ト Vivado IP イ ン テ グ レ ー タ ー で 作 成 さ れ た BD xilinx.utilities.importBD ユーテ ィ リ テ ィ を使用 し ます。 フ ァ イ ル を イ ン ポ ー ト す る た め、 System Generator で System Generator の コ マ ン ド ラ イ ンで次の コ マ ン ド を入力 し ます。 xilinx.utilities.importBD(vivado_project,matlab_file) こ のユーテ ィ リ テ ィ はプ ラ ッ ト フ ォ ーム フ レーム ワ ー ク の Vivado プ ロ ジ ェ ク ト お よ び System Generator で作成 さ れ る 新 し いモデルの名前を読み込みます。System Generator のポー ト お よ び外部 イ ン タ ーフ ェ イ ス (ボー ド コ ネ ク テ ィ ビ テ ィ お よ び自動化に基づいて、 ポー ト に ロ ケーシ ョ ン属性が設定 さ れていない イ ン タ ーフ ェ イ ス) のために、 プ ラ ッ ト フ ォーム デザ イ ン を処理 し 、デザ イ ンのア ク セ ラ レー タ 部分 と な る サンプル ス タ ブ を System Generator で作成 し ま す。 コ マ ン ド の使用方法 xilinx.utilities.importBD('<path_to_vivado_project_directory>/<project_name>.xpr', 'mynewmodel') xilinx.utilities.importBD('C:\test_importBD\platform.xpr', 'mynewmodel') System Generator で作成 さ れたモデルは次の よ う にな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 108 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 X-Ref Target - Figure 4-5 System Generator でのモデルには次の よ う な機能があ り ます。 • それぞれの AXI4-Lite イ ン タ ーフ ェ イ ス に対 し 、 Gateway In お よ び Gateway Out ブ ロ ッ ク が表示 さ れます。 こ の 後、 AXI4-Lite ゲー ト ウ ェ イ をデザ イ ンに必要な数だけ複製 し 追加す る こ と がで き ます。 • AXI4-Stream イ ン タ ーフ ェ イ ス に対 し ては、 TDATA、 TVALID、 TREADY、 な ど の AXI4-Stream ポー ト が表示 さ れます。 • モデルの System Generator ト ー ク ンは、 コ ンパ イ ル タ ーゲ ッ ト に [IP Catalog] が設定 さ れ、 [Part] は Vivado プ ロ ジ ェ ク ト と 同 じ ザ イ リ ン ク ス デバ イ ス が設定 さ れます。 手順 3 : System Generator で ロ ジ ッ ク を BD ソ ケ ッ ト に接続 こ の段階で、 System Generator で ア ク セ ラ レ ー タ を作成で き ま す。 次の例では、 ほかの ロ ジ ッ ク に接続 さ れてい て、 ゲー ト ウ ェ イ の名前を変更 し て あ り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 109 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 X-Ref Target - Figure 4-6 手順 4 : ア ク セ ラ レー タ モデル (IP カ タ ログ フ ロー ) を コ ンパイル し て、 デザイ ン を作成 IP カ タ ロ グ コ ンパ イ ル フ ロ ーを使用 し て、 デザ イ ン を作成 し ます。 System Generator ト ー ク ン を ダブル ク リ ッ ク し 、 [Settins] ボ タ ン を ク リ ッ ク し 、 [Use Plug-in project] に Vivado IP イ ン テ グ レー タ ーがデザ イ ン を イ ン ポー ト し たデ ィ レ ク ト リ を指定 し ます (次を参照)。 [Generate] を ク リ ッ ク す る と 、 元の Vivado プ ラ ッ ト フ ォ ーム フ レーム ワ ー ク /シ ス テ ム と 、System Generator で作成 さ れた ア ク セ ラ レー タ IP を含んだ Vivado プ ロ ジ ェ ク ト が、 ソ フ ト ウ ェ ア ド ラ イ バー と 一緒に作成 さ れます。 こ のプ ロ ジ ェ ク ト は、 System Generator ト ー ク ンの [Target directory] で設定 し たデ ィ レ ク ト リ の下にあ る ip_catalog と い う デ ィ レ ク ト リ に保存 さ れ、 ま た、 共通 IP リ ポジ ト リ に も 保存 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 110 第 4 章 : System Generator を使用 し たハー ド ウ ェ ア設計 X-Ref Target - Figure 4-7 こ の新 し いプ ロ ジ ェ ク ト を Vivado で開 き 、 例にあ る よ う にデザ イ ン を イ ンプ リ メ ン ト し ます。 System Generator シ ン ボルのついたブ ロ ッ ク は、 System Generator で作成 さ れたブ ロ ッ ク であ る こ と を示 し てい ます。 X-Ref Target - Figure 4-8 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 111 第 5 章 System Generator での タ イ ミ ング解析 System Generator はビ ッ ト 精度お よ びサ イ ク ル精度のモデ リ ン グ ツールです。 Simulink でデザ イ ン を シ ミ ュ レーシ ョ ンす る こ と に よ り 、 その機能を検証す る こ と がで き ます。 し か し 、 生成 さ れた HDL フ ァ イ ルがハー ド ウ ェ アで正 し く 機能す る こ と を確認す る には、 タ イ ミ ン グ ク ロ ージ ャ を達成 し てお く 必要があ り ます。 こ のプ ロ セ ス を迅速に行 う ため、 System Generator には タ イ ミ ン グ解析が統合 さ れてい ます。 こ れに よ り 、合成後ま たは イ ンプ リ メ ン テーシ ョ ン後に System Generator か ら 生成 さ れた HDL フ ァ イ ルで ス タ テ ィ ッ ク タ イ ミ ン グ解析 を 実行で き ま す。 ま た、 合成後ネ ッ ト リ ス ト ま たは イ ン プ リ メ ン テーシ ョ ン 後ネ ッ ト リ ス ト に Vivado タ イ ミ ン グ エン ジ ン を実行 し た結果 と 、 Simulink での System Generator モデルを比較す る メ カ ニズ ム も 提供 さ れてい ます。 つま り 、 Simulink IDE 環境内で、 デザ イ ン の DSP サブモジ ュ ールの タ イ ミ ン グ ク ロ ージ ャ を達成 さ せ る こ と がで き ます。 コ ンパ イ ル タ ーゲ ッ ト (HDL ネ ッ ト リ ス ト な ど) で タ イ ミ ン グ解析を実行す る と 、 パ ス が表に表示 さ れ、 表の列には タ イ ミ ン グ ス ラ ッ ク やパ ス遅延な ど の情報が表示 さ れ ます。 こ の表は Timing Analyzer GUI と 呼ばれ ます。 こ の表の 内容は、 ス ラ ッ ク な ど列の情報を使用 し て分類で き ま す。 ま た、 表のエ ン ト リ と Simulink モデル と の間を ク ロ ス プ ロ ーブ で き る よ う に な っ て お り 、 モデルの タ イ ミ ン グ エ ラ ー を 検出お よ び修正 し やす く な っ て い ま す。 Timing Analyzer GUI と Simulink モデル間の ク ロ ス プ ロ ーブは、 表の行を選択/ ク リ ッ ク し て行い ます。 モデル内の対応パ ス はハ イ ラ イ ト さ れます。 パ ス に タ イ ミ ン グ違反があれば、 赤 く ハ イ ラ イ ト さ れ、 違反がなければ緑色にハ イ ラ イ ト さ れます。 タ イ ミ ン グ解析の実行 モデルでの タ イ ミ ン グ解析実行方法を説明 し ます。 タ イ ミ ン グ解析結果か ら モデルへ の ク ロ ス プ ロ ーブ Timing Analyzer の表の行か ら Simulink モデルに ク ロ ス プ ロ ー ブ す る 方 法 を 説明 し ま す。 パ ス 内 の System Generator ブ ロ ッ ク がハ イ ラ イ ト さ れます。 既存の タ イ ミ ン グ解析結果への ア ク セス 既存の Timing Analyzer 結果に対 し 、Timing Analyzer GUI を再度起動す る 方法を説明 し ます。 タ イ ミ ン グ違反の ト ラ ブルシ ュ ー ト に関す る 推奨事項 デザ イ ン に発生 し た タ イ ミ ン グ違反の原因 を 追究す る 方法を説明 し ます。 タ イ ミ ング解析の実行 次の コ ンパ イ ル タ ーゲ ッ ト のいずれか を生成する たびに、 タ イ ミ ン グ解析を実行する こ と がで き ます。 • HDL ネ ッ ト リ ス ト • ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン • IP カ タ ロ グ • 合成済みチ ェ ッ ク ポ イ ン ト System Generator で タ イ ミ ン グ解析を実行す る には、 次の手順に従っ て く だ さ い。 1. Simulink モデルで System Generator ト ー ク ン を ダブル ク リ ッ ク し ます。 2. System Generator ト ー ク ンのダ イ ア ロ グ ボ ッ ク ス で次の よ う に設定 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 112 第 5 章 : System Generator での タ イ ミ ング解析 ° [Compilation] タ ブで [Target Directory] を指定 し ます。 ° [Clocking] タ ブで、 ラ ン タ イ ム を重視する か、正確 さ を重視す る かに よ っ て、[Perform Timing Analysis] フ ィ ー ル ド を [Post Synthesis] ま たは [Post Implementation] に設定 し ます。 X-Ref Target - Figure 5-1 3. System Generator ト ー ク ンのダ イ ア ロ グ ボ ッ ク ス で [Generate] を ク リ ッ ク し ます。 生成を実行す る と 、 次の こ と が行われます。 a. System Generator が選択 さ れてい る コ ンパ イ ル タ ーゲ ッ ト に必要な フ ァ イ ルを生成 し ます。 タ イ ミ ン グ解析 のため、 System Generator がデザ イ ン プ ロ ジ ェ ク ト に対 し 、 Vivado をバ ッ ク グ ラ ン ド で起動 し 、 Vivado にデ ザ イ ン タ イ ミ ン グ制約を渡 し ます。 b. [Perform Timing Analysis] で [Post Synthesis] を選択 し たか、 [Post Implementation] を選択 し たかに よ り ますが、 デザ イ ンは Vivado で合成ま たは イ ンプ リ メ ン テーシ ョ ン ま で実行 さ れます。 c. Vivado ツールの実行が完了す る と 、 タ イ ミ ン グ パ ス情報が収集 さ れ、 Vivado タ イ ミ ン グ デー タ ベース の指 定フ ァ イ ル フ ォーマ ッ ト で保存 さ れます。 タ イ ミ ン グ パ ス デー タ が収集 さ れ る と 、 Vivado プ ロ ジ ェ ク ト は 閉 じ 、 MATLAB/System Generator プ ロ セ ス に戻 り ます。 d. System Generator は タ イ ミ ン グ情報を処理 し 、 Timing Analyzer の表に タ イ ミ ン グ パ ス情報を表示 し ます (次 を参照)。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 113 第 5 章 : System Generator での タ イ ミ ング解析 X-Ref Target - Figure 5-2 Timing Analyzer の表には次の よ う に表示 さ れます。 • Simulink モデルか ら のパ ス (重複 し ない) が レ ポー ト さ れます。 • ス タ ッ ク 値が最 も 低いパ ス か ら 50 個表示 さ れます。 ワース ト ス ラ ッ ク が 1 番最初に表示 さ れ、 ス ラ ッ ク 値が低 い も のか ら 順に表示 さ れます。 • 表示順序は、 列見出 し を ク リ ッ ク す る と 列の値順に分類す る こ と がで き ます。 • タ イ ミ ン グ違反が発生 し てい る パ ス の ス ラ ッ ク 値は負の値にな っ ていて、 赤で表示 さ れます。 • 表の中でパ ス を選択す る と 、 こ の表か ら Simulink モデルへ と ク ロ ス プ ロ ーブで き ます。 Simulink モデル内の対応 す る System Generator ブ ロ ッ ク がハ イ ラ イ ト さ れます。 「 タ イ ミ ン グ解析結果か ら モデルへの ク ロ ス プ ロ ーブ」 を 参照 し て く だ さ い。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 114 第 5 章 : System Generator での タ イ ミ ング解析 タ イ ミ ング解析結果から モデルへのク ロ ス プ ローブ Timing Analyzer の表の中でパ ス (行) を ク リ ッ ク する と 、こ の表か ら Simulink モデルへ と ク ロ ス プ ロ ーブで き ます。 モ デル内の対応 System Generator ブ ロ ッ ク がハ イ ラ イ ト さ れ ます。 こ れで、 タ イ ミ ン グ違反が発生 し てい る パス を解析 し 、 ト ラ ブルシ ュ ー ト す る こ と がで き ます。 X-Ref Target - Figure 5-3 ク ロ ス プ ロ ーブす る と き 、 モデルでは次の よ う に表示 さ れます。 • タ イ ミ ン グ違反が起 き てい る パ ス のブ ロ ッ ク はモデルでは赤 く ハ イ ラ イ ト さ れます。 • タ イ ミ ン グ違反が起 き てい る パ ス のブ ロ ッ ク がサブシ ス テ ム内にあ る 場合は、 そのサブシ ス テ ムが赤 く ハ イ ラ イ ト さ れ、 サブシ ス テ ム を展開 し 、 その中にあ る ブ ロ ッ ク を調査す る こ と がで き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 115 第 5 章 : System Generator での タ イ ミ ング解析 X-Ref Target - Figure 5-4 • パ ス に タ イ ミ ン グ違反が発生 し ていない場合 (つま り 、 タ イ ミ ン グ制約に違反が起き ていない)、 対応す る ブ ロ ッ ク は緑色にハ イ ラ イ ト さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 116 第 5 章 : System Generator での タ イ ミ ング解析 既存の タ イ ミ ング解析結果へのア ク セス System Generator ト ー ク ンのダ イ ア ロ グ ボ ッ ク ス の [Clocking] タ ブには [Launch Analyzer] ボ タ ンがあ り 、こ れを ク リ ッ ク す る と 、モデルの既存の タ イ ミ ン グ解析結果が含まれた Timing Analyzer の表が開 き ます。[Target directory] に Timing Analyzer で読み出 し 可能なデ ィ レ ク ト リ が指定 さ れてい る こ と を確認 し て く だ さ い。 Simulink モデルで タ イ ミ ン グ解 析を既に実行 し ていて、 Simulink モデルを前回の実行か ら 変更 し ていない場合にのみ、 こ の操作が可能です。 X-Ref Target - Figure 5-5 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 117 第 5 章 : System Generator での タ イ ミ ング解析 タ イ ミ ング違反の ト ラ ブルシ ュー ト に関する推奨事項 タ イ ミ ン グ違反の ト ラ ブルシ ュ ー ト には次の点が推奨 さ れます。 • タ イ ミ ン グ解析を手早 く 実行す る には、イ ンプ リ メ ン テーシ ョ ン後の解析 よ り も 、合成後の解析が適 し てい ます。 • Vivado 合成プ ロ セ ス中の ロ ジ ッ ク 最適化の後は、Vivado デー タ ベース でマージ さ れた ロ ジ ッ ク についての情報は ツールでは保存 さ れません。 マージ さ れた ロ ジ ッ ク お よ び共有 ロ ジ ッ ク を、Vivado タ イ ミ ン グ パ ス か ら Simulink モデルに正確に ク ロ ス プ ロ ーブす る のは難 し い場合があ り ます。 そ こ で、 デフ ォ ル ト の Vivado 合成ス ト ラ テ ジ に次の変更を加え て、 Vivado でカ ス タ ムの合成ス ト ラ テジ を作成する こ と を推奨 し ます。 1. Vivado で次の作業を行い ます。 - 合成オプシ ョ ンに -keep_equivalent_registers を選択 し ます。 - 合成オプシ ョ ンで -resource_sharing を off に設定 し ます。 2. 新 し い合成ス ト ラ テジ を保存 し て Vivado を終了 し ます。 3. System Generator で、デザ イ ン を生成する 前に、新 し く 保存 し た カ ス タ ムの合成ス ト ラ テジ を System Generator ト ー ク ンのダ イ ア ロ グ ボ ッ ク ス で選択 し ます。 X-Ref Target - Figure 5-6 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 118 第 6 章 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 概要 System Generator には、 ハー ド ウ ェ ア協調シ ミ ュ レ ーシ ョ ン の機能が含 ま れ、 FPGA で実行 さ れ る デザ イ ン を 直接 Simulink シ ミ ュ レーシ ョ ンに読み込む こ と がで き ます。[Hardware Co-Simulation] コ ンパ イ ル オプシ ョ ン を選択 し て コ ンパ イ ルす る と 、 ビ ッ ト ス ト リ ーム が自動的に作成 さ れ、 ブ ロ ッ ク に関連付け ら れ ま す。 デザ イ ン が Simulink でシ ミ ュ レー ト さ れ る と 、 その コ ンパ イ ル さ れた部分の結果はハー ド ウ ェ アで計算 さ れます。 こ れに よ り 、 コ ンパ イ ル さ れた部分が実際のハー ド ウ ェ アでテ ス ト で き る よ う にな り 、 シ ミ ュ レーシ ョ ン時間を大幅に短縮 さ せ る こ と がで き ま す。 System Generator では現在の と こ ろ次のボー ド がサポー ト さ れてい ます。 表 6‐1 : System Generator ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンのボー ド サポー ト デバイ ス フ ァ ミ リ ボー ド サポー ト Artix-7 AC701 JTAG Kintex-7 KC705 • JTAG • ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト Virtex-7 VC707 • JTAG • ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト Zynq-7000 ZC702 ZC706 • JTAG • JTAG ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンへの M コ ー ド ア ク セス MATLAB M コ ー ド (M-Hwcosim) を使用す る と 、 System Generator ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン フ ロ ーで作成 さ れたハー ド ウ ェ ア をプ ロ グ ラ ム制御で き ます。 M-Hwcosim イ ン タ ーフ ェ イ ス では、 Simulink の フ レーム ワー ク と は 別に、 ハー ド ウ ェ アに対応す る MATLAB オブジ ェ ク ト を純粋な M コ ー ド で作成で き ます。 そ う す る と 、 こ れ ら のオ ブジ ェ ク ト を使用 し て、ハー ド ウ ェ アへ読み出 し お よ び書 き 込みがで き る よ う にな り ます。こ の機能を使用 し て、ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンに ス ク リ プ ト イ ン タ ーフ ェ イ ス を含め る こ と がで き 、ハー ド ウ ェ ア を ス ク リ プ ト 記述 さ れた テ ス ト ベンチで使用 し た り 、 M コ ー ド でのハー ド ウ ェ ア ア ク セ ラ レーシ ョ ン と し て利用す る こ と がで き る よ う にな り ます。 こ の詳細は、 『Vivado Design Suite リ フ ァ レ ン ス ガ イ ド : System Generator を使用 し たモデル ベース の DSP デザ イ ン』 (UG958)の 「ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンへの M コ ー ド ア ク セ ス」 を参照 し て く だ さ い。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 119 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 ハー ド ウ ェ ア ボー ド のイ ン ス ト ール ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン を実行す る には、まずハー ド ウ ェ ア ボー ド を イ ン ス ト ール し て設定す る 必要があ り ます。 次のセ ク シ ョ ンでは、 ザ イ リ ン ク ス のサポー ト す る ボー ド の イ ン ス ト ールお よ び設定方法について説明 し ま す。 JTAG ベースのハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン JTAG ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン用の KC705 ボー ド の イ ン ス ト ール ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン PC での ロ ーカル エ リ ア ネ ッ ト ワ ー ク の設定 Linux でのポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンのための KC705 ボー ド の イ ン ス ト ール ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンのための VC705 ボー ド の イ ン ス ト ール ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン用のモデルの コ ンパイル ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンは、 ハー ド ウ ェ アで実行す る System Generator モデルま たはサブシ ス テ ムか ら 始 め ます。 基本的なハー ド ウ ェ ア ボー ド の要件を満た し てい る モデルであれば、 ど のモデルで も 協調シ ミ ュ レーシ ョ ン が可能です。こ のモデルには System Generator ト ー ク ン を含め る 必要があ り ます。こ のブ ロ ッ ク はモデルのハー ド ウ ェ ア へ の コ ン パ イ ル 方 法 を 定 義 し ま す。 フ ロ ー の 始 め に ま ず [System Generator] ダ イ ア ロ グ ボ ッ ク ス を 開 い て、 [Compilation] か ら コ ンパ イ ル タ イ プ を選択 し ます。 System Generator ト ー ク ンの使用方法については、 System Generator ト ー ク ン を使用 し た コ ンパ イ ル と シ ミ ュ レーシ ョ ン を参照 し て く だ さ い。 コ ンパイル タ ーゲ ッ ト の選択 [System Generator] ダ イ ア ロ グ ボ ッ ク ス で適切な コ ンパ イ ル タ イ プ を選択す る と 、 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ボー ド を選択で き ます。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン タ ーゲ ッ ト は、 ダ イ ア ロ グ ボ ッ ク ス の [Compilation] フ ィ ール ド の [Hardware Co-Simulation] メ ニ ュ ーの下に分類 さ れます。 コ ンパ イ ル タ ーゲ ッ ト を選択す る と 、 [System Generator] ダ イ ア ロ グ ボ ッ ク ス の フ ィ ール ド がその タ ーゲ ッ ト に合わ せて自動的に設定 さ れます。 System Generator は各 コ ンパ イ ル タ ーゲ ッ ト のダ イ ア ロ グ ボ ッ ク ス の設定を記録 し てい ます。 新 し い タ ーゲ ッ ト を選択 し た と き に こ れ ら の設定は保存 さ れ、 その タ ーゲ ッ ト を も う 1 度開 く と その設定が復 元 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 120 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 コ ー ド ジ ェ ネ レー タ ーの起動 コ ー ド ジ ェ ネ レー タ ーは、 [System Generator] ダ イ ア ロ グ ボ ッ ク ス の [Generate] ボ タ ン を ク リ ッ ク す る と 起動 し ます。 コ ー ド ジ ェ ネ レー タ ーは、 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン に合っ たデザ イ ン の FPGA コ ン フ ィ ギ ュ レーシ ョ ン ビ ッ ト ス ト リ ーム を生成 し ます。 System Generator は、 コ ンパ イ ル プ ロ セ ス中にモデルの HDL お よ びネ ッ ト リ ス ト フ ァ イ ルを生成す る だけでな く 、 FPGA コ ン フ ィ ギ ュ レ ーシ ョ ン フ ァ イ ルを生成す る のに必要な ダ ウ ン ス ト リ ーム ツール も 実行 し ます。 注記 : [Generate] ボ タ ン を ク リ ッ ク する と 、 ス テー タ ス を示すダ イ ア ロ グ ボ ッ ク ス が表示 さ れます。 コ ンパ イ ル中は、 [Cancel] お よ び [Show Details] ボ タ ン が表示 さ れ ます。 [Cancel] ボ タ ン を ク リ ッ ク す る と 、 コ ンパ イ ルが停止 し ます。 [Show Details] ボ タ ン を ク リ ッ ク す る と 、実行中に コ ンパ イ ルの各段階に関す る 詳細が表示 さ れます。ダ イ ア ロ グ ボ ッ ク ス の [Hide Details] ボ タ ン を ク リ ッ ク す る と 、 コ ンパ イ ルの詳細は非表示にな り ます。 コ ン フ ィ ギ ュ レーシ ョ ン ビ ッ ト ス ト リ ームには、 モデルに関連 し たハー ド ウ ェ アが含まれ る ほか、 ボー ド と PC 間の 物理的 イ ン タ ーフ ェ イ ス を使用 し て、 System Generator がデザ イ ンが通信で き る よ う にす る 追加 イ ン タ ーフ ェ イ ス ロ ジ ッ ク も 含まれます。 こ の ロ ジ ッ ク には メ モ リ マ ッ プ イ ン タ ーフ ェ イ ス が含まれ、 こ れを介 し て、 System Generator はデザ イ ンの入力ポー ト お よ び出力ポー ト に値を読み出 し た り 、 書 き 込んだ り で き ます。 ま た、 タ ーゲ ッ ト の FPGA ボー ド が正 し く 機能す る のに必要なボー ド に特化 し た回路 も 含まれます。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク デザ イ ン を FPGA ビ ッ ト ス ト リ ー ム に コ ン パ イ ル し た後、 System Generator は新 し いハー ド ウ ェ ア協調シ ミ ュ レ ー シ ョ ン ブ ロ ッ ク を自動的に作成 し ます。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク を格納す る ための Simulink ラ イ ブ ラ リ も 作成 さ れ ま す。 こ の段階では、 ラ イ ブ ラ リ か ら ブ ロ ッ ク を コ ピ ー し て、 ほかの Simulink お よ び System Generator ブ ロ ッ ク と 同様に、 System Generator デザ イ ンで使用で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 121 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク は、元にな っ てい る モデルま たはサブシ ス テ ムの外部 イ ン タ ーフ ェ イ ス があ る も の と 想定 し ます。ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク のポー ト 名は元のサブシ ス テ ムのポー ト 名 と 同 じ にな り ます。 ポー ト タ イ プお よ びレー ト も 元のデザ イ ン と 同 じ にな り ます。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク は、ほかのブ ロ ッ ク と 同 じ よ う に Simulink デザ イ ンで使用 さ れます。シ ミ ュ レーシ ョ ン中、ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク は FPGA ボー ド と 通信 し て、デバ イ ス コ ン フ ィ ギ ュ レーシ ョ ン、 デー タ 転送、 ク ロ ッ ク 供給な ど の タ ス ク を自動化 し ます。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク は、ほかの System Generator ブ ロ ッ ク が使用する の と 同 じ 型の信号を使用お よ び生成 し ます。値がブ ロ ッ ク の入力ポー ト の 1 つに書 き 込まれ る と 、 ブ ロ ッ ク は対応す る デー タ をハー ド ウ ェ アの該当箇所に送信 し ます。 同様に、 出力ポー ト に イ ベン ト があ る と 、 ブ ロ ッ ク はハー ド ウ ェ アか ら デー タ を取 り 出 し ます。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク は、 ザ イ リ ン ク ス の固定小数点型、 Simulink の固定小数点型、 ま たは Simulink の倍精度 (double) 型の信号で駆動可能です。 出力ポー ト は、 信号型が駆動す る ブ ロ ッ ク に適 し た も のであ る と みな し ます。 出力ポー ト が System Generator ブ ロ ッ ク に接続す る と 、 出力ポー ト はザ イ リ ン ク ス固定小数点型の信 号を出力 し ます。 あ る いは、 ポー ト が Simulink ブ ロ ッ ク を直接駆動す る 場合は、 Simulink デー タ 型の信号を出力 し ま す。 注記 : Simulink デー タ 型がブ ロ ッ ク 信号型 と し て使用 さ れ る と 、 入力デー タ の量子化は丸めに よ っ て処理 さ れ、 オー バーフ ロ ーは飽和に よ っ て処理 さ れます。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク には、 その他の System Generator ブ ロ ッ ク と 同様、 パ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス があ り 、 さ ま ざ ま な設定で コ ン フ ィ ギ ュ レーシ ョ ン で き る よ う にな っ てい ます。 ハー ド ウ ェ ア協調シ ミ ュ レ ーシ ョ ン ブ ロ ッ ク のパ ラ メ ー タ ーは、 ブ ロ ッ ク が イ ン プ リ メ ン ト さ れ る FPGA ボー ド に よ っ て異な り ま す (FPGA ボー ド ご と にそれぞれカ ス タ マ イ ズ さ れたハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク が提供 さ れてい ます )。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンのク ロ ッ ク ク ロ ッ ク モー ド System Generator ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク を関連づけ ら れてい る FPGA ハー ド ウ ェ ア と 同期 さ せ る 方法は複数あ り ます。シ ン グル ス テ ッ プ ク ロ ッ ク モー ド では、FPGA に Simulink か ら ク ロ ッ ク が供給 さ れ、 フ リ ー ラ ン ニ ン グ ク ロ ッ ク モー ド の場合は、 内部 ク ロ ッ ク が使用 さ れ、 Simulink がハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク を起動す る と 非同期にサンプ リ ン グ さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 122 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 シ ングル ス テ ッ プ ク ロ ッ ク シ ン グル ス テ ッ プ ク ロ ッ ク モー ド では、 ハー ド ウ ェ アが ソ フ ト ウ ェ ア シ ミ ュ レーシ ョ ン と 足並みを揃えた状態にな り ます。 こ れは、 各シ ミ ュ レーシ ョ ン サ イ ク ルでハー ド ウ ェ アに 1 つの ク ロ ッ ク パルス を供給する 方法です ( FPGA が入力/出力 レ ー ト よ り も 速 く ク ロ ッ ク 供給を 受け て い る 場合は複数 ク ロ ッ ク パル ス を 供給)。 こ のモー ド の場合、 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク は元のモデルに対 し て ビ ッ ト ご と ま たはサ イ ク ルご と に比較 さ れます。 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク は、Simulink が起動す る 場合にのみ FPGA ハー ド ウ ェ アの ク ロ ッ ク 信号 を生成す る ので、 Simulink モデルのシ ミ ュ レーシ ョ ンのほかの部分か ら のオーバーヘ ッ ド や、 Simulink と FPGA ボー ド 間の通信オーバーヘ ッ ド (バ ス レ イ テ ン シな ど) に よ り 、 ハー ド ウ ェ アで達成 さ れ る パフ ォ ーマ ン ス が著 し く 制限 さ れ ます。 通信オーバーヘ ッ ド に関 し ていえば、 FPGA 内の計算能力が大 き ければ ( ロ ジ ッ ク 数が多か っ た り 、 ハー ド ウ ェ アがかな り のオーバー ク ロ ッ ク 状態であ る な ど)、 ハー ド ウ ェ アに よ り 、 シ ミ ュ レーシ ョ ン を かな り ス ピー ド ア ッ プ さ せ る こ と がで き ます。 フ リ ー ラ ン ニ ング ク ロ ッ ク フ リ ー ラ ン ニ ン グ ク ロ ッ ク モー ド では、 ハー ド ウ ェ アは ソ フ ト ウ ェ ア シ ミ ュ レーシ ョ ンに対 し て非同期に実行 し ま す。 実質的には Simulink が FPGA ク ロ ッ ク を生成する シ ン グル ス テ ッ プ ク ロ ッ ク モー ド と は違っ て、 フ リ ー ラ ン ニ ン グ モー ド では、 ハー ド ウ ェ ア ク ロ ッ ク は FPGA 内で継続的に実行 し ます。 こ のモー ド では、 Simulink がハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンブ ロ ッ ク を起動す る と き に、 ハー ド ウ ェ アの内部ス テー ト を Simulnk がサンプ リ ン グす る だ け なので、 シ ミ ュ レ ーシ ョ ン は元のモデル と ビ ッ ト ご と 、 サ イ ク ル ご と には比較 さ れ ま せん。 FPGA ポー ト I/O は Simulink の イ ベン ト と は同期 し な く な り ます。 Simulink ポー ト で イ ベン ト が発生する と 、 その時点で値がハー ド ウ ェ アの対応ポー ト か ら 読み出 さ れ る か、 そのポー ト に書き 込まれます。 し か し 、 ポー ト イ ベン ト 間のハー ド ウ ェ アでの 経過 ク ロ ッ ク サ イ ク ル数はわか ら ないので、 ハー ド ウ ェ アの現在の ス テー ト を元の System Generator モデル と 照合す る こ と はで き ません。 Simulink と は一定期間を置いて し か同期 し ないため、 FPGA はフルス ピー ド で動作可能 と な る ので、 ス ト リ ー ミ ン グ アプ リ ケーシ ョ ンに と っ て、 こ れは非常に好ま し い状況です。 フ リ ー ラ ン ニ ン グ ク ロ ッ ク モー ド では、ユーザーが明示的な同期 メ カ ニズ ム を System Generator モデルに構築 し てお く 必要があ り ます。 簡単な例を あげ る と 、 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク の出力ポー ト と し ての ス テー タ ス レ ジ ス タ で、 こ れは条件が満た さ れていればハー ド ウ ェ アで設定 さ れます。 System Generator モデルのほかの部 分は、 ス テー タ ス レ ジ ス タ を ポー リ ン グ し て、 ハー ド ウ ェ アの ス テー ト を判断で き ます。 ク ロ ッ ク モー ド の選択 すべてのハー ド ウ ェ ア ボー ド で フ リ ー ラ ン ニ ン グ ク ロ ッ ク がサポー ト さ れ る わけではあ り ません。 し か し 、 サポー ト さ れ る 場合は、 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で ク ロ ッ ク モー ド が選択で き る よ う にな っ てい ます。 協調シ ミ ュ レーシ ョ ンの ク ロ ッ ク モー ド は、 シ ミ ュ レーシ ョ ンの開始前に、 パ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス の [Clock Source] で [Single stepped] ま たは [Free running] を オンにす る と 変更で き ま す。 注記 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン ブ ロ ッ ク で使用可能な ク ロ ッ ク オプシ ョ ンは、 使用す る FPGA ボー ド に よ っ て異な り ます (フ リ ー ラ ン ニ ン グ ク ロ ッ ク ソ ース がサポー ト さ れないボー ド の場合は、 ダ イ ア ロ グ ボ ッ ク ス に オプシ ョ ンは表示 さ れません)。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 123 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 M-Hwcosim を を 使用 し て フ リ ー ラ ン ニ ン グ ク ロ ッ ク のオ ン/オ フ を プ ロ グ ラ ミ ン グ で切 り 替え る 方法につい ては、 『Vivado Design Suite リ フ ァ レ ン ス ガ イ ド : System Generator を 使用 し た モデル ベー ス の DSP デザ イ ン』 (UG958) の 「M-Hwcosim MATLAB ク ラ ス」 を参照 し て く だ さ い。 JTAG ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン用の KC705 ボー ド のイ ン ス ト ール 次のセ ク シ ョ ン では、 K705 ボー ド で JTAG ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン を実行す る のに必要なハー ド ウ ェ ア お よ び ソ フ ト ウ ェ アの イ ン ス ト ールお よ び設定方法を説明 し ます。 必要なハー ド ウ ェ ア 1. ザ イ リ ン ク ス Kintex®-7 KC705 ボー ド には、 次の も のが含まれてい ます。 a. Kintex-7 KC705 ボー ド b. KC705 キ ッ ト に含まれ る 12V 電源 c. Micro USB-JTAG ケーブル ホス ト PC への Vivado Design Suite のイ ン ス ト ール 次の資料で説明 さ れてい る よ う に、 ホ ス ト PC へザ イ リ ン ク ス Vivado® Design Suite を イ ン ス ト ール し ます。 『Vivado Design Suite ユーザー ガ イ ド : リ リ ース ノ ー ト 、 イ ン ス ト ールお よ び ラ イ セ ン ス』 (UG973) Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 124 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 KC705 ボー ド の設定 次の図は、 こ の JTAG 設定に必要な KC705 コ ン ポーネ ン ト を示 し てい ます。 JTAG コ ネ ク タ 電源ス イ ッ チ LED 電源コ ネ ク タ 1. KC705 ボー ド を図の よ う に配置 し ます。 2. ボー ド の右上の電源ス イ ッ チが OFF にな っ てい る こ と を確認 し ます。 3. Micro USB-JTAG ケーブルの小 さ いほ う 端を JTAG ソ ケ ッ ト に接続 し ます。 4. Micro USB-JTAG ケーブルの大 き いほ う の端を PC の USB ソ ケ ッ ト に接続 し ます。 5. AC 電源 コ ー ド を電源に接続 し ます。電源ア ダプ タ ー ケーブルを KC705 ボー ド に差 し 込みます。電源ケーブルを AC 電源に差 し 込みます。 6. KC705 ボー ド の電源ス イ ッ チを OFF に し ます。 7. Simulink の GUI で [Run] ボ タ ン を ク リ ッ ク し て、 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン を開始 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 125 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア 協調シ ミ ュ レーシ ョ ン PC でのロー カル エ リ ア ネ ッ ト ワー ク の設定 イ ーサネ ッ ト のポ イ ン ト ツー ポ イ ン ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの場合、 PC に 10/100 高速 イ ーサネ ッ ト ま たはギガ ビ ッ ト イ ーサネ ッ ト ア ダプ タ ーが必要です。 設定す る には、 次の手順に従っ て く だ さ い。 [ス タ ー ト ] メ ニ ュ ーか ら [ コ ン ト ロ ール パネル] を開いて、[ネ ッ ト ワー ク お よ び イ ン タ ーネ ッ ト ] → [ネ ッ ト ワ ー ク ス テー タ スお よ び タ ス ク を表示] を ク リ ッ ク し ます。 左側にあ る [ア ダプ タ ーの設定の変更] を ク リ ッ ク し ます。 [ ロ ーカル エ リ ア接続] を右 ク リ ッ ク し て [プ ロ パテ ィ ] を ク リ ッ ク し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 126 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 次の図の よ う に [ イ ン タ ーネ ッ ト プ ロ ト コ ル バージ ョ ン 4 (TCP/IPv4)] を オ ンに し ます。 それ以外はすべてオ フ に し ます。 次に [ イ ン タ ーネ ッ ト プ ロ ト コ ル バージ ョ ン 4 (TCP/IPv4)] を選択 し ます。[プ ロ パテ ィ ] を ク リ ッ ク し て [IP ア ド レ ス ] を 192.168.1.11 に、 [サブネ ッ ト マ ス ク ] を 255.255.255.0 に設定 し 、 [OK] を ク リ ッ ク し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 127 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 [構成] を ク リ ッ ク し ます。 [はい] を ク リ ッ ク し ます。 [詳細設定] タ ブを ク リ ッ ク し ます。 [Flow Control] を ク リ ッ ク し ます。 値を [Rx and Tx Enabled] に設定 し ます。 最後に[Speed and Duplex] を ク リ ッ ク し て値を [Auto Negotiation] に設定 し 、 [OK] ボ タ ン を ク リ ッ ク し ます。 Linux でのポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協 調シ ミ ュ レーシ ョ ン Linux でポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン を実行する には、Linux コ ン ピ ュ ー タ の sudo ア ク セ ス が必要です。 sudo ユーザー と し て System Generator を起動す る 必要があ り ます。 複数のネ ッ ト ワー ク イ ン タ ーフ ェ イ ス カー ド が コ ン ピ ュ ー タ ーにない場合は、 ネ ッ ト ワー ク ス イ ッ チを使用で き ます。 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト のハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンのバース ト デー タ 転送 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン (HWCosim) は、 モデルの中で も も っ と も 計算が激 し く 行われ る 箇所の一部ま た はすべて を、 実際の タ ーゲ ッ ト FPGA プ ラ ッ ト フ ォ ーム に行わせ る 手法です。 ホ ス ト シ ス テ ムは、 協調シ ミ ュ レー シ ョ ン イ ン タ ーフ ェ イ ス (通常は JTAG ま たはポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ) を介 し て、 モデルへス テ ィ ミ ュ ラ ス を供給 し 、 その応答を処理 し ます。 こ の手法は、生成 さ れたハー ド ウ ェ ア デザ イ ン を タ ーゲ ッ ト プ ラ ッ ト フ ォー ムで検証 し 、 ま たハー ド ウ ェ ア協調検証でモデルを検証 し てい る 間のシ ミ ュ レーシ ョ ン時間を ス ピー ド ア ッ プ さ せ る のに便利です。 System Generator for DSP を併用 し た MATLAB/Simulink では、現在、GUI ベースお よ び MATLAB の M ス ク リ プ ト ベー ス の 2 タ イ プの HWCosim がサポー ト さ れてい ます。 1 つ目は、 Simulink ス ケ ジ ュ ー ラ ーを利用 し て実行 さ れ、 モデ ルに フ ィ ー ド バ ッ ク ループがあ る 可能性があ る ため、 1 度に 1 ク ロ ッ ク サ イ ク ルずつ処理 さ れます。 2 つ目は、 System Generator (M-HWCosim) を利用 し た MATLAB M ス ク リ プ ト ベース のシ ミ ュ レーシ ョ ンで、 System Generator ト ー ク ンか ら の ビ ッ ト ス ト リ ーム生成中に生成 さ れたテ ス ト ベンチで使用 さ れ る のが一般的です。こ れ ら の テ ス ト ベンチには通常フ ィ ー ド バ ッ ク がな く 、既知の入力を利用 し て、も っ と 大 き な単位でデバ イ ス に転送で き ます。 古いバージ ョ ン の System Generator for DSP (Vivado) では、 基本的な タ イ プのポ イ ン ト ツ ー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン し か イ ンプ リ メ ン ト さ れず、イ ーサネ ッ ト イ ン タ ーフ ェ イ ス のパフ ォーマ ン ス を Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 128 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 最大限に生かす こ と がで き ませんで し た。 コ マ ン ド お よ び応答のパケ ッ ト は、 1 サ イ ク ルご と に送信 さ れ、 9014 バ イ ト の イ ーサネ ッ ト ジ ャ ン ボ フ レーム サ イ ズのほんの一部 し か利用で き てい ませんで し た。最新版の System Generator for DSP では、 こ う し た こ れま で利用で き ていなか っ たパフ ォーマ ン ス を う ま く 活用で き る よ う にな っ てい ます。 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの概要 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン (HWCosim) の概要を次の図に示 し ます。中 央にあ る のは、 デバ イ ス ア ン ダーテ ス ト (DUT) です。 こ の DUT は一般的に、 Simulink テ ス ト フ レーム ワー ク 内で開 発お よ びテ ス ト さ れ る IP で、 ス テ ィ ミ ュ ラ ス を供給 し 、 応答を受信 (可能であれば評価) し ます。 Simulink が DUT と 通信で き る よ う にす る には、 それを次の コ ン ポーネ ン ト か ら 成 る HWCosim ラ ッ パーに埋め込む必要があ り ます。 X-Ref Target - Figure 6-1 • イ ーサネ ッ ト イ ン タ ーフ ェ イ ス : コ マ ン ド メ ッ セージ を受信 し 、 応答を送信す る ホ ス ト PC と 通信す る のに使用 さ れます。 • コ マ ン ド プ ロ セ ッ サ : コ マ ン ド メ ッ セージが処理お よ び実行 さ れます。 • メ モ リ マ ッ プ さ れた AXI4-Lite レ ジ ス タ バン ク : DUT への入力を駆動する レ ジ ス タ マ ッ プの ス テ ィ ミ ュ ラ ス デー タ を設定す る ために、 書 き 込み コ マ ン ド が使用 さ れます。 同様に、 読み出 し コ マ ン ド は、 メ モ リ マ ッ プ さ れ た DUT 出力の ク エ リ ーに使用 さ れます。 そ し て、 メ モ リ マ ッ プ さ れた ク ロ ッ ク 制御レ ジ ス タ への run(x) コ マ ン ド に よ り 、 DUT の ク ロ ッ ク 入力で正確に x 数の ク ロ ッ ク パルス が ト リ ガー さ れます。 ま た、 run(inf) コ マ ン ド は フ リ ー ラ ン ニ ン グ ク ロ ッ ク モー ド を開始 し 、 run(0) はその ク ロ ッ ク を オ フ に し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 129 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 バース ト デー タ 転送モー ド System Generator ト ー ク ン でバー ス ト デー タ 転送モー ド を イ ネーブルにす る と ([Compilation] → [Settings] → [Burst mode])、 非 ク ロ ッ ク 入力お よ び出力レ ジ ス タ が n 個の -entry FIFO に置 き 換え ら れます。 [FIFO depth] で こ の数を選択 す る こ と がで き ます ( こ の値に よ り 、パフ ォーマ ン ス と FPGA の BRAM リ ソ ース の使用率の ト レー ド オ フ を調整で き ます)。 X-Ref Target - Figure 6-2 [Burst mode] を有効にす る と 、 M-HWCosim ス ケ ジ ュ ー ラ ーが タ イ ム シーケ ン ス値 (n) 分、 各入力 FIFO にバース ト 書 き 込みを実行 し 、入力/出力ポー ト の レー ト お よ び FIFO の深 さ で決め ら れ る サ イ ク ル間 ク ロ ッ ク を実行 し 、出力 FIFO で出力結果値を取 り 込む こ と がで き ます。 こ の後、 ス ケ ジ ュ ー ラ ーは、 出力 FIFO の内容を MATLAB ア レ イ にバース ト 読み出 し を実行 し ます。 こ こ で予期デー タ と 比較 し てチ ェ ッ ク が行われます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 130 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 X-Ref Target - Figure 6-3 タ イ ム サン プルの こ のバ ッ チ処理に よ り 、 最大ジ ャ ン ボ フ レーム サ イ ズ ま でポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト フ レームにデー タ を ま と め る こ と がで き る ので、 オーバーヘ ッ ド を著 し く 削減で き ます。 バース ト デー タ 転送モー ド の使用方法 バース ト デー タ 転送モー ド を開始す る のに一番簡単な方法は、 自動生成 さ れた テ ス ト ベンチ ス ク リ プ ト を使用す る 方法です。 上級ユーザーの場合は、 System Generator for DSP に含ま れてい る MATLAB xlHwcosim オブジ ェ ク ト を使 用 し た HWCosim API を利用す る こ と がで き ます。 自動テ ス ト ベン チ生成 テ ス ト ベンチ生成は、 HWCosim コ ンパ イ ル フ ロ ーで行われ ます。 Simulink モデル図で System Generator ト ー ク ン を 開 き 、 ダ イ ア ロ グ ボ ッ ク ス が開 く のを待ち ます。 最初に表示 さ れ る タ ブでは コ ンパ イ ル オプシ ョ ン を設定で き ます。 ド ロ ッ プダ ウ ン リ ス ト には使用可能な コ ンパ イ ル タ ーゲ ッ ト が表示 さ れます。 バース ト モー ド の場合、 タ ーゲ ッ ト はポ イ ン ツー ポ イ ン ト イ ーサネ ッ ト HWCosim フ ロ ーの 1 つであ る 、KC705 ボー ド か VC707 ボー ド であ る 必要があ り ます。 いずれかの タ ーゲ ッ ト フ ロ ーを選択 し た後、 設定ボ タ ンが利用可能にな り ます。 それを選択する と 、 別のダ イ ア ロ グ ボ ッ ク ス が開 き 、 そ こ でバー ス ト モー ド お よ び FIFO の深 さ を選択で き ます。 バース ト モー ド を オ ンに し た ら 、 [Compilation] タ ブの下にあ る [Create testbench] チ ェ ッ ク ボ ッ ク ス を オンに し て、 M-HWCosim テ ス ト ベンチ ス ク リ プ ト を自動生成す る こ と が き る よ う にな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 131 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 X-Ref Target - Figure 6-4 テ ス ト ジ ェ ネ レー タ ーは次の タ ーゲ ッ ト デ ィ レ ク ト リ に M ス ク リ プ ト を生成 し ます。 <design_name>_<sub_system>_hwcosim_test.m MATLAB コ ン ソ ールで こ の ス ク リ プ ト を実行で き ます。 ま た、 こ の ス ク リ プ ト は、 ザ イ リ ン ク ス Gateway In ブ ロ ッ ク (ほかの Simulink ソ ース ブ ロ ッ ク ま たは MATLAB の も のか ら ) へ駆動 さ れ る ス テ ィ ミ ュ ラ ス デー タ を決め る ため に Simulink モデル も 実行 し なが ら 、 ザ イ リ ン ク ス ブ ロ ッ ク デザ イ ン (BD) に よ り 生成 さ れた予期出力を取 り 込み、 別 のデー タ フ ァ イ ル と し て タ ーゲ ッ ト デ ィ レ ク ト リ にデー タ を エ ク ス ポー ト し ます。 <design_name>_<sub_system>_<port_name>.dat. テ ス ト ベンチを実行す る には、 MATLAB の コ ン ソ ールを開 き 、 デ ィ レ ク ト リ を タ ーゲ ッ ト デ ィ レ ク ト リ に移動 し て、 ス ク リ プ ト の名前を指定 し て実行 し ます。 テ ス ト にエ ラ ーが発生す る と 、 コ ン ソ ールにエ ラ ーが出力 さ れ、 次の フ ァ イ ルにエ ラ ーが発生 し た箇所が比較 さ れて出力 さ れます。 <design_name>_<sub_system>_hwcosim_test.result. Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 132 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 バース ト モー ド のテ ス ト ベン チ ス ク リ プ ト 次は、 コ ンパ イ ル フ ロ ーの一部 と し てサンプル デザ イ ン用に生成 さ れた テ ス ト ベンチです。 ヒ ン ト : ボー ド に複数の イ ーサネ ッ ト ア ダプ タ ーが接続 さ れてい る 場合、 M-Hwcosim を使用 し て、 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン用の イ ーサネ ッ ト イ ン タ ーフ ェ イ ス を選択す る こ と がで き ます。 イ ン タ ーフ ェ イ ス の選択方法については、『Vivado Design Suite リ フ ァ レ ン ス ガ イ ド : System Generator を使用 し たモデル ベース の DSP デザ イ ン』 (UG958) の 「M-Hwcosim を使用 し たポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア強調シ ミ ュ レーシ ョ ンのアダプ タ ーの選択」 を参照 し て く だ さ い。 function eta = sysgenColorConverter_hwcosim_test eta = 0; ncycles = 4110; xlHwcosimTestbench('.','sysgenColorConverter'); testdata_blue = getfield(load('sysgenColorConverter_blue_hwcosim_test.dat', '-mat'), 'values'); testdata_green = getfield(load('sysgenColorConverter_green_hwcosim_test.dat','-mat'),'values'); testdata_red = getfield(load('sysgenColorConverter_red_hwcosim_test.dat', '-mat'), 'values'); testdata_pb = getfield(load('sysgenColorConverter_pb_hwcosim_test.dat', '-mat'), 'values'); testdata_pr = getfield(load('sysgenColorConverter_pr_hwcosim_test.dat', '-mat'), 'values'); testdata_y = getfield(load('sysgenColorConverter_y_hwcosim_test.dat', '-mat'), 'values'); result_pb = zeros(size(testdata_pb)); result_pr = zeros(size(testdata_pr)); result_y = zeros(size(testdata_y)); project = 'sysgenColorConverter.hwc'; h = Hwcosim(project);% create M-HWcosim instance and return handle try open(h); % open instance, initialize and reset FPGA tic; h('blue') = testdata_blue; % burst write contents of testdata_* to DUT ports h('green') = testdata_green; h('red') = testdata_red; run(h, ncycles); % run DUT for ncycles clocks result_pb = h('pb', ncycles); % burst read results back to host result_pr = h('pr', ncycles); result_y = h('y', ncycles); eta = toc; release(h); catch release(h); error('Error running hardware co-simulation testbench. Please refer to hwcosim.log for details.'); end logfile = 'sysgenColorConverter_hwcosim_test.results'; logfd = fopen(logfile, 'w'); sim_ok = true; sim_ok = sim_ok & xlHwcosimCheckResult(logfd, 'pb', testdata_pb, result_pb); sim_ok = sim_ok & xlHwcosimCheckResult(logfd, 'pr', testdata_pr, result_pr); sim_ok = sim_ok & xlHwcosimCheckResult(logfd, 'y', testdata_y, result_y); fclose(logfd); if ~sim_ok error('Found errors in the simulation results. Please refer to sysgenColorConverter_hwcosim_test.results for details.'); end disp('Simulation successful: sysgenColorConverter.'); こ の ス ク リ プ ト は まず、 シ ミ ュ レーシ ョ ン で実行す る サ イ ク ル数 (ncycles) を定義 し 、 テ ス ト ベンチ を準備 し 、 ス テ ィ ミ ュ ラ ス デー タ お よ び予期出力を MATLAB ア レ イ に読み込みます。 その後、 HWCosim API 共有 ラ イ ブ ラ リ を読 み込むハン ド ル (h) を使用 し て、 xlHwcosim オブジ ェ ク ト イ ン ス タ ン ス を作成 し ます。 try-catch ブ ロ ッ ク 内で、 イ ン ス タ ン ス を開 き 、 FPGA を初期化 し て、 FPGA へのポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト の接続を開 き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 133 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 セ ッ ト ア ッ プが完了 し た ら 、tic と toc の タ イ ミ ン グ コ マ ン ド 間の コ ー ド が書き 込み/実行/読み出 し の コ マ ン ド を実 行 し ます。 古いバージ ョ ンの HWCosim と は異な り 、 こ のテ ス ト ベンチには、 各 ク ロ ッ ク サ イ ク ルを通 し で実行す る for-loop は不要です。 こ れは、 (run(h, ncycles) コ マ ン ド の実行中に) 細かいサ イ ク ルで書き 込み/実行/読み出 し の バ ッ チ コ マ ン ド をハー ド ウ ェ アに実行す る 前に、 ホ ス ト メ モ リ にほぼ任意サ イ ズの書 き 込み コ マ ン ド を格納 し てお く こ と がで き る 、 新 し い ス マー ト キ ャ ッ シ ュ レ イ ヤーがあ る か ら です。 実行フ ェーズの最後で、 HWCosim イ ン ス タ ン ス は開放 さ れ、 テ ス ト ベンチは実際の出力 と 予期出力 と 比較 し ます。 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア 協調シ ミ ュ レーシ ョ ンのための KC705 ボー ド のイ ン ス ト ール 次は、 KC705 ボー ド のポ イ ン ト ツー ポ イ ン ト の イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン を実行す る のに必 要なハー ド ウ ェ ア を イ ン ス ト ールお よ び コ ン フ ィ ギ ュ レーシ ョ ンす る 方法について説明 し ます。 必要なハー ド ウ ェ ア • • • • • ザ イ リ ン ク ス KC705 ボー ド ボー ド の電源 ホ ス ト PC 用の イ ーサネ ッ ト ネ ッ ト ワー ク イ ン タ ーフ ェ イ ス カー ド (NIC) イ ーサネ ッ ト RJ45 Male/Male ケーブル(ネ ッ ト ワ ー ク ま たは ク ロ ス オーバー ケーブルな ど) ビ ッ ト ス ト リ ーム を ダ ウ ン ロ ー ド す る Digilent USB ケーブルま たはプ ラ ッ ト フ ォーム USB ケーブル KC705 ボー ド の設定 上記の図に示す よ う に、 次を実行 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 134 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 1. 電力ケーブルを右に接続 し ます。 電源ケーブルを AC 電源に差 し 込みます。 2. Digilent USB ケーブルを左上に、 も う 一方の先を ホ ス ト PC に接続 し ます。 3. イ ーサネ ッ ト ケーブルを KC705 ボー ド の左下へ、 も う 一方の先を ホ ス ト PC に接続 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 135 第 6 章 : ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用 ポ イ ン ト ツー ポ イ ン ト イ ーサネ ッ ト ハー ド ウ ェ ア 協調シ ミ ュ レーシ ョ ンのための VC705 ボー ド のイ ン ス ト ール 次は、 VC705 ボー ド のポ イ ン ト ツー ポ イ ン ト の イ ーサネ ッ ト ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン を実行す る のに必 要なハー ド ウ ェ ア を イ ン ス ト ールお よ び コ ン フ ィ ギ ュ レーシ ョ ンす る 方法について説明 し ます。 必要なハー ド ウ ェ ア • • • • • ザ イ リ ン ク ス VC705 ボー ド ボー ド の電源 ホ ス ト PC 用の イ ーサネ ッ ト ネ ッ ト ワー ク イ ン タ ーフ ェ イ ス カー ド (NIC) イ ーサネ ッ ト RJ45 Male/Male ケーブル(ネ ッ ト ワ ー ク ま たは ク ロ ス オーバー ケーブルな ど) ビ ッ ト ス ト リ ーム を ダ ウ ン ロ ー ド す る Digilent USB ケーブルま たはプ ラ ッ ト フ ォーム USB ケーブル VC705 ボー ド の設定 上記の図に示す よ う に、 次を実行 し ます。 1. 電力ケーブルを右に接続 し ます。 電源ケーブルを AC 電源に差 し 込みます。 2. Digilent USB ケーブルを左上に、 も う 一方の先を ホ ス ト PC に接続 し ます。 3. イ ーサネ ッ ト ケーブルを VC705 ボー ド の左下へ、 も う 一方の先を ホ ス ト PC に接続 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 136 第 7 章 HDL モ ジ ュ ールのイ ンポー ト System Generator デザ イ ンに既存の HDL モジ ュ ールを追加す る こ と が重要な場合があ り ます。 System Generator Black Box ブ ロ ッ ク を使用す る と 、 VHDL、 Verilog、 お よ び EDIF をデザ イ ンに追加で き ます。 Black Box ブ ロ ッ ク は、 ほか のブ ロ ッ ク と 同様に、 デザ イ ン に接続 し 、 シ ミ ュ レ ーシ ョ ン に含め、 ハー ド ウ ェ ア に コ ン パ イ ル し ま す。 System Generator で Black Box ブ ロ ッ ク を コ ンパ イ ルす る と 、 イ ン ポー ト さ れたモジ ュ ール と 関連の フ ァ イ ルが周囲のネ ッ ト リ ス ト に接続 さ れます。 ブ ラ ッ ク ボ ッ ク スは、 System Generator ト ー ク ンの設定に基づいて、 同期 ク ロ ッ ク デザ イ ン か複数ハー ド ウ ェ ア ク ロ ッ ク デザ イ ンのいずれか をサポー ト す る よ う に コ ン フ ィ ギ ュ レーシ ョ ンで き ます。 表 7‐1 : Black Box イ ン タ ー フ ェ イ ス ブ ラ ッ ク ボ ッ ク ス の HDL の要件 と 制限 ブ ラ ッ ク ボ ッ ク ス に関連す る VHDL、 Verilog、 EDIF に 対す る 要件 と 制限を説明 し ます。 ブラ ッ ク ボッ ク ス コンフ ィ ギュ レーシ ョ ン ウ ィ ザー ド ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド の使用法を説明 し ます。 ブラ ッ ク ボ ッ ク スのコ ンフ ィ ギュ レーシ ョ ン M 関数 ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン M 関数の作 成方法を説明 し ます。 HDL 協調シ ミ ュ レーシ ョ ン HDL シ ミ ュ レー タ の設定 Black Box ブ ロ ッ ク の HDL に対 し て協調シ ミ ュ レーシ ョ ン を 実行す る た め に、 Vivado® シ ミ ュ レ ー タ ま た は ModelSim を設定する 方法を説明 し ます。 複数 ブ ラ ッ ク ボ ッ ク ス の 協調 シ ミ ュ レーシ ョ ン 1 つの HDL シ ミ ュ レー タ セ ッ シ ョ ンで複数の Black Box ブ ロ ッ ク に対 し て協調シ ミ ュ レ ーシ ョ ン を 実行す る 方 法を説明 し ます。 ブ ラ ッ ク ボ ッ ク スの HDL の要件 と 制限 ブ ラ ッ ク ボ ッ ク ス に関連す る HDL コ ン ポーネ ン ト は、 次の System Generator の要件お よ び制限をすべて満た し てい る 必要があ り ます。 • デザ イ ンのほかのエン テ ィ テ ィ 名 と は異な る 名前を付け ます。 • 双方向ポー ト は HDL ブ ラ ッ ク ボ ッ ク ス でサポー ト さ れますが、 System Generator ではポー ト と し て表示 さ れず、 ネ ッ ト リ ス ト 生成後の HDL でのみ表示 さ れます。 • Verilog のブ ラ ッ ク ボ ッ ク ス では、 モジ ュ ール名お よ びポー ト 名は標準的な VHDL の命名規則に従 う よ う に し ま す。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 137 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト • ク ロ ッ ク ポー ト ま たは ク ロ ッ ク イ ネーブル ポー ト は必ず std_logic 型に し ます。 Verilog のブ ラ ッ ク ボ ッ ク ス で は、 ポー ト はベ ク タ ーではない入力に し ます (input clk な ど)。 • ブ ラ ッ ク ボ ッ ク ス HDL の ク ロ ッ ク ポー ト お よ び ク ロ ッ ク イ ネーブル ポー ト は、次の よ う に記述 し ます。ク ロ ッ ク と ク ロ ッ ク イ ネーブルはペアで記述す る 必要があ り ます。 つま り 、 各 ク ロ ッ ク に対応す る ク ロ ッ ク イ ネーブ ルが必要です。 ブ ラ ッ ク ボ ッ ク ス には、 複数の ク ロ ッ ク ポー ト を含め る こ と がで き 、 その ビヘ イ ビ アーはデザ イ ンの コ ン テ キ ス ト に基づいて変わ り ます。 ° 同期シ ン グル ク ロ ッ ク デザ イ ンの コ ン テ キ ス ト では、 各 ク ロ ッ ク ポー ト を駆動する のに 1 つの ク ロ ッ ク ソ ース が使用 さ れます。 異な る のは、 ク ロ ッ ク イ ネーブルの レー ト のみです。 ° 複数の独立ハー ド ウ ェ ア ク ロ ッ ク デザ イ ンの コ ン テ キ ス ト では、 ク ロ ッ ク ピ ンお よ び ク ロ ッ ク イ ネーブル ピ ン を駆動す る のに 2 つの異な る ク ロ ッ ク ソ ース が使用 さ れます。 • ク ロ ッ ク 名には clk (my_clk_1 な ど)、 ク ロ ッ ク イ ネーブル名には ce (my_ce_1 な ど) を含め ます。 • ク ロ ッ ク イ ネーブルの名前は、 ク ロ ッ ク と 同 じ にす る 必要があ り ますが、 clk の部分は ce に し ます。 た と えば、 ク ロ ッ ク 名が src_clk_1 の場合、 ク ロ ッ ク イ ネーブル名は src_ce_1 にする 必要があ り ます。 • 立ち下が り エ ッ ジで ト リ ガー さ れ る 出力デー タ は使用で き ません。 ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド System Generator には、 VHDL ま たは Verilog モジ ュ ールを Black Box ブ ロ ッ ク に関連付け る ための コ ン フ ィ ギ ュ レー シ ョ ン ウ ィ ザー ド が含まれてい ます。 こ の ウ ィ ザー ド は、 イ ン ポー ト す る VHDL ま たは Verilog モジ ュ ールを解析 し て コ ン フ ィ ギ ュ レーシ ョ ン M 関数を作成 し 、 こ の M 関数を モデルの Black Box ブ ロ ッ ク に関連付け ます。 コ ン フ ィ ギ ュ レーシ ョ ン M 関数を使用で き る か ど う かは、 イ ン ポー ト す る HDL の複雑度に よ っ て決ま り ます。 ウ ィ ザー ド で 検出 さ れなか っ た詳細を設定す る ため、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数を手動でカ ス タ マ イ ズす る 必要があ る 場合 も あ り ます。 コ ン フ ィ ギ ュ レーシ ョ ン M 関数の詳細は、 「ブ ラ ッ ク ボ ッ ク ス の コ ン フ ィ ギ ュ レーシ ョ ン M 関数」 を参照 し て く だ さ い。 ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド の使用 Black Box ブ ロ ッ ク を モデルに追加す る と 、 ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド が起動 し ます。 注記 : ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド を起動す る 前に、 イ ン ポー ト する VHDL ま たは Verilog が 「ブ ラ ッ ク ボ ッ ク ス の HDL の要件 と 制限」 を満た し てい る こ と を確認 し て く だ さ い。 ウ ィ ザー ド でモジ ュ ールが検索 さ れ る よ う にす る には、 イ ン ポー ト す る モジ ュ ール と 同 じ デ ィ レ ク ト リ にモデルが保 存 さ れてい る 必要があ り ます。 注記 : ウ ィ ザー ド は、 .mdl フ ァ イ ル と 同 じ デ ィ レ ク ト リ でのみ .vhd お よ び .v フ ァ イ ルを検索 し ます。 フ ァ イ ルが 見つか ら ない場合は、 警告 メ ッ セージが表示 さ れ、 ブ ラ ッ ク ボ ッ ク スは自動的には コ ン フ ィ ギ ュ レーシ ョ ン さ れませ ん。 次の よ う な警告 メ ッ セージが表示 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 138 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト ウ ィ ザー ド に よ り モデルのデ ィ レ ク ト リ で .vhd お よ び .v フ ァ イ ルが検索 さ れ、 イ ン ポー ト 可能な フ ァ イ ルがダ イ ア ロ グ ボ ッ ク ス に表示 さ れます。 こ のダ イ ア ロ グ ボ ッ ク ス の例を、 次に示 し ます。 こ のダ イ ア ロ グ ボ ッ ク ス で イ ン ポー ト する フ ァ イ ルを選択 し 、[開 く ] を ク リ ッ ク し ます。 コ ン フ ィ ギ ュ レーシ ョ ン M 関数が作成 さ れ、 Black Box ブ ロ ッ ク に関連付け ら れます。 注記 : コ ン フ ィ ギ ュ レーシ ョ ン M 関数は、モデルのデ ィ レ ク ト リ に <module>_config.m (<module> は イ ン ポー ト す る モジ ュ ールの名前) と い う 名前で保存 さ れます。 ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド の詳細 ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド を実行す る と 、 一部の情報は イ ン ポー ト さ れ る モジ ュ ールか ら 抽出 さ れますが、 手動で設定す る 必要のあ る 情報 も あ り ます。 こ れ ら の情報は、 次の と お り です。 注記 : コ ン フ ィ ギ ュ レーシ ョ ン M 関数には、 変更が必要な箇所を示す コ メ ン ト が追加 さ れてい ます。 • モデルに組み合わせパ ス があ る 場合、 ブ ロ ッ ク の SysgenBlockDescriptor オブジ ェ ク ト の tagAsCombinational メ ソ ッ ド を呼び出す必要があ り ます。 複数の独立ハー ド ウ ェ ア ク ロ ッ ク デザ イ ン では、 組み合わせパ ス がサポー ト さ れません。 • ウ ィ ザー ド では、 イ ン ポー ト す る 最上位エン テ ィ テ ィ の情報 し か抽出 さ れせん。 通常エン テ ィ テ ィ にはその他の フ ァ イ ル も 付随 し てい ますが、 こ れ ら の各フ ァ イ ルに対 し て addFile メ ソ ッ ド を起動 し て コ ン フ ィ ギ ュ レーシ ョ ン M 関数に追加す る 必要があ り ます。 • コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド では、 同期の単一 ク ロ ッ ク ブ ラ ッ ク ボ ッ ク ス記述子ま たは非同期の複数 ク ロ ッ ク ブ ラ ッ ク ボ ッ ク ス記述子のいずれかが自動的に作成 さ れます。 ° シ ン グルレー ト のブ ラ ッ ク ボ ッ ク ス の場合、 ブ ラ ッ ク ボ ッ ク ス のすべてのポー ト が同 じ レー ト で実行 さ れ ます。 ほ と ん ど の場合 こ れで問題あ り ませんが、 ポー ト レー ト を明示的に設定する と 、 シ ミ ュ レーシ ョ ン時 間が短縮 さ れ る こ と があ り ます。 ° 複数 ク ロ ッ ク のブ ラ ッ ク ボ ッ ク ス の場合、 入力ポー ト レー ト は ソ ース ク ロ ッ ク サブシ ス テ ムか ら 派生 さ せ る 必要があ り 、 出力ポー ト レー ト はデス テ ィ ネーシ ョ ン ク ロ ッ ク サブシ ス テ ムに基づいて設定す る 必要が あ り ます。 場合に よ っ ては、 必要な コ ン フ ィ ギ ュ レーシ ョ ンにポー ト レー ト を明確に設定す る 必要があ る こ と も あ り ます。 ブ ラ ッ ク ボ ッ ク スのコ ン フ ィ ギ ュ レーシ ョ ン M 関数 イ ン ポー ト し たモジ ュ ールは、 System Generator で Black Box ブ ロ ッ ク と し て表 さ れます。 イ ン ポー ト し たモジ ュ ール の情報は、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数に よ っ て Black Box ブ ロ ッ ク に適用 さ れます。 こ の コ ン フ ィ ギ ュ レーシ ョ ン M 関数は、 ブ ラ ッ ク ボ ッ ク ス の イ ン タ ーフ ェ イ ス、 イ ンプ リ メ ン テーシ ョ ン、 シ ミ ュ レーシ ョ ン動作を定義 し ま す。 具体的には、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数は次の情報を定義 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 139 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト • モジ ュ ールの最上位エン テ ィ テ ィ の名前 • VHDL ま たは Verilog の言語選択 • ポー ト 記述 • モジ ュ ールで必要なジ ェ ネ リ ッ ク • 同期の単一 ク ロ ッ ク ま たは非同期の複数独立 ク ロ ッ ク コ ン フ ィ ギ ュ レーシ ョ ン • ク ロ ッ ク レー ト お よ びサンプ リ ン グ レー ト • モジ ュ ールに関連 し た フ ァ イ ル • モジ ュ ールに組み合わせパ ス が含まれ る か ど う か ブ ラ ッ ク ボ ッ ク ス に関連付け ら れ る コ ン フ ィ ギ ュ レーシ ョ ン M 関数の名前は、Black Box ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス でパ ラ メ ー タ ー と し て指定 さ れます。 次の例では、 parity_block_config.m と い う 名前にな り ます。 コ ン フ ィ ギ ュ レーシ ョ ン M 関数は、 オブジ ェ ク ト ベース の イ ン タ ーフ ェ イ ス を使用 し てブ ラ ッ ク ボ ッ ク ス の情報を 指定 し ます。 こ の イ ン タ ーフ ェ イ ス は、 SysgenBlockDescriptor お よ び SysgenPortDescriptor と い う 2 つのオブジ ェ ク ト を定義 し ます。 System Generator で コ ン フ ィ ギ ュ レーシ ョ ン M 関数が起動 さ れ る と 、 function にブ ロ ッ ク デ ィ ス ク リ プ タ ーが渡 さ れます。 function sample_block_config(this_block) SysgenBlockDescriptor オブジ ェ ク ト には、 ブ ラ ッ ク ボ ッ ク ス に関する 情報を指定する メ ソ ッ ド が含まれてい ます。 ブ ロ ッ ク デ ィ ス ク リ プ タ ーのポー ト は、 ポー ト デ ィ ス ク リ プ タ ーを使用 し て別に定義 さ れます。 言語の選択 ブ ラ ッ ク ボ ッ ク ス には、 VHDL お よ び Verilog モジ ュ ールを イ ン ポー ト で き ます。 SysgenBlockDescriptor には、 イ ン ポー ト す る モジ ュ ールの タ イ プ を指定す る setTopLevelLanguage と い う メ ソ ッ ド が含まれてい ます。コ ン フ ィ ギ ュ レー シ ョ ン M 関数内で、 こ の メ ソ ッ ド を一度起動する 必要があ り ます。 次に、 VHDL ま たは Verilog 言語を選択す る コ ー ド を示 し ます。 VHDL モジ ュ ール : this_block.setTopLevelLanguage('VHDL'); Verilog モジ ュ ール : this_block.setTopLevelLanguage('Verilog'); 注記 : ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド では、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数を生成す る 際に 適切な言語が自動的に選択 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 140 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト 最上位エ ン テ ィ テ ィ の指定 ブ ラ ッ ク ボ ッ ク ス に関連付け る 最上位エ ン テ ィ テ ィ の名前を指定す る 必要があ り ます。 SysgenBlockDescriptor には、 最上位エン テ ィ テ ィ の名前を指定す る setEntityName メ ソ ッ ド が含まれてい ます。 注記 : エン テ ィ テ ィ 名は、 小文字を使用 し て指定 し ます。 た と えば次の コ ー ド では、 foo と い う 最上位エン テ ィ テ ィ を指定 し てい ます。 this_block.setEntityName('foo'); 注記 : ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド では、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数を生成す る 際に 最上位エン テ ィ テ ィ の名前が自動的に設定 さ れます。 ブ ロ ッ ク ポー ト の定義 ブ ラ ッ ク ボ ッ ク ス のポー ト イ ン タ ー フ ェ イ ス は、 ブ ロ ッ ク の コ ン フ ィ ギ ュ レ ーシ ョ ン M 関数で定義 さ れ ま す。 ブ ラ ッ ク ボ ッ ク ス のポー ト は、 ポー ト デ ィ ス ク リ プ タ ーを使用 し て定義 さ れます。 ポー ト デ ィ ス ク リ プ タ ーを使用す る と 、 ポー ト 幅、 デー タ 型、 2 進小数点、 サンプ リ ン グ レー ト な ど、 ポー ト の さ ま ざ ま な属性を設定で き ます。 新規ポー ト の追加 ブ ラ ッ ク ボ ッ ク ス のポー ト イ ン タ ーフ ェ イ ス を定義す る 際、 ブ ロ ッ ク デ ィ ス ク リ プ タ ーに入力ポー ト と 出力ポー ト を追加す る 必要があ り ます。 こ れ ら のポー ト は、 イ ン ポー ト す る モジ ュ ール上のポー ト に対応 し ます。 モデルでは、 Black Box ブ ロ ッ ク のポー ト イ ン タ ーフ ェ イ ス はブ ロ ッ ク デ ィ ス ク リ プ タ ー オブジ ェ ク ト で宣言 さ れた ポー ト 名で 決ま り ます。 SysgenBlockDescriptor には、 入力ポー ト お よ び出力ポー ト を追加する メ ソ ッ ド が含まれてい ます。 入力ポー ト の追加 : this_block.addSimulinkInport('din'); 出力ポー ト の追加 : this_block.addSimulinkOutport('dout'); addSimulinkInport お よ び addSimulinkOutport メ ソ ッ ド に渡 さ れ る 文字列パ ラ メ ー タ ーに よ り 、 ポー ト 名が指定 さ れます。 こ れ ら の名前は、 イ ン ポー ト し たモジ ュ ールのポー ト 名 と 一致 し てい る 必要があ り ます。 注記 : ポー ト 名は、 小文字を使用 し て指定 し ます。 双方向ポー ト の追加 : config_phase = this_block.getConfigPhaseString; if (strcmpi(config_phase,'config_netlist_interface')) this_block.addInoutport('bidi'); % Rate and type info should be added here as well end 双方向ポー ト は、 デザ イ ン のネ ッ ト リ ス ト 生成中にのみサポー ト さ れ、 System Generator のダ イ ア グ ラ ム には表 示 さ れず、 生成 さ れた HDL でのみ表示 さ れます。 そのため、 双方向ポー ト は System Generator で HDL を生成す る 場合にのみ追加す る よ う にす る こ と が重要です。 上記の例では、 if-end 条件文を使用 し て双方向ポー ト を追加 す る コ ー ド の実行を制限 し てい ます。 1 つの メ ソ ッ ド 呼び出 し で入力ポー ト と 出力ポー ト の両方を定義す る こ と も 可能です。setSimulinkPorts メ ソ ッ ド では、 2 つのパ ラ メ ー タ ーを指定 し ます。 1 つ目のパ ラ メ ー タ ーはブ ロ ッ ク の入力ポー ト 名を定義する 文字列のセル配列、 2 つ目のパ ラ メ ー タ ーはブ ロ ッ ク の出力ポー ト 名を定義す る 文字列のセル配列です。 注記 : ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド では、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数を生成す る 際に ポー ト 名が自動的に設定 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 141 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト ポー ト オブ ジ ェ ク ト の取得 ブ ロ ッ ク デ ィ ス ク リ プ タ ーにポー ト を追加 し た ら 、 ポー ト の属性を設定する 必要があ り ます。 ポー ト を コ ン フ ィ ギ ュ レーシ ョ ンす る 前に、 ポー ト のデ ィ ス ク リ プ タ ーを取得す る 必要があ り ます。 SysgenBlockDescriptor には、 ポー ト オ ブジ ェ ク ト にア ク セ スす る メ ソ ッ ド が含まれてい ます。 た と えば次の メ ソ ッ ド では、 this_block デ ィ ス ク リ プ タ ー 上の din と い う ポー ト を取得 し ます。 SysgenPortDescriptor オブジ ェ ク ト にア ク セ ス : din = this_block.port('din'); 上記の コ ー ド では、 オブジ ェ ク ト din が作成 さ れ、 port 関数呼び出 し で戻 さ れたデ ィ ス ク リ プ タ に割 り 当て ら れま す。 SysgenBlockDescriptor には、ポー ト イ ンデ ッ ク ス を戻す inport お よ び outport と い う メ ソ ッ ド も 含まれてい ます。 ポー ト イ ンデ ッ ク ス は、 ブ ロ ッ ク イ ン タ ーフ ェ イ ス に示 さ れた順にポー ト に付け ら れた イ ンデ ッ ク ス番号で、 1 か ら ブ ロ ッ ク 上の入力/出力の数ま でのいずれかです。 こ れ ら の メ ソ ッ ド は、 エ ラ ー チ ェ ッ ク な ど でブ ロ ッ ク のポー ト を 確認す る 際に便利です。 ポー ト タ イ プの設定 SysgenPortDescriptor には、 個々のポー ト を設定す る メ ソ ッ ド が含まれてい ます。 た と えば、 dout ポー ト が符号な し の 12 ビ ッ ト で、 2 進小数点の位置が 8 であ る と する と 、 こ のポー ト タ イ プ を定義す る には次の コ ー ド を使用 し ます。 dout = this_block.port('dout'); dout.setWidth(12); dout.setBinPt(8); dout.makeUnsigned(); 次の コ ー ド も 可能です。 dout = this_block.port('dout'); dout.setType('Ufix_12_8'); 最初の コ ー ド では個々の メ ソ ッ ド 呼び出 し を使用 し てポー ト 属性を設定 し てお り 、 2 番目の コ ー ド では信号 タ イ プ を 文字列 と し て定義 し てい ます。 ど ち ら の コ ー ド も 、 機能的には同 じ です。 ブ ラ ッ ク ボ ッ ク ス では、 1 ビ ッ ト ポー ト (std_logic な ど) ま たはベ ク タ ー (std_logic_vector(0 downto 0) な ど) を使用 し て宣言 し た 1 ビ ッ ト ポー ト を含む HDL モジ ュ ールがサポー ト さ れます。 System Generator では、 デフ ォ ル ト でポー ト がベ ク タ ーで宣言 さ れてい る と 想定 さ れ ます。 デ ィ ス ク リ プ タ ーの useHDLVector を使用す る と 、 こ のデフ ォ ル ト を 変更で き ます。 こ の メ ソ ッ ド を true に設定す る と System Generator でポー ト がベ ク タ ー と 解釈 さ れ、 false に設定 す る と ポー ト が 1 ビ ッ ト であ る と 解釈 さ れます。 dout.useHDLVector(true); % std_logic_vector dout.useHDLVector(false); % std_logic 注記 : ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン ウ ィ ザー ド では、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数を生成す る 際に ポー ト タ イ プが自動的に設定 さ れます。 シ ミ ュ レーシ ョ ン用の双方向ポー ト の設定 双方向ポー ト (inout ポー ト ) は HDL ネ ッ ト リ ス ト の生成でのみサポー ト さ れ、 System Generator のダ イ ア グ ラ ムには 表示 さ れ ません。 デフ ォ ル ト では、 シ ミ ュ レーシ ョ ン では双方向ポー ト は X で駆動 さ れ ます。 ポー ト にデー タ フ ァ イ ルを関連付け る こ と に よ り 、 こ の動作を変更で き ま す。 双方向ポー ト は config_netlist_interface フ ェ ーズでのみブ ロ ッ ク に追加可能なので、 こ の コ ー ド の実行が制限 さ れ る よ う に し て く だ さ い。 if (strcmpi(this_block.getConfigPhaseString,'config_netlist_interface')) bidi_port = this_block.port('bidi'); bidi_port.setGatewayFileName('bidi.dat'); end Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 142 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト 上記の例では、 シ ミ ュ レーシ ョ ン中、 テ キ ス ト フ ァ イ ル bidi.dat がポー ト への ス テ ィ ミ ュ ラ ス と し て使用 さ れ ます。 デー タ フ ァ イ ルはテ キ ス ト 形式で作成 し 、 各行に各シ ミ ュ レーシ ョ ン サ イ ク ルでポー ト に駆動す る 信号を記述 し ま す。 た と えば、 3 ビ ッ ト の双方向ポー ト を駆動する 4 サ イ ク ル分の信号を指定する 場合は、 デー タ フ ァ イ ルに次の よ う に記述 し ます。 ZZZ 110 011 XXX 指定 し たデー タ フ ァ イ ルが存在 し ない場合は、 エ ラ ーが返 さ れます。 ポー ト のサン プ リ ング レー ト の設定 Black Box ブ ロ ッ ク では、 ポー ト に異な る サンプ リ ン グ レー ト を設定で き ます。 デフ ォ ル ト では、 出力ポー ト のサン プ リ ン グ レ ー ト は入力ポー ト (同 じ サ ン プ リ ン グ レ ー ト で動作 し てい る 場合は複数の入力ポー ト ) のサ ン プ リ ン グ レー ト にな り ます。 出力ポー ト のサン プ リ ン グ レー ト が入力ポー ト のサン プ リ ン グ レー ト と 異な る 場合な ど、 ポー ト のサンプ リ ン グ レー ト を明示的に設定する 必要があ る 場合があ り ます。 注記 : ブ ラ ッ ク ボ ッ ク ス の複数の入力で異な る サンプ リ ン グ レー ト が使用 さ れてい る 場合は、各出力ポー ト のサンプ リ ン グ レー ト を指定す る 必要があ り ます。 SysgenPortDescriptor には、 ポー ト のサンプ リ ン グ レー ト を設定す る setRate メ ソ ッ ド が含まれてい ます。 注記 : setRate メ ソ ッ ド に渡 さ れ る サンプ リ ン グ レー ト パ ラ メ ー タ ーは、 そのポー ト が動作す る Simulink のサンプ リ ン グ レー ト ではな く 、 必要なポー ト のサンプ リ ン グ周期 と Simulink シ ス テ ム ク ロ ッ ク 周期 (System Generator ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で指定) と の比を指定する 正の整数です。 Simulink のシ ス テ ム周期が 2s と 定義 さ れたモデルがあ り 、 次の よ う に setRate メ ソ ッ ド を使用 し て dout ポー ト に レー ト 3 を設定す る と し ます。 dout.setRate(3); こ の レー ト 3 は、 Simulink の 3 シ ス テ ム周期ご と に dout ポー ト にサンプルが生成 さ れ る こ と を意味 し ます。 Simulink のシ ス テ ム周期は 2s なので、 ポー ト のサンプ リ ン グ レー ト は 3 x 2 = 6s と な り ます。 注記 : ポー ト がサ ン プ リ ン グ さ れない定数であ る 場合は、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数で SysgenPortDescriptor の setConstant を使用 し て定義で き ます。 setRate メ ソ ッ ド に Inf を渡す こ と に よ り 定数を定義す る こ と も 可能です。 ダ イ ナ ミ ッ ク出力ポー ト ブ ラ ッ ク ボ ッ ク ス では、 動的に出力ポー ト の タ イ プお よ びレー ト を変更で き ます。 た と えば、 入力ポー ト の幅に応 じ て出力ポー ト の幅を設定す る 必要の あ る こ と が あ り ま す。 SysgenPortDescriptor には、 ポー ト 設定を判断で き る メ ン バー変数が含まれてい ます。 出力ポー ト の タ イ プ ま たはレー ト を、 ブ ロ ッ ク の入力ポー ト の メ ンバー変数を調べ る こ と に よ り 設定で き ます。 た と えば次の例の よ う に、 ポー ト din の幅 と レー ト を取得で き ます。 input_width = this_block.port('din').width; input_rate = this_block.port('din').rate; 注記 : ブ ラ ッ ク ボ ッ ク ス の コ ン フ ィ ギ ュ レーシ ョ ン M 関数は、 モデルが コ ンパ イ ル さ れ る と き に複数回実行 さ れ ま す。 デー タ 型お よ びレー ト がブ ラ ッ ク ボ ッ ク ス に伝搬 さ れ る 前に実行 さ れ る こ と があ り ます。 SysgenBlockDescriptor には、 ポー ト タ イ プお よ びレー ト がブ ロ ッ ク に伝搬 さ れたか ど う か を調べ る inputTypesKnown お よ び inputRatesKnown と い う ブール メ ンバー変数が含まれてい ます。 入力ポー ト に応 じ て ダ イ ナ ミ ッ ク 出力ポー ト タ イ プ ま たはレー ト を設定する 場合は、 inputTypesKnown と inputRatesKnown の値を チ ェ ッ ク す る 条件文内に コ ン フ ィ ギ ュ レーシ ョ ン呼び出 し を ネ ス ト す る 必要があ り ます。 次の コ ー ド は、 ダ イ ナ ミ ッ ク 出力ポー ト dout の幅を入力ポー ト din の幅 と 同 じ に設定 し てい ます。 if (this_block.inputTypesKnown) Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 143 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト dout.setWidth(this_block.port('din').width); end ダ イ ナ ミ ッ ク レー ト も 、 同様に設定で き ます。 次の コ ー ド は、 出力ポー ト dout のサ ン プ リ ン グ レー ト を入力ポー ト din のサンプ リ ン グ レー ト の 2 倍に設定 し てい ます。 if (this_block.inputRatesKnown) dout.setRate(this_block.port('din').rate*2); end ブ ラ ッ ク ボ ッ ク スのク ロ ッ ク マルチ レー ト モジ ュ ールを イ ン ポー ト す る には、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数でモジ ュ ールの ク ロ ッ ク に関す る 情報を指定す る 必要があ り ます。 System Generator では、 ク ロ ッ ク と ク ロ ッ ク イ ネーブルはほかの タ イ プのポー ト と は異な る 方法で処理 さ れます。 イ ン ポー ト し たモジ ュ ールの ク ロ ッ ク ポー ト には、 ク ロ ッ ク イ ネーブル ポー ト が必 要です。 つま り 、 ク ロ ッ ク と ク ロ ッ ク イ ネーブルはペア と し て定義 し 、 イ ン ポー ト し たモジ ュ ール内でペア と し て存 在す る 必要があ り ます。 こ れは、 シ ン グル レー ト デザ イ ンお よ びマルチ レー ト デザ イ ンの両方に適用 さ れます。 注記 : ク ロ ッ ク お よ び ク ロ ッ ク イ ネーブルはペアで存在す る 必要があ り ますが、 System Generator では イ ン ポー ト し た モ ジ ュ ールのすべて の ク ロ ッ ク ポー ト が FPGA シ ス テ ム ク ロ ッ ク で駆動 さ れ、 ク ロ ッ ク イ ネーブル ポー ト は FPGA シ ス テ ム ク ロ ッ ク か ら 生成 さ れた ク ロ ッ ク イ ネーブル信号で駆動 さ れます。 SysgenBlockDescriptor に は、 ブ ラ ッ ク ボ ッ ク ス の ク ロ ッ ク お よ び ク ロ ッ ク イ ネ ー ブ ル の 情 報 を 定 義 す る addClkCEPair メ ソ ッ ド が含 ま れてい ま す。 こ の メ ソ ッ ド では、 3 つのパ ラ メ ー タ ーを指定 し ま す。 1 つ目のパ ラ メ ー タ ーは ク ロ ッ ク ポー ト の名前 (モジ ュ ールで使用 さ れ る 名前)、2 つ目のパ ラ メ ー タ ーは ク ロ ッ ク イ ネーブル ポー ト の名前 (モジ ュ ールで使用 さ れ る 名前) を定義 し ます。 ク ロ ッ ク と ク ロ ッ ク イ ネーブルのペアのポー ト 名は、 次の命名規則に従っ て付け る 必要があ り ます。 • ク ロ ッ ク ポー ト 名には、 clk を含め ます。 • ク ロ ッ ク イ ネーブル ポー ト 名には、 ce を含め ます。 • 文字列の clk お よ び ce 以外の部分を同 じ に し ます (my_clk_1 と my_ce_1 な ど)。 3 つ目のパ ラ メ ー タ ーは、 ク ロ ッ ク と ク ロ ッ ク イ ネーブルの レー ト 関係を定義 し ま す。 こ の レー ト パ ラ メ ー タ ーで は、 Simulink のサ ン プ リ ン グ レー ト ではな く 、 ク ロ ッ ク のサ ン プル周期 と 必要な ク ロ ッ ク イ ネーブルのサン プル周 期間の関係を System Generator に伝え ま す。 レー ト パ ラ メ ー タ ーは整数値で、 ク ロ ッ ク レー ト と それに対応す る ク ロ ッ ク イ ネーブル レー ト 間の比率が定義 さ れます。 た と えば、 ce_3 と い う ク ロ ッ ク イ ネーブル ポー ト のサン プ リ ン グ周期を シ ス テ ム ク ロ ッ ク 周期の 3 倍に設定す る 場合、 次の コ ー ド を使用 し ます。 addClkCEPair('clk_3','ce_3',3); System Generator でブ ラ ッ ク ボ ッ ク ス をハー ド ウ ェ アに コ ンパ イ ルす る と 、 モジ ュ ールに適切な ク ロ ッ ク イ ネーブル 信号が生成 さ れ、 適切な ク ロ ッ ク イ ネーブル ポー ト に配線 さ れます。 組み合わせパス イ ン ポー ト す る モジ ュ ールに組み合わせパ ス があ る 場合 (入力の変化が ク ロ ッ ク イ ベン ト な し で出力ポー ト に影響す る )、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数で指定す る 必要があ り ます。 SysgenBlockDescriptor オブジ ェ ク ト には、 モジ ュ ー ルに組み合わせパ ス があ る こ と を示す tagAsCombinational メ ソ ッ ド が含 ま れてい ま す。 コ ン フ ィ ギ ュ レ ーシ ョ ン M 関数内で、 こ の メ ソ ッ ド を次の よ う に起動す る 必要があ り ます。 this_block.tagAsCombinational; Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 144 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト VHDL ジ ェ ネ リ ッ ク および Verilog パ ラ メ ー タ ーの指定 System Generator でモデルを HDL に コ ンパ イ ルす る 際に、 モジ ュ ールに渡すジ ェ ネ リ ッ ク の リ ス ト を指定で き ます。 こ れ ら のジ ェ ネ リ ッ ク に割 り 当て る 値は、マ ス ク パ ラ メ ー タ ーお よ び伝搬 さ れたポー ト 情報 (ポー ト 幅、タ イ プ、レー ト な ど) か ら 抽出で き ます。 こ の よ う に柔軟にジ ェ ネ リ ッ ク を割 り 当て る こ と がで き る ので、 ブ ラ ッ ク ボ ッ ク ス周囲 の Simulink 環境に基づいて カ ス タ マ イ ズ さ れ る モジ ュ ールがサポー ト さ れます。 addGeneric メ ソ ッ ド を使用す る と 、デザ イ ン をハー ド ウ ェ アに コ ンパ イ ル し た と き にモジ ュ ールに渡す必要のあ る ジ ェ ネ リ ッ ク を定義で き ます。次の コ ー ド では、VHDL の Integer ジ ェ ネ リ ッ ク dout_width を 12 に設定 し てい ます。 addGeneric('dout_width','Integer','12'); ジ ェ ネ リ ッ ク 値は、伝搬 さ れた入力ポー ト の情報 (ダ イ ナ ミ ッ ク 出力ポー ト の幅を指定する ジ ェ ネ リ ッ ク な ど) に基づ いて設定す る こ と も 可能です。 ブ ラ ッ ク ボ ッ ク ス の コ ン フ ィ ギ ュ レーシ ョ ン M 関数はモデルが コ ンパ イ ル さ れ る 際に複数回起動 さ れますが、 デー タ 型 (ま たは レー ト ) がブ ラ ッ ク ボ ッ ク ス に伝搬 さ れ る 前に起動 さ れ る こ と があ り ます。 入力ポー ト の タ イ プ ま たは レ ー ト に基づい て ジ ェ ネ リ ッ ク 値 を 設定す る 場合は、 inputTypesKnown ま たは inputRatesKnown 変数の値 を チ ェ ッ ク す る 条件文内に addGeneric 呼び出 し を ネ ス ト す る 必要があ り ます。 た と えば次の よ う に、 dout ポー ト の 幅を din の値に基づいて設定で き ます。 if (this_block.inputTypesKnown) % set generics that depend on input port types this_block.addGeneric('dout_width', ... this_block.port('din').width); end ジ ェ ネ リ ッ ク 値 は、 ブ ラ ッ ク ボ ッ ク ス に 関連付 け ら れ た マ ス ク パ ラ メ ー タ ー に 基づ い て 設定 で き ま す。 SysgenBlockDescriptor には、 Simulink でのブ ラ ッ ク ボ ッ ク ス名を表す文字列であ る blockName メ ンバー変数が含ま れ ます。 こ の変数を使用 し て、 特定の コ ン フ ィ ギ ュ レーシ ョ ン M 関数に関連付け ら れたブ ラ ッ ク ボ ッ ク ス にア ク セ ス で き ます。 た と えば、 ブ ラ ッ ク ボ ッ ク ス で init_value と い う パ ラ メ ー タ ーを定義す る 場合、 次の コ ー ド を使用 で き ます。 simulink_block = this_block.blockName; init_value = get_param(simulink_block,'init_value'); this_block.addGeneric('init_value', 'String', init_value); 注記 : ブ ラ ッ ク ボ ッ ク ス に独自のパ ラ メ ー タ ーを追加する には (ジ ェ ネ リ ッ ク 値を指定する 値な ど)、 次の手順に従い ます。 • Black Box ブ ロ ッ ク を Simulink ラ イ ブ ラ リ ま たはモデルに コ ピー し ます。 • Black Box ブ ロ ッ ク の リ ン ク を解除 し ます。 • Black Box ブ ロ ッ ク のダ イ ア ロ グ ボ ッ ク ス にパ ラ メ ー タ ーを追加 し ます。 ブ ラ ッ ク ボ ッ ク スの VHDL ラ イ ブ ラ リ サポー ト こ のブ ラ ッ ク ボ ッ ク ス機能を使用す る と 、 定義済み ラ イ ブ ラ リ の依存関係を記述 し た VHDL モジ ュ ールを イ ン ポー ト で き ます。 次に、 こ の イ ン ポー ト 方法の例を示 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 145 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト 次 の VHDL モ ジ ュ ール は、 非同期 ク リ ア を 持つ 4 ビ ッ ト の ア ッ プ カ ウ ン タ ー で す (async_counter.vhd)。 こ れ は async_counter_lib と い う 名前の ラ イ ブ ラ リ に コ ンパ イ ル さ れます。 次 の VHDL モ ジ ュ ー ル は、 同 期 ク リ ア を 持つ 4 ビ ッ ト の ア ッ プ カ ウ ン タ ー で す (sync_counter.vhd)。 こ れ は sync_counter_lib と い う 名前の ラ イ ブ ラ リ に コ ンパ イ ル さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 146 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト 次の VHDL モジ ュ ールは、 上記のモジ ュ ールを イ ン ス タ ン シエー ト す る 最上位モジ ュ ールです。 System Generator モ デルにブ ラ ッ ク ボ ッ ク ス を追加す る 際、 こ のモジ ュ ールを指定する 必要があ り ます。 VHDL の イ ン ポー ト では、 まずブ ラ ッ ク ボ ッ ク ス を使用 し て最上位エン テ ィ テ ィ top_level を イ ン ポー ト し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 147 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト フ ァ イ ルが イ ン ポー ト さ れた ら 、 ブ ラ ッ ク ボ ッ ク ス コ ン フ ィ ギ ュ レーシ ョ ン M フ ァ イ ルを次の よ う に変更 し ます。 イ ン タ ーフ ェ イ ス関数 addFileToLibrary を使用 し て、 work 以外の ラ イ ブ ラ リ 名を指定 し 、 関連の HDL ソ ース が指定 の ラ イ ブ ラ リ に コ ンパ イ ル さ れ る よ う 指定 し ます。 System Generator モデルは、 次の図の よ う にな り ます。 次に、 System Generator ト ー ク ン を ダブル ク リ ッ ク し 、 [Generate] ボ タ ン を ク リ ッ ク し て HDL ネ ッ ト リ ス ト を生成 し ます。 生成プ ロ セ ス中、 Vivado IDE プ ロ ジ ェ ク ト (.xpr) が作成 さ れ、 netlist フ ォ ルダーの hdl_netlist フ ォ ルダーに配置 さ れま す。 Vivado IDE プ ロ ジ ェ ク ト を ダブル ク リ ッ ク し 、 [Sources] ビ ュ ーの [Libraries] タ ブ を ク リ ッ ク す る と 、 work ラ イ ブ ラ リ 以外に async_counter_lib ラ イ ブ ラ リ と sync_counter_lib ラ イ ブ ラ リ も あ り ます。 エ ラ ーのチ ェ ッ ク 通常、 ブ ラ ッ ク ボ ッ ク ス のポー ト タ イ プ、 レー ト 、 マ ス ク パ ラ メ ー タ ーに対 し てエ ラ ー チ ェ ッ ク を実行す る 必要が あ り ます。 SysgenBlockDescriptor には、 表示 さ れ る エ ラ ー メ ッ セージ を指定する setError メ ソ ッ ド が含まれてい ます。 setError に渡 さ れ る 文字列パ ラ メ ー タ ーが、 ユーザーに表示 さ れ る エ ラ ー メ ッ セージです。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 148 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト ブ ラ ッ ク ボ ッ ク ス API SysgenBlockDescriptor メ ンバー変数 タ イプ メ ンバー 説明 文字列 entityName エン テ ィ テ ィ ま たはモジ ュ ールの名前 文字列 blockName Black Box ブ ロ ッ ク の名前 整数 numSimulinkInports ブ ラ ッ ク ボ ッ ク ス上の入力ポー ト 数 整数 numSimulinkOutports ブ ラ ッ ク ボ ッ ク ス上の出力ポー ト 数 ブール値 inputTypesKnown すべての入力 タ イ プが定義 さ れてい る 場 合は true、 さ れていない場合は false ブール値 inputRatesKnown すべての入力 レ ー ト が定義 さ れてい る 場 合は true、 さ れていない場合は false 倍精度値の配列 inputRates 入力ポー ト (inport(indx) と し て イ ン デ ッ ク ス) のサンプ リ ン グ周期の配列。 サンプ リ ン グ周期は、 System Generator ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で指 定 さ れた Simulink のシ ス テ ム周期の倍数 を整数で指定 し ます。 ブール値 error エ ラ ーが検出 さ れた場合は true、 さ れな か っ た場合は false 文字列のセル配列 errorMessages ブ ロ ッ ク のすべてのエ ラ ー メ ッ セージ Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 149 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト SysgenBlockDescriptor の メ ソ ッ ド メソッド 説明 setTopLevelLanguage(language) ブ ラ ッ ク ボ ッ ク ス の最上位エ ン テ ィ テ ィ ( ま た は モ ジ ュ ール) の言語を指定 し ま す。 VHDL ま たは Verilog を指定で き ます。 setEntityName(name) エン テ ィ テ ィ ま たはモジ ュ ールの名前を設定 し ます。 addSimulinkInport(pname) ブ ラ ッ ク ボ ッ ク ス に入力ポー ト を追加 し ます。 pname はポー ト の名前です。 addSimulinkOutport(pname) ブ ラ ッ ク ボ ッ ク ス に出力ポー ト を追加 し ます。 pname はポー ト 名を指定 し ます。 setSimulinkPorts(in,out) ブ ラ ッ ク ボ ッ ク ス に入力ポー ト と 出力ポー ト を追加 し ます。 in は入力ポー ト 名を、 out は出力ポー ト 名を セル 配列で指定 し ます。 addInoutport(pname) ブ ラ ッ ク ボ ッ ク ス に 双方向 ポ ー ト を 追加 し ま す。 pname はポー ト 名を指定 し ま す。 双方向ポー ト は、 コ ン フ ィ ギ ュ レーシ ョ ン の config_netlist_interface フ ェ ー ズでのみ追加可能です。 tagAsCombinational() ブ ロ ッ ク に、 入力ポー ト か ら 出力ポー ト ま での組み合 わせパ ス (直接 フ ィ ー ド ス ルー ) が あ る こ と を 示 し ま す。 addClkCEPair(clkPname, cePname, rate) ブ ロ ッ ク の ク ロ ッ ク ポー ト と ク ロ ッ ク イ ネーブル ポー ト のペア を定義 し ま す。 clkPname は ク ロ ッ ク 名、 cePname は ク ロ ッ ク イ ネーブル名、 rate (倍精度値) は ポー ト ペアの動作レー ト を指定 し ます。 rate は正の整 数で指定す る 必要があ り ます。 ク ロ ッ ク 名には clk を、 ク ロ ッ ク イ ネーブル名には ce を含め る 必要が あ り ま す。 ク ロ ッ ク イ ネーブルの名前は、 対応する ク ロ ッ ク と 同 じ にす る 必要があ り ますが、 clk の部分は ce に し ます。 port(name) 指定 し た名前に一致す る SysgenPortDescriptor を返 し ま す。 inport(indx) 指定の入力ポー ト を説明す る SysgenPortDescriptor を返 し ま す。 index は ポ ー ト の イ ン デ ッ ク ス (1 ~ numInputPorts) を指定 し ます。 outport(indx) 指定の出力ポー ト を説明す る SysgenPortDescriptor を返 し ま す。 index は ポ ー ト の イ ン デ ッ ク ス (1 ~ numOutputPorts) を指定 し ます。 addGeneric(identifier, value) ブ ロ ッ ク の ジ ェ ネ リ ッ ク (Verilog の場合はパ ラ メ ー タ ー ) を指定 し ま す。 identifier はジ ェ ネ リ ッ ク 名を指 定 し 、 value はジ ェ ネ リ ッ ク の値を倍精度値ま たは文字 列で指定 し ます。 ジ ェ ネ リ ッ ク のデー タ 型は、 value の デー タ 型か ら 判断 さ れ ます。 value が倍精度の整数 (40 な ど) の場合は integer に、倍精度の非整数の場合は real に 設定 さ れ ま す。 value が 0 と 1 の み を 含む文字列 ('0101' な ど) の場合は bit_vector に、 その他の文字列の 場合は string に設定 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 150 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト メソッド 説明 addGeneric(identifier, type, value) ブ ロ ッ ク の ジ ェ ネ リ ッ ク (Verilog の場合はパ ラ メ ー タ ー ) の名前、 デー タ 型、 値を指定 し ます。 3 つの引数 はすべて文字列で、 identifier は名前、 type はデー タ 型、 value は値を指定 し ます。 addFile(fn) ブ ラ ッ ク ボ ッ ク ス に 関連付 け る フ ァ イ ル リ ス ト に フ ァ イ ルを追加 し ます。fn はフ ァ イ ル名を指定 し ます。 通常ブ ラ ッ ク ボ ッ ク ス には HDL フ ァ イ ルが関連付け ら れますが、 ど んな フ ァ イ ルで も 追加で き ます。VHDL フ ァ イ ルの拡張子は .vhd、 Verilog フ ァ イ ルの拡張子は .v であ る 必要があ り ます。 フ ァ イ ルの追加順は保持 さ れ、 こ の順序で HDL フ ァ イ ルが コ ンパ イ ル さ れます。 相対パ ス名ま たは絶対パ ス名の ど ち ら で も 使用で き ま す。 相対パ ス名は、 デザ イ ンの .mdl フ ァ イ ルま たは ラ イ ブ ラ リ .mdl フ ァ イ ルの場所を基準に解釈 さ れます。 getDeviceFamilyName() ブ ラ ッ ク ボ ッ ク ス に対応する FPGA デバ イ ス の名前を 取得 し ます。 getConfigPhaseString 現在の コ ン フ ィ ギ ュ レーシ ョ ン フ ェ ーズ を文字列 と し て 返 し ま す。 有 効 な 戻 り 値 は、 config_interface、 config_rate_and_type、 config_post_rate_and_type、 config_simulation、 config_netlist_interface、 お よ び config_netlist です。 setSimulatorCompilationScript (script) ブ ラ ッ ク ボ ッ ク ス で生成 さ れたデフ ォ ル ト の HDL 協 調シ ミ ュ レ ーシ ョ ン コ ン パ イ ル ス ク リ プ ト の代わ り に、 script で指定 し た ス ク リ プ ト を使用 し ます。 こ の メ ソ ッ ド を 使用す る と 、 た と えばブ ラ ッ ク ボ ッ ク ス の HDL が変更 さ れていない場合に、 シ ミ ュ レーシ ョ ンの 再実行で コ ンパ イ ルを ス キ ッ プで き ます。 setError(message) エ ラ ーが発生 し た と き に表示す る エ ラ ー メ ッ セージ を 設定 し ま す。 message は表示す る エ ラ ー メ ッ セージ を 指定 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 151 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト SysgenPortDescriptor メ ンバー変数 タ イプ メ ンバー 説明 文字列 name ポー ト 名 整数 simulinkPortNumber Simulink でのポー ト の イ ンデ ッ ク ス。 イ ンデ ッ ク ス は 1 か ら 開始 し ます。 ブール値 typeKnown ポー ト のデー タ 型がわか っ てい る 場合は true、 わかっ ていない場合は false 文字列 type ポー ト の型 (UFix_<n>_<b>、 Fix_<n>_<b>、 ま たは Bool) ブール値 isBool ポー ト のデー タ 型が Bool の場合は true、 Bool でない場合は false ブール値 isSigned ポー ト のデー タ 型が signed の場合は true、 signed でない場合は false ブール値 isConstant ポー ト のデー タ 型が constant の場合は true、 constant でない場合は false 整数 width ポー ト 幅 整数 binpt 2 進小数点の位置 (0 ~ width の整数値) ブール値 rateKnown レー ト がわか っ てい る 場合は true、 わ かっ ていない場合は false 倍精度 rate ポー ト のサンプ リ ン グ レー ト 。 MATLAB 倍精度値で表現 し た正の整数です。 Inf の 場合は、 ポー ト 出力が定数であ る こ と を 示 し ます。 SysgenPortDescriptor の メ ソ ッ ド メソッド 説明 setName(name) ポー ト の HDL 名を指定 し ます。 setSimulinkPortNumber(num) Simulink でポー ト に関連付け る イ ンデ ッ ク ス を設定 し ます。 num は イ ンデ ッ ク ス を指定 し ます。 イ ンデ ッ ク ス は 1 か ら 開始 し ます。 setType(typeName) ポー ト のデー タ 型を設定 し ます。Bool、UFix_<n>_<b>、 Fix_<n>_<b>、 signed、 ま たは unsigned のいずれかに設 定 し ます。 signed お よ び unsigned では、 幅 と 2 進小数 点位置は変更 さ れません。 XFloat_<exponent_bit_width>_fraction_bit_width> も サ ポー ト さ れます。 次に例を示 し ます。 ap_return_port = this_block.port('ap_return'); ap_return_port.setType('XFloat_30_2'); setWidth(w) ポー ト 幅を w に設定 し ます。 setBinpt(bp) ポー ト の 2 進小数点位置を bp に設定 し ます。 makeBool() ポー ト のデー タ 型を Bool に し ます。 makeSigned() ポー ト のデー タ 型を signed に し ます。 makeUnsigned() ポー ト のデー タ 型を unsinged に し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 152 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト メソッド 説明 setConstant() ポー ト のデー タ 型を constant に し ます。 setGatewayFileName(filename) ポー ト のシ ミ ュ レーシ ョ ンお よ びテ ス ト ベンチ生成で 使用す る デー タ フ ァ イ ルの名前を指定 し ます。 双方向 ポー ト に対 し て シ ミ ュ レーシ ョ ン で使用す る 信号を指 定 し た フ ァ イ ルを指定す る ために使用 し ます。 こ のパ ラ メ ー タ ーを入力ポー ト ま たは出力ポー ト に設定す る のは無効であ り 、 無視 さ れます。 setRate(rate) ポー ト の レー ト を設定 し ます。 rate は MATLAB 倍精度 の正の整数で指定す る か、 定数の場合は Inf に し ます。 useHDLVector(s) 1 ビ ッ ト ポー ト が 1 ビ ッ ト (std_logic な ど) で表 さ れて い る か、 ベ ク タ ー (std_logic_vector(0 downto 0) な ど) で 表 さ れてい る か を示 し ます。 HDLTypeIsVector() 1 ビ ッ ト ポー ト の表現を std_logic_vector(0 downto 0) に 設定 し ます。 ブ ラ ッ ク ボ ッ ク スでの複数の独立ク ロ ッ ク サポー ト ポー ト 接続の DRC ブ ラ ッ ク ボ ッ ク ス が複数の独立ハー ド ウ ェ ア ク ロ ッ ク デザ イ ンの コ ン テ キ ス ト で使用 さ れ る 場合、 そのポー ト 接続 の DRC を コ ン フ ィ ギ ュ レーシ ョ ン M 関数に追加す る 必要があ り ます。 こ れに よ り 、 さ ま ざ ま な ク ロ ッ ク ソ ース を使 用 し た無効なポー ト 接続や不正なポー ト 接続を避け る こ と がで き ます。 すべてのポー ト 信号が適切な ク ロ ッ ク が供給 さ れ る サブシ ス テ ム イ ン タ ーフ ェ イ ス に接続 さ れ る よ う に し て く だ さ い。 特定の ク ロ ッ ク ド メ イ ン か ら のポー ト の リ ス ト を指定 し て、 一緒に ま と め る には、 checkPortsOfSameClockDomain() ユーテ ィ リ テ ィ を使用す る 必要があ り ます。 こ の API への入力引数は SysgenBlockDescriptor オブジ ェ ク ト で、 特定の ク ロ ッ ク ド メ イ ンに関連 し たポー ト 名の リ ス ト を後に続けて指定 し ます。 例 : checkPortsOfSameClockDomain (<block_descriptor>, '<port_name_1>', ‘<port_name_2>’, '<port_name_3>', '<port_name_4>'); 上記の例の場合、 API でエ ラ ー チ ェ ッ ク が実行 さ れ、 4 つのポー ト が同 じ サブシ ス テ ム ク ロ ッ ク ド メ イ ンに接続 さ れてい る こ と が検証 さ れます。 ポー ト のサン プ リ ング レー ト の設定 複数 ク ロ ッ ク ハー ド ウ ェ ア デザ イ ンの場合、 ポー ト イ ン タ ーフ ェ イ ス の ク ロ ッ ク 周期は接続 さ れた ク ロ ッ ク 付 き サ ブシ ス テ ム ド メ イ ン を使用 し て計算 さ れ る 必要があ り ます。 デフ ォ ル ト では、 同期シ ス テ ム ク ロ ッ ク ソ ース がすべ てのポー ト で使用 さ れますが、 非同期 ク ロ ッ ク ハー ド ウ ェ ア デザ イ ンの場合は、 すべてのポー ト の ク ロ ッ ク ソ ース を明示的に指定す る 必要があ り ます (出力ポー ト ク ロ ッ ク はブ ロ ッ ク の入力ポー ト ク ロ ッ ク と 異な る 場合な ど)。 注記 : サンプル レー ト は 1.0 に、複数の独立 ク ロ ッ ク のブ ラ ッ ク ボ ッ ク ス デザ イ ンの出力ポー ト すべてに対 し て設定 す る 必要があ り ます。 自動的に出力ポー ト はデス テ ィ ネーシ ョ ン ク ロ ッ ク のサブシ ス テ ム周期に設定 さ れます。 SysgenPortDescriptor には、 ポー ト のサンプ リ ン グ レー ト を設定す る setRate メ ソ ッ ド が含まれてい ます。 例 :port('<port_name>').setRate(1.0) Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 153 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト ブ ラ ッ ク ボ ッ ク スの ク ロ ッ キング 同期ま たは非同期ブ ラ ッ ク ボ ッ ク ス モジ ュ ールを イ ン ポー ト す る には、 コ ン フ ィ ギ ュ レーシ ョ ン M 関数でモジ ュ ー ルの ク ロ ッ ク に関す る 情報を指定す る 必要があ り ます。 System Generator では、 ク ロ ッ ク と ク ロ ッ ク イ ネーブルはほ かの タ イ プのポー ト と は異な る 方法で処理 さ れ ます。 イ ン ポー ト し たモジ ュ ールの ク ロ ッ ク ポー ト には、 ク ロ ッ ク イ ネーブル ポー ト が必要です。 つ ま り 、 ク ロ ッ ク と ク ロ ッ ク イ ネーブルはペア と し て定義 し 、 イ ン ポー ト し た モ ジ ュ ール内でペア と し て存在す る 必要があ り ます。 こ れは、 単一の同期 ク ロ ッ ク と 複数の独立 ク ロ ッ ク デザ イ ンの両 方に適用 さ れます。 SysgenBlockDescriptor には、 addClkCEPair メ ソ ッ ド が含まれ、 ク ロ ッ ク サブシ ス テ ム ド メ イ ン を使用 し て ク ロ ッ ク 、 ク ロ ッ ク イ ネーブル、 お よ びそれに関連す る ク ロ ッ ク 周期を定義で き る よ う にな っ てい ます。 ク ロ ッ ク ド メ イ ン情 報は、 同期の単一 ク ロ ッ ク のデザ イ ンには必要あ り ません。 1 つ目のパ ラ メ ー タ ーは ク ロ ッ ク ポー ト の名前 (モジ ュ ールで使用 さ れ る 名前)、 2 つ目のパ ラ メ ー タ ーは ク ロ ッ ク イ ネーブル ポー ト の名前 (モジ ュ ールで使用 さ れ る 名前) を定義 し ます。 ク ロ ッ ク と ク ロ ッ ク イ ネーブルのペアのポー ト 名は、 次の命名規則に従っ て付け る 必要があ り ます。 • ク ロ ッ ク ポー ト 名には、 clk を含め ます。 • ク ロ ッ ク イ ネーブル ポー ト 名には、 ce を含め ます。 • 文字列の clk お よ び ce 以外の部分を同 じ に し ます (my_clk_1 と my_ce_1 な ど)。 3 つ目のパ ラ メ ー タ ーは、 ク ロ ッ ク と ク ロ ッ ク イ ネーブルの レー ト 関係を定義 し ま す。 こ の レー ト パ ラ メ ー タ ーで は、 Simulink のサ ン プ リ ン グ レー ト ではな く 、 ク ロ ッ ク のサ ン プル周期 と 必要な ク ロ ッ ク イ ネーブルのサン プル周 期間の関係を System Generator に伝え ま す。 レー ト パ ラ メ ー タ ーは整数値で、 ク ロ ッ ク レー ト と それに対応す る ク ロ ッ ク イ ネーブル レー ト 間の比率が定義 さ れます。 複数の独立 ク ロ ッ ク デザ イ ンの場合、 4 つ目お よ び 5 つ目のパ ラ メ ー タ ーが必須です。 4 つ目のパ ラ メ ー タ ーには、 ブール値が維持 さ れ、 ク ロ ッ ク お よ び ク ロ ッ ク イ ネーブルのペアがグ ラ ン ド に接続 さ れ る か ど う かが定義 さ れ ます。 ど ち ら も true に設定す る と 、 ク ロ ッ ク と ク ロ ッ ク イ ネーブルがシ ミ ュ レーシ ョ ン中に グ ラ ン ド 接続 さ れます。 false に設定す る と 、 ク ロ ッ ク お よ び ク ロ ッ ク イ ネーブル レー ト の ト ラ ンザ ク シ ョ ンがア ク テ ィ ベー ト さ れます。 5 つ目のパ ラ メ ー タ ーでは、 該当す る ク ロ ッ ク と ク ロ ッ ク イ ネーブルのペアの ク ロ ッ ク 周期を定義 し ます。 複数の独 立 ク ロ ッ ク デザ イ ン で ク ロ ッ ク 周期を設定す る には、 SysgenPortDescriptor ブ ラ ッ ク ボ ッ ク ス の clockDomain プ ロ パ テ ィ を使用す る 必要があ り ます。 例: rate_data = this_block.port('<port_name>').rate; clkDomain_data = this_block.port(<port_name>).clockDomain; this_block.addClkCEPair('clk',ce',rate_data, false, clkDomain_data); HDL 協調シ ミ ュ レーシ ョ ン 概要 こ のセ ク シ ョ ンでは、 ザ イ リ ン ク ス ブ ロ ッ ク 、 HDL モジ ュ ール、 Simulink ブ ロ ッ ク デザ イ ン を含む混合言語/混合フ ロ ー デザ イ ン全体を シ ミ ュ レーシ ョ ンする 方法を説明 し ます。 System Generator は、 ブ ラ ッ ク ボ ッ ク ス を シ ミ ュ レーシ ョ ンする 際、 自動的に HDL シ ミ ュ レー タ を起動 し て必要な追 加の HDL (HDL テ ス ト ベ ン チ) を 生成 し 、 HDL を コ ン パ イ ル し 、 シ ミ ュ レ ーシ ョ ン イ ベ ン ト を ス ケ ジ ュ ール し 、 Simulink と HDL シ ミ ュ レー タ の間のデー タ 交換を制御 し ます。 こ れを HDL 協調シ ミ ュ レーシ ョ ン と 呼びます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 154 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト HDL シ ミ ュ レー タ の設定 ブ ラ ッ ク ボ ッ ク ス の HDL は、 Simulink で System Generator イ ン タ ーフ ェ イ ス を使用 し て Vivado シ ミ ュ レー タ ま たは ModelSim にア ク セ スす る こ と に よ り 、 協調シ ミ ュ レーシ ョ ンで き ます。 ザイ リ ン ク ス シ ミ ュ レー タ ブ ラ ッ ク ボ ッ ク ス に関連付け ら れてい る HDL をザ イ リ ン ク ス シ ミ ュ レー タ で協調シ ミ ュ レーシ ョ ンする には、Black Box ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で [Simulation mode] を [Vivado Simulator] に設定 し ます。 こ れで、 モデルに対 し て HDL 協調シ ミ ュ レーシ ョ ン を実行す る 準備がで き ま し た。 HDL 協調シ ミ ュ レーシ ョ ンは、 自動的に 実行 さ れます。 ModelSim シ ミ ュ レー タ ModelSim シ ミ ュ レー タ を使用す る には、 [Xilinx Blockset] → [Tools] ラ イ ブ ラ リ にあ る ModelSim ブ ロ ッ ク を Simulink ダ イ ア グ ラ ムに追加す る 必要があ り ます。 ModelSim シ ミ ュ レー タ で協調シ ミ ュ レーシ ョ ン を実行す る 各 Black Box ブ ロ ッ ク のパ ラ メ ー タ ー ダ イ ア ロ グ ボ ッ ク ス で、 追加 し たブ ラ ッ ク ボ ッ ク ス で表 さ れ る ModelSim セ ッ シ ョ ン を使用す る よ う 設定 し ます。 こ れには、 次の 2 つ のパ ラ メ ー タ ーを設定 し ます。 1.[Simulation mode] を [External co-simulator] に設定 し ます。 2.[HDL Co-Simulator to use] に ModelSim ブ ロ ッ ク の名前 (ModelSim な ど) を入力 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 155 第 7 章 : HDL モ ジ ュ ールのイ ンポー ト ModelSim ブ ロ ッ ク のパ ラ メ ー タ ダ イ ア ロ グ ボ ッ ク ス には、 ModelSim でのシ ミ ュ レーシ ョ ン セ ッ シ ョ ン を制御す る オプシ ョ ンが含ま れてい ます。 詳細は、 ブ ロ ッ ク のヘルプ ページ を参照 し て く だ さ い。 こ れで、 こ れ ら のオプシ ョ ン でモデルがシ ミ ュ レーシ ョ ン で き る よ う にな っ たので、 HDL 協調シ ミ ュ レーシ ョ ン が自動的に実行 さ れ る よ う にな り ます。 複数ブ ラ ッ ク ボ ッ ク スの協調シ ミ ュ レーシ ョ ン System Generator では、多 く のブ ラ ッ ク ボ ッ ク ス で同 じ ModelSim 協調シ ミ ュ レーシ ョ ン セ ッ シ ョ ンが共有で き ます。 た と えば、 同 じ ModelSim ブ ロ ッ ク を使用す る よ う に多 く のブ ラ ッ ク ボ ッ ク ス を設定で き ま す。 こ の場合、 System Generator では、自動的にすべてのブ ラ ッ ク ボ ッ ク ス HDL コ ン ポーネ ン ト が 1 つの共有の最上位協調シ ミ ュ レーシ ョ ン コ ン ポーネ ン ト に ま と め ら ま す。 こ れはユーザーには見え ま せん。 Simulink シ ミ ュ レーシ ョ ン で複数のブ ラ ッ ク ボ ッ ク ス を協調シ ミ ュ レーシ ョ ンす る ためには、 ModelSim シ ミ ュ レーシ ョ ン ラ イ セ ン ス が 1 つだけ必要です。 ま た、 複数のブ ラ ッ ク ボ ッ ク ス は、 各ブ ラ ッ ク ボ ッ ク ス の [Simulation mode] に [Vivado Simulator] オプシ ョ ン を選択 す る だけで、 Vivado シ ミ ュ レー タ で協調シ ミ ュ レーシ ョ ンする こ と も で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 156 第 8 章 System Generator の コ ンパイル タ イ プ System Generator では、 複数の方法でデザ イ ン を同等の、 下位レベルの表記に コ ンパ イ ルで き ます。 デザ イ ン の コ ン パ イ ル方法は、[System Generator] ダ イ ア ロ グ ボ ッ ク ス の設定に よ っ て異な り ます。異な る コ ンパ イ ル タ イ プがサポー ト さ れてい る ので、 デザ イ ン環境に合っ た記述を選択で き ま す。 た と えば、 そのデザ イ ン が大規模シ ス テ ム の コ ン ポーネ ン ト と し て使用 さ れ る 場合は、 HDL ネ ッ ト リ ス ト ま たは IP カ タ ロ グ を タ ーゲ ッ ト にす る のが適 し てい ます。 HDL ネ ッ ト リ ス ト コ ン パ イ ル タ イプ デザ イ ン を イ ン プ リ メ ン ト す る HDL フ ァ イ ルの生成方 法を説明 し ます。 ハー ド ウ ェ ア協調シ ミ ュ レ ーシ ョ ン コ ンパ イ ル タ イ プ Simulink お よ び ModelSim で 使用可能 な FPGA ハー ド ウ ェ ア に デ ザ イ ン を コ ン パ イ ル す る た め の、 System Generator 設定方法を説明 し ます。 IP カ タ ロ グの コ ンパ イ ル System Generator デザ イ ン を Vivado IP カ タ ロ グに追加可 能な IP コ ア と し てパ ッ ケージする 方法を説明 し ます。 System Generator はデ フ ォ ル ト の生成 タ ーゲ ッ ト と し て IP カ タ ロ グの コ ンパ イ ル タ イ プを使用 し ます。 合成済みチ ェ ッ ク ポ イ ン ト の コ ン パイル Vivado IDE プ ロ ジ ェ ク ト で使用で き る 合成済みチ ェ ッ ク ポ イ ン ト フ ァ イ ル (synth_1.dcp) の生成方法を説明 し ます。 HDL ネ ッ ト リ ス ト コ ンパイル タ イ プ HDL ネ ッ ト リ ス ト コ ンパ イ ル タ イ プは、 デザ イ ン を イ ンプ リ メ ン ト する HDL フ ァ イ ルを生成 し ます。 HDL ネ ッ ト リ ス ト コ ンパ イ ル フ ロ ーに関す る 詳細は、 「 コ ンパ イ ル結果」 を参照 し て く だ さ い。 次に示す よ う に、 System Generator ト ー ク ン ダ イ ア ロ グ ボ ッ ク ス の [Compilation] フ ィ ール ド を ク リ ッ ク し て [HDL Netlist] を選択 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 157 第 8 章 : System Generator の コ ンパイル タ イ プ ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン コ ンパイル タ イプ System Generator では、 Simulink シ ミ ュ レーシ ョ ン と のループで使用可能な FPGA ハー ド ウ ェ アにデザ イ ン を コ ンパ イ ルで き ます。 こ の機能については、 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンの使用を参照 し て く だ さ い。 次に示す よ う に、System Generator ト ー ク ン ダ イ ア ロ グ ボ ッ ク ス の [Compilation] フ ィ ール ド を ク リ ッ ク し て [Hardware Co-Simulation] を ク リ ッ ク し 、 必要なハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン プ ラ ッ ト フ ォーム を選択 し ます。 リ ス ト さ れ る 使用可能な協調シ ミ ュ レーシ ョ ン プ ラ ッ ト フ ォームは、シ ス テ ムに イ ン ス ト ール さ れてい る ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン プ ラ グ イ ンに よ っ て異な り ます。 IP カ タ ロ グの コ ンパイル System Generator はデフ ォ ル ト の生成 タ ーゲ ッ ト に IP カ タ ロ グの コ ンパ イ ル タ イ プ を使用 し ます。 IP カ タ ロ グ コ ンパ イ ル タ ーゲ ッ ト を選択する と 、 System Generator デザ イ ン を Vivado IP カ タ ロ グに含め る こ と がで き る IP モジ ュ ールにパ ッ ケージす る こ と がで き ます。生成 さ れた IP は別の Vivado ユーザー デザ イ ンにサブモジ ュ ー ル と し て追加で き る よ う にな り ます。 System Generator は、 ま ずブ ロ ッ ク デザ イ ン に基づい て HDL ネ ッ ト リ ス ト を生成 し ま す。 デザ イ ン に Vivado IP モ ジ ュ ールが含まれ る 場合は、 必要な IP フ ァ イ ルがすべて 「IP」 と い う 名前のサブ フ ォ ルダーに コ ピー さ れます。 最後 に、 RTL デザ イ ン フ ァ イ ル と Vivado IP デザ イ ン フ ァ イ ルがすべて ZIP フ ァ イ ルに圧縮 さ れ、 ip_catalog と い う 名前 のサブ フ ォ ルダーに保存 さ れます。 IP カ タ ログ フ ロー System Generator デザ イ ンで System Generator ト ー ク ン を ダブル ク リ ッ ク し ます。 [Compilation] フ ィ ール ド の > ボ タ ン を ク リ ッ ク し 、 [IP Catalog] を選択 し ます。 [Target directory] フ ィ ール ド では生成フ ァ イ ルのデ ィ レ ク ト リ を指定 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 158 第 8 章 : System Generator の コ ンパイル タ イ プ [Settings] ボ タ ン がオ ン にな り ます。 こ れを ク リ ッ ク す る と 、 次の よ う なダ イ ア ロ グ ボ ッ ク ス が表示 さ れ、 モジ ュ ー ルに関す る 情報が入力で き ます。 こ れが Vivado IP カ タ ロ グに表示 さ れ る よ う にな り ます。 [Use common repository directory] フ ィ ール ド には、 共通 リ ポジ ト リ と 呼ばれ る デ ィ レ ク ト リ を指定 し ます。 IP カ タ ロ グ コ ンパ イ ルでは、作成 さ れた IP が こ の リ ポジ ト リ に コ ピー さ れます。Vivado ユーザーが Vivado プ ロ ジ ェ ク ト の IP 設定でユーザー リ ポジ ト リ に こ のパス を追加する と 、 System Generator ユーザーが こ の共通 リ ポジ ト リ に保存 し た IP はすべて、 Vivado に よ り 自動的に読み込まれ る ので、 IP イ ン テ グ レー タ ーま たは RTL フ ロ ーで使用す る こ と がで き ます。 [Use Plug-in project] フ ィ ール ド には、System Generator に イ ン ポー ト さ れた IP イ ン テ グ レー タ ーのブ ロ ッ ク 図 (BD) を 含んだ Vivado プ ロ ジ ェ ク ト を指定 し ます。 こ のフ ィ ール ド で指定 し た Vivado プ ロ ジ ェ ク ト を使用 し た手順について は、 System Generator でのプ ラ ッ ト フ ォーム ベース のア ク セ ラ レー タ の調整を参照 し て く だ さ い。 [Generate] ボ タ ン を ク リ ッ ク す る と 、 IP カ タ ロ グ フ ロ ーが開始 し ます。 次の よ う な [Compilation status] ウ ィ ン ド ウ が 表示 さ れ、 フ ロ ーの進捗状況が示 さ れます。 IP カ タ ロ グ フ ロ ーが終了す る と 、 「Generation Completed」 と 表示 さ れま す。 [Show Details] を ク リ ッ ク す る と 、 詳細な情報が表示 さ れます。 指定 し た タ ーゲ ッ ト デ ィ レ ク ト リ には、 ip_catalog と い う 名前の フ ォ ルダーが作成 さ れ ま す。 こ の フ ォ ルダーには、 System Generator デザ イ ンか ら IP を作成す る のに必要な フ ァ イ ルがすべて含まれてい ます。 丸で囲んだ ZIP フ ァ イ ル には、 System Generator デザ イ ン を IP と し て Vivado IP カ タ ロ グに含め る ために必要な フ ァ イ ルがすべて含まれてい ま す。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 159 第 8 章 : System Generator の コ ンパイル タ イ プ AXI4 イ ン タ ー フ ェ イ スの使用 IP カ タ ロ グ の設定で [Auto Infer Interface] オ プ シ ョ ン を 選択す る と 、 AXI4 イ ン タ ー フ ェ イ ス が Gateway In お よ び Gateway Out ポ ー ト か ら 自 動 推 論 さ れ ま す。 [Auto Infer Interface] オ プ シ ョ ン で は、 信号 が ポ ー ト 名 に 基づ い て AXI4-Stream、 AXI4-Lite、 AXI4 イ ン タ ーフ ェ イ ス に ま と め ら れます。 [Auto Infer Interface] オプシ ョ ンでは、 次の条件に基づいて イ ン タ ーフ ェ イ ス が推論 さ れます。 • Gateway In お よ び Gateway Out ポー ト 名の接尾語は AXI4 イ ン タ ーフ ェ イ ス規格の信号名 と ま っ た く 同 じ であ る 必要があ り ます。 • デザ イ ンには、 有効な AXI4 イ ン タ ーフ ェ イ ス と な る のに必要な、 最低限の数の信号が含まれてい る 必要があ り ます。 た と え ば、 デ ザ イ ン に PortName_tdata お よ び PortName_tvalid と い う 名 前 の 2 つ の Gateway In ポ ー ト と 、 PortName_tready と い う 名前の Gateway Out ポー ト があ る 場合、 [Auto Infer Interface] オプシ ョ ンで こ れ ら の 3 つのポー ト が自動推論 さ れ、 PortName と い う 名前の AXI4-Stream ポー ト に ま と め ら れます。 こ の例の場合、 次の よ う にな り ま す。 • ポー ト 名の接尾語は AXI4-Stream イ ン タ ーフ ェ イ ス の信号の も の (TDATA、 TREADY お よ び TVALID) と 同 じ で す。 • こ れ ら の 3 つの信号は AXI4-Stream イ ン タ ーフ ェ イ ス に必要な最低限の信号です。 オプシ ョ ンの AXI4 サ イ ド バン ド 信号があ り (た と えば TUSER 信号は AXI4-Stream 規格でオプシ ョ ン)、その名前が同 じ 命名規則に沿っ て付け ら れてい る 場合は、 同 じ AXI4 イ ン タ ーフ ェ イ ス に ま と め ら れます。 AXI4 イ ン タ ーフ ェ イ ス の信号名や、 AXI4 イ ン タ ーフ ェ イ ス に最低限必要な信号な ど、 AXI4 イ ン タ ーフ ェ イ ス の詳 細については、 『Vivado Design Suite : AXI リ フ ァ レ ン ス ガ イ ド 』 (UG1037) を参照 し て く だ さ い。 IP モ ジ ュ ールにテ ス ト ベン チ を含める 新 し く 生成 し た IP の機能を検証す る には、 テ ス ト ベンチを含め る 必要があ り ます。 次の よ う に、 [Create testbench] を オンに し てお く と 、 [Generate] ボ タ ン を ク リ ッ ク し た と き にテ ス ト ベンチが自動的に含まれ る よ う にな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 160 第 8 章 : System Generator の コ ンパイル タ イ プ テ ス ト ベンチを含めた場合、 次の 3 つの手順を フ ロ ーに追加す る と 、 IP の機能を検証で き ます。 手順 1 : Vivado IP カ タ ロ グへ新 し い IP を追加 し ます。 詳細は、 『Vivado Design Suite ユーザー ガ イ ド : IP を使用 し た 設計』 (UG896) を参照 し て く だ さ い。 手順 2 : Vivado IDE プ ロ ジ ェ ク ト を新規作成 し 、 その IP を最上位 ソ ース と し て追加 し ます。 手順 3 : シ ミ ュ レーシ ョ ン、 合成、 イ ンプ リ メ ン テーシ ョ ン を実行 し 、 生成 し た IP の機能を検証 次の図は、 新規作成 し た IP を最上位 ソ ース と し て追加 し た Vivado IDE プ ロ ジ ェ ク ト を示 し てい ます。 IP モ ジ ュ ールへのイ ン タ ー フ ェ イ スに関する資料の追加 [Create interface document] を オ ン に し て [Generate] ボ タ ン を ク リ ッ ク す る と 、 System Generator で IP の イ ン タ ーフ ェ イ ス に関す る 資料が HTML 形式で生成 さ れ、 その HTML フ ァ イ ルが IP と 一緒にパ ッ ケージ さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 161 第 8 章 : System Generator の コ ンパイル タ イ プ netlist フ ォ ルダーの下には documentation フ ォ ルダーが新 し く 作成 さ れます。 こ の新規 IP を Vivado で右 ク リ ッ ク し て [Data sheet] を ク リ ッ ク す る と 、 IP の イ ン タ ーフ ェ イ ス情報を含む HTML フ ァ イ ルが開き ます。 Vivado IP カ タ ログへの生成 さ れた IP の追加 System Generator か ら 生成 し た IP を 使用す る には、 プ ロ ジ ェ ク ト を 新規作成す る か、 IP を 作成す る と き に System Generator で指定 し たの と 同 じ デバ イ ス を タ ーゲ ッ ト にする 既存プ ロ ジ ェ ク ト を開き ます。 注記 : IP には こ のプ ロ ジ ェ ク ト か ら し かア ク セ ス で き ません。 こ の IP を使用す る 新規プ ロ ジ ェ ク ト を作成す る たび に、 同 じ 作業を行 う 必要があ り ます。 次に Project Manager の [IP Catalog] を ク リ ッ ク し 、 [IP Catalog] ビ ュ ーの空のエ リ ア で右 ク リ ッ ク し ま す。 [Update IP Catalog] を ク リ ッ ク し 、 新規 IP を含むデ ィ レ ク ト リ を追加 し ます。 IP が IP カ タ ロ グに追加 さ れた ら 、 IP カ タ ロ グのその他の IP と 同様、 大 き なデザ イ ンに含め る こ と がで き る よ う にな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 162 第 8 章 : System Generator の コ ンパイル タ イ プ 合成済みチ ェ ッ ク ポ イ ン ト の コ ンパイル Vivado ツールでは、 デザ イ ン フ ロ ーの主要な段階でデザ イ ン を保存お よ び復元す る ための メ カ ニ ズ ム と し て、 デザ イ ン チ ェ ッ ク ポ イ ン ト フ ァ イ ル (.dcp) が使用 さ れ ます。 チ ェ ッ ク ポ イ ン ト は、 フ ロ ーの特定の地点におけ る デザ イ ンの ス ナ ッ プシ ョ ッ ト です。 合成済みチ ェ ッ ク ポ イ ン ト と は、 デザ イ ンが合成 さ れてか ら 、 ア ウ ト オブ コ ン テ キ ス ト (OOC) モー ド で作成 さ れたチ ェ ッ ク ポ イ ン ト フ ァ イ ルです。 次の図に示す よ う に、 [Synthesized Checkpoint] コ ンパ イ ル タ ーゲ ッ ト を選択す る と 、 synth_1.dcp と い う 名前の合成済 みチ ェ ッ ク ポ イ ン ト タ ーゲ ッ ト フ ァ イ ルが作成 さ れ、 タ ーゲ ッ ト デ ィ レ ク ト リ に保存 さ れます。 こ の synth_1.dcp フ ァ イ ルは、 こ の後 Vivado IDE プ ロ ジ ェ ク ト で使用で き ます。 カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 System Generator には、ユーザーが独自の コ ンパ イ ル タ ーゲ ッ ト を作成で き る カ ス タ ム コ ンパ イ ル イ ン フ ラ ス ト ラ ク チ ャ が含 ま れてい ます。 System Generator デザ イ ン か ら HDL を生成で き る だけでな く 、 HDL 生成前後両方の段階を 自動化す る コ ンパ イ ル タ ーゲ ッ ト プ ラ グ イ ン を作成で き ます。 カ ス タ ム コ ンパ イ ル タ ーゲ ッ ト の作成に関す る 詳細 は、 「カ ス タ ム コ ンパ イ ル タ ーゲ ッ ト の作成」 を参照 し て く だ さ い。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 163 第 9 章 カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 System Generator には、 ユーザーが独自の コ ンパ イ ル タ ーゲ ッ ト を作成で き る カ ス タ ム コ ンパ イ ル基盤が含まれてい ます。 System Generator デザ イ ンか ら HDL を生成で き る だけでな く 、 Vivado IDE プ ロ ジ ェ ク ト 生成前後ど ち ら の段階 も 自動化す る コ ンパ イ ル タ ーゲ ッ ト プ ラ グ イ ン を作成で き ます。 カ ス タ ム コ ンパ イ ル タ ーゲ ッ ト を作成す る には、 MATLAB 環境でオブジ ェ ク ト 指向プ ロ グ ラ ムの概念について知っ てお く 必要があ り ます。 xilinx_compilation ベース ク ラ ス カ ス タ ム コ ンパ イ ル基盤には、 xilinx_compilation と い う ベース ク ラ ス が提供 さ れてい ます。 こ のベース ク ラ ス か ら は、 サブ ク ラ ス を作成 し てそのプ ロ パテ ィ を使用 し 、 メ ンバー関数を上書 き し てユーザーの機能を イ ンプ リ メ ン ト で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 164 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 新規 コ ンパイル タ ーゲ ッ ト の作成 次は、 新 し い コ ンパ イ ル タ ーゲ ッ ト を作成す る 一般的な手順です。 特定の タ ーゲ ッ ト を作成する 例については、 次の 説明を参照 し て く だ さ い。 ヘルパー関数の実行 次のヘルパー関数を実行 し て新 し い コ ンパ イ ル タ ーゲ ッ ト を作成 し ます。 xilinx.environment.addCompilationTarget(target_name, directory_name) た と えば、 次の よ う な コ マ ン ド を実行す る と し ます。 xilinx.environment.addCompilationTarget('Impl', 'U:\demo') MATLAB コ マ ン ド ウ ィ ン ド ウ に こ の コ マ ン ド を入力す る と 、 次の よ う にな り ます。 1. U:\demo に Impl/@Impl と い う 名前の フ ォ ルダーが作成 さ れます。 2. フ ォ ルダー内には xilinx_compilation ベース ク ラ ス か ら Impl テ ンプ レー ト ク ラ ス フ ァ イ ル (Impl.m) が作成 さ れ ます。 こ の段階で フ ァ イ ルに変更がない場合は、 新 し く 作成 さ れた Impl コ ンパ イ ル タ ーゲ ッ ト が HDL Netlist コ ンパ イ ル タ ーゲ ッ ト と 同 じ よ う に動作 し ます。 次は Impl.m フ ァ イ ルの内容を示 し てい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 165 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 3. ヘルパー関数に よ り MATLAB パス に U:\demo\Impl が追加 さ れ る ので、 新 し い ク ラ ス の Impl が MATLAB に表示 さ れ る よ う にな り ます。 注記 : target_name には スペース を含め る こ と がで き ません。 ク ラ ス が作成 さ れた ら 、 ク ラ ス の target_name プ ロ パテ ィ に スペース を追加で き ます。 新規ボー ド タ ーゲ ッ ト の作成 こ の イ ン タ ーフ ェ イ ス を使用す る と 、 System Generator で新 し い開発ボー ド をサポー ト で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 166 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 こ れには、 ボー ド 情報が Vivado IDE デー タ セ ク シ ョ ンに含まれ、 Vivado IDE でサポー ト さ れてい る 必要があ り ます。 次の addBoard コ マ ン ド の構文を使用 し て く だ さ い。 xilinx.environment.addBoard(target_name, directory_name, board_xml_dir) 次の特定 コ マ ン ド を実行す る と 、 その後に示す項目が実行 さ れます。 xilinx.environment.addBoard('Zedboard', './', 'C:\Xilinx\Vivado\2015.1\data\boards\board_parts\zynq\zed\1.2') 1. 現在のデ ィ レ ク ト リ に Zedboard/@Zedboard が作成 さ れます。Zedboard ク ラ ス が xilinx_board ク ラ ス か ら 派生 し ま す。 xilinx_board は xilinx_compilation か ら 派生 し た も のです。 2. Zedboard ク ラ ス ではほ と ん ど の XML hwcosim ブ ロ ッ ク が作成 さ れます。 解析が実行 さ れ し 、 ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ンが実行 さ れ、 こ の関数で作成 さ れ る ク ラ ス は、 す ぐ に使用で き る 状態にな っ てい ます (XML があ っ て、 正 し い と 仮定 し た場合)。 コ ンパイル タ ーゲ ッ ト の変更 コ ンパ イ ル タ ーゲ ッ ト の ク ラ ス フ ァ イ ルに変更を加え た場合は、 次のヘルパー関数を呼び出す必要があ り ます。 次 のヘルパー関数を実行す る と 、 System Generator で新 し い ク ラ ス の定義が検出 さ れ る よ う にな り ます。 >> xilinx.environment.rehashCompilationTarget 既存 コ ンパイル タ ーゲ ッ ト の追加 カ ス タ ム コ ン パ イ ル タ ーゲ ッ ト を 含む フ ォ ルダーのパ ス を 追加す る 必要が あ り ま す。 こ れは、 次に示す よ う に、 MATLAB で提供 さ れ る addpath を使用す る と 実行で き ます。 >>addpath(‘U:\demo\Impl’); addpath を使用す る 場合は、 相対パ ス ではな く 、 絶対パ ス を指定す る 必要があ り ます。 カ ス タ ム コ ンパイル タ ーゲ ッ ト の保存 MATLAB で savepath を使用す る と 、 カ ス タ ム コ ンパ イ ル タ ーゲ ッ ト を保存で き ます。 保存す る には、 MATLAB イ ン ス ト ール デ ィ レ ク ト リ への書 き 込み権が必要な こ と があ り ます。 カ ス タ ム コ ンパイル タ ーゲ ッ ト の削除 カ ス タ ム コ ンパ イ ル タ ーゲ ッ ト は、 MATLAB 検索パ ス か ら タ ーゲ ッ ト へのパ ス を削除する と 削除で き ます。 ベース ク ラ スのプ ロパテ ィ および API xilinx_compilation ベース ク ラ ス は、 次のデ ィ レ ク ト リ にあ り ます。 <Vivado Install Path>/scripts/sysgen/matlab/@xilinx_compilation Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 167 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 System Generator ト ー ク ン関連のプ ロパテ ィ および API setup_sysgen_token() こ の関数は、カ ス タ ム コ ンパ イ ル基盤に よ る System Generator ト ー ク ン情報を生成す る ために呼び出 さ れます。System Generator ト ー ク ンに関す る 次の関数のいずれか を使用す る と 、 カ ス タ ム タ ーゲ ッ ト が選択 さ れた と き にデフ ォ ル ト で ト ー ク ンが ど の よ う にな る か を設定で き ます。デフ ォ ル ト 値の フ ィ ール ド と イ ネーブル/デ ィ ス エーブルの フ ィ ール ド は、 次の System Generator ト ー ク ンの API 関数で設定で き ます。 add_part( family, device, speed, package, temperature) 具体的な コ マ ン ド は add_part( ‘Kintex7’, ‘ xc7k325t’, ‘-1’ , ‘fbg676’, ‘’) の よ う にな り ます。 パーツ関連の API が使用 さ れない場合、 エン ド ユーザーは リ ス ト か ら ど のデバ イ ス で も 選択で き ます。 string target_name こ れは、 setup_sysgen_token() 関数で設定す る 必要のあ る 必須フ ィ ール ド です。 string hdl デフ ォ ル ト 値は空の ス ト リ ン グです。 値のオプシ ョ ンは、 Verilog か VHDL です。 こ の フ ィ ール ド に値を 1 度設定 し た ら 、 ユーザーが選択で き ない よ う にデ ィ ス エーブルにな り ます。 string synth_strategy デフ ォ ル ト 値は空の ス ト リ ン グです。 こ のフ ィ ール ド に値を 1 度設定 し た ら 、 ユーザーが選択で き ない よ う にデ ィ ス エーブルにな り ます。 こ の API を使用す る 場合は、 指定 し た ス ト ラ テ ジが存在す る か ど う か必ず確認 し て く だ さ い。 存在 し ない場合は、 エ ラ ーにな り ます。 string impl_strategy デフ ォ ル ト 値は空の ス ト リ ン グです。 こ のフ ィ ール ド に値を 1 度設定 し た ら 、 ユーザーが選択で き ない よ う にデ ィ ス エーブルにな り ます。 こ の API を使用す る 場合は、 指定 し た ス ト ラ テ ジが存在す る か ど う か必ず確認 し て く だ さ い。 存在 し ない場合は、 エ ラ ーにな り ます。 string create_tb デフ ォ ル ト 値は空の ス ト リ ン グです。 有効なオプシ ョ ンは、 on か off です。 こ の フ ィ ール ド に値を 1 度設定 し た ら 、 ユーザーが選択で き ない よ う にデ ィ ス エーブルにな り ます。 string create_iface_doc デフ ォ ル ト 値は空の ス ト リ ン グです。 有効なオプシ ョ ンは、 on か off です。 こ の フ ィ ール ド に値を 1 度設定 し た ら 、 ユーザーが選択で き ない よ う にデ ィ ス エーブルにな り ます。 Vivado プ ロ ジ ェ ク ト 関連のプ ロパテ ィ top_level_module こ のプ ロ パテ ィ は、 ユーザーの選択 し た最上位名を設定す る ために使用で き ます。 こ のパ ラ メ ー タ ーには、 MATLAB ス ト リ ン グ を使用で き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 168 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 Vivado IDE プ ロ ジ ェ ク ト 生成関連の関数 pre_project_creation(design_info) こ の関数は、 Vivado IDE プ ロ ジ ェ ク ト が作成 さ れ る 前に呼び出す必要があ り ます。 System Generator 基盤に よ り プ ロ ジ ェ ク ト を作成す る 前に、 ど の フ ァ イ ルを Vivado IDE プ ロ ジ ェ ク ト に追加する 必要があ る のか、 ど の Tcl コ マ ン ド を 追加で実行す る 必要があ る のか を理解 し てお く 必要があ り ます。 場合に よ っ ては、 System Generator デザ イ ン の最上 位ポー ト の イ ン タ ーフ ェ イ ス基づいて、プ ロ ジ ェ ク ト に追加す る フ ァ イ ルがあ る 可能性 も あ り ます。こ のために、ポー ト イ ン タ ーフ ェ イ ス を記述 し た構造が design_info と い う 関数に渡 さ れ ます。 design_info については後のセ ク シ ョ ン で説明 し ます。 post_project_creation(design_info) こ の関数は、 Vivado IDE プ ロ ジ ェ ク ト の作成の終わ り で呼び出す必要があ り ます。 こ れは、 プ ロ ジ ェ ク ト 生成ス ク リ プ ト が実行 さ れた後に呼び出 さ れ る 最後の関数で、 エ ラ ーを解析 し 、 レ ポー ト を生成 し 、 Vivado IDE プ ロ ジ ェ ク ト を 開 く 場合 な ど に 便利 で す。 ポ ー ト イ ン タ ー フ ェ イ ス を 記述 し た 構造 は design_info と い う 関数 に 渡 さ れ ま す。 design_info については後のセ ク シ ョ ン で説明 し ます。 add_tcl_command(string) こ の関数は、 追加の Tcl コ マ ン ド を ス ト リ ン グ と し て追加 し ます。 こ れ ら の Tcl コ マ ン ド は、 Vivado IDE プ ロ ジ ェ ク ト が作成 さ れてか ら 実行 さ れます。 こ の コ マ ン ド は、 プ ロ ジ ェ ク ト 作成後にビ ッ ト ス ト リ ーム を作成す る ために使用 で き 、 特定の Tcl フ ァ イ ルを読み込むために も 使用で き ます。 コ マ ン ド は、 受信 さ れた順に実行 さ れます。 add_file(string) こ の関数は、 Vivado IDE プ ロ ジ ェ ク ト にユーザー定義の フ ァ イ ルを追加 し ま す。 こ の API 関数は、 Vivado IDE プ ロ ジ ェ ク ト に XDC 制約フ ァ イ ルを追加す る ために も 使用で き ます。 add_file が呼び出 さ れ る 順序は階層的に し ます。 最 上位モジ ュ ール フ ァ イ ルは最後に追加する 必要があ り ます。 run_synthesis() こ の関数は、 Vivado IDE プ ロ ジ ェ ク ト で合成を実行 し ます。 run_implementation() こ の関数は、 Vivado IDE プ ロ ジ ェ ク ト で イ ンプ リ メ ン テーシ ョ ン を実行 し ます。 generate_bitstream() こ の関数は、 Vivado IDE プ ロ ジ ェ ク ト で ビ ッ ト ス ト リ ーム を生成 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 169 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 design_info design_info は MATLAB struct で、 次の内容を含みます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 170 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成例 次の例は、 さ ま ざ ま な カ ス タ マ イ ズ済み タ ーゲ ッ ト を作成す る 方法の詳細を示 し てい ます。 例 1 : イ ン プ リ メ ン テーシ ョ ン タ ーゲ ッ ト の作成 1. System Generator モデルを開いて、 System Generator ト ー ク ン を開き ます。 こ れに よ り 、 すべての使用可能な コ ン パ イ ル タ ーゲ ッ ト を含む ト ー ク ンが生成 さ れます。 2. MATLAB の コ マ ン ド ウ ィ ン ド ウ でパ ス をユーザーの要件に合わせて変更 し た ら 、 次の コ マ ン ド を入力 し ます。 xilinx.environment.addCompilationTarget('Impl', 'U:\demo') こ れに よ り 、 ユーザーが編集可能なテ ンプ レー ト か ら 派生 し た ク ラ ス が提供 さ れます。 3. MATLAB の コ マ ン ド ウ ィ ン ド ウ に、 次の よ う に入力 し ます。 xilinx.environment.rehashCompilationTarget こ れに よ り 、 新 し い コ ンパ イ ル タ ーゲ ッ ト が System Generator ト ー ク ンで認識 さ れ る よ う にな り ます。 4. System Generator を一旦閉 じ て、 開 き 直 し ます。 次の よ う に コ ンパ イ ル タ ーゲ ッ ト の [Impl] が ト ー ク ンに表示 さ れ る よ う にな り ます。 5. こ の段階では、 [Impl] を選択 し て も System Generator ト ー ク ンでは何のカ ス タ マ イ ズ も 実行 さ れず、 [HDL Netlist] コ ンパ イ ル タ ーゲ ッ ト と 同 じ にな り ます。 6. MATLAB Editor で U:\demo\Impl\@Impl\Impl.m を開 き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 171 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 7. 必要に応 じ て setup_sysgen_token() 関数を入力 し ます。 こ の方法を使用する と 、 ユーザー定義のカ ス タ ム コ ンパ イ ルが選択 さ れた場合に、 イ ネーブル/デ ィ ス エーブルの フ ィ ール ド も 含め、 System Generator ト ー ク ンが ど の よ う に表示 さ れ る か を ユーザーが制御で き ます。 8. MATLAB の コ マ ン ド ウ ィ ン ド ウ に、 次の コ マ ン ド を入力す る 必要があ り ます。 xilinx.environment.rehashCompilationTarget こ れに よ り 、 [Impl] のア ッ プデー ト さ れた ク ラ ス定義が使用 さ れ る よ う にな り ます。 9. System Generator を一旦閉 じ て、 開 き 直 し ます。 [Compilation] タ ーゲ ッ ト リ ス ト か ら [Impl] を選択 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 172 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 10. System Generator ト ー ク ンは次の よ う に表示 さ れます。 11. [Hardware description language] フ ィ ール ド が Impl ク ラ ス で設定 し たの と 同 じ にな る よ う に変更 し 、[Implementation strategy] フ ィ ール ド がユーザーが修正で き ない よ う にな っ てい る こ と を確認 し ます。 12. すべてのユーザー指定の フ ァ イ ルお よ び実行す る その他の Tcl コ マ ン ド は、 Vivado IDE プ ロ ジ ェ ク ト の作成前に 知っ てお く 必要があ り ます。 次は、 pre_project_creation() 関数を実行 し ます。 13. MATLAB の コ マ ン ド ウ ィ ン ド ウ に、 次の よ う に入力 し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 173 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 xilinx.environment.rehashCompilationTarget こ れに よ り 、 [Impl] のア ッ プデー ト さ れた ク ラ ス定義が使用 さ れ る よ う にな り ます。 14. System Generator を一旦閉 じ て、 開 き 直 し ます。 [Compilation] タ ーゲ ッ ト リ ス ト か ら [Impl] を選択 し ます。 15. [Generate] を ク リ ッ ク し ます。 プ ロ セ ス が終了 し た ら 、 Vivado IDE プ ロ ジ ェ ク ト を開いて イ ンプ リ メ ン テーシ ョ ン結果を確認で き ます。 例 2 : Zedboard タ ーゲ ッ ト の作成 1. System Generator デザ イ ン を開 き ます。 2. MATLAB の コ マ ン ド ウ ィ ン ド ウ でユーザーのマシ ン/ イ ン ス ト ールに合わせてパス を変更 し ます。 次の コ マ ン ド を入力 し ます。 xilinx.environment. addBoard (‘Zedboard’, 'U:\demo', 'C:\Xilinx\Vivado\2013.4\data\boards\zynq\ZED\revD') こ れに よ り 、 ユーザーが編集可能な テ ン プ レ ー ト か ら 派生 し た ク ラ ス が提供 さ れ ま す。 最後の フ ィ ール ド は、 board.xml フ ァ イ ルを含むデ ィ レ ク ト リ に対応 し ます。 3. MATLAB の コ マ ン ド ウ ィ ン ド ウ に、 次の よ う に入力 し ます。 xilinx.environment.rehashCompilationTarget こ れに よ り 、 新 し い コ ンパ イ ル タ ーゲ ッ ト が System Generator ト ー ク ンで認識 さ れ る よ う にな り ます。 4. System Generator を一旦閉 じ て、 開 き 直 し ます。 5. 次の よ う に コ ンパ イ ル タ ーゲ ッ ト の [Zedboard] が System Generator ト ー ク ンに表示 さ れ る よ う にな り ます。 6. [Zedboard] を選択 し ます。 [Part] には、 使用可能なデバ イ ス のみがデフ ォ ル ト で選択 さ れます。 7. [Generate] を ク リ ッ ク し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 174 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 Hardware co-Simulation ブ ロ ッ ク が生成 さ れます。 こ れで、 こ の Hardware co-Simulation ブ ロ ッ ク は、 Zedboard を含むど の System Generator デザ イ ン でで も 使用で き る よ う にな り ま し た。 例 3 : ビ ッ ト ス ト リ ーム タ ーゲ ッ ト の作成 1. System Generator デザ イ ン を開 き ます。 2. 最初の例の よ う に、 MATLAB の コ マ ン ド ウ ィ ン ド ウ でパ ス を ユーザーの要件に合わせて変更 し た ら 、 次の コ マ ン ド を入力 し ます。 xilinx.environment.addCompilationTarget(‘Bitstream’, '.') こ れに よ り 、 ユーザーが編集可能な テ ン プ レ ー ト か ら 派生 し た ク ラ ス が提供 さ れ ま す。 最後の フ ィ ール ド は、 board.xml フ ァ イ ルを含むデ ィ レ ク ト リ に対応 し ます。 3. MATLAB の コ マ ン ド ウ ィ ン ド ウ に、 次の よ う に入力 し ます。 xilinx.environment.rehashCompilationTarget こ れに よ り 、 新 し い コ ンパ イ ル タ ーゲ ッ ト が System Generator ト ー ク ンで認識 さ れ る よ う にな り ます。 4. System Generator を一旦閉 じ て、 開 き 直 し ます。 5. 次の よ う に コ ンパ イ ル タ ーゲ ッ ト の [Bitstream] が System Generator ト ー ク ンに表示 さ れ る よ う にな り ます。 6. ./Bitstream/@Bitstream/Bitstream.m か ら 作成 さ れた Bitstream.m を開 き ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 175 第 9 章 : カ ス タ ム コ ンパイル タ ーゲ ッ ト の作成 7. 次の 2 つの フ ァ イ ルを ダ ウ ン ロ ー ド し ます。 8. pre_project_creation() 関数内に次を実行す る 行を追加 し ます。 a. ボー ド を KC705 と し て設定 し ます。 b. 新 し い最上位フ ァ イ ル (top.v) を追加 し て KC705 の差動 ク ロ ッ ク ポー ト を使用 し ます。 c. 新 し い XDC フ ァ イ ルを追加 し て、 clock、 dip、 led ポー ト に ロ ケーシ ョ ン制約を指定 し ます。 d. 新 し く 追加 さ れたモジ ュ ール top を最上位 と し て設定 し ます。 e. 合成を実行 し ます。 f. イ ンプ リ メ ン テーシ ョ ン を実行 し ます。 g. ビ ッ ト ス ト リ ーム を生成 し ます。 フ ァ イ ルを ユーザー マシ ンのデ ィ レ ク ト リ に保存 し た ら 、 add_file API でその フ ァ イ ルへの完全パ ス を指定す る 必要 があ り ます。 add_tcl_command(obj, 'set_property board xilinx.com:kintex7:kc705:1.1 [current_project]'); add_file(obj, '/group/dspusers-xsj/umangp/rel/2013.4/cust_comp_test/bitstream_example.xdc'); add_file(obj, '/group/dspusers-xsj/umangp/rel/2013.4/cust_comp_test/top.v'); obj.top_level_module = 'top'; run_synthesis(obj); run_implementation(obj); generate_bitstream(obj); 8. MATLAB の コ マ ン ド ウ ィ ン ド ウ に、 次の よ う に入力 し ます。 xilinx.environment.rehashCompilationTarget こ れに よ り 、 新 し い コ ンパ イ ル タ ーゲ ッ ト が System Generator ト ー ク ンで認識 さ れ る よ う にな り ます。 9. System Generator を一旦閉 じ て、 開 き 直 し ます。 10. [Bitstream] コ ンパ イ ル タ ーゲ ッ ト を選択 し ます。 11. [Generate] ボ タ ン を ク リ ッ ク し ます。 12. 生成が終了 し た ら 、 次のデ ィ レ ク ト リ か ら .bit フ ァ イ ルを見つけ る こ と がで き ます。 ./<Target directory>/ Bitstream/bitstream_example.runs/impl_1/top.bit Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 176 付録 A System Generator の GUI ユーテ ィ リ テ ィ すばや く System Generator デザ イ ン を 作成 し て 解析す る た め の Simulink モ デルの ポ ッ プ ア ッ プ メ ニ ュ ーに グ ラ フ ィ ッ ク コ マ ン ド を追加 し ま し た。 次の よ う に、 こ れ ら の コ マ ン ド には、 Simulink モデルのキ ャ ンバ ス で右 ク リ ッ ク し てア ク セ ス で き ます。 追加 さ れたザ イ リ ン ク ス コ マ ン ド については以下に詳 し く 説明 さ れてい ます。 [Xilinx BlockAdd] ザ イ リ ン ク ス ブ ロ ッ ク を Simulink モデルにすばや く 追加で き る 機能です。 [Xilinx Tools] → [Save as blockAdd ブ ロ ッ ク を あ ら か じ め コ ン フ ィ ギ ュ レーシ ョ ン し てお き 、 そのブ ロ ッ ク の複 default] 数の コ ピーを BlockAdd 機能を使用 し て追加する 機能です。 [Xilinx BlockConnect] Simulink モデル内でブ ロ ッ ク をすばや く 接続す る 機能です。 [Xilinx Tools] → [Terminate] オープンの出力ポー ト に Simulink 終端ブ ロ ッ ク をすばや く 追加 し た り 、オー プ ン の入力ポー ト にザ イ リ ン ク ス Constant ブ ロ ッ ク をすばや く 追加す る 機 能です。 [Xilinx View Signal] Simulink シ ミ ュ レ ーシ ョ ン の実行後に選択 し た信号の波形図 を生成で き る よ う にす る 機能です。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 177 付録 A : System Generator の GUI ユーテ ィ リ テ ィ [Xilinx BlockAdd] ザ イ リ ン ク ス ブ ロ ッ ク を Simulink モデルにすばや く 追加で き る 機能です。 起動方法 方法 1 : Simulink キ ャ ンバ ス を右 ク リ ッ ク し て [Xilinx BlockAdd] を選択 し ます。 方法 2 : シ ョ ー ト カ ッ ト 、 Ctrl + 1 キーを押 し ます。 方法 3 : Simulink モデルのプルダ ウ ン メ ニ ュ ーか ら 次を ク リ ッ ク し ます。 [Tools] → [Xilinx] → [BlockAdd Ctrl 1] 使用方法 Simulink キ ャ ンバ ス を右 ク リ ッ ク し て [Xilinx BlockAdd] を選択 し ます。 1. 右 ク リ ッ ク 2. 選択 Simulink キ ャ ンバ ス を右 ク リ ッ ク し て [Xilinx BlockAdd] を選択 し ます。 1. ブ ロ ッ ク ま でス ク ロー 2. ダ ブル ク リ ッ ク Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 178 付録 A : System Generator の GUI ユーテ ィ リ テ ィ 次の図に示す よ う に、 ブ ロ ッ ク ま ですばや く ス ク ロ ールする には、 そのブ ロ ッ ク 名の最初の何文字か を一番上のテ キ ス ト ボ ッ ク ス に入力 し ます。 複数のブ ロ ッ ク を追加する には、 Shift キーを押 し なが ら ブ ロ ッ ク を ク リ ッ ク し てい き 、 Enter キーを押 し ます。 3.Enter を押す 1. 文字を入力 2.Shift + ク リ ッ ク 同 じ ブ ロ ッ ク の コ ピーを複数追加す る には、 ブ ロ ッ ク を追加 し てか ら 、 そのブ ロ ッ ク を選択 し て Ctrl + C キーを押 し てか ら 、 Ctrl + V キーを押 し てい き ます。 [Add block] ウ ィ ン ド ウ を消すには、 Esc キーを押 し ます。 [Xilinx Tools] → [Save as blockAdd default] ブ ロ ッ ク を あ ら か じ め コ ン フ ィ ギ ュ レーシ ョ ン し てお き 、 そのブ ロ ッ ク の複数の コ ピーを BlockAdd 機能を使用 し て追加す る 機能です。 使用方法 ブール型の Gateway In ブ ロ ッ ク を複数、 モデルに追加する 必要があ る と し ます。 1. Gateway In ブ ロ ッ ク 1 つを モデルに追加 し ます。 2. Gateway In ブ ロ ッ ク を ダブル ク リ ッ ク し て、 出力 タ イ プを [Boolean] に変更 し て [OK] を ク リ ッ ク し ます。 3. 変更 し た Gateway In ブ ロ ッ ク を選択 し て右 ク リ ッ ク し 、 [Xilinx Tools] → [Save as blockAdd default] を ク リ ッ ク し ます。 4. こ れに よ り 、 次か ら は BlockAdd 機能を使用 し てモデルに Gateway In ブ ロ ッ ク を追加す る と 、 ブ ロ ッ ク の出力型 が常にブール型にな り ます。 ブ ロ ッ ク デ フ ォル ト の復元方法 1. デフ ォ ル ト を変更 し たブ ロ ッ ク を選択 し ます。 2. 右 ク リ ッ ク し て [Xilinx Tools] → [Clear blockAdd defaults] を ク リ ッ ク し ます。 . Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 179 付録 A : System Generator の GUI ユーテ ィ リ テ ィ [Xilinx BlockConnect] Simulink モデル内でブ ロ ッ ク をすばや く 接続す る 機能です。 単純な接続 1. 次の図に示す よ う に、 ブ ロ ッ ク のオープ ン ポー ト を選択 し て右 ク リ ッ ク し 、 [Xilinx BlockConnect] を ク リ ッ ク し ます。 1. 右 ク リ ッ ク 2. 2. 選択 BlockConnect が最 も 近い接続を緑の線で提案 し ます。それを承諾する には、表内で接続を ダブル ク リ ッ ク し ます。 接続 さ れ る と 、 線の色が黒に変わ り ます。 承諾 し ない場合は、 表内で別の接続を ク リ ッ ク し て、 新 し く 提案 さ れ た緑の接続線に問題ないか ど う か確認 し ます。 2. ダ ブル ク リ ッ ク 1. 接続を確認 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 180 付録 A : System Generator の GUI ユーテ ィ リ テ ィ ス マー ト 接続 次の図に示す よ う な稲妻ア イ コ ンは、 ス マー ト 接続を意味 し ます。 ス マー ト 接続には、 接続を管理 し やす く し た イ ン テ リ ジ ェ ン ス がビル ト イ ン さ れてい ます。 た と えば、 AXI イ ン タ ーフ ェ イ ス を含むブ ロ ッ ク を右 ク リ ッ ク す る と 、 (1) AXI 信号か ら バ ス ま での接続を ま と めた り 、 分け る こ と がで き 、 (2) 同 じ 数の AXI 接続を持つほかのポー ト へ接続 で き ます。 「スマー ト 」 接続を示す ポー ト のデー タ 型のチ ェ ッ ク は実行 さ れず、 ポー ト の数が同 じ の AXI ポー ト であれば、 どれにで も 接続で き ます。 次の別の ス マー ト 接続の例では、 Accumulator ブ ロ ッ ク 出力を右 ク リ ッ ク し 、 BlockConnect を選択 し 、 Scope を ダブル ク リ ッ ク し て Scope ブ ロ ッ ク への ス マー ト 接続を作成 し てい ます。 Gateway Out ブ ロ ッ ク は自動的に追加 さ れます。 こ の Scope ブ ロ ッ ク へ 2 つ目の接続が行われ る と 、 2 つ目のポー ト が Scope ブ ロ ッ ク に自動的に追加 さ れます。 その 駆動信号名が Scope を駆動す る 信号の名前に も 使用 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 181 付録 A : System Generator の GUI ユーテ ィ リ テ ィ [Xilinx Tools] → [Terminate] オープンの出力ポー ト に Simulink 終端ブ ロ ッ ク をすばや く 追加 し た り 、 オープンの入力ポー ト にザ イ リ ン ク ス Constant ブ ロ ッ ク をすばや く 追加す る 機能です。 使用方法 オープ ンにな っ ている出力の終端 オープ ンの入力お よ び出力ポー ト があ る 次のモデルを例に と っ て説明 し ます。 こ の例の場合、 DDS Compiler 5.0 ブ ロ ッ ク を右 ク リ ッ ク し て、 次の よ う に順に ク リ ッ ク し ます。 [Xilinx Tools] → [Terminate] → [Output] Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 182 付録 A : System Generator の GUI ユーテ ィ リ テ ィ 次の図は、 こ の コ マ ン ド を実行 し た後の終端処理 さ れた出力を示 し てい ます。 オープ ンにな っ ている入力の終端 オープ ンの入力ポー ト があ る 次のモデルを例に と っ て説明 し ます。 DDS Compiler 5.0 ブ ロ ッ ク を右 ク リ ッ ク し て、 次の よ う に順に ク リ ッ ク し ます。 [Xilinx Tools] → [Terminate] → [Input] Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 183 付録 A : System Generator の GUI ユーテ ィ リ テ ィ 次の図は、 こ の コ マ ン ド を実行 し た後の終端処理 さ れた入力を示 し てい ます。 入力ポー ト デー タ 型要件の確認 System Generator では、オープンにな っ てい る 入力ポー ト それぞれがザ イ リ ン ク ス Constant ブ ロ ッ ク に接続 さ れます。 新 し い Constant ブ ロ ッ ク は、 次のデフ ォ ル ト 値に設定 さ れます。 [Type] : Signed (2 の補数) [Constant value] : 0 [Number of bits] : 16 [Binary point] : 14 こ の終端ツールでは、 入力ポー ト のデー タ 型チ ェ ッ ク が実行 さ れ ません。 オープ ン ポー ト に、 た と えばブール型な ど、 別のデー タ 型が必要な場合、 Constant ブ ロ ッ ク を ダブル ク リ ッ ク し て [Output Type] を [Boolean] に変更す る 必要 があ り ます。 デー タ タ イ プの不一致がないかチ ェ ッ ク する には、Simulink モデル キ ャ ンバス を ク リ ッ ク し て、Ctrll + D キーを押 し ます。 デー タ タ イ プの不一致があれば、 System Generator に よ り すべて レ ポー ト さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 184 付録 A : System Generator の GUI ユーテ ィ リ テ ィ [Xilinx View Signal] Simulink シ ミ ュ レーシ ョ ンの実行後に選択 し た信号の波形図を生成で き る よ う にす る 機能です。 使用方法 1 つの信号選択 1. 次の図に示す よ う に、 表示す る 信号を選択 し て右 ク リ ッ ク し ます。 2. [Xilinx View Signal] を ク リ ッ ク し ます。 2. 選択 1. 右 ク リ ッ ク 複数の信号選択 1. デザ イ ン内の空白部分を右 ク リ ッ ク し ます。 1. 右 ク リ ッ ク 2. 2. 選択 [Xilinx View Signals] を ク リ ッ ク し て信号を選択する ダ イ ア ロ グ ボ ッ ク ス を表示 し ます。 こ のダ イ ア ロ グ ボ ッ ク ス の左側には選択可能な信号がすべて リ ス ト さ れ、 右側に選択 し た信号が入力 さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 185 付録 A : System Generator の GUI ユーテ ィ リ テ ィ 3. 信号を ダブル ク リ ッ ク す る と 、 リ ス ト に信号が追加 さ れ る か、 リ ス ト か ら 信号が削除 さ れます。 ダ ブル ク リ ッ ク 4. [OK] を ク リ ッ ク し て選択を確認す る と 、 選択 し た信号がハ イ ラ イ ト さ れます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 186 付録 A : System Generator の GUI ユーテ ィ リ テ ィ 波形ビ ュ ーアーでの信号の表示 追加 し た信号を波形ビ ュ ーアーで表示す る には、シ ミ ュ レーシ ョ ン を実行 し てシ ミ ュ レーシ ョ ン デー タ を生成す る 必 要があ り ます。 シ ミ ュ レーシ ョ ン ボ タ ン を ク リ ッ ク し てシ ミ ュ レーシ ョ ン を実行 し ます。 シ ミ ュ レーシ ョ ンが終了 し た ら 、 生成 さ れた波形デー タ が波形ビ ュ ーアーに表示 さ れます。 System Generator セ ッ シ ョ ン中は、 共通波形ビ ュ ーアーは閉 じ る 必要はあ り ません。 共通波形ビ ュ ーアーには、 最新 のシ ミ ュ レーシ ョ ン信号が表示 さ れます。 こ れは、 System Generator を終了す る と 閉 じ ます。 波形ビ ュ ーアー と モデル間の ク ロ ス プ ローブ 波形ビ ュ ーアーか ら System Generator モデルへ信号を ク ロ ス プ ロ ーブする には、 波形ビ ュ ーアーで信号名を選択 し ま す。 同 じ 信号が System Generator モデルでオ レ ン ジ色にハ イ ラ イ ト さ れます。 こ のハ イ ラ イ ト 機能に よ り 、 波形 と モ デル内の ワ イ ヤ を確認 し やす く な っ てい ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 187 付録 A : System Generator の GUI ユーテ ィ リ テ ィ System Generator モデルか ら 波形ビ ュ ーアーへ信号を ク ロ ス プ ロ ーブす る には、 次の作業を行い ます。 1. 波形ビ ュ ーアーを開いた状態で、 System Generator モデルで信号を選択 し ます。 Ctrl+Shift キーを押 し なが ら 、 複数の信号を選択する こ と も で き ます。 2. System Generator モデルで選択 し た信号の 1 つを右 ク リ ッ ク し 、 右 ク リ ッ ク メ ニ ュ ーの中か ら [Xilinx Highlight in Viewer] を選択 し ます。 波形 ビ ュ ー ア ーに現在表示 さ れ て い な い信号 を 選択す る 場合は、 [Xilinx Highlight in Viewer] は右 ク リ ッ ク メ ニ ュ ーには表示 さ れません。 X-Ref Target - Figure A-1 3. Wavform Editor で選択 し た信号の信号名が青色でハ イ ラ イ ト さ れてい る こ と を確認 し ます。 波形ビ ュ ーアーを閉 じ る 波形ビ ュ ーアーは、 次の手順で閉 じ る こ と がで き ます。 1. デザ イ ン内の空白部分を右 ク リ ッ ク し ます。 2. [Xilinx View Signals] を ク リ ッ ク し て信号を選択する ダ イ ア ロ グ ボ ッ ク ス を表示 し ます。 3. [Close Waveform] を ク リ ッ ク し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 188 付録 A : System Generator の GUI ユーテ ィ リ テ ィ 前に生成 し た波形デー タ の表示方法 1. 波形ビ ュ ーアーの イ ン ス タ ン ス が現在の System Generator セ ッ シ ョ ンで開いてい る こ と を確認 し ます。 2. 開 き たい波形デー タ フ ァ イ ル (model_name.wdb) が保存 さ れてい る 場所を確認 し ます。 注記 : 注記 : 波形デー タ は wavedata デ ィ レ ク ト リ に保存 さ れてい ます。 3. MATLAB コ ン ソ ールに 「xlOpenWaveFormData(‘c:/waveData/model_name.wdb’)」 と 入力 し ます。 波形デー タ フ ァ イ ルの絶対パ ス を入力 し て く だ さ い。 4. 波形ビ ュ ーアーで波形デー タ を確認 し ます。 サポー ト さ れな く な っ た WaveScope ブ ロ ッ ク の信号名のア ッ プグ レー ド 方法 サポー ト さ れな く な っ た WaveScope ブ ロ ッ ク がデザ イ ンに含まれてい る 場合、こ のブ ロ ッ ク の既存のモニ タ ー信号名 を、 ア ッ プグ レー ド し たブ ロ ッ ク の も のに移行す る 必要があ り ます。 1. 次の図に示す よ う に、 WaveScope ブ ロ ッ ク を右 ク リ ッ ク し ます。 2. [Xilinx Tools] → [Upgrade block] を ク リ ッ ク し ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 189 付録 A : System Generator の GUI ユーテ ィ リ テ ィ • ア ッ プグ レー ド が実行 さ れます。 • ア ッ プグ レー ド が実行 さ れた ら 、 次の図の よ う に、 サポー ト さ れな く な っ た WaveScope ブ ロ ッ ク がモデルか ら 削 除 さ れ、 MATLAB コ ン ソ ールにサマ リ が記述 さ れます。 • 最後にシ ミ ュ レーシ ョ ン ボ タ ン を ク リ ッ ク し てシ ミ ュ レーシ ョ ン を実行 し ます。 • シ ミ ュ レーシ ョ ンが終了 し た ら 、サポー ト さ れな く な っ た WaveScope ブ ロ ッ ク の信号名が波形ビ ュ ーアーに表示 さ れ る よ う にな り ます。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 190 付録 B その他のソ ースおよび法的通知 ザイ リ ン ク ス リ ソ ース ア ンサー、 資料、 ダ ウ ン ロ ー ド 、 フ ォー ラ ム な ど のサポー ト リ ソ ース は、 ザ イ リ ン ク ス サポー ト サ イ ト を参照 し て く だ さ い。 ソ リ ュ ーシ ョ ン セ ン タ ー デバ イ ス、 ツール、 IP のサポー ト については、 ザ イ リ ン ク ス ソ リ ュ ーシ ョ ン セ ン タ ーを参照 し て く だ さ い。 ト ピ ッ ク には、 デザ イ ン ア シ ス タ ン ト 、 ア ド バ イ ザ リ 、 ト ラ ブルシ ュ ー ト ヒ ン ト な ど が含まれます。 参考資料 次の資料は、 本書を補足す る ための も のです。 1. 『Vivado Design Suite リ フ ァ レ ン ス ガ イ ド : System Generator を使用 し たモデル ベース の DSP デザ イ ン』 (UG958) 2. 『Vivado Design Suite チ ュ ー ト リ アル : System Generator を使用 し たモデル ベース の DSP デザ イ ン』 (UG948) 3. 『Vivado Design Suite ユーザー ガ イ ド : Vivado IDE の使用』 (UG893) 4. 『Vivado Design Suite ユーザー ガ イ ド : デザ イ ン フ ロ ーの概要』 (UG892) 5. 『Vivado Design Suite 移行手法ガ イ ド 』 (UG911) 6. 『Vivado Design Suite ユーザー ガ イ ド : IP を使用 し た設計』 (UG896) 7. 『Vivado Design Suite ユーザー ガ イ ド : 制約の使用』 (UG903) 8. 『Vivado Design Suite ユーザー ガ イ ド : Tcl ス ク リ プ ト 機能の使用』 (UG894) 9. 『Vivado Design Suite チ ュ ー ト リ アル :デザ イ ン フ ロ ーの概要』 (UG888) 10. 『Vivado Design Suite ユーザー ガ イ ド : シ ス テ ム レベル デザ イ ン入力』 (UG895) 11. 『Vivado Design Suite ユーザー ガ イ ド : リ リ ース ノ ー ト 、 イ ン ス ト ールお よ び ラ イ セ ン ス』 (UG973) 12. Vivado Design Suite ビデオ チ ュ ー ト リ アル 13. Vivado Design Suite チ ュ ー ト リ アル 14. Vivado Design Suite ユーザー ガ イ ド 15. Vivado Design Suite リ フ ァ レ ン ス ガ イ ド 16. Vivado Design Suite 手法ガ イ ド 17. 『UltraFast™ 設計手法 (Vivado Design Suite 用)』 (UG949) Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 191 付録 B : その他のソ ースおよび法的通知 18. Vivado Design Suite の資料 19. ザ イ リ ン ク ス ウ ェ ブサ イ ト のダ ウ ン ロ ー ド セ ン タ ー ト レーニ ング リ ソ ース ザ イ リ ン ク ス では、本書に含まれ る コ ン セプ ト を説明す る さ ま ざ ま な ト レーニ ン グ コ ースお よ びオン ラ イ ン ビデオを 提供 し てい ます。 次の リ ン ク か ら 関連す る ト レーニ ン グ リ ソ ース を参照 し て く だ さ い。 1. System Generator を使用 し た DSP デザ イ ン 2. Vivado Design Suite ビデオ チ ュ ー ト リ アル : System Generator for DSP で使用する Vivado HLS ブ ロ ッ ク を生成 3. Vivado Design Suite ビデオ チ ュ ー ト リ アル : System Generator で Vivado HLS C/C++/System C を使用 4. Vivado Design Suite ビデオ チ ュ ー ト リ アル : Vivado System Generator for DSP を使用す る ハー ド ウ ェ ア協調シ ミ ュ レーシ ョ ン 5. Vivado Design Suite ビデオ チ ュ ー ト リ アル : 複数 ク ロ ッ ク ド メ イ ン を含む System Generator デザ イ ン 6. Vivado Design Suite ビデオ チ ュ ー ト リ アル : Vivado System Generator デザ イ ンの AXI4-Lite イ ン タ ーフ ェ イ ス を指 定 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 192 付録 B : その他のソ ースおよび法的通知 法的通知 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 Xilinx’s limited warranty, please refer to Xilinx’s Terms of Sale which can be viewed at http://www.xilinx.com/legal.htm#tos; 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 such critical applications, please refer to Xilinx’s Terms of Sale which can be viewed at http://www.xilinx.com/legal.htm#tos. © Copyright 2012–2015 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. こ の資料に関す る フ ィ ー ド バ ッ ク お よ び リ ン ク な ど の問題につ き ま し ては、 [email protected] ま で、 ま たは各ページの 右下にあ る [フ ィ ー ド バ ッ ク 送信] ボ タ ン を ク リ ッ ク す る と 表示 さ れ る フ ォ ーム か ら お知 ら せ く だ さ い。 フ ィ ー ド バ ッ ク は日本語で 入力可能です。 いただ き ま し た ご意見を参考に早急に対応 さ せていただ き ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受 け付けてお り ません。 あ ら か じ めご了承 く だ さ い。 Vivado : System Generator を使用 し たデザイ ン UG897 (v2015.1) 2015 年 4 月 1 日 japan.xilinx.com 193
© Copyright 2024 ExpyDoc