はじめに
今日からは、XilinxのVivadoで、Zynq MP SoC を使った時の、シミュレーションってどうなっているの?というのを調べていきます。
今回は、第1回目です。Xilinx ZynqMP SoC VIP の中を調べる(その1)
まずは、ドキュメント
ドキュメントは、「Zynq UltraScale+ MPSoC Verification IP、DS941 (v1.0) November 12, 2019 」が最新版です。
2019年11月から変わっていないようです。モデルは、SystemVerilogのようです。
例題
例題は、VIvado を立ち上げ、Quick Startの Open Example Project をクリックします。Create an Example Projectで、Next をクリックします。
例題はいっぱい出てくると思いますが、「Zynq Ultrascale+ MPSoC Design Presets」を選択し、Next をクリックします。その後は、Vivadoのプロジェクトの生成と同じです。
Project name を 「zynqmpsoc」としました。
Default Part では、上の「Zynq UltraScale+ ZCU104 Evaluation Board」を選びます。無償版では確か、ZCU104はサポートしていませんが、シミュレーションでは動くと思うのでこちらを選びます。必要であるば、後で、Ultra96に変更すればいいんじゃないかな?と思っています。
下記の、Select Design Preset では、下の Processing System and Programming Logic (PS+PL) with GPIO and Block RAM を選びます。
New Project Summaryが出てきたら、Finishをクリックして終了です。
回路的には、下記のような感じです。
生成されたファイルをみてみる
- zynqmpsoc.cache
- zynqmpsoc.hw
- zynqmpsoc.sim => 空
- zynqmpsoc.xpr
- zynqmpsoc.gen
- zynqmpsoc.ip_user_files
- zynqmpsoc.srcs
- zynqmpsoc.xpr
zynqmpsoc.srcs の中は、
- sim_1/imports/mpsoc_preset/mpsoc_tb.v
- sources_1/imports/hdl/mpsoc_preset_wrapper.v
- sources_1/bd/mpsoc_preset/mpsoc_preset.bd
- sources_1/bd/mpsoc_preset/mpsoc_preset.bda
- sources_1/bd/mpsoc_preset/ip
の下に、
- mpsoc_preset_mpsoc_preset_auto_ds_0/
- mpsoc_preset_axi_bram_ctrl_0_bram_0/
- mpsoc_preset_xbar_0/
- mpsoc_preset_auto_ds_1/
- mpsoc_preset_axi_gpio_0_0/
- mpsoc_preset_zynq_ultra_ps_e_0_0/
- mpsoc_preset_auto_pc_0/
- mpsoc_preset_ps8_0_axi_periph_0/
- mpsoc_preset_axi_bram_ctrl_0_0/
- mpsoc_preset_rst_ps8_0_100M_0/
のIPがあります。
SystemVerilogのコードは、下記の2つです。上の mpsoc_tb.v がテストベンチで、下の mpsoc_preset_wrapper.v は ブロック図全体の回路です。
- sim_1/imports/mpsoc_preset/mpsoc_tb.v
- sources_1/imports/hdl/mpsoc_preset_wrapper.v
テストベンチは次回見ることとし、ブロック図全体の回路の mpsoc_preset_wrapper.v は下記のようになっています。mpsoc_preset をインスタンスしているだけです。
//Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. //-------------------------------------------------------------------------------- //Tool Version: Vivado v.2022.1 (lin64) Build 3526262 Mon Apr 18 15:47:01 MDT 2022 //Date : Mon Jul 18 10:30:18 2022 //Host : LAPTOP-HGGR6RPK running 64-bit Ubuntu 20.04.3 LTS //Command : generate_target mpsoc_preset_wrapper.bd //Design : mpsoc_preset_wrapper //Purpose : IP block netlist //-------------------------------------------------------------------------------- `timescale 1 ps / 1 ps module mpsoc_preset_wrapper (led_4bits_tri_o); output [3:0]led_4bits_tri_o; wire [3:0]led_4bits_tri_o; mpsoc_preset mpsoc_preset_i (.led_4bits_tri_o(led_4bits_tri_o)); endmodule
この mpsoc_preset は、zynqmpsoc.gen/sources_1/bd/mpsoc_preset/sim/mpsoc_preset.v になります。回路図と同じ感じに各インスタンスのコードも含まれています。ただし、上記の ip の部分は含まれていません。
おわりに
Zynq UltraScale+ MPSoC の例題の回路構成と生成されたファイルをみてみました。次回は、テストベンチをみていきます。