ひでみのアイデア帳

くだらないことなんだけど、忘れないために・・・

Club Vivadoでの質問の俺々な解釈②

Club Vivadoであった質問とかXilinx社への要望で勝手に解釈、パート②!

ブロックデザインのコピー

こういうことなんだけど、ドラッグアンドドロップでコピーできんよねぇ。

これはtcl化してコピーとなるんだけど、できればヒエラルキーごとにBD化できんかなぁ〜。

例えば、こんなふうにBDを作ってみた。

まずはVivadoのバージョンを変えるときはここをいぢってからtclを使う。 これを変更するのは基本かな・・・。

set scripts_vivado_version 2016.2

このパーツ名も気をつけるところかな?

set list_projs [get_projects -quiet]
if { $list_projs eq "" } {
   create_project project_1 myproj -part xc7z010clg400-1
}

意外にここだけ残せば、ヒエラルキーだけ残せない?

# Hierarchical cell: hier_0
proc create_hier_cell_hier_0 { parentCell nameHier } {

  variable script_folder

  if { $parentCell eq "" || $nameHier eq "" } {
     catch {common::send_msg_id "BD_TCL-102" "ERROR" create_hier_cell_hier_0() - Empty argument(s)!"}
     return
  }

  # Get object for parentCell
  set parentObj [get_bd_cells $parentCell]
  if { $parentObj == "" } {
     catch {common::send_msg_id "BD_TCL-100" "ERROR" "Unable to find parent cell <$parentCell>!"}
     return
  }

  # Make sure parentObj is hier blk
  set parentType [get_property TYPE $parentObj]
  if { $parentType ne "hier" } {
     catch {common::send_msg_id "BD_TCL-101" "ERROR" "Parent <$parentObj> has TYPE = <$parentType>. Expected to be <hier>."}
     return
  }

  # Save current instance; Restore later
  set oldCurInst [current_bd_instance .]

  # Set parent object as current
  current_bd_instance $parentObj

  # Create cell and set as current instance
  set hier_obj [create_bd_cell -type hier $nameHier]
  current_bd_instance $hier_obj

  # Create interface pins
  create_bd_intf_pin -mode Slave -vlnv xilinx.com:interface:aximm_rtl:1.0 S00_AXI

  # Create pins

  # Create instance: axi_gpio_0, and set properties
  set axi_gpio_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_gpio:2.0 axi_gpio_0 ]

  # Create instance: axi_gpio_1, and set properties
  set axi_gpio_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_gpio:2.0 axi_gpio_1 ]

  # Create instance: axi_interconnect_0, and set properties
  set axi_interconnect_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_interconnect:2.1 axi_interconnect_0 ]

  # Create interface connections
  connect_bd_intf_net -intf_net Conn1 [get_bd_intf_pins S00_AXI] [get_bd_intf_pins axi_interconnect_0/S00_AXI]
  connect_bd_intf_net -intf_net axi_interconnect_0_M00_AXI [get_bd_intf_pins axi_gpio_0/S_AXI] [get_bd_intf_pins axi_interconnect_0/M00_AXI]
  connect_bd_intf_net -intf_net axi_interconnect_0_M01_AXI [get_bd_intf_pins axi_gpio_1/S_AXI] [get_bd_intf_pins axi_interconnect_0/M01_AXI]

  # Restore current instance
  current_bd_instance $oldCurInst
}

最後にcreate_root_design ""をコメントアウトか削除しちゃって、上記のヒエラルキーを作成するように変えてしまえば、ヒエラルキーだけを引き継ぐことができるなぁ。

#create_root_design ""
create_hier_cell_hier_0 [current_bd_instance .] hier_0

初めからヒエラルキーだけ残したtcl作ればいいって、言われそうだけど・・・