Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

Xilinx ZynqMP SoC VIP の中を調べる(その1)

はじめに

今日からは、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 の例題の回路構成と生成されたファイルをみてみました。次回は、テストベンチをみていきます。