fpga: x400: Add X440 200 MHz variant
This adds support for the X440_X4_200 variant which supports up to 200 MHz bandwidth (250 Msps), has a DDC and DUC on each channel, 4 x 10 GbE interfaces, and no DRAM. Original-commit: bdaba58750ce0c2ccc58769936c3c5c4a6b2d2cf
This commit is contained in:
+7
-1
@@ -62,6 +62,7 @@ X410_X4_400: DEFS += $(QSFP0_4X10GBE) RF_BW=400 RF_CORE_40
|
|||||||
X410_C1_400: DEFS += $(QSFP0_100GBE) RF_BW=400 RF_CORE_400M=1 DRAM_CH=0
|
X410_C1_400: DEFS += $(QSFP0_100GBE) RF_BW=400 RF_CORE_400M=1 DRAM_CH=0
|
||||||
X410_UC_400: DEFS += $(QSFP1_100GBE) RF_BW=400 RF_CORE_400M=1 DRAM_CH=0
|
X410_UC_400: DEFS += $(QSFP1_100GBE) RF_BW=400 RF_CORE_400M=1 DRAM_CH=0
|
||||||
X410_CG_400: DEFS += $(QSFP0_100GBE) $(QSFP1_100GBE) RF_BW=400 RF_CORE_400M=1 DRAM_CH=0
|
X410_CG_400: DEFS += $(QSFP0_100GBE) $(QSFP1_100GBE) RF_BW=400 RF_CORE_400M=1 DRAM_CH=0
|
||||||
|
X440_X4_200: DEFS += $(QSFP0_4X10GBE) RF_BW=200 RF_CORE_FULL=1 DRAM_CH=0
|
||||||
X440_X1_400: DEFS += $(QSFP0_10GBE) RF_BW=400 RF_CORE_FULL=1 DRAM_CH=8*$(DRAM) DRAM_W=128
|
X440_X1_400: DEFS += $(QSFP0_10GBE) RF_BW=400 RF_CORE_FULL=1 DRAM_CH=8*$(DRAM) DRAM_W=128
|
||||||
X440_X4_400: DEFS += $(QSFP0_4X10GBE) RF_BW=400 RF_CORE_FULL=1 DRAM_CH=8*$(DRAM) DRAM_W=128
|
X440_X4_400: DEFS += $(QSFP0_4X10GBE) RF_BW=400 RF_CORE_FULL=1 DRAM_CH=8*$(DRAM) DRAM_W=128
|
||||||
X440_C1_400: DEFS += $(QSFP0_100GBE) RF_BW=400 RF_CORE_FULL=1 DRAM_CH=0
|
X440_C1_400: DEFS += $(QSFP0_100GBE) RF_BW=400 RF_CORE_FULL=1 DRAM_CH=0
|
||||||
@@ -87,6 +88,7 @@ X410_X4C_200_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x410_x4c_200_rfnoc_image_
|
|||||||
X410_CG_200_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x410_cg_200_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x410_cg_200_static_router.hex)
|
X410_CG_200_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x410_cg_200_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x410_cg_200_static_router.hex)
|
||||||
X410_400_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x410_400_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x410_400_static_router.hex)
|
X410_400_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x410_400_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x410_400_static_router.hex)
|
||||||
X410_400_D_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x410_400_d_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x410_400_d_static_router.hex)
|
X410_400_D_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x410_400_d_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x410_400_d_static_router.hex)
|
||||||
|
X440_200_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x440_200_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x440_200_static_router.hex)
|
||||||
X440_400_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x440_400_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x440_400_static_router.hex)
|
X440_400_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x440_400_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x440_400_static_router.hex)
|
||||||
X440_400_D_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x440_400_d_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x440_400_d_static_router.hex)
|
X440_400_D_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x440_400_d_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x440_400_d_static_router.hex)
|
||||||
X440_1600_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x440_1600_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x440_1600_static_router.hex)
|
X440_1600_DEFAULTS := DEFAULT_RFNOC_IMAGE_CORE_FILE=x440_1600_rfnoc_image_core.v DEFAULT_EDGE_FILE=$(abspath x440_1600_static_router.hex)
|
||||||
@@ -227,6 +229,10 @@ X410_CG_400: X410_IP build/usrp_x410_fpga_CG_400.dts
|
|||||||
$(call vivado_build,X410,$(DEFS) X410=1,$(X410_400_DEFAULTS))
|
$(call vivado_build,X410,$(DEFS) X410=1,$(X410_400_DEFAULTS))
|
||||||
$(call post_build,X410,CG_400)
|
$(call post_build,X410,CG_400)
|
||||||
|
|
||||||
|
X440_X4_200: X440_IP build/usrp_x440_fpga_X4_200.dts
|
||||||
|
$(call vivado_build,X440,$(DEFS) X440=1,$(X440_200_DEFAULTS))
|
||||||
|
$(call post_build,X440,X4_200)
|
||||||
|
|
||||||
X440_X1_400: X440_IP build/usrp_x440_fpga_X1_400.dts
|
X440_X1_400: X440_IP build/usrp_x440_fpga_X1_400.dts
|
||||||
$(call vivado_build,X440,$(DEFS) X440=1,$(X440_400_D_DEFAULTS))
|
$(call vivado_build,X440,$(DEFS) X440=1,$(X440_400_D_DEFAULTS))
|
||||||
$(call post_build,X440,X1_400)
|
$(call post_build,X440,X1_400)
|
||||||
@@ -276,7 +282,7 @@ X410_CG_200: X410_IP build/usrp_x410_fpga_CG_200.dts
|
|||||||
|
|
||||||
.DEFAULT_GOAL := all
|
.DEFAULT_GOAL := all
|
||||||
|
|
||||||
all: X410_X4_200 X410_CG_400 X410_UC_200 X440_X4_400 X440_CG_400 X440_X4_1600 X440_CG_1600 ##(Default targets)
|
all: X410_X4_200 X410_CG_400 X410_UC_200 X440_X4_200 X440_X4_400 X440_CG_400 X440_X4_1600 X440_CG_1600 ##(Default targets)
|
||||||
|
|
||||||
X410_IP: ##Build IP only.
|
X410_IP: ##Build IP only.
|
||||||
+$(call vivado_ip,X410,$(DEFS) X410=1)
|
+$(call vivado_ip,X410,$(DEFS) X410=1)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2023 Ettus Research, a National Instruments Brand
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
|
//
|
||||||
|
// Header: rfnoc_image_core.vh (for x440)
|
||||||
|
//
|
||||||
|
// Description:
|
||||||
|
//
|
||||||
|
// This is the header file for the RFNoC Image Core.
|
||||||
|
//
|
||||||
|
// This file was automatically generated by the RFNoC image builder tool.
|
||||||
|
// Re-running that tool will overwrite this file!
|
||||||
|
//
|
||||||
|
// Source: x440_200_rfnoc_image_core.yml
|
||||||
|
//
|
||||||
|
|
||||||
|
`define CHDR_WIDTH 64
|
||||||
|
`define RFNOC_PROTOVER { 8'd1, 8'd0 }
|
||||||
@@ -0,0 +1,181 @@
|
|||||||
|
# General parameters
|
||||||
|
# -----------------------------------------
|
||||||
|
schema: rfnoc_imagebuilder_args # Identifier for the schema used to validate this file
|
||||||
|
copyright: >- # Copyright information used in file headers
|
||||||
|
Copyright 2023 Ettus Research, a National Instruments Brand
|
||||||
|
license: >- # License information used in file headers
|
||||||
|
SPDX-License-Identifier: LGPL-3.0-or-later
|
||||||
|
version: '1.0' # File version
|
||||||
|
chdr_width: 64 # Bit width of the CHDR bus for this image
|
||||||
|
device: 'x440' # USRP type
|
||||||
|
image_core_name: 'x440_200' # Name to use for the RFNoC Image Core files
|
||||||
|
default_target: 'X440_X4_200' # Default make target
|
||||||
|
|
||||||
|
# A list of all stream endpoints in design
|
||||||
|
# ----------------------------------------
|
||||||
|
stream_endpoints:
|
||||||
|
ep0: # Stream endpoint name
|
||||||
|
ctrl: True # Endpoint passes control traffic
|
||||||
|
data: True # Endpoint passes data traffic
|
||||||
|
buff_size_bytes: 262144 # Ingress buffer size for data
|
||||||
|
ep1:
|
||||||
|
ctrl: False
|
||||||
|
data: True
|
||||||
|
buff_size_bytes: 262144
|
||||||
|
ep2:
|
||||||
|
ctrl: False
|
||||||
|
data: True
|
||||||
|
buff_size_bytes: 262144
|
||||||
|
ep3:
|
||||||
|
ctrl: False
|
||||||
|
data: True
|
||||||
|
buff_size_bytes: 262144
|
||||||
|
ep4:
|
||||||
|
ctrl: False
|
||||||
|
data: True
|
||||||
|
buff_size_bytes: 262144
|
||||||
|
ep5:
|
||||||
|
ctrl: False
|
||||||
|
data: True
|
||||||
|
buff_size_bytes: 262144
|
||||||
|
ep6:
|
||||||
|
ctrl: False
|
||||||
|
data: True
|
||||||
|
buff_size_bytes: 262144
|
||||||
|
ep7:
|
||||||
|
ctrl: False
|
||||||
|
data: True
|
||||||
|
buff_size_bytes: 262144
|
||||||
|
|
||||||
|
# A table of which crossbar routes to include
|
||||||
|
# -------------------------------------------
|
||||||
|
# Rows correspond to input ports and columns correspond to output ports.
|
||||||
|
# Entering a 1 includes and a 0 removes that route from the crossbar.
|
||||||
|
crossbar_routes:
|
||||||
|
# eth0 eth2 eth4 ep0 ep2 ep4 ep6
|
||||||
|
# eth1 eth3 dma ep1 ep3 ep5 ep7
|
||||||
|
- [ 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 ] # eth0 (QSFP Port 0, Lane 0)
|
||||||
|
- [ 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 ] # eth1 (QSFP Port 0, Lane 1)
|
||||||
|
- [ 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 ] # eth2 (QSFP Port 0, Lane 2)
|
||||||
|
- [ 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 ] # eth3 (QSFP Port 0, Lane 3)
|
||||||
|
- [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] # eth4 (NC)
|
||||||
|
- [ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] # dma
|
||||||
|
- [ 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] # ep0 (radio0.0)
|
||||||
|
- [ 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] # ep1 (radio0.1)
|
||||||
|
- [ 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] # ep2 (radio0.2)
|
||||||
|
- [ 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] # ep3 (radio0.3)
|
||||||
|
- [ 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] # ep4 (radio1.0)
|
||||||
|
- [ 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] # ep5 (radio1.1)
|
||||||
|
- [ 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] # ep6 (radio1.2)
|
||||||
|
- [ 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ] # ep7 (radio1.3)
|
||||||
|
|
||||||
|
# A list of all NoC blocks in design
|
||||||
|
# ----------------------------------
|
||||||
|
noc_blocks:
|
||||||
|
radio0:
|
||||||
|
block_desc: 'radio.yml'
|
||||||
|
parameters:
|
||||||
|
NUM_PORTS: 4
|
||||||
|
NIPC: RADIO_NIPC
|
||||||
|
radio1:
|
||||||
|
block_desc: 'radio.yml'
|
||||||
|
parameters:
|
||||||
|
NUM_PORTS: 4
|
||||||
|
NIPC: RADIO_NIPC
|
||||||
|
duc0:
|
||||||
|
block_desc: 'duc.yml'
|
||||||
|
parameters:
|
||||||
|
NUM_PORTS: 4
|
||||||
|
ddc0:
|
||||||
|
block_desc: 'ddc.yml'
|
||||||
|
parameters:
|
||||||
|
NUM_PORTS: 4
|
||||||
|
duc1:
|
||||||
|
block_desc: 'duc.yml'
|
||||||
|
parameters:
|
||||||
|
NUM_PORTS: 4
|
||||||
|
ddc1:
|
||||||
|
block_desc: 'ddc.yml'
|
||||||
|
parameters:
|
||||||
|
NUM_PORTS: 4
|
||||||
|
|
||||||
|
# A list of all static connections in design
|
||||||
|
# ------------------------------------------
|
||||||
|
# Format: A list of connection maps (list of key-value pairs) with the following keys
|
||||||
|
# - srcblk = Source block to connect
|
||||||
|
# - srcport = Port on the source block to connect
|
||||||
|
# - dstblk = Destination block to connect
|
||||||
|
# - dstport = Port on the destination block to connect
|
||||||
|
connections:
|
||||||
|
# RF A:0 TX
|
||||||
|
- { srcblk: ep0, srcport: out0, dstblk: duc0, dstport: in_0 }
|
||||||
|
- { srcblk: duc0, srcport: out_0, dstblk: radio0, dstport: in_0 }
|
||||||
|
# RF A:0 RX
|
||||||
|
- { srcblk: radio0, srcport: out_0, dstblk: ddc0, dstport: in_0 }
|
||||||
|
- { srcblk: ddc0, srcport: out_0, dstblk: ep0, dstport: in0 }
|
||||||
|
# RF A:1 TX
|
||||||
|
- { srcblk: ep1, srcport: out0, dstblk: duc0, dstport: in_1 }
|
||||||
|
- { srcblk: duc0, srcport: out_1, dstblk: radio0, dstport: in_1 }
|
||||||
|
# RF A:1 RX
|
||||||
|
- { srcblk: radio0, srcport: out_1, dstblk: ddc0, dstport: in_1 }
|
||||||
|
- { srcblk: ddc0, srcport: out_1, dstblk: ep1, dstport: in0 }
|
||||||
|
# RF A:2 TX
|
||||||
|
- { srcblk: ep2, srcport: out0, dstblk: duc0, dstport: in_2 }
|
||||||
|
- { srcblk: duc0, srcport: out_2, dstblk: radio0, dstport: in_2 }
|
||||||
|
# RF A:2 RX
|
||||||
|
- { srcblk: radio0, srcport: out_2, dstblk: ddc0, dstport: in_2 }
|
||||||
|
- { srcblk: ddc0, srcport: out_2, dstblk: ep2, dstport: in0 }
|
||||||
|
# RF A:3 TX
|
||||||
|
- { srcblk: ep3, srcport: out0, dstblk: duc0, dstport: in_3 }
|
||||||
|
- { srcblk: duc0, srcport: out_3, dstblk: radio0, dstport: in_3 }
|
||||||
|
# RF A:3 RX
|
||||||
|
- { srcblk: radio0, srcport: out_3, dstblk: ddc0, dstport: in_3 }
|
||||||
|
- { srcblk: ddc0, srcport: out_3, dstblk: ep3, dstport: in0 }
|
||||||
|
#
|
||||||
|
# RF B:0 TX
|
||||||
|
- { srcblk: ep4, srcport: out0, dstblk: duc1, dstport: in_0 }
|
||||||
|
- { srcblk: duc1, srcport: out_0, dstblk: radio1, dstport: in_0 }
|
||||||
|
# RF B:0 RX
|
||||||
|
- { srcblk: radio1, srcport: out_0, dstblk: ddc1, dstport: in_0 }
|
||||||
|
- { srcblk: ddc1, srcport: out_0, dstblk: ep4, dstport: in0 }
|
||||||
|
# RF B:1 TX
|
||||||
|
- { srcblk: ep5, srcport: out0, dstblk: duc1, dstport: in_1 }
|
||||||
|
- { srcblk: duc1, srcport: out_1, dstblk: radio1, dstport: in_1 }
|
||||||
|
# RF B:1 RX
|
||||||
|
- { srcblk: radio1, srcport: out_1, dstblk: ddc1, dstport: in_1 }
|
||||||
|
- { srcblk: ddc1, srcport: out_1, dstblk: ep5, dstport: in0 }
|
||||||
|
# RF B:2 TX
|
||||||
|
- { srcblk: ep6, srcport: out0, dstblk: duc1, dstport: in_2 }
|
||||||
|
- { srcblk: duc1, srcport: out_2, dstblk: radio1, dstport: in_2 }
|
||||||
|
# RF B:2 RX
|
||||||
|
- { srcblk: radio1, srcport: out_2, dstblk: ddc1, dstport: in_2 }
|
||||||
|
- { srcblk: ddc1, srcport: out_2, dstblk: ep6, dstport: in0 }
|
||||||
|
# RF B:3 TX
|
||||||
|
- { srcblk: ep7, srcport: out0, dstblk: duc1, dstport: in_3 }
|
||||||
|
- { srcblk: duc1, srcport: out_3, dstblk: radio1, dstport: in_3 }
|
||||||
|
# RF B:3 RX
|
||||||
|
- { srcblk: radio1, srcport: out_3, dstblk: ddc1, dstport: in_3 }
|
||||||
|
- { srcblk: ddc1, srcport: out_3, dstblk: ep7, dstport: in0 }
|
||||||
|
#
|
||||||
|
# BSP Connections
|
||||||
|
- { srcblk: radio0, srcport: ctrlport, dstblk: _device_, dstport: ctrlport_radio0 }
|
||||||
|
- { srcblk: radio1, srcport: ctrlport, dstblk: _device_, dstport: ctrlport_radio1 }
|
||||||
|
- { srcblk: _device_, srcport: radio0, dstblk: radio0, dstport: radio }
|
||||||
|
- { srcblk: _device_, srcport: radio1, dstblk: radio1, dstport: radio }
|
||||||
|
- { srcblk: _device_, srcport: time0, dstblk: radio0, dstport: time }
|
||||||
|
- { srcblk: _device_, srcport: time1, dstblk: radio1, dstport: time }
|
||||||
|
|
||||||
|
# A list of all clock domain connections in design
|
||||||
|
# ------------------------------------------------
|
||||||
|
# Format: A list of connection maps (list of key-value pairs) with the following keys
|
||||||
|
# - srcblk = Source block to connect (Always "_device"_)
|
||||||
|
# - srcport = Clock domain on the source block to connect
|
||||||
|
# - dstblk = Destination block to connect
|
||||||
|
# - dstport = Clock domain on the destination block to connect
|
||||||
|
clk_domains:
|
||||||
|
- { srcblk: _device_, srcport: radio0, dstblk: radio0, dstport: radio }
|
||||||
|
- { srcblk: _device_, srcport: radio1, dstblk: radio1, dstport: radio }
|
||||||
|
- { srcblk: _device_, srcport: ce, dstblk: duc0, dstport: ce }
|
||||||
|
- { srcblk: _device_, srcport: ce, dstblk: ddc0, dstport: ce }
|
||||||
|
- { srcblk: _device_, srcport: ce, dstblk: duc1, dstport: ce }
|
||||||
|
- { srcblk: _device_, srcport: ce, dstblk: ddc1, dstport: ce }
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
00000020
|
||||||
|
004002c0
|
||||||
|
02c00240
|
||||||
|
02400300
|
||||||
|
03000040
|
||||||
|
008002c1
|
||||||
|
02c10241
|
||||||
|
02410301
|
||||||
|
03010080
|
||||||
|
00c002c2
|
||||||
|
02c20242
|
||||||
|
02420302
|
||||||
|
030200c0
|
||||||
|
010002c3
|
||||||
|
02c30243
|
||||||
|
02430303
|
||||||
|
03030100
|
||||||
|
01400340
|
||||||
|
03400280
|
||||||
|
02800380
|
||||||
|
03800140
|
||||||
|
01800341
|
||||||
|
03410281
|
||||||
|
02810381
|
||||||
|
03810180
|
||||||
|
01c00342
|
||||||
|
03420282
|
||||||
|
02820382
|
||||||
|
038201c0
|
||||||
|
02000343
|
||||||
|
03430283
|
||||||
|
02830383
|
||||||
|
03830200
|
||||||
Reference in New Issue
Block a user