同步了 fpga_flash, vivado-prj-create 两个skill
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,609 @@
|
||||
---
|
||||
name: vivado-prj-create
|
||||
description: DIRECT EXECUTION - Auto-create Vivado FPGA projects. Triggers: "create Vivado project", "Vivado工程", "FPGA project", "Xilinx project", "setup Vivado". When triggered, IMMEDIATELY execute Step 0 without listing skills or asking for confirmation.
|
||||
---
|
||||
|
||||
# Vivado Project TCL Generator
|
||||
|
||||
## AI ASSISTANT BEHAVIOR RULES (CRITICAL)
|
||||
|
||||
**When this skill is triggered, you MUST:**
|
||||
1. **DO NOT** list available skills
|
||||
2. **DO NOT** ask user "which skill do you want?"
|
||||
3. **DO NOT** ask for confirmation before proceeding
|
||||
4. **IMMEDIATELY** start with **Step 0: Check Vivado installation**
|
||||
5. Follow the complete workflow without interruption
|
||||
|
||||
**Trigger Keywords:** "创建Vivado工程", "create Vivado project", "FPGA工程", "setup FPGA project", "Xilinx project", "Vivado TCL"
|
||||
|
||||
This skill helps you generate TCL scripts for automatically creating Xilinx Vivado FPGA projects on Windows. The generated TCL script can be sourced directly in Vivado to create a complete project with proper device configuration.
|
||||
|
||||
## How it works
|
||||
|
||||
1. **Check Vivado installation (Step 0)**
|
||||
2. **Collect required information via interactive questions**
|
||||
3. Generate a complete TCL script
|
||||
4. Save the script to a file
|
||||
5. Provide instructions for running it
|
||||
|
||||
## IMPORTANT: Vivado Installation Check (Step 0 - REQUIRED)
|
||||
|
||||
**Before asking any questions, you MUST first check if Vivado is installed at the default location.**
|
||||
|
||||
Use the Bash tool to check if the default Vivado installation path exists:
|
||||
|
||||
```bash
|
||||
test -d "d:/Xilinx/Vivado/2018.1/bin" && echo "EXISTS" || echo "NOT_FOUND"
|
||||
```
|
||||
|
||||
- If the result is `EXISTS`: Proceed to Step 1 (interactive questions)
|
||||
- If the result is `NOT_FOUND`: **Stop and report error to the user:**
|
||||
|
||||
```
|
||||
错误 / Error: Vivado 没有正确安装!
|
||||
|
||||
请确认 Vivado 已安装在默认路径: d:\Xilinx\Vivado\2018.1\bin\
|
||||
|
||||
Please ensure Vivado is installed at: d:\Xilinx\Vivado\2018.1\bin\
|
||||
```
|
||||
|
||||
## IMPORTANT: Interactive Question Requirements
|
||||
|
||||
**After Vivado installation is confirmed, use the `AskUserQuestion` tool to collect the following required information.**
|
||||
|
||||
### Step 1: Ask for FPGA Device/Part Number (REQUIRED)
|
||||
|
||||
Use `AskUserQuestion` to let the user select their target FPGA device. Only these four devices are supported:
|
||||
|
||||
```javascript
|
||||
AskUserQuestion({
|
||||
questions: [{
|
||||
question: "请选择你的FPGA器件型号 / Select your target FPGA device:",
|
||||
header: "FPGA Device",
|
||||
options: [
|
||||
{ label: "xc7z100ffg900-2", description: "Zynq-7000, 用于3.0激励器 / 3.0 Exciter" },
|
||||
{ label: "xc7z035ffg676-2", description: "Zynq-7000, 用于ipots" },
|
||||
{ label: "xc7a200tfbg676-2", description: "Artix-7, EMV7.1 / SMOD 激励器" },
|
||||
{ label: "xc7z020cfg400-2", description: "Zynq-7000, 用于RFSwitch" }
|
||||
],
|
||||
multiSelect: false
|
||||
}]
|
||||
})
|
||||
```
|
||||
|
||||
**Note:** If you need other FPGA models, you must modify this skill file to add them.
|
||||
|
||||
### Step 2: Ask for Project Name
|
||||
|
||||
Ask the user for the project name. This can be done with a simple text prompt (no AskUserQuestion needed unless you want to provide preset options):
|
||||
|
||||
**Example prompts:**
|
||||
- "请输入项目名称 / What would you like to name your project?"
|
||||
- "项目名称 / Enter the project name"
|
||||
|
||||
## Zynq PS Configuration
|
||||
|
||||
**IMPORTANT**: Determine if the selected device is a Zynq series (device starts with `xc7z`).
|
||||
|
||||
- **Zynq devices** (xc7z100ffg900-2, xc7z035ffg676-2, xc7z020cfg400-2): **MUST** configure the Processing System (PS)
|
||||
- **Artix-7 devices** (xc7a200tfbg676-2): No PS configuration needed
|
||||
|
||||
### Zynq Device PS Configurations
|
||||
|
||||
For Zynq devices, use the corresponding PS configuration from the reference TCL files in this skill directory:
|
||||
|
||||
| Device | Reference File | DDR Freq | FPGA0 Freq |
|
||||
|--------|---------------|----------|------------|
|
||||
| xc7z100ffg900-2 | emv9_atsc3_bd.tcl | 533.33 MHz | 250 MHz |
|
||||
| xc7z035ffg676-2 | ipots_bd.tcl | 266.67 MHz | 50 MHz |
|
||||
| xc7z020cfg400-2 | RF_switch_bd.tcl | 266.67 MHz | 50 MHz |
|
||||
|
||||
### PS Configuration Template for Zynq Devices
|
||||
|
||||
For Zynq devices, add the following Block Design creation with PS configuration to the TCL script:
|
||||
|
||||
```tcl
|
||||
# =============================================================================
|
||||
# Create Block Design with Zynq PS Configuration
|
||||
# =============================================================================
|
||||
|
||||
# Create Block Design
|
||||
set design_name "design_1"
|
||||
create_bd_design $design_name
|
||||
|
||||
# Create Processing System instance
|
||||
set processing_system7_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:processing_system7:5.5 processing_system7_0 ]
|
||||
|
||||
# Apply PS configuration based on device type
|
||||
# {{PS_CONFIG_PROPERTIES}}
|
||||
|
||||
# Create interface ports
|
||||
set DDR [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:ddrx_rtl:1.0 DDR ]
|
||||
set FIXED_IO [ create_bd_intf_port -mode Master -vlnv xilinx.com:display_processing_system7:fixedio_rtl:1.0 FIXED_IO ]
|
||||
|
||||
# Connect interfaces
|
||||
connect_bd_intf_net [get_bd_intf_pins processing_system7_0/DDR] [get_bd_intf_ports DDR]
|
||||
connect_bd_intf_net [get_bd_intf_pins processing_system7_0/FIXED_IO] [get_bd_intf_ports FIXED_IO]
|
||||
|
||||
# Create and connect reset
|
||||
set rst_ps7_0_50M [ create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 rst_ps7_0_50M ]
|
||||
connect_bd_net [get_bd_pins processing_system7_0/FCLK_CLK0] [get_bd_pins rst_ps7_0_50M/slowest_sync_clk]
|
||||
connect_bd_net [get_bd_pins processing_system7_0/FCLK_RESET0_N] [get_bd_pins rst_ps7_0_50M/ext_reset_in]
|
||||
|
||||
# Save Block Design
|
||||
save_bd_design
|
||||
|
||||
# Make Block Design available
|
||||
make_wrapper -files [get_files ${design_name}.bd] -top
|
||||
add_files -norecurse {{PROJECT_NAME}}/{{PROJECT_NAME}}.srcs/sources_1/bd/${design_name}/hdl/${design_name}_wrapper.v
|
||||
update_compile_order -fileset sources_1
|
||||
```
|
||||
|
||||
### PS Configuration Properties by Device
|
||||
|
||||
Replace `{{PS_CONFIG_PROPERTIES}}` with the appropriate device configuration:
|
||||
|
||||
**For xc7z100ffg900-2 (3.0 Exciter):**
|
||||
```tcl
|
||||
set_property -dict [list \
|
||||
CONFIG.PCW_ACT_FPGA0_PERIPHERAL_FREQMHZ {250} \
|
||||
CONFIG.PCW_FPGA0_PERIPHERAL_FREQMHZ {250} \
|
||||
CONFIG.PCW_FPGA_FCLK0_ENABLE {1} \
|
||||
CONFIG.PCW_UIPARAM_DDR_FREQ_MHZ {533.333333} \
|
||||
CONFIG.PCW_UIPARAM_DDR_PARTNO {MT41K256M16 RE-15E} \
|
||||
CONFIG.PCW_UIPARAM_DDR_DEVICE_CAPACITY {4096 MBits} \
|
||||
CONFIG.PCW_UIPARAM_DDR_SPEED_BIN {DDR3_1066F} \
|
||||
CONFIG.PCW_USE_M_AXI_GP0 {1} \
|
||||
CONFIG.PCW_EN_RST0_PORT {1} \
|
||||
CONFIG.PCW_EN_CLK0_PORT {1} \
|
||||
] $processing_system7_0
|
||||
```
|
||||
|
||||
**For xc7z035ffg676-2 (ipots):**
|
||||
```tcl
|
||||
set_property -dict [list \
|
||||
CONFIG.PCW_ACT_APU_PERIPHERAL_FREQMHZ {666.666687} \
|
||||
CONFIG.PCW_ACT_CAN_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_DCI_PERIPHERAL_FREQMHZ {10.158730} \
|
||||
CONFIG.PCW_ACT_ENET0_PERIPHERAL_FREQMHZ {125.000000} \
|
||||
CONFIG.PCW_ACT_ENET1_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_FPGA0_PERIPHERAL_FREQMHZ {50.000000} \
|
||||
CONFIG.PCW_ACT_FPGA1_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_FPGA2_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_FPGA3_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_PCAP_PERIPHERAL_FREQMHZ {200.000000} \
|
||||
CONFIG.PCW_ACT_QSPI_PERIPHERAL_FREQMHZ {200.000000} \
|
||||
CONFIG.PCW_ACT_SDIO_PERIPHERAL_FREQMHZ {100.000000} \
|
||||
CONFIG.PCW_ACT_SMC_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_SPI_PERIPHERAL_FREQMHZ {166.666672} \
|
||||
CONFIG.PCW_ACT_TPIU_PERIPHERAL_FREQMHZ {200.000000} \
|
||||
CONFIG.PCW_ACT_TTC0_CLK0_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC0_CLK1_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC0_CLK2_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC1_CLK0_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC1_CLK1_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC1_CLK2_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_UART_PERIPHERAL_FREQMHZ {100.000000} \
|
||||
CONFIG.PCW_ACT_WDT_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ARMPLL_CTRL_FBDIV {40} \
|
||||
CONFIG.PCW_CAN_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_CAN_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_CLK0_FREQ {50000000} \
|
||||
CONFIG.PCW_CLK1_FREQ {10000000} \
|
||||
CONFIG.PCW_CLK2_FREQ {10000000} \
|
||||
CONFIG.PCW_CLK3_FREQ {10000000} \
|
||||
CONFIG.PCW_CPU_CPU_PLL_FREQMHZ {1333.333} \
|
||||
CONFIG.PCW_CPU_PERIPHERAL_DIVISOR0 {2} \
|
||||
CONFIG.PCW_DCI_PERIPHERAL_DIVISOR0 {15} \
|
||||
CONFIG.PCW_DCI_PERIPHERAL_DIVISOR1 {7} \
|
||||
CONFIG.PCW_DDRPLL_CTRL_FBDIV {32} \
|
||||
CONFIG.PCW_DDR_DDR_PLL_FREQMHZ {1066.667} \
|
||||
CONFIG.PCW_DDR_PERIPHERAL_DIVISOR0 {4} \
|
||||
CONFIG.PCW_DDR_RAM_HIGHADDR {0x1FFFFFFF} \
|
||||
CONFIG.PCW_ENET0_ENET0_IO {MIO 16 .. 27} \
|
||||
CONFIG.PCW_ENET0_GRP_MDIO_ENABLE {1} \
|
||||
CONFIG.PCW_ENET0_GRP_MDIO_IO {MIO 52 .. 53} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_CLKSRC {IO PLL} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_DIVISOR0 {8} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_FREQMHZ {1000 Mbps} \
|
||||
CONFIG.PCW_ENET0_RESET_ENABLE {0} \
|
||||
CONFIG.PCW_ENET1_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_ENET1_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_ENET1_RESET_ENABLE {0} \
|
||||
CONFIG.PCW_ENET_RESET_ENABLE {0} \
|
||||
CONFIG.PCW_EN_CLK0_PORT {1} \
|
||||
CONFIG.PCW_EN_EMIO_CD_SDIO1 {0} \
|
||||
CONFIG.PCW_EN_EMIO_GPIO {1} \
|
||||
CONFIG.PCW_EN_EMIO_SDIO1 {0} \
|
||||
CONFIG.PCW_EN_EMIO_SPI0 {1} \
|
||||
CONFIG.PCW_EN_EMIO_SPI1 {1} \
|
||||
CONFIG.PCW_EN_EMIO_UART0 {0} \
|
||||
CONFIG.PCW_EN_EMIO_WP_SDIO1 {0} \
|
||||
CONFIG.PCW_EN_ENET0 {1} \
|
||||
CONFIG.PCW_EN_QSPI {1} \
|
||||
CONFIG.PCW_EN_RST0_PORT {1} \
|
||||
CONFIG.PCW_EN_SDIO0 {0} \
|
||||
CONFIG.PCW_EN_SDIO1 {1} \
|
||||
CONFIG.PCW_EN_SPI0 {1} \
|
||||
CONFIG.PCW_EN_SPI1 {1} \
|
||||
CONFIG.PCW_EN_UART0 {1} \
|
||||
CONFIG.PCW_EN_UART1 {1} \
|
||||
CONFIG.PCW_FCLK0_PERIPHERAL_DIVISOR0 {5} \
|
||||
CONFIG.PCW_FCLK0_PERIPHERAL_DIVISOR1 {4} \
|
||||
CONFIG.PCW_FCLK1_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_FCLK1_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_FCLK2_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_FCLK2_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_FCLK3_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_FCLK3_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_FCLK_CLK0_BUF {TRUE} \
|
||||
CONFIG.PCW_FPGA0_PERIPHERAL_FREQMHZ {50} \
|
||||
CONFIG.PCW_FPGA_FCLK0_ENABLE {1} \
|
||||
CONFIG.PCW_FPGA_FCLK1_ENABLE {0} \
|
||||
CONFIG.PCW_FPGA_FCLK2_ENABLE {0} \
|
||||
CONFIG.PCW_FPGA_FCLK3_ENABLE {0} \
|
||||
CONFIG.PCW_GPIO_EMIO_GPIO_ENABLE {1} \
|
||||
CONFIG.PCW_GPIO_EMIO_GPIO_IO {64} \
|
||||
CONFIG.PCW_GPIO_EMIO_GPIO_WIDTH {64} \
|
||||
CONFIG.PCW_I2C_PERIPHERAL_FREQMHZ {25} \
|
||||
CONFIG.PCW_IOPLL_CTRL_FBDIV {30} \
|
||||
CONFIG.PCW_IO_IO_PLL_FREQMHZ {1000.000} \
|
||||
CONFIG.PCW_IRQ_F2P_INTR {0} \
|
||||
CONFIG.PCW_MIO_14_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_14_IOTYPE {<Select>} \
|
||||
CONFIG.PCW_MIO_14_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_14_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_15_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_15_IOTYPE {<Select>} \
|
||||
CONFIG.PCW_MIO_15_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_15_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_16_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_16_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_16_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_16_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_17_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_17_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_17_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_17_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_18_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_18_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_18_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_18_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_19_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_19_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_19_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_19_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_1_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_1_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_1_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_1_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_20_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_20_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_20_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_20_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_21_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_21_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_21_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_21_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_22_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_22_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_22_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_22_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_23_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_23_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_23_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_23_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_24_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_24_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_24_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_24_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_25_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_25_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_25_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_25_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_26_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_26_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_26_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_26_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_27_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_27_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_27_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_27_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_2_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_2_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_2_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_2_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_3_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_3_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_3_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_3_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_40_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_40_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_40_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_40_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_41_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_41_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_41_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_41_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_42_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_42_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_42_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_42_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_43_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_43_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_43_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_43_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_44_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_44_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_44_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_44_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_45_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_45_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_45_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_45_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_46_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_46_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_46_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_46_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_47_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_47_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_47_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_47_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_48_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_48_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_48_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_48_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_49_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_49_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_49_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_49_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_4_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_4_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_4_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_4_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_50_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_50_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_50_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_50_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_51_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_51_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_51_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_51_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_52_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_52_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_52_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_52_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_53_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_53_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_53_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_53_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_5_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_5_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_5_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_5_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_6_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_6_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_6_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_6_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_TREE_PERIPHERALS {unassigned#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#unassigned#Quad SPI Flash#Quad SPI Flash#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#UART 0#UART 0#UART 1#UART 1#SD 1#SD 1#SD 1#SD 1#SD 1#SD 1#Enet 0#Enet 0} \
|
||||
CONFIG.PCW_MIO_TREE_SIGNALS {unassigned#qspi0_ss_b#qspi0_io[0]#qspi0_io[1]#unassigned#qspi0_io[3]/HOLD_B#qspi0_sclk#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#tx_clk#txd[0]#txd[1]#txd[2]#txd[3]#tx_ctl#rx_clk#rxd[0]#rxd[1]#rxd[2]#rxd[3]#rx_ctl#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#rx#tx#tx#rx#data[0]#cmd#clk#data[1]#data[2]#data[3]#mdc#mdio} \
|
||||
CONFIG.PCW_NAND_GRP_D8_ENABLE {0} \
|
||||
CONFIG.PCW_NAND_PERIPHERAL_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_A25_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_CS0_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_CS1_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_SRAM_CS0_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_SRAM_CS1_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_SRAM_INT_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_PERIPHERAL_ENABLE {0} \
|
||||
CONFIG.PCW_PCAP_PERIPHERAL_DIVISOR0 {5} \
|
||||
CONFIG.PCW_PJTAG_PERIPHERAL_ENABLE {0} \
|
||||
CONFIG.PCW_PRESET_BANK0_VOLTAGE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_PRESET_BANK1_VOLTAGE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_QSPI_GRP_FBCLK_ENABLE {0} \
|
||||
CONFIG.PCW_QSPI_GRP_IO1_ENABLE {0} \
|
||||
CONFIG.PCW_QSPI_GRP_SINGLE_SS_ENABLE {1} \
|
||||
CONFIG.PCW_QSPI_GRP_SINGLE_SS_IO {MIO 1 .. 6} \
|
||||
CONFIG.PCW_QSPI_GRP_SS1_ENABLE {0} \
|
||||
CONFIG.PCW_QSPI_PERIPHERAL_DIVISOR0 {5} \
|
||||
CONFIG.PCW_QSPI_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_QSPI_PERIPHERAL_FREQMHZ {200} \
|
||||
CONFIG.PCW_QSPI_QSPI_IO {MIO 1 .. 6} \
|
||||
CONFIG.PCW_SD0_GRP_CD_ENABLE {0} \
|
||||
CONFIG.PCW_SD0_GRP_POW_ENABLE {0} \
|
||||
CONFIG.PCW_SD0_GRP_WP_ENABLE {0} \
|
||||
CONFIG.PCW_SD0_PERIPHERAL_ENABLE {0} \
|
||||
CONFIG.PCW_SD0_SD0_IO {<Select>} \
|
||||
CONFIG.PCW_SD1_GRP_CD_ENABLE {0} \
|
||||
CONFIG.PCW_SD1_GRP_POW_ENABLE {0} \
|
||||
CONFIG.PCW_SD1_GRP_WP_ENABLE {0} \
|
||||
CONFIG.PCW_SD1_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_SD1_SD1_IO {MIO 46 .. 51} \
|
||||
CONFIG.PCW_SDIO_PERIPHERAL_DIVISOR0 {10} \
|
||||
CONFIG.PCW_SDIO_PERIPHERAL_FREQMHZ {100} \
|
||||
CONFIG.PCW_SDIO_PERIPHERAL_VALID {1} \
|
||||
CONFIG.PCW_SINGLE_QSPI_DATA_MODE {x2} \
|
||||
CONFIG.PCW_SMC_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_SPI0_GRP_SS0_ENABLE {1} \
|
||||
CONFIG.PCW_SPI0_GRP_SS0_IO {EMIO} \
|
||||
CONFIG.PCW_SPI0_GRP_SS1_ENABLE {1} \
|
||||
CONFIG.PCW_SPI0_GRP_SS1_IO {EMIO} \
|
||||
CONFIG.PCW_SPI0_GRP_SS2_ENABLE {1} \
|
||||
CONFIG.PCW_SPI0_GRP_SS2_IO {EMIO} \
|
||||
CONFIG.PCW_SPI0_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_SPI0_SPI0_IO {EMIO} \
|
||||
CONFIG.PCW_SPI1_GRP_SS0_ENABLE {1} \
|
||||
CONFIG.PCW_SPI1_GRP_SS0_IO {EMIO} \
|
||||
CONFIG.PCW_SPI1_GRP_SS1_ENABLE {1} \
|
||||
CONFIG.PCW_SPI1_GRP_SS1_IO {EMIO} \
|
||||
CONFIG.PCW_SPI1_GRP_SS2_ENABLE {1} \
|
||||
CONFIG.PCW_SPI1_GRP_SS2_IO {EMIO} \
|
||||
CONFIG.PCW_SPI1_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_SPI1_SPI1_IO {EMIO} \
|
||||
CONFIG.PCW_SPI_PERIPHERAL_DIVISOR0 {6} \
|
||||
CONFIG.PCW_SPI_PERIPHERAL_FREQMHZ {166.666666} \
|
||||
CONFIG.PCW_SPI_PERIPHERAL_VALID {1} \
|
||||
CONFIG.PCW_TPIU_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_UART0_GRP_FULL_ENABLE {0} \
|
||||
CONFIG.PCW_UART0_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_UART0_UART0_IO {MIO 42 .. 43} \
|
||||
CONFIG.PCW_UART1_GRP_FULL_ENABLE {0} \
|
||||
CONFIG.PCW_UART1_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_UART1_UART1_IO {MIO 44 .. 45} \
|
||||
CONFIG.PCW_UART_PERIPHERAL_DIVISOR0 {10} \
|
||||
CONFIG.PCW_UART_PERIPHERAL_FREQMHZ {100} \
|
||||
CONFIG.PCW_UART_PERIPHERAL_VALID {1} \
|
||||
CONFIG.PCW_UIPARAM_ACT_DDR_FREQ_MHZ {266.666687} \
|
||||
CONFIG.PCW_UIPARAM_DDR_BANK_ADDR_COUNT {3} \
|
||||
CONFIG.PCW_UIPARAM_DDR_BUS_WIDTH {16 Bit} \
|
||||
CONFIG.PCW_UIPARAM_DDR_CL {7} \
|
||||
CONFIG.PCW_UIPARAM_DDR_COL_ADDR_COUNT {10} \
|
||||
CONFIG.PCW_UIPARAM_DDR_CWL {6} \
|
||||
CONFIG.PCW_UIPARAM_DDR_DEVICE_CAPACITY {4096 MBits} \
|
||||
CONFIG.PCW_UIPARAM_DDR_DRAM_WIDTH {16 Bits} \
|
||||
CONFIG.PCW_UIPARAM_DDR_ECC {Disabled} \
|
||||
CONFIG.PCW_UIPARAM_DDR_FREQ_MHZ {266.6666666} \
|
||||
CONFIG.PCW_UIPARAM_DDR_PARTNO {MT41K256M16 RE-15E} \
|
||||
CONFIG.PCW_UIPARAM_DDR_ROW_ADDR_COUNT {15} \
|
||||
CONFIG.PCW_UIPARAM_DDR_SPEED_BIN {DDR3_1066F} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_FAW {45.0} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_RAS_MIN {36.0} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_RC {49.5} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_RCD {7} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_RP {7} \
|
||||
CONFIG.PCW_UIPARAM_DDR_USE_INTERNAL_VREF {1} \
|
||||
CONFIG.PCW_USE_FABRIC_INTERRUPT {0} \
|
||||
CONFIG.PCW_USE_M_AXI_GP0 {1} \
|
||||
CONFIG.PCW_USE_M_AXI_GP1 {0} \
|
||||
CONFIG.PCW_USE_S_AXI_HP0 {0} \
|
||||
] $processing_system7_0
|
||||
```
|
||||
|
||||
**For xc7z020cfg400-2 (RFSwitch):**
|
||||
|
||||
## TCL Script Template
|
||||
|
||||
After collecting all required information via `AskUserQuestion`, generate a TCL script using this template structure:
|
||||
|
||||
```tcl
|
||||
# =============================================================================
|
||||
# Vivado Project Auto-Generation Script
|
||||
# Project: {{PROJECT_NAME}}
|
||||
# Generated: {{TIMESTAMP}}
|
||||
# =============================================================================
|
||||
|
||||
# Set Vivado installation path
|
||||
set vivado_path "{{VIVADO_PATH}}"
|
||||
|
||||
# Create project
|
||||
create_project {{PROJECT_NAME}} ./{{PROJECT_NAME}} -part {{DEVICE_PART}} -force
|
||||
|
||||
# Set project parameters
|
||||
set_property target_language Verilog [current_project]
|
||||
|
||||
# Check if device is Zynq series (starts with xc7z)
|
||||
set device_part "{{DEVICE_PART}}"
|
||||
set is_zynq [regexp {^xc7z} $device_part]
|
||||
|
||||
# Create Block Design for Zynq devices
|
||||
if {$is_zynq} {
|
||||
# Add PS configuration based on device type
|
||||
# See "Zynq PS Configuration" section above for device-specific configs
|
||||
{{ZYNQ_PS_CONFIG_BLOCK}}
|
||||
}
|
||||
|
||||
# Create default constraint file
|
||||
set constraint_file "{{PROJECT_NAME}}_constraints.xdc"
|
||||
set constr_file_obj [open ./{{PROJECT_NAME}}/$constraint_file w]
|
||||
puts $constr_file_obj "# Timing constraints for {{PROJECT_NAME}}"
|
||||
puts $constr_file_obj "# Add your constraints here"
|
||||
close $constr_file_obj
|
||||
|
||||
add_files -fileset constrs_1 -norecurse ./{{PROJECT_NAME}}/$constraint_file
|
||||
|
||||
# Create source directories
|
||||
file mkdir ./{{PROJECT_NAME}}/src
|
||||
file mkdir ./{{PROJECT_NAME}}/sim
|
||||
file mkdir ./{{PROJECT_NAME}}/synth
|
||||
|
||||
# Print project info
|
||||
puts "=========================================="
|
||||
puts "Project '{{PROJECT_NAME}}' created successfully!"
|
||||
puts "Device: {{DEVICE_PART}}"
|
||||
if {$is_zynq} {
|
||||
puts "PS Configured: Yes"
|
||||
} else {
|
||||
puts "PS Configured: No (Pure FPGA device)"
|
||||
}
|
||||
puts "=========================================="
|
||||
|
||||
# Save project
|
||||
save_project_as {{PROJECT_NAME}} ./{{PROJECT_NAME}}
|
||||
```
|
||||
|
||||
## Variable Replacement
|
||||
|
||||
Replace the template variables with user-provided values:
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `{{VIVADO_PATH}}` | Vivado installation path (always: `D:/Xilinx/Vivado/2018.1`) |
|
||||
| `{{PROJECT_NAME}}` | Project name |
|
||||
| `{{DEVICE_PART}}` | FPGA part number |
|
||||
| `{{TIMESTAMP}}` | Current date/time |
|
||||
| `{{ZYNQ_PS_CONFIG_BLOCK}}` | For Zynq devices only: Block Design PS configuration (see above) |
|
||||
|
||||
## Output File
|
||||
|
||||
Save the generated TCL script as:
|
||||
- Default: `create_vivado_project.tcl` in the current working directory
|
||||
- Or use the project name: `create_{PROJECT_NAME}_project.tcl`
|
||||
|
||||
## Usage Instructions
|
||||
|
||||
After generating the script, provide the user with clear instructions:
|
||||
|
||||
```
|
||||
To run this script in Vivado:
|
||||
|
||||
1. Open Vivado:
|
||||
- Start Menu → Xilinx Vivado [version]
|
||||
|
||||
2. In the Vivado Tcl Console, run:
|
||||
source /path/to/create_vivado_project.tcl
|
||||
|
||||
3. Or from command line:
|
||||
cd /path/to/script/directory
|
||||
vivado -mode tcl -source create_vivado_project.tcl
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Validate the part number**: The TCL script uses the part number directly. Ensure the user enters a valid Xilinx part number format.
|
||||
|
||||
2. **Path handling**: Windows paths in TCL use forward slashes `/` even though Windows uses backslashes `\`. Convert backslashes to forward slashes if the user provides them.
|
||||
|
||||
3. **Project location**: The script creates the project in a subdirectory named after the project. This keeps the workspace organized.
|
||||
|
||||
4. **Force flag**: The `-force` flag in `create_project` overwrites existing projects. Warn users if they already have a project with the same name.
|
||||
|
||||
## Error Handling
|
||||
|
||||
If the script execution fails, common causes include:
|
||||
|
||||
1. **Invalid part number** - Check the part number format matches Xilinx naming convention
|
||||
2. **Path issues** - Ensure Vivado path uses forward slashes
|
||||
3. **Permissions** - Ensure write permissions in the target directory
|
||||
4. **Vivado version** - Some features may vary between Vivado versions
|
||||
|
||||
## Optional Extensions
|
||||
|
||||
After the basic project is created, you can offer to help with:
|
||||
|
||||
- Adding IP integrator blocks
|
||||
- Setting up simulation waveforms
|
||||
- Creating custom constraints
|
||||
- Adding existing source files
|
||||
- Configuring synthesis and implementation settings
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"skill_name": "vivado-project",
|
||||
"evals": [
|
||||
{
|
||||
"id": 1,
|
||||
"prompt": "I need to create a new Vivado project for my Artix-7 FPGA. Can you help me generate a TCL script? My Vivado is installed at C:/Xilinx/Vivado/2023.2 and I'm using xc7a35tcpg236-1 device with Verilog.",
|
||||
"expected_output": "The skill MUST use AskUserQuestion to prompt for Vivado installation path first, then ask for FPGA device selection. After collecting all required info, generate a TCL script that creates a Vivado project with the specified device (xc7a35tcpg236-1), Vivado path (C:/Xilinx/Vivado/2023.2), and Verilog as the target language. The script should be saved to a .tcl file.",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"prompt": "帮我创建一个Vivado项目的TCL脚本,使用Zynq-7000系列FPGA,器件型号是xc7z020clg484-1,项目名称叫fpga_design,使用VHDL语言。Vivado安装在D:/Xilinx/Vivado/2024.1",
|
||||
"expected_output": "The skill MUST use AskUserQuestion to prompt for Vivado installation path and FPGA device selection before proceeding. Then generate a TCL script for creating a Vivado project named 'fpga_design' with device xc7z020clg484-1, VHDL as target language, and Vivado path D:/Xilinx/Vivado/2024.1.",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"prompt": "I want to set up a Xilinx FPGA project automation. I'm targeting a Kintex-7 device (xc7k70tfbg484-1) and will write in Verilog. Where should I install Vivado and what TCL script do I need?",
|
||||
"expected_output": "The skill MUST use AskUserQuestion to prompt for Vivado installation path first, then ask for FPGA device selection (with options including xc7k70tfbg484-1), ask for project name, and target language. Then generate a TCL script for the specified device and language.",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"prompt": "创建一个Vivado工程",
|
||||
"expected_output": "The skill MUST use AskUserQuestion to prompt for: 1) Vivado installation path (with common options like C:/Xilinx/Vivado/2023.2, C:/Xilinx/Vivado/2024.1, etc.), 2) FPGA device selection (with comprehensive list of common devices), 3) Project name, 4) Target language (Verilog/VHDL). After collecting all info, generate and save a TCL script.",
|
||||
"files": []
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"prompt": "I need help with a Vivado TCL script for my FPGA project",
|
||||
"expected_output": "The skill MUST use AskUserQuestion to prompt for: 1) Vivado installation path (with common options), 2) FPGA device selection, 3) Project name, 4) Target language. Then generate a complete TCL script for creating the Vivado project.",
|
||||
"files": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,596 @@
|
||||
|
||||
################################################################
|
||||
# This is a generated script based on design: design_1
|
||||
#
|
||||
# Though there are limitations about the generated script,
|
||||
# the main purpose of this utility is to make learning
|
||||
# IP Integrator Tcl commands easier.
|
||||
################################################################
|
||||
|
||||
namespace eval _tcl {
|
||||
proc get_script_folder {} {
|
||||
set script_path [file normalize [info script]]
|
||||
set script_folder [file dirname $script_path]
|
||||
return $script_folder
|
||||
}
|
||||
}
|
||||
variable script_folder
|
||||
set script_folder [_tcl::get_script_folder]
|
||||
|
||||
################################################################
|
||||
# Check if script is running in correct Vivado version.
|
||||
################################################################
|
||||
set scripts_vivado_version 2018.1
|
||||
set current_vivado_version [version -short]
|
||||
|
||||
if { [string first $scripts_vivado_version $current_vivado_version] == -1 } {
|
||||
puts ""
|
||||
catch {common::send_msg_id "BD_TCL-109" "ERROR" "This script was generated using Vivado <$scripts_vivado_version> and is being run in <$current_vivado_version> of Vivado. Please run the script in Vivado <$scripts_vivado_version> then open the design in Vivado <$current_vivado_version>. Upgrade the design by running \"Tools => Report => Report IP Status...\", then run write_bd_tcl to create an updated script."}
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
################################################################
|
||||
# START
|
||||
################################################################
|
||||
|
||||
# To test this script, run the following commands from Vivado Tcl console:
|
||||
# source design_1_script.tcl
|
||||
|
||||
# If there is no project opened, this script will create a
|
||||
# project, but make sure you do not have an existing project
|
||||
# <./myproj/project_1.xpr> in the current working folder.
|
||||
|
||||
set list_projs [get_projects -quiet]
|
||||
if { $list_projs eq "" } {
|
||||
create_project project_1 myproj -part xc7z035ffg676-2
|
||||
}
|
||||
|
||||
|
||||
# CHANGE DESIGN NAME HERE
|
||||
variable design_name
|
||||
set design_name design_1
|
||||
|
||||
# If you do not already have an existing IP Integrator design open,
|
||||
# you can create a design using the following command:
|
||||
# create_bd_design $design_name
|
||||
|
||||
# Creating design if needed
|
||||
set errMsg ""
|
||||
set nRet 0
|
||||
|
||||
set cur_design [current_bd_design -quiet]
|
||||
set list_cells [get_bd_cells -quiet]
|
||||
|
||||
if { ${design_name} eq "" } {
|
||||
# USE CASES:
|
||||
# 1) Design_name not set
|
||||
|
||||
set errMsg "Please set the variable <design_name> to a non-empty value."
|
||||
set nRet 1
|
||||
|
||||
} elseif { ${cur_design} ne "" && ${list_cells} eq "" } {
|
||||
# USE CASES:
|
||||
# 2): Current design opened AND is empty AND names same.
|
||||
# 3): Current design opened AND is empty AND names diff; design_name NOT in project.
|
||||
# 4): Current design opened AND is empty AND names diff; design_name exists in project.
|
||||
|
||||
if { $cur_design ne $design_name } {
|
||||
common::send_msg_id "BD_TCL-001" "INFO" "Changing value of <design_name> from <$design_name> to <$cur_design> since current design is empty."
|
||||
set design_name [get_property NAME $cur_design]
|
||||
}
|
||||
common::send_msg_id "BD_TCL-002" "INFO" "Constructing design in IPI design <$cur_design>..."
|
||||
|
||||
} elseif { ${cur_design} ne "" && $list_cells ne "" && $cur_design eq $design_name } {
|
||||
# USE CASES:
|
||||
# 5) Current design opened AND has components AND same names.
|
||||
|
||||
set errMsg "Design <$design_name> already exists in your project, please set the variable <design_name> to another value."
|
||||
set nRet 1
|
||||
} elseif { [get_files -quiet ${design_name}.bd] ne "" } {
|
||||
# USE CASES:
|
||||
# 6) Current opened design, has components, but diff names, design_name exists in project.
|
||||
# 7) No opened design, design_name exists in project.
|
||||
|
||||
set errMsg "Design <$design_name> already exists in your project, please set the variable <design_name> to another value."
|
||||
set nRet 2
|
||||
|
||||
} else {
|
||||
# USE CASES:
|
||||
# 8) No opened design, design_name not in project.
|
||||
# 9) Current opened design, has components, but diff names, design_name not in project.
|
||||
|
||||
common::send_msg_id "BD_TCL-003" "INFO" "Currently there is no design <$design_name> in project, so creating one..."
|
||||
|
||||
create_bd_design $design_name
|
||||
|
||||
common::send_msg_id "BD_TCL-004" "INFO" "Making design <$design_name> as current_bd_design."
|
||||
current_bd_design $design_name
|
||||
|
||||
}
|
||||
|
||||
common::send_msg_id "BD_TCL-005" "INFO" "Currently the variable <design_name> is equal to \"$design_name\"."
|
||||
|
||||
if { $nRet != 0 } {
|
||||
catch {common::send_msg_id "BD_TCL-114" "ERROR" $errMsg}
|
||||
return $nRet
|
||||
}
|
||||
|
||||
set bCheckIPsPassed 1
|
||||
##################################################################
|
||||
# CHECK IPs
|
||||
##################################################################
|
||||
set bCheckIPs 1
|
||||
if { $bCheckIPs == 1 } {
|
||||
set list_check_ips "\
|
||||
xilinx.com:ip:axi_bram_ctrl:4.0\
|
||||
xilinx.com:ip:smartconnect:1.0\
|
||||
xilinx.com:ip:processing_system7:5.5\
|
||||
xilinx.com:ip:proc_sys_reset:5.0\
|
||||
"
|
||||
|
||||
set list_ips_missing ""
|
||||
common::send_msg_id "BD_TCL-006" "INFO" "Checking if the following IPs exist in the project's IP catalog: $list_check_ips ."
|
||||
|
||||
foreach ip_vlnv $list_check_ips {
|
||||
set ip_obj [get_ipdefs -all $ip_vlnv]
|
||||
if { $ip_obj eq "" } {
|
||||
lappend list_ips_missing $ip_vlnv
|
||||
}
|
||||
}
|
||||
|
||||
if { $list_ips_missing ne "" } {
|
||||
catch {common::send_msg_id "BD_TCL-115" "ERROR" "The following IPs are not found in the IP Catalog:\n $list_ips_missing\n\nResolution: Please add the repository containing the IP(s) to the project." }
|
||||
set bCheckIPsPassed 0
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if { $bCheckIPsPassed != 1 } {
|
||||
common::send_msg_id "BD_TCL-1003" "WARNING" "Will not continue with creation of design due to the error(s) above."
|
||||
return 3
|
||||
}
|
||||
|
||||
##################################################################
|
||||
# DESIGN PROCs
|
||||
##################################################################
|
||||
|
||||
|
||||
|
||||
# Procedure to create entire design; Provide argument to make
|
||||
# procedure reusable. If parentCell is "", will use root.
|
||||
proc create_root_design { parentCell } {
|
||||
|
||||
variable script_folder
|
||||
variable design_name
|
||||
|
||||
if { $parentCell eq "" } {
|
||||
set parentCell [get_bd_cells /]
|
||||
}
|
||||
|
||||
# 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 interface ports
|
||||
set DDR [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:ddrx_rtl:1.0 DDR ]
|
||||
set FIXED_IO [ create_bd_intf_port -mode Master -vlnv xilinx.com:display_processing_system7:fixedio_rtl:1.0 FIXED_IO ]
|
||||
set REG_INF [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:bram_rtl:1.0 REG_INF ]
|
||||
set_property -dict [ list \
|
||||
CONFIG.MASTER_TYPE {BRAM_CTRL} \
|
||||
CONFIG.READ_WRITE_MODE {READ_WRITE} \
|
||||
] $REG_INF
|
||||
set REG_INF1 [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:bram_rtl:1.0 REG_INF1 ]
|
||||
set_property -dict [ list \
|
||||
CONFIG.MASTER_TYPE {BRAM_CTRL} \
|
||||
CONFIG.READ_WRITE_MODE {READ_WRITE} \
|
||||
] $REG_INF1
|
||||
set SPI0 [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:spi_rtl:1.0 SPI0 ]
|
||||
set SPI1 [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:spi_rtl:1.0 SPI1 ]
|
||||
|
||||
# Create ports
|
||||
set FCLK_CLK0 [ create_bd_port -dir O -type clk FCLK_CLK0 ]
|
||||
set FCLK_RESET0_N [ create_bd_port -dir O -from 0 -to 0 -type rst FCLK_RESET0_N ]
|
||||
set GPIO_EMIO_gpio_i [ create_bd_port -dir I -from 63 -to 0 GPIO_EMIO_gpio_i ]
|
||||
set GPIO_EMIO_gpio_o [ create_bd_port -dir O -from 63 -to 0 GPIO_EMIO_gpio_o ]
|
||||
set GPIO_EMIO_gpio_t [ create_bd_port -dir O -from 63 -to 0 GPIO_EMIO_gpio_t ]
|
||||
|
||||
# Create instance: axi_bram_ctrl_0, and set properties
|
||||
set axi_bram_ctrl_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_bram_ctrl:4.0 axi_bram_ctrl_0 ]
|
||||
set_property -dict [ list \
|
||||
CONFIG.SINGLE_PORT_BRAM {1} \
|
||||
] $axi_bram_ctrl_0
|
||||
|
||||
# Create instance: axi_bram_ctrl_1, and set properties
|
||||
set axi_bram_ctrl_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_bram_ctrl:4.0 axi_bram_ctrl_1 ]
|
||||
set_property -dict [ list \
|
||||
CONFIG.SINGLE_PORT_BRAM {1} \
|
||||
] $axi_bram_ctrl_1
|
||||
|
||||
# Create instance: axi_smc, and set properties
|
||||
set axi_smc [ create_bd_cell -type ip -vlnv xilinx.com:ip:smartconnect:1.0 axi_smc ]
|
||||
set_property -dict [ list \
|
||||
CONFIG.NUM_MI {2} \
|
||||
CONFIG.NUM_SI {1} \
|
||||
] $axi_smc
|
||||
|
||||
# Create instance: processing_system7_0, and set properties
|
||||
set processing_system7_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:processing_system7:5.5 processing_system7_0 ]
|
||||
set_property -dict [ list \
|
||||
CONFIG.PCW_ACT_APU_PERIPHERAL_FREQMHZ {666.666687} \
|
||||
CONFIG.PCW_ACT_CAN_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_DCI_PERIPHERAL_FREQMHZ {10.158730} \
|
||||
CONFIG.PCW_ACT_ENET0_PERIPHERAL_FREQMHZ {125.000000} \
|
||||
CONFIG.PCW_ACT_ENET1_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_FPGA0_PERIPHERAL_FREQMHZ {50.000000} \
|
||||
CONFIG.PCW_ACT_FPGA1_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_FPGA2_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_FPGA3_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_PCAP_PERIPHERAL_FREQMHZ {200.000000} \
|
||||
CONFIG.PCW_ACT_QSPI_PERIPHERAL_FREQMHZ {200.000000} \
|
||||
CONFIG.PCW_ACT_SDIO_PERIPHERAL_FREQMHZ {100.000000} \
|
||||
CONFIG.PCW_ACT_SMC_PERIPHERAL_FREQMHZ {10.000000} \
|
||||
CONFIG.PCW_ACT_SPI_PERIPHERAL_FREQMHZ {166.666672} \
|
||||
CONFIG.PCW_ACT_TPIU_PERIPHERAL_FREQMHZ {200.000000} \
|
||||
CONFIG.PCW_ACT_TTC0_CLK0_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC0_CLK1_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC0_CLK2_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC1_CLK0_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC1_CLK1_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_TTC1_CLK2_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ACT_UART_PERIPHERAL_FREQMHZ {100.000000} \
|
||||
CONFIG.PCW_ACT_WDT_PERIPHERAL_FREQMHZ {111.111115} \
|
||||
CONFIG.PCW_ARMPLL_CTRL_FBDIV {40} \
|
||||
CONFIG.PCW_CAN_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_CAN_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_CLK0_FREQ {50000000} \
|
||||
CONFIG.PCW_CLK1_FREQ {10000000} \
|
||||
CONFIG.PCW_CLK2_FREQ {10000000} \
|
||||
CONFIG.PCW_CLK3_FREQ {10000000} \
|
||||
CONFIG.PCW_CPU_CPU_PLL_FREQMHZ {1333.333} \
|
||||
CONFIG.PCW_CPU_PERIPHERAL_DIVISOR0 {2} \
|
||||
CONFIG.PCW_DCI_PERIPHERAL_DIVISOR0 {15} \
|
||||
CONFIG.PCW_DCI_PERIPHERAL_DIVISOR1 {7} \
|
||||
CONFIG.PCW_DDRPLL_CTRL_FBDIV {32} \
|
||||
CONFIG.PCW_DDR_DDR_PLL_FREQMHZ {1066.667} \
|
||||
CONFIG.PCW_DDR_PERIPHERAL_DIVISOR0 {4} \
|
||||
CONFIG.PCW_DDR_RAM_HIGHADDR {0x1FFFFFFF} \
|
||||
CONFIG.PCW_ENET0_ENET0_IO {MIO 16 .. 27} \
|
||||
CONFIG.PCW_ENET0_GRP_MDIO_ENABLE {1} \
|
||||
CONFIG.PCW_ENET0_GRP_MDIO_IO {MIO 52 .. 53} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_CLKSRC {IO PLL} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_DIVISOR0 {8} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_ENET0_PERIPHERAL_FREQMHZ {1000 Mbps} \
|
||||
CONFIG.PCW_ENET0_RESET_ENABLE {0} \
|
||||
CONFIG.PCW_ENET1_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_ENET1_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_ENET1_RESET_ENABLE {0} \
|
||||
CONFIG.PCW_ENET_RESET_ENABLE {0} \
|
||||
CONFIG.PCW_EN_CLK0_PORT {1} \
|
||||
CONFIG.PCW_EN_EMIO_CD_SDIO1 {0} \
|
||||
CONFIG.PCW_EN_EMIO_GPIO {1} \
|
||||
CONFIG.PCW_EN_EMIO_SDIO1 {0} \
|
||||
CONFIG.PCW_EN_EMIO_SPI0 {1} \
|
||||
CONFIG.PCW_EN_EMIO_SPI1 {1} \
|
||||
CONFIG.PCW_EN_EMIO_UART0 {0} \
|
||||
CONFIG.PCW_EN_EMIO_WP_SDIO1 {0} \
|
||||
CONFIG.PCW_EN_ENET0 {1} \
|
||||
CONFIG.PCW_EN_QSPI {1} \
|
||||
CONFIG.PCW_EN_RST0_PORT {1} \
|
||||
CONFIG.PCW_EN_SDIO0 {0} \
|
||||
CONFIG.PCW_EN_SDIO1 {1} \
|
||||
CONFIG.PCW_EN_SPI0 {1} \
|
||||
CONFIG.PCW_EN_SPI1 {1} \
|
||||
CONFIG.PCW_EN_UART0 {1} \
|
||||
CONFIG.PCW_EN_UART1 {1} \
|
||||
CONFIG.PCW_FCLK0_PERIPHERAL_DIVISOR0 {5} \
|
||||
CONFIG.PCW_FCLK0_PERIPHERAL_DIVISOR1 {4} \
|
||||
CONFIG.PCW_FCLK1_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_FCLK1_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_FCLK2_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_FCLK2_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_FCLK3_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_FCLK3_PERIPHERAL_DIVISOR1 {1} \
|
||||
CONFIG.PCW_FCLK_CLK0_BUF {TRUE} \
|
||||
CONFIG.PCW_FPGA0_PERIPHERAL_FREQMHZ {50} \
|
||||
CONFIG.PCW_FPGA_FCLK0_ENABLE {1} \
|
||||
CONFIG.PCW_FPGA_FCLK1_ENABLE {0} \
|
||||
CONFIG.PCW_FPGA_FCLK2_ENABLE {0} \
|
||||
CONFIG.PCW_FPGA_FCLK3_ENABLE {0} \
|
||||
CONFIG.PCW_GPIO_EMIO_GPIO_ENABLE {1} \
|
||||
CONFIG.PCW_GPIO_EMIO_GPIO_IO {64} \
|
||||
CONFIG.PCW_GPIO_EMIO_GPIO_WIDTH {64} \
|
||||
CONFIG.PCW_I2C_PERIPHERAL_FREQMHZ {25} \
|
||||
CONFIG.PCW_IOPLL_CTRL_FBDIV {30} \
|
||||
CONFIG.PCW_IO_IO_PLL_FREQMHZ {1000.000} \
|
||||
CONFIG.PCW_IRQ_F2P_INTR {0} \
|
||||
CONFIG.PCW_MIO_14_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_14_IOTYPE {<Select>} \
|
||||
CONFIG.PCW_MIO_14_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_14_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_15_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_15_IOTYPE {<Select>} \
|
||||
CONFIG.PCW_MIO_15_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_15_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_16_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_16_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_16_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_16_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_17_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_17_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_17_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_17_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_18_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_18_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_18_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_18_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_19_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_19_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_19_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_19_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_1_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_1_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_1_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_1_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_20_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_20_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_20_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_20_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_21_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_21_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_21_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_21_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_22_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_22_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_22_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_22_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_23_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_23_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_23_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_23_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_24_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_24_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_24_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_24_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_25_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_25_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_25_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_25_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_26_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_26_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_26_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_26_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_27_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_27_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_27_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_27_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_2_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_2_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_2_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_2_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_3_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_3_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_3_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_3_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_40_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_40_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_40_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_40_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_41_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_41_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_41_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_41_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_42_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_42_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_42_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_42_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_43_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_43_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_43_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_43_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_44_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_44_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_44_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_44_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_45_DIRECTION {in} \
|
||||
CONFIG.PCW_MIO_45_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_45_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_45_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_46_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_46_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_46_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_46_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_47_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_47_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_47_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_47_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_48_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_48_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_48_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_48_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_49_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_49_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_49_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_49_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_4_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_4_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_4_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_4_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_50_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_50_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_50_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_50_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_51_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_51_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_51_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_51_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_52_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_52_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_52_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_52_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_53_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_53_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_53_PULLUP {enabled} \
|
||||
CONFIG.PCW_MIO_53_SLEW {fast} \
|
||||
CONFIG.PCW_MIO_5_DIRECTION {inout} \
|
||||
CONFIG.PCW_MIO_5_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_5_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_5_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_6_DIRECTION {out} \
|
||||
CONFIG.PCW_MIO_6_IOTYPE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_MIO_6_PULLUP {disabled} \
|
||||
CONFIG.PCW_MIO_6_SLEW {slow} \
|
||||
CONFIG.PCW_MIO_TREE_PERIPHERALS {unassigned#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#unassigned#Quad SPI Flash#Quad SPI Flash#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#UART 0#UART 0#UART 1#UART 1#SD 1#SD 1#SD 1#SD 1#SD 1#SD 1#Enet 0#Enet 0} \
|
||||
CONFIG.PCW_MIO_TREE_SIGNALS {unassigned#qspi0_ss_b#qspi0_io[0]#qspi0_io[1]#unassigned#qspi0_io[3]/HOLD_B#qspi0_sclk#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#tx_clk#txd[0]#txd[1]#txd[2]#txd[3]#tx_ctl#rx_clk#rxd[0]#rxd[1]#rxd[2]#rxd[3]#rx_ctl#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#unassigned#rx#tx#tx#rx#data[0]#cmd#clk#data[1]#data[2]#data[3]#mdc#mdio} \
|
||||
CONFIG.PCW_NAND_GRP_D8_ENABLE {0} \
|
||||
CONFIG.PCW_NAND_PERIPHERAL_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_A25_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_CS0_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_CS1_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_SRAM_CS0_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_SRAM_CS1_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_GRP_SRAM_INT_ENABLE {0} \
|
||||
CONFIG.PCW_NOR_PERIPHERAL_ENABLE {0} \
|
||||
CONFIG.PCW_PCAP_PERIPHERAL_DIVISOR0 {5} \
|
||||
CONFIG.PCW_PJTAG_PERIPHERAL_ENABLE {0} \
|
||||
CONFIG.PCW_PRESET_BANK0_VOLTAGE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_PRESET_BANK1_VOLTAGE {LVCMOS 1.8V} \
|
||||
CONFIG.PCW_QSPI_GRP_FBCLK_ENABLE {0} \
|
||||
CONFIG.PCW_QSPI_GRP_IO1_ENABLE {0} \
|
||||
CONFIG.PCW_QSPI_GRP_SINGLE_SS_ENABLE {1} \
|
||||
CONFIG.PCW_QSPI_GRP_SINGLE_SS_IO {MIO 1 .. 6} \
|
||||
CONFIG.PCW_QSPI_GRP_SS1_ENABLE {0} \
|
||||
CONFIG.PCW_QSPI_PERIPHERAL_DIVISOR0 {5} \
|
||||
CONFIG.PCW_QSPI_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_QSPI_PERIPHERAL_FREQMHZ {200} \
|
||||
CONFIG.PCW_QSPI_QSPI_IO {MIO 1 .. 6} \
|
||||
CONFIG.PCW_SD0_GRP_CD_ENABLE {0} \
|
||||
CONFIG.PCW_SD0_GRP_POW_ENABLE {0} \
|
||||
CONFIG.PCW_SD0_GRP_WP_ENABLE {0} \
|
||||
CONFIG.PCW_SD0_PERIPHERAL_ENABLE {0} \
|
||||
CONFIG.PCW_SD0_SD0_IO {<Select>} \
|
||||
CONFIG.PCW_SD1_GRP_CD_ENABLE {0} \
|
||||
CONFIG.PCW_SD1_GRP_POW_ENABLE {0} \
|
||||
CONFIG.PCW_SD1_GRP_WP_ENABLE {0} \
|
||||
CONFIG.PCW_SD1_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_SD1_SD1_IO {MIO 46 .. 51} \
|
||||
CONFIG.PCW_SDIO_PERIPHERAL_DIVISOR0 {10} \
|
||||
CONFIG.PCW_SDIO_PERIPHERAL_FREQMHZ {100} \
|
||||
CONFIG.PCW_SDIO_PERIPHERAL_VALID {1} \
|
||||
CONFIG.PCW_SINGLE_QSPI_DATA_MODE {x2} \
|
||||
CONFIG.PCW_SMC_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_SPI0_GRP_SS0_ENABLE {1} \
|
||||
CONFIG.PCW_SPI0_GRP_SS0_IO {EMIO} \
|
||||
CONFIG.PCW_SPI0_GRP_SS1_ENABLE {1} \
|
||||
CONFIG.PCW_SPI0_GRP_SS1_IO {EMIO} \
|
||||
CONFIG.PCW_SPI0_GRP_SS2_ENABLE {1} \
|
||||
CONFIG.PCW_SPI0_GRP_SS2_IO {EMIO} \
|
||||
CONFIG.PCW_SPI0_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_SPI0_SPI0_IO {EMIO} \
|
||||
CONFIG.PCW_SPI1_GRP_SS0_ENABLE {1} \
|
||||
CONFIG.PCW_SPI1_GRP_SS0_IO {EMIO} \
|
||||
CONFIG.PCW_SPI1_GRP_SS1_ENABLE {1} \
|
||||
CONFIG.PCW_SPI1_GRP_SS1_IO {EMIO} \
|
||||
CONFIG.PCW_SPI1_GRP_SS2_ENABLE {1} \
|
||||
CONFIG.PCW_SPI1_GRP_SS2_IO {EMIO} \
|
||||
CONFIG.PCW_SPI1_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_SPI1_SPI1_IO {EMIO} \
|
||||
CONFIG.PCW_SPI_PERIPHERAL_DIVISOR0 {6} \
|
||||
CONFIG.PCW_SPI_PERIPHERAL_FREQMHZ {166.666666} \
|
||||
CONFIG.PCW_SPI_PERIPHERAL_VALID {1} \
|
||||
CONFIG.PCW_TPIU_PERIPHERAL_DIVISOR0 {1} \
|
||||
CONFIG.PCW_UART0_GRP_FULL_ENABLE {0} \
|
||||
CONFIG.PCW_UART0_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_UART0_UART0_IO {MIO 42 .. 43} \
|
||||
CONFIG.PCW_UART1_GRP_FULL_ENABLE {0} \
|
||||
CONFIG.PCW_UART1_PERIPHERAL_ENABLE {1} \
|
||||
CONFIG.PCW_UART1_UART1_IO {MIO 44 .. 45} \
|
||||
CONFIG.PCW_UART_PERIPHERAL_DIVISOR0 {10} \
|
||||
CONFIG.PCW_UART_PERIPHERAL_FREQMHZ {100} \
|
||||
CONFIG.PCW_UART_PERIPHERAL_VALID {1} \
|
||||
CONFIG.PCW_UIPARAM_ACT_DDR_FREQ_MHZ {266.666687} \
|
||||
CONFIG.PCW_UIPARAM_DDR_BANK_ADDR_COUNT {3} \
|
||||
CONFIG.PCW_UIPARAM_DDR_BUS_WIDTH {16 Bit} \
|
||||
CONFIG.PCW_UIPARAM_DDR_CL {7} \
|
||||
CONFIG.PCW_UIPARAM_DDR_COL_ADDR_COUNT {10} \
|
||||
CONFIG.PCW_UIPARAM_DDR_CWL {6} \
|
||||
CONFIG.PCW_UIPARAM_DDR_DEVICE_CAPACITY {4096 MBits} \
|
||||
CONFIG.PCW_UIPARAM_DDR_DRAM_WIDTH {16 Bits} \
|
||||
CONFIG.PCW_UIPARAM_DDR_ECC {Disabled} \
|
||||
CONFIG.PCW_UIPARAM_DDR_FREQ_MHZ {266.6666666} \
|
||||
CONFIG.PCW_UIPARAM_DDR_PARTNO {MT41K256M16 RE-15E} \
|
||||
CONFIG.PCW_UIPARAM_DDR_ROW_ADDR_COUNT {15} \
|
||||
CONFIG.PCW_UIPARAM_DDR_SPEED_BIN {DDR3_1066F} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_FAW {45.0} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_RAS_MIN {36.0} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_RC {49.5} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_RCD {7} \
|
||||
CONFIG.PCW_UIPARAM_DDR_T_RP {7} \
|
||||
CONFIG.PCW_UIPARAM_DDR_USE_INTERNAL_VREF {1} \
|
||||
CONFIG.PCW_USE_FABRIC_INTERRUPT {0} \
|
||||
CONFIG.PCW_USE_M_AXI_GP0 {1} \
|
||||
CONFIG.PCW_USE_M_AXI_GP1 {0} \
|
||||
CONFIG.PCW_USE_S_AXI_HP0 {0} \
|
||||
] $processing_system7_0
|
||||
|
||||
# Create instance: rst_ps7_0_50M, and set properties
|
||||
set rst_ps7_0_50M [ create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 rst_ps7_0_50M ]
|
||||
|
||||
# Create interface connections
|
||||
connect_bd_intf_net -intf_net axi_bram_ctrl_0_BRAM_PORTA [get_bd_intf_ports REG_INF] [get_bd_intf_pins axi_bram_ctrl_0/BRAM_PORTA]
|
||||
connect_bd_intf_net -intf_net axi_bram_ctrl_1_BRAM_PORTA [get_bd_intf_ports REG_INF1] [get_bd_intf_pins axi_bram_ctrl_1/BRAM_PORTA]
|
||||
connect_bd_intf_net -intf_net axi_smc_M00_AXI [get_bd_intf_pins axi_bram_ctrl_0/S_AXI] [get_bd_intf_pins axi_smc/M00_AXI]
|
||||
connect_bd_intf_net -intf_net axi_smc_M01_AXI [get_bd_intf_pins axi_bram_ctrl_1/S_AXI] [get_bd_intf_pins axi_smc/M01_AXI]
|
||||
connect_bd_intf_net -intf_net processing_system7_0_DDR [get_bd_intf_ports DDR] [get_bd_intf_pins processing_system7_0/DDR]
|
||||
connect_bd_intf_net -intf_net processing_system7_0_FIXED_IO [get_bd_intf_ports FIXED_IO] [get_bd_intf_pins processing_system7_0/FIXED_IO]
|
||||
connect_bd_intf_net -intf_net processing_system7_0_M_AXI_GP0 [get_bd_intf_pins axi_smc/S00_AXI] [get_bd_intf_pins processing_system7_0/M_AXI_GP0]
|
||||
connect_bd_intf_net -intf_net processing_system7_0_SPI_0 [get_bd_intf_ports SPI0] [get_bd_intf_pins processing_system7_0/SPI_0]
|
||||
connect_bd_intf_net -intf_net processing_system7_0_SPI_1 [get_bd_intf_ports SPI1] [get_bd_intf_pins processing_system7_0/SPI_1]
|
||||
|
||||
# Create port connections
|
||||
connect_bd_net -net GPIO_EMIO_gpio_i_1 [get_bd_ports GPIO_EMIO_gpio_i] [get_bd_pins processing_system7_0/GPIO_I]
|
||||
connect_bd_net -net processing_system7_0_FCLK_CLK0 [get_bd_ports FCLK_CLK0] [get_bd_pins axi_bram_ctrl_0/s_axi_aclk] [get_bd_pins axi_bram_ctrl_1/s_axi_aclk] [get_bd_pins axi_smc/aclk] [get_bd_pins processing_system7_0/FCLK_CLK0] [get_bd_pins processing_system7_0/M_AXI_GP0_ACLK] [get_bd_pins rst_ps7_0_50M/slowest_sync_clk]
|
||||
connect_bd_net -net processing_system7_0_FCLK_RESET0_N [get_bd_ports FCLK_RESET0_N] [get_bd_pins processing_system7_0/FCLK_RESET0_N] [get_bd_pins rst_ps7_0_50M/ext_reset_in]
|
||||
connect_bd_net -net processing_system7_0_GPIO_O [get_bd_ports GPIO_EMIO_gpio_o] [get_bd_pins processing_system7_0/GPIO_O]
|
||||
connect_bd_net -net processing_system7_0_GPIO_T [get_bd_ports GPIO_EMIO_gpio_t] [get_bd_pins processing_system7_0/GPIO_T]
|
||||
connect_bd_net -net rst_ps7_0_50M_peripheral_aresetn [get_bd_pins axi_bram_ctrl_0/s_axi_aresetn] [get_bd_pins axi_bram_ctrl_1/s_axi_aresetn] [get_bd_pins axi_smc/aresetn] [get_bd_pins rst_ps7_0_50M/peripheral_aresetn]
|
||||
|
||||
# Create address segments
|
||||
create_bd_addr_seg -range 0x00010000 -offset 0x40000000 [get_bd_addr_spaces processing_system7_0/Data] [get_bd_addr_segs axi_bram_ctrl_0/S_AXI/Mem0] SEG_axi_bram_ctrl_0_Mem0
|
||||
create_bd_addr_seg -range 0x00002000 -offset 0x42000000 [get_bd_addr_spaces processing_system7_0/Data] [get_bd_addr_segs axi_bram_ctrl_1/S_AXI/Mem0] SEG_axi_bram_ctrl_1_Mem0
|
||||
|
||||
|
||||
# Restore current instance
|
||||
current_bd_instance $oldCurInst
|
||||
|
||||
save_bd_design
|
||||
}
|
||||
# End of create_root_design()
|
||||
|
||||
|
||||
##################################################################
|
||||
# MAIN FLOW
|
||||
##################################################################
|
||||
|
||||
create_root_design ""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user