fpga: Align build process for all targets
- All RFNoC capable targets now require rfnoc_image_builder to be built - `make help` is updated for all targets to provide more useful and up-to-date information - The FPGA manual is also updated - All checked-in build artifacts are now removed from git - axi_ram_fifo.yml is updated to provide include path information (required for building N3xx BIST images, which use this) Original-commit: 28b994406d4c9547b1e2add62781b6a8162fdb74
This commit is contained in:
committed by
Joerg Hofrichter
parent
ba5e431c5c
commit
6ef3795e42
+60
-28
@@ -4,10 +4,18 @@
|
||||
|
||||
# NOTE: All comments prefixed with a "##" will be displayed as a part of the "make help" target
|
||||
##-------------------
|
||||
##USRP E3XX FPGA Help
|
||||
##USRP E31X FPGA Help
|
||||
##-------------------
|
||||
##Usage:
|
||||
## make <Targets> <Options>
|
||||
## rfnoc_image_builder -y <image core file> -t <target> -n <image core name>
|
||||
##
|
||||
## NOTE: For building E3x0 bitfiles, do not run make directly! Instead, use
|
||||
## rfnoc_image_builder. It will create all intermediate files, set up a Vivado
|
||||
## environment, and run Vivado to build a bitfile.
|
||||
##
|
||||
## There exist some special make targets which can be called directly like this:
|
||||
##
|
||||
## make <Targets> <Options>
|
||||
##
|
||||
##Output:
|
||||
## $(BUILD_OUTPUT_DIR)/usrp_<product>_fpga_<image_type>.bit: Configuration bitstream with header
|
||||
@@ -37,20 +45,18 @@ ifndef TARGET
|
||||
endif
|
||||
TOP ?= e31x
|
||||
|
||||
DEFAULT_IMAGE_CORE_FILE_E31X=e310_rfnoc_image_core.v
|
||||
|
||||
# vivado_build($1=Device, $2=Definitions)
|
||||
vivado_build = make -f Makefile.e31x.inc $(TARGET) NAME=$@ ARCH=$(XIL_ARCH_$1) PART_ID=$(XIL_PART_ID_$1) $2 TOP_MODULE=$(TOP) EXTRA_DEFS="$2" DEFAULT_RFNOC_IMAGE_CORE_FILE=$(DEFAULT_IMAGE_CORE_FILE_E31X)
|
||||
vivado_ip = make -f Makefile.e31x.inc viv_ip NAME=$@ ARCH=$(XIL_ARCH_$1) PART_ID=$(XIL_PART_ID_$1) $2 TOP_MODULE=$(TOP) EXTRA_DEFS="$2" DEFAULT_RFNOC_IMAGE_CORE_FILE=$(DEFAULT_IMAGE_CORE_FILE_E31X)
|
||||
vivado_build = make -f Makefile.e31x.inc $(TARGET) NAME=$@ ARCH=$(XIL_ARCH_$1) PART_ID=$(XIL_PART_ID_$1) $2 TOP_MODULE=$(TOP) EXTRA_DEFS="$2"
|
||||
vivado_ip = make -f Makefile.e31x.inc viv_ip NAME=$@ ARCH=$(XIL_ARCH_$1) PART_ID=$(XIL_PART_ID_$1) $2 TOP_MODULE=$(TOP) EXTRA_DEFS="$2"
|
||||
|
||||
# post_build($1=Device, $2=Option)
|
||||
# post_build($1=Device)
|
||||
ifeq ($(TARGET),bin)
|
||||
post_build = @\
|
||||
mkdir -p $(BUILD_OUTPUT_DIR); \
|
||||
echo "Exporting bitstream file..."; \
|
||||
cp $(BUILD_BASE_DIR)/build-$(1)/e31x.bit $(BUILD_OUTPUT_DIR)/usrp_`echo $(2) | tr A-Z a-z`_fpga.bit; \
|
||||
cp $(BUILD_DIR)/e31x.bit $(BUILD_OUTPUT_DIR)/$(IMAGE_CORE_NAME).bit; \
|
||||
echo "Exporting build report..."; \
|
||||
cp $(BUILD_BASE_DIR)/build-$(1)/build.rpt $(BUILD_OUTPUT_DIR)/usrp_`echo $(2) | tr A-Z a-z`_fpga.rpt; \
|
||||
cp $(BUILD_DIR)/build.rpt $(BUILD_OUTPUT_DIR)/$(IMAGE_CORE_NAME).rpt; \
|
||||
echo "Build DONE ... $(1)";
|
||||
else
|
||||
post_build = @echo "Skipping bitfile export."
|
||||
@@ -59,50 +65,76 @@ endif
|
||||
##
|
||||
##Supported Targets
|
||||
##-----------------
|
||||
##Reminder: Targets are built by calling
|
||||
##
|
||||
## $ rfnoc_image_builder -y <image core file.yml> -t <target name> -n <image core name>
|
||||
##
|
||||
##The following table lists all valid combinations:
|
||||
##
|
||||
##--------------------------|---------------|-------------------------|------------------
|
||||
## Default Image core file | Target | Image core name | Description
|
||||
##--------------------------|---------------|-------------------------|------------------
|
||||
##e310_rfnoc_image_core.yml | E310_SG1 | usrp_e310_sg1_fpga | E310 speedgrade 1
|
||||
##e310_rfnoc_image_core.yml | E310_SG1_IDLE | usrp_e310_sg1_idle_fpga | E310 speedgrade 1, idle image
|
||||
##e310_rfnoc_image_core.yml | E310_SG3 | usrp_e310_sg3_fpga | E310 speedgrade 3
|
||||
##e310_rfnoc_image_core.yml | E310_SG3_IDLE | usrp_e310_sg3_idle_fpga | E310 speedgrade 3, idle image
|
||||
##
|
||||
##Of course, a custom YAML file may be used.
|
||||
##
|
||||
|
||||
all: E310_SG1_IDLE E310_SG3_IDLE E310_SG1 E310_SG3 ##(Default target)
|
||||
|
||||
##E310_SG1_IP: Build IP for E310_SG1 only.
|
||||
E310_SG1_IP:
|
||||
+$(call vivado_ip,E310_SG1,E310_SG1=1)
|
||||
|
||||
##E310_SG3_IP: Build IP for E310_SG3 only.
|
||||
E310_SG3_IP:
|
||||
+$(call vivado_ip,E310_SG3,E310_SG3=1)
|
||||
check-variables:
|
||||
ifndef IMAGE_CORE_NAME
|
||||
$(error IMAGE_CORE_NAME is not set! Use rfnoc_image_builder to create valid make commands)
|
||||
endif
|
||||
ifndef BUILD_DIR
|
||||
$(error BUILD_DIR is not set! Use rfnoc_image_builder to create valid make commands)
|
||||
endif
|
||||
|
||||
##E310_SG1_IDLE: Build USRP E3XX idle design (Speed Grade 1).
|
||||
E310_SG1_IDLE E3XX_idle: E310_SG1_IP $(BUILD_OUTPUT_DIR)/usrp_e310_sg1_idle_fpga.dts
|
||||
E310_SG1_IDLE E3XX_idle: check-variables E310_SG1_IP $(BUILD_OUTPUT_DIR)/usrp_e310_sg1_idle_fpga.dts
|
||||
$(call vivado_build,E310_SG1,$(DEFS) E310_IDLE_IMAGE=1 E310_SG1=1)
|
||||
$(call post_build,$@,E310_SG1_IDLE)
|
||||
$(call post_build,$@)
|
||||
|
||||
##E310_SG3_IDLE: Build USRP E3XX idle design (Speed Grade 3).
|
||||
E310_SG3_IDLE E3XX_idle_sg3: E310_SG3_IP $(BUILD_OUTPUT_DIR)/usrp_e310_sg3_idle_fpga.dts
|
||||
E310_SG3_IDLE E3XX_idle_sg3: check-variables E310_SG3_IP $(BUILD_OUTPUT_DIR)/usrp_e310_sg3_idle_fpga.dts
|
||||
$(call vivado_build,E310_SG3,$(DEFS) E310_IDLE_IMAGE=1 E310_SG3=1)
|
||||
$(call post_build,$@,E310_SG3_IDLE)
|
||||
$(call post_build,$@)
|
||||
|
||||
##E310_SG1: Build USRP E3XX (Speed Grade 1).
|
||||
E310_SG1 E310: E310_SG1_IP $(BUILD_OUTPUT_DIR)/usrp_e310_sg1_fpga.dts
|
||||
E310_SG1 E310: check-variables E310_SG1_IP $(BUILD_OUTPUT_DIR)/usrp_e310_sg1_fpga.dts
|
||||
$(call vivado_build,E310_SG1,$(DEFS) E310_SG1=1 $(if $(DRAM),ENABLE_DRAM=1,))
|
||||
$(call post_build,$@,E310_SG1)
|
||||
$(call post_build,$@)
|
||||
|
||||
##E310_SG3: Build USRP E3XX (Speed Grade 3).
|
||||
E310_SG3 E310_sg3: E310_SG3_IP $(BUILD_OUTPUT_DIR)/usrp_e310_sg3_fpga.dts
|
||||
E310_SG3 E310_sg3: check-variables E310_SG3_IP $(BUILD_OUTPUT_DIR)/usrp_e310_sg3_fpga.dts
|
||||
$(call vivado_build,E310_SG3,$(DEFS) E310_SG3=1 $(if $(DRAM),ENABLE_DRAM=1,))
|
||||
$(call post_build,$@,E310_SG3)
|
||||
$(call post_build,$@)
|
||||
|
||||
$(BUILD_OUTPUT_DIR)/%.dts: dts/%.dts dts/*.dtsi
|
||||
-mkdir -p $(BUILD_OUTPUT_DIR)
|
||||
${CC} -o $@ -E -I dts -nostdinc -undef -x assembler-with-cpp -D__DTS__ $<
|
||||
|
||||
##
|
||||
##Other Make Targets (these should be called directly)
|
||||
##----------------------------------------------------
|
||||
|
||||
##E310_SG1_IP: Build IP for E310_SG1 only. Use the -j option to build multiple IP blocks simultaneously.
|
||||
E310_SG1_IP:
|
||||
+$(call vivado_ip,E310_SG1,E310_SG1=1)
|
||||
|
||||
##E310_SG3_IP: Build IP for E310_SG3 only. Use the -j option to build multiple IP blocks simultaneously.
|
||||
E310_SG3_IP:
|
||||
+$(call vivado_ip,E310_SG3,E310_SG3=1)
|
||||
|
||||
clean: ##Clean up all target build outputs.
|
||||
@echo "Cleaning targets..."
|
||||
@rm -rf $(BUILD_BASE_DIR)/build-E3*
|
||||
@rm -rf $(BUILD_BASE_DIR)/build-E3* $(BUILD_BASE_DIR)/build-usrp* $(BUILD_DIR)
|
||||
@rm -rf $(BUILD_OUTPUT_DIR)
|
||||
|
||||
cleanall: ##Clean up all target and ip build outputs.
|
||||
@echo "Cleaning targets and IP..."
|
||||
@rm -rf build-ip
|
||||
@rm -rf $(BUILD_BASE_DIR)/build-E3*
|
||||
@rm -rf $(BUILD_BASE_DIR)/build-* $(BUILD_DIR)
|
||||
@rm -rf $(BUILD_OUTPUT_DIR)
|
||||
|
||||
help: ##Show this help message.
|
||||
|
||||
+14
-18
@@ -5,7 +5,7 @@
|
||||
##################################################
|
||||
# Project Setup
|
||||
##################################################
|
||||
TOP_MODULE = <Input arg>
|
||||
# TOP_MODULE = <Input arg>
|
||||
# NAME = <Input arg>
|
||||
# PART_ID = <Input arg>
|
||||
# ARCH = <Input arg>
|
||||
@@ -32,22 +32,15 @@ include $(LIB_DIR)/dsp/Makefile.srcs
|
||||
include $(LIB_DIR)/io_cap_gen/Makefile.srcs
|
||||
include $(LIB_DIR)/rfnoc/Makefile.srcs
|
||||
|
||||
# For the sake of convenience, we include the Makefile.srcs for the DDC, DUC,
|
||||
# radio, replay and FIFO blocks. Any other block needs to use the
|
||||
# RFNOC_OOT_MAKEFILE_SRCS variable (see below).
|
||||
include $(LIB_DIR)/rfnoc/blocks/rfnoc_block_radio/Makefile.srcs
|
||||
include $(LIB_DIR)/rfnoc/blocks/rfnoc_block_ddc/Makefile.srcs
|
||||
include $(LIB_DIR)/rfnoc/blocks/rfnoc_block_duc/Makefile.srcs
|
||||
include $(LIB_DIR)/rfnoc/blocks/rfnoc_block_replay/Makefile.srcs
|
||||
include $(LIB_DIR)/rfnoc/blocks/rfnoc_block_axi_ram_fifo/Makefile.srcs
|
||||
|
||||
# If out-of-tree modules want to be compiled into this image, then they need to
|
||||
# pass in the RFNOC_OOT_MAKEFILE_SRCS as a list of Makefile.srcs files.
|
||||
# Those files need to amend the RFNOC_OOT_SRCS variable with a list of actual
|
||||
# source files.
|
||||
-include $(RFNOC_OOT_MAKEFILE_SRCS)
|
||||
|
||||
IMAGE_CORE ?= $(DEFAULT_RFNOC_IMAGE_CORE_FILE)
|
||||
ifdef BUILD_DIR
|
||||
include $(BUILD_DIR)/Makefile.inc
|
||||
endif
|
||||
|
||||
##################################################
|
||||
# Sources
|
||||
@@ -88,7 +81,6 @@ $(FIFO_SRCS) \
|
||||
$(AURORA_PHY_SRCS) \
|
||||
$(BD_SRCS) \
|
||||
$(RADIO_SRCS) \
|
||||
$(RFNOC_SRCS) \
|
||||
$(TIMING_SRCS) \
|
||||
$(VITA_SRCS) \
|
||||
$(CAT_CAP_GEN_SRCS) \
|
||||
@@ -99,25 +91,29 @@ $(LIB_IP_XCI_SRCS) \
|
||||
$(LIB_HLS_IP_SRCS) \
|
||||
$(EXTRAM_SRCS) \
|
||||
$(CAP_GEN_GENERIC_SRCS) \
|
||||
$(RFNOC_SRCS) \
|
||||
$(RFNOC_OOT_SRCS)\
|
||||
$(RFNOC_FRAMEWORK_SRCS) $(RFNOC_BLOCK_NULL_SRC_SINK_SRCS) \
|
||||
$(RFNOC_BLOCK_DUC_SRCS) $(RFNOC_BLOCK_DDC_SRCS) $(RFNOC_BLOCK_RADIO_SRCS) \
|
||||
$(RFNOC_BLOCK_AXI_RAM_FIFO_SRCS) \
|
||||
$(RFNOC_BLOCK_REPLAY_SRCS) \
|
||||
$(RFNOC_FRAMEWORK_SRCS) \
|
||||
$(RFNOC_BLOCK_EXAMPLE_SRCS) \
|
||||
$(RFNOC_IMAGE_CORE_SRCS) \
|
||||
$(abspath $(MB_XDC))
|
||||
|
||||
IMAGE_CORE_DEF="RFNOC_IMAGE_CORE_HDR=$(call RESOLVE_PATH,$(IMAGE_CORE:.v=.vh))"
|
||||
# Pass the image core header files required by RFNoC
|
||||
# to Vivado as Verilog definitions.
|
||||
IMAGE_CORE_HEADER_DEF="RFNOC_IMAGE_CORE_HDR=$(BUILD_DIR)/rfnoc_image_core.vh"
|
||||
|
||||
##################################################
|
||||
# Dependency Targets
|
||||
##################################################
|
||||
.SECONDEXPANSION:
|
||||
|
||||
VERILOG_DEFS=$(EXTRA_DEFS) $(CUSTOM_DEFS) $(GIT_HASH_VERILOG_DEF) $(IMAGE_CORE_DEF)
|
||||
VERILOG_DEFS=$(EXTRA_DEFS) $(CUSTOM_DEFS) $(GIT_HASH_VERILOG_DEF) $(IMAGE_CORE_HEADER_DEF) $(RFNOC_IMAGE_CORE_DEFS)
|
||||
|
||||
# DESIGN_SRCS and VERILOG_DEFS must be defined
|
||||
bin: .prereqs
|
||||
@echo "Build directory:: $(BUILD_DIR)"
|
||||
@echo "Printing MB_XDC:: $(MB_XDC)"
|
||||
@echo "Printing VERILOG_DEFS:: $(VERILOG_DEFS)"
|
||||
$(call BUILD_VIVADO_DESIGN,$(abspath ./build_e31x.tcl),$(TOP_MODULE),$(ARCH),$(PART_ID))
|
||||
|
||||
synth: .prereqs
|
||||
|
||||
@@ -1,572 +0,0 @@
|
||||
//
|
||||
// Copyright 2023 Ettus Research, a National Instruments Brand
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
//
|
||||
// Module: rfnoc_image_core (for e31x)
|
||||
//
|
||||
// Description:
|
||||
//
|
||||
// The RFNoC Image Core contains the Verilog description of the RFNoC design
|
||||
// to be loaded onto the FPGA.
|
||||
//
|
||||
// This file was automatically generated by the RFNoC image builder tool.
|
||||
// Re-running that tool will overwrite this file!
|
||||
//
|
||||
// Source: e310_rfnoc_image_core.yml
|
||||
//
|
||||
|
||||
`default_nettype none
|
||||
|
||||
|
||||
module rfnoc_image_core #(
|
||||
parameter [31:0] CHDR_W = 64,
|
||||
parameter [31:0] PORT_W = 64,
|
||||
parameter [31:0] DMA_W = 64,
|
||||
parameter MTU = 10,
|
||||
parameter [15:0] PROTOVER = {8'd1, 8'd0},
|
||||
parameter RADIO_NIPC = 1
|
||||
) (
|
||||
// Clocks
|
||||
input wire chdr_aclk,
|
||||
input wire ctrl_aclk,
|
||||
input wire core_arst,
|
||||
input wire radio_clk,
|
||||
input wire dram_clk,
|
||||
// Basic
|
||||
input wire [ 15:0] device_id,
|
||||
|
||||
// IO ports /////////////////////////
|
||||
|
||||
// ctrlport
|
||||
output wire m_ctrlport_req_wr,
|
||||
output wire m_ctrlport_req_rd,
|
||||
output wire [ 19:0] m_ctrlport_req_addr,
|
||||
output wire [ 31:0] m_ctrlport_req_data,
|
||||
output wire [ 3:0] m_ctrlport_req_byte_en,
|
||||
output wire m_ctrlport_req_has_time,
|
||||
output wire [ 63:0] m_ctrlport_req_time,
|
||||
input wire m_ctrlport_resp_ack,
|
||||
input wire [ 1:0] m_ctrlport_resp_status,
|
||||
input wire [ 31:0] m_ctrlport_resp_data,
|
||||
// time
|
||||
input wire [ 63:0] radio_time,
|
||||
// radio
|
||||
input wire [ 63:0] radio_rx_data,
|
||||
input wire [ 1:0] radio_rx_stb,
|
||||
output wire [ 1:0] radio_rx_running,
|
||||
output wire [ 63:0] radio_tx_data,
|
||||
input wire [ 1:0] radio_tx_stb,
|
||||
output wire [ 1:0] radio_tx_running,
|
||||
// dram
|
||||
input wire axi_rst,
|
||||
output wire [ 7:0] m_axi_awid,
|
||||
output wire [ 383:0] m_axi_awaddr,
|
||||
output wire [ 63:0] m_axi_awlen,
|
||||
output wire [ 23:0] m_axi_awsize,
|
||||
output wire [ 15:0] m_axi_awburst,
|
||||
output wire [ 7:0] m_axi_awlock,
|
||||
output wire [ 31:0] m_axi_awcache,
|
||||
output wire [ 23:0] m_axi_awprot,
|
||||
output wire [ 31:0] m_axi_awqos,
|
||||
output wire [ 31:0] m_axi_awregion,
|
||||
output wire [ 7:0] m_axi_awuser,
|
||||
output wire [ 7:0] m_axi_awvalid,
|
||||
input wire [ 7:0] m_axi_awready,
|
||||
output wire [4191:0] m_axi_wdata,
|
||||
output wire [ 511:0] m_axi_wstrb,
|
||||
output wire [ 7:0] m_axi_wlast,
|
||||
output wire [ 7:0] m_axi_wuser,
|
||||
output wire [ 7:0] m_axi_wvalid,
|
||||
input wire [ 7:0] m_axi_wready,
|
||||
input wire [ 7:0] m_axi_bid,
|
||||
input wire [ 15:0] m_axi_bresp,
|
||||
input wire [ 7:0] m_axi_buser,
|
||||
input wire [ 7:0] m_axi_bvalid,
|
||||
output wire [ 7:0] m_axi_bready,
|
||||
output wire [ 7:0] m_axi_arid,
|
||||
output wire [ 383:0] m_axi_araddr,
|
||||
output wire [ 63:0] m_axi_arlen,
|
||||
output wire [ 23:0] m_axi_arsize,
|
||||
output wire [ 15:0] m_axi_arburst,
|
||||
output wire [ 7:0] m_axi_arlock,
|
||||
output wire [ 31:0] m_axi_arcache,
|
||||
output wire [ 31:0] m_axi_arprot,
|
||||
output wire [ 31:0] m_axi_arqos,
|
||||
output wire [ 31:0] m_axi_arregion,
|
||||
output wire [ 7:0] m_axi_aruser,
|
||||
output wire [ 7:0] m_axi_arvalid,
|
||||
input wire [ 7:0] m_axi_arready,
|
||||
input wire [ 7:0] m_axi_rid,
|
||||
input wire [4191:0] m_axi_rdata,
|
||||
input wire [ 15:0] m_axi_rresp,
|
||||
input wire [ 7:0] m_axi_rlast,
|
||||
input wire [ 7:0] m_axi_ruser,
|
||||
input wire [ 7:0] m_axi_rvalid,
|
||||
output wire [ 7:0] m_axi_rready,
|
||||
|
||||
// Transport Adapters ///////////////
|
||||
|
||||
// Transport 0 (dma)
|
||||
input wire [PORT_W-1:0] s_dma_tdata,
|
||||
input wire s_dma_tlast,
|
||||
input wire s_dma_tvalid,
|
||||
output wire s_dma_tready,
|
||||
output wire [PORT_W-1:0] m_dma_tdata,
|
||||
output wire m_dma_tlast,
|
||||
output wire m_dma_tvalid,
|
||||
input wire m_dma_tready
|
||||
);
|
||||
|
||||
localparam BLOCK_CHDR_W = 64;
|
||||
localparam BYTE_MTU = MTU + $clog2(CHDR_W/8);
|
||||
localparam BLOCK_MTU = BYTE_MTU - $clog2(BLOCK_CHDR_W/8);
|
||||
localparam EP0_W = 64;
|
||||
localparam EP0_MTU = BYTE_MTU - $clog2(EP0_W/8);
|
||||
localparam EP1_W = 64;
|
||||
localparam EP1_MTU = BYTE_MTU - $clog2(EP1_W/8);
|
||||
|
||||
wire rfnoc_chdr_clk, rfnoc_chdr_rst;
|
||||
wire rfnoc_ctrl_clk, rfnoc_ctrl_rst;
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// CHDR Crossbar
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
wire [PORT_W-1:0] xb_to_ep0_tdata ;
|
||||
wire xb_to_ep0_tlast ;
|
||||
wire xb_to_ep0_tvalid;
|
||||
wire xb_to_ep0_tready;
|
||||
wire [PORT_W-1:0] ep0_to_xb_tdata ;
|
||||
wire ep0_to_xb_tlast ;
|
||||
wire ep0_to_xb_tvalid;
|
||||
wire ep0_to_xb_tready;
|
||||
wire [PORT_W-1:0] xb_to_ep1_tdata ;
|
||||
wire xb_to_ep1_tlast ;
|
||||
wire xb_to_ep1_tvalid;
|
||||
wire xb_to_ep1_tready;
|
||||
wire [PORT_W-1:0] ep1_to_xb_tdata ;
|
||||
wire ep1_to_xb_tlast ;
|
||||
wire ep1_to_xb_tvalid;
|
||||
wire ep1_to_xb_tready;
|
||||
|
||||
chdr_crossbar_nxn #(
|
||||
.PORT_W (PORT_W),
|
||||
.NPORTS (3),
|
||||
.CHDR_WIDTHS ({EP1_W, EP0_W, DMA_W}),
|
||||
.DEFAULT_PORT (0),
|
||||
.ROUTES ({ 3'b111,
|
||||
3'b111,
|
||||
3'b111 }),
|
||||
.BYTE_MTU (BYTE_MTU),
|
||||
.ROUTE_TBL_SIZE (6),
|
||||
.MUX_ALLOC ("ROUND-ROBIN"),
|
||||
.OPTIMIZE ("AREA"),
|
||||
.NPORTS_MGMT (1),
|
||||
.EXT_RTCFG_PORT (0),
|
||||
.PROTOVER (PROTOVER)
|
||||
) chdr_crossbar_nxn_i (
|
||||
.clk (rfnoc_chdr_clk),
|
||||
.reset (rfnoc_chdr_rst),
|
||||
.device_id (device_id),
|
||||
.s_axis_tdata ({ep1_to_xb_tdata , ep0_to_xb_tdata , s_dma_tdata }),
|
||||
.s_axis_tlast ({ep1_to_xb_tlast , ep0_to_xb_tlast , s_dma_tlast }),
|
||||
.s_axis_tvalid ({ep1_to_xb_tvalid, ep0_to_xb_tvalid, s_dma_tvalid}),
|
||||
.s_axis_tready ({ep1_to_xb_tready, ep0_to_xb_tready, s_dma_tready}),
|
||||
.m_axis_tdata ({xb_to_ep1_tdata , xb_to_ep0_tdata , m_dma_tdata }),
|
||||
.m_axis_tlast ({xb_to_ep1_tlast , xb_to_ep0_tlast , m_dma_tlast }),
|
||||
.m_axis_tvalid ({xb_to_ep1_tvalid, xb_to_ep0_tvalid, m_dma_tvalid}),
|
||||
.m_axis_tready ({xb_to_ep1_tready, xb_to_ep0_tready, m_dma_tready}),
|
||||
.ext_rtcfg_stb (1'h0),
|
||||
.ext_rtcfg_addr (16'h0),
|
||||
.ext_rtcfg_data (32'h0),
|
||||
.ext_rtcfg_ack ()
|
||||
);
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Stream Endpoints
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// If requested buffer size is 0, use the minimum SRL-based FIFO size.
|
||||
// Otherwise, make sure it's at least two MTU-sized packets.
|
||||
localparam REQ_BUFF_SIZE_EP0 = 16384;
|
||||
localparam INGRESS_BUFF_SIZE_EP0 =
|
||||
REQ_BUFF_SIZE_EP0 == 0 ? 5 :
|
||||
REQ_BUFF_SIZE_EP0 < 2*(2**EP0_MTU) ? EP0_MTU+1 :
|
||||
$clog2(REQ_BUFF_SIZE_EP0);
|
||||
|
||||
wire [BLOCK_CHDR_W-1:0] m_ep0_out0_tdata;
|
||||
wire m_ep0_out0_tlast;
|
||||
wire m_ep0_out0_tvalid;
|
||||
wire m_ep0_out0_tready;
|
||||
wire [BLOCK_CHDR_W-1:0] s_ep0_in0_tdata;
|
||||
wire s_ep0_in0_tlast;
|
||||
wire s_ep0_in0_tvalid;
|
||||
wire s_ep0_in0_tready;
|
||||
wire [ 31:0] m_ep0_ctrl_tdata, s_ep0_ctrl_tdata;
|
||||
wire m_ep0_ctrl_tlast, s_ep0_ctrl_tlast;
|
||||
wire m_ep0_ctrl_tvalid, s_ep0_ctrl_tvalid;
|
||||
wire m_ep0_ctrl_tready, s_ep0_ctrl_tready;
|
||||
|
||||
chdr_stream_endpoint #(
|
||||
.DEVICE_FAMILY ("7SERIES"),
|
||||
.PROTOVER (PROTOVER),
|
||||
.CHDR_W (EP0_W),
|
||||
.BLOCK_CHDR_W (BLOCK_CHDR_W),
|
||||
.AXIS_CTRL_EN (1),
|
||||
.AXIS_DATA_EN (1),
|
||||
.NUM_DATA_I (1),
|
||||
.NUM_DATA_O (1),
|
||||
.INST_NUM (0),
|
||||
.CTRL_XBAR_PORT (1),
|
||||
.INGRESS_BUFF_SIZE (INGRESS_BUFF_SIZE_EP0),
|
||||
.MTU (EP0_MTU),
|
||||
.REPORT_STRM_ERRS (1)
|
||||
) ep0_i (
|
||||
.rfnoc_chdr_clk (rfnoc_chdr_clk),
|
||||
.rfnoc_chdr_rst (rfnoc_chdr_rst),
|
||||
.rfnoc_ctrl_clk (rfnoc_ctrl_clk),
|
||||
.rfnoc_ctrl_rst (rfnoc_ctrl_rst),
|
||||
.device_id (device_id),
|
||||
.s_axis_chdr_tdata (xb_to_ep0_tdata),
|
||||
.s_axis_chdr_tlast (xb_to_ep0_tlast),
|
||||
.s_axis_chdr_tvalid (xb_to_ep0_tvalid),
|
||||
.s_axis_chdr_tready (xb_to_ep0_tready),
|
||||
.m_axis_chdr_tdata (ep0_to_xb_tdata),
|
||||
.m_axis_chdr_tlast (ep0_to_xb_tlast),
|
||||
.m_axis_chdr_tvalid (ep0_to_xb_tvalid),
|
||||
.m_axis_chdr_tready (ep0_to_xb_tready),
|
||||
.s_axis_data_tdata ({s_ep0_in0_tdata}),
|
||||
.s_axis_data_tlast ({s_ep0_in0_tlast}),
|
||||
.s_axis_data_tvalid ({s_ep0_in0_tvalid}),
|
||||
.s_axis_data_tready ({s_ep0_in0_tready}),
|
||||
.m_axis_data_tdata ({m_ep0_out0_tdata}),
|
||||
.m_axis_data_tlast ({m_ep0_out0_tlast}),
|
||||
.m_axis_data_tvalid ({m_ep0_out0_tvalid}),
|
||||
.m_axis_data_tready ({m_ep0_out0_tready}),
|
||||
.s_axis_ctrl_tdata (s_ep0_ctrl_tdata),
|
||||
.s_axis_ctrl_tlast (s_ep0_ctrl_tlast),
|
||||
.s_axis_ctrl_tvalid (s_ep0_ctrl_tvalid),
|
||||
.s_axis_ctrl_tready (s_ep0_ctrl_tready),
|
||||
.m_axis_ctrl_tdata (m_ep0_ctrl_tdata),
|
||||
.m_axis_ctrl_tlast (m_ep0_ctrl_tlast),
|
||||
.m_axis_ctrl_tvalid (m_ep0_ctrl_tvalid),
|
||||
.m_axis_ctrl_tready (m_ep0_ctrl_tready),
|
||||
.strm_seq_err_stb (),
|
||||
.strm_data_err_stb (),
|
||||
.strm_route_err_stb (),
|
||||
.signal_data_err (1'b0)
|
||||
);
|
||||
|
||||
// If requested buffer size is 0, use the minimum SRL-based FIFO size.
|
||||
// Otherwise, make sure it's at least two MTU-sized packets.
|
||||
localparam REQ_BUFF_SIZE_EP1 = 16384;
|
||||
localparam INGRESS_BUFF_SIZE_EP1 =
|
||||
REQ_BUFF_SIZE_EP1 == 0 ? 5 :
|
||||
REQ_BUFF_SIZE_EP1 < 2*(2**EP1_MTU) ? EP1_MTU+1 :
|
||||
$clog2(REQ_BUFF_SIZE_EP1);
|
||||
|
||||
wire [BLOCK_CHDR_W-1:0] m_ep1_out0_tdata;
|
||||
wire m_ep1_out0_tlast;
|
||||
wire m_ep1_out0_tvalid;
|
||||
wire m_ep1_out0_tready;
|
||||
wire [BLOCK_CHDR_W-1:0] s_ep1_in0_tdata;
|
||||
wire s_ep1_in0_tlast;
|
||||
wire s_ep1_in0_tvalid;
|
||||
wire s_ep1_in0_tready;
|
||||
wire [ 31:0] m_ep1_ctrl_tdata, s_ep1_ctrl_tdata;
|
||||
wire m_ep1_ctrl_tlast, s_ep1_ctrl_tlast;
|
||||
wire m_ep1_ctrl_tvalid, s_ep1_ctrl_tvalid;
|
||||
wire m_ep1_ctrl_tready, s_ep1_ctrl_tready;
|
||||
|
||||
chdr_stream_endpoint #(
|
||||
.DEVICE_FAMILY ("7SERIES"),
|
||||
.PROTOVER (PROTOVER),
|
||||
.CHDR_W (EP1_W),
|
||||
.BLOCK_CHDR_W (BLOCK_CHDR_W),
|
||||
.AXIS_CTRL_EN (0),
|
||||
.AXIS_DATA_EN (1),
|
||||
.NUM_DATA_I (1),
|
||||
.NUM_DATA_O (1),
|
||||
.INST_NUM (1),
|
||||
.CTRL_XBAR_PORT (2),
|
||||
.INGRESS_BUFF_SIZE (INGRESS_BUFF_SIZE_EP1),
|
||||
.MTU (EP1_MTU),
|
||||
.REPORT_STRM_ERRS (1)
|
||||
) ep1_i (
|
||||
.rfnoc_chdr_clk (rfnoc_chdr_clk),
|
||||
.rfnoc_chdr_rst (rfnoc_chdr_rst),
|
||||
.rfnoc_ctrl_clk (rfnoc_ctrl_clk),
|
||||
.rfnoc_ctrl_rst (rfnoc_ctrl_rst),
|
||||
.device_id (device_id),
|
||||
.s_axis_chdr_tdata (xb_to_ep1_tdata),
|
||||
.s_axis_chdr_tlast (xb_to_ep1_tlast),
|
||||
.s_axis_chdr_tvalid (xb_to_ep1_tvalid),
|
||||
.s_axis_chdr_tready (xb_to_ep1_tready),
|
||||
.m_axis_chdr_tdata (ep1_to_xb_tdata),
|
||||
.m_axis_chdr_tlast (ep1_to_xb_tlast),
|
||||
.m_axis_chdr_tvalid (ep1_to_xb_tvalid),
|
||||
.m_axis_chdr_tready (ep1_to_xb_tready),
|
||||
.s_axis_data_tdata ({s_ep1_in0_tdata}),
|
||||
.s_axis_data_tlast ({s_ep1_in0_tlast}),
|
||||
.s_axis_data_tvalid ({s_ep1_in0_tvalid}),
|
||||
.s_axis_data_tready ({s_ep1_in0_tready}),
|
||||
.m_axis_data_tdata ({m_ep1_out0_tdata}),
|
||||
.m_axis_data_tlast ({m_ep1_out0_tlast}),
|
||||
.m_axis_data_tvalid ({m_ep1_out0_tvalid}),
|
||||
.m_axis_data_tready ({m_ep1_out0_tready}),
|
||||
.s_axis_ctrl_tdata (s_ep1_ctrl_tdata),
|
||||
.s_axis_ctrl_tlast (s_ep1_ctrl_tlast),
|
||||
.s_axis_ctrl_tvalid (s_ep1_ctrl_tvalid),
|
||||
.s_axis_ctrl_tready (s_ep1_ctrl_tready),
|
||||
.m_axis_ctrl_tdata (m_ep1_ctrl_tdata),
|
||||
.m_axis_ctrl_tlast (m_ep1_ctrl_tlast),
|
||||
.m_axis_ctrl_tvalid (m_ep1_ctrl_tvalid),
|
||||
.m_axis_ctrl_tready (m_ep1_ctrl_tready),
|
||||
.strm_seq_err_stb (),
|
||||
.strm_data_err_stb (),
|
||||
.strm_route_err_stb (),
|
||||
.signal_data_err (1'b0)
|
||||
);
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Control Crossbar
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
wire [31:0] m_core_ctrl_tdata, s_core_ctrl_tdata;
|
||||
wire m_core_ctrl_tlast, s_core_ctrl_tlast;
|
||||
wire m_core_ctrl_tvalid, s_core_ctrl_tvalid;
|
||||
wire m_core_ctrl_tready, s_core_ctrl_tready;
|
||||
wire [31:0] m_radio0_ctrl_tdata, s_radio0_ctrl_tdata;
|
||||
wire m_radio0_ctrl_tlast, s_radio0_ctrl_tlast;
|
||||
wire m_radio0_ctrl_tvalid, s_radio0_ctrl_tvalid;
|
||||
wire m_radio0_ctrl_tready, s_radio0_ctrl_tready;
|
||||
|
||||
axis_ctrl_crossbar_nxn #(
|
||||
.WIDTH (32),
|
||||
.NPORTS (3),
|
||||
.TOPOLOGY ("TORUS"),
|
||||
.INGRESS_BUFF_SIZE(5),
|
||||
.ROUTER_BUFF_SIZE (5),
|
||||
.ROUTING_ALLOC ("WORMHOLE"),
|
||||
.SWITCH_ALLOC ("PRIO")
|
||||
) ctrl_xb_i (
|
||||
.clk (rfnoc_ctrl_clk),
|
||||
.reset (rfnoc_ctrl_rst),
|
||||
.s_axis_tdata ({m_radio0_ctrl_tdata , m_ep0_ctrl_tdata , m_core_ctrl_tdata }),
|
||||
.s_axis_tvalid ({m_radio0_ctrl_tvalid, m_ep0_ctrl_tvalid, m_core_ctrl_tvalid}),
|
||||
.s_axis_tlast ({m_radio0_ctrl_tlast , m_ep0_ctrl_tlast , m_core_ctrl_tlast }),
|
||||
.s_axis_tready ({m_radio0_ctrl_tready, m_ep0_ctrl_tready, m_core_ctrl_tready}),
|
||||
.m_axis_tdata ({s_radio0_ctrl_tdata , s_ep0_ctrl_tdata , s_core_ctrl_tdata }),
|
||||
.m_axis_tvalid ({s_radio0_ctrl_tvalid, s_ep0_ctrl_tvalid, s_core_ctrl_tvalid}),
|
||||
.m_axis_tlast ({s_radio0_ctrl_tlast , s_ep0_ctrl_tlast , s_core_ctrl_tlast }),
|
||||
.m_axis_tready ({s_radio0_ctrl_tready, s_ep0_ctrl_tready, s_core_ctrl_tready}),
|
||||
.deadlock_detected()
|
||||
);
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// RFNoC Core Kernel
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
wire [(512*1)-1:0] rfnoc_core_config, rfnoc_core_status;
|
||||
|
||||
rfnoc_core_kernel #(
|
||||
.PROTOVER (PROTOVER),
|
||||
.DEVICE_TYPE (16'hE310),
|
||||
.DEVICE_FAMILY ("7SERIES"),
|
||||
.SAFE_START_CLKS (0),
|
||||
.NUM_BLOCKS (1),
|
||||
.NUM_STREAM_ENDPOINTS(2),
|
||||
.NUM_ENDPOINTS_CTRL (1),
|
||||
.NUM_TRANSPORTS (1),
|
||||
.NUM_EDGES (4),
|
||||
.CHDR_XBAR_PRESENT (1),
|
||||
.EDGE_TBL ({
|
||||
{10'd03, 6'd01, 10'd02, 6'd00},
|
||||
{10'd02, 6'd00, 10'd03, 6'd01},
|
||||
{10'd03, 6'd00, 10'd01, 6'd00},
|
||||
{10'd01, 6'd00, 10'd03, 6'd00}
|
||||
})
|
||||
) core_kernel_i (
|
||||
.chdr_aclk (chdr_aclk),
|
||||
.chdr_aclk_locked (1'b1),
|
||||
.ctrl_aclk (ctrl_aclk),
|
||||
.ctrl_aclk_locked (1'b1),
|
||||
.core_arst (core_arst),
|
||||
.core_chdr_clk (rfnoc_chdr_clk),
|
||||
.core_chdr_rst (rfnoc_chdr_rst),
|
||||
.core_ctrl_clk (rfnoc_ctrl_clk),
|
||||
.core_ctrl_rst (rfnoc_ctrl_rst),
|
||||
.s_axis_ctrl_tdata (s_core_ctrl_tdata),
|
||||
.s_axis_ctrl_tlast (s_core_ctrl_tlast),
|
||||
.s_axis_ctrl_tvalid (s_core_ctrl_tvalid),
|
||||
.s_axis_ctrl_tready (s_core_ctrl_tready),
|
||||
.m_axis_ctrl_tdata (m_core_ctrl_tdata),
|
||||
.m_axis_ctrl_tlast (m_core_ctrl_tlast),
|
||||
.m_axis_ctrl_tvalid (m_core_ctrl_tvalid),
|
||||
.m_axis_ctrl_tready (m_core_ctrl_tready),
|
||||
.device_id (device_id),
|
||||
.rfnoc_core_config (rfnoc_core_config),
|
||||
.rfnoc_core_status (rfnoc_core_status)
|
||||
);
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Blocks
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
//-----------------------------------
|
||||
// radio0
|
||||
//-----------------------------------
|
||||
|
||||
wire radio0_radio_clk;
|
||||
wire [BLOCK_CHDR_W-1:0] s_radio0_in_1_tdata , s_radio0_in_0_tdata ;
|
||||
wire s_radio0_in_1_tlast , s_radio0_in_0_tlast ;
|
||||
wire s_radio0_in_1_tvalid, s_radio0_in_0_tvalid;
|
||||
wire s_radio0_in_1_tready, s_radio0_in_0_tready;
|
||||
wire [BLOCK_CHDR_W-1:0] m_radio0_out_1_tdata , m_radio0_out_0_tdata ;
|
||||
wire m_radio0_out_1_tlast , m_radio0_out_0_tlast ;
|
||||
wire m_radio0_out_1_tvalid, m_radio0_out_0_tvalid;
|
||||
wire m_radio0_out_1_tready, m_radio0_out_0_tready;
|
||||
|
||||
// ctrlport
|
||||
wire radio0_m_ctrlport_req_wr;
|
||||
wire radio0_m_ctrlport_req_rd;
|
||||
wire [ 19:0] radio0_m_ctrlport_req_addr;
|
||||
wire [ 31:0] radio0_m_ctrlport_req_data;
|
||||
wire [ 3:0] radio0_m_ctrlport_req_byte_en;
|
||||
wire radio0_m_ctrlport_req_has_time;
|
||||
wire [ 63:0] radio0_m_ctrlport_req_time;
|
||||
wire radio0_m_ctrlport_resp_ack;
|
||||
wire [ 1:0] radio0_m_ctrlport_resp_status;
|
||||
wire [ 31:0] radio0_m_ctrlport_resp_data;
|
||||
// time
|
||||
wire [ 63:0] radio0_radio_time;
|
||||
// radio
|
||||
wire [32*RADIO_NIPC*2-1:0] radio0_radio_rx_data;
|
||||
wire [ 1:0] radio0_radio_rx_stb;
|
||||
wire [ 1:0] radio0_radio_rx_running;
|
||||
wire [32*RADIO_NIPC*2-1:0] radio0_radio_tx_data;
|
||||
wire [ 1:0] radio0_radio_tx_stb;
|
||||
wire [ 1:0] radio0_radio_tx_running;
|
||||
|
||||
rfnoc_block_radio #(
|
||||
.THIS_PORTID (2),
|
||||
.CHDR_W (BLOCK_CHDR_W),
|
||||
.NUM_PORTS (2),
|
||||
.NIPC (RADIO_NIPC),
|
||||
.ITEM_W (32),
|
||||
.MTU (BLOCK_MTU)
|
||||
) b_radio0_0 (
|
||||
.rfnoc_chdr_clk (rfnoc_chdr_clk),
|
||||
.rfnoc_ctrl_clk (rfnoc_ctrl_clk),
|
||||
.radio_clk (radio0_radio_clk),
|
||||
.rfnoc_core_config (rfnoc_core_config[512*1-1:512*0]),
|
||||
.rfnoc_core_status (rfnoc_core_status[512*1-1:512*0]),
|
||||
.m_ctrlport_req_wr (radio0_m_ctrlport_req_wr),
|
||||
.m_ctrlport_req_rd (radio0_m_ctrlport_req_rd),
|
||||
.m_ctrlport_req_addr (radio0_m_ctrlport_req_addr),
|
||||
.m_ctrlport_req_data (radio0_m_ctrlport_req_data),
|
||||
.m_ctrlport_req_byte_en(radio0_m_ctrlport_req_byte_en),
|
||||
.m_ctrlport_req_has_time(radio0_m_ctrlport_req_has_time),
|
||||
.m_ctrlport_req_time (radio0_m_ctrlport_req_time),
|
||||
.m_ctrlport_resp_ack (radio0_m_ctrlport_resp_ack),
|
||||
.m_ctrlport_resp_status(radio0_m_ctrlport_resp_status),
|
||||
.m_ctrlport_resp_data(radio0_m_ctrlport_resp_data),
|
||||
.radio_time (radio0_radio_time),
|
||||
.radio_rx_data (radio0_radio_rx_data),
|
||||
.radio_rx_stb (radio0_radio_rx_stb),
|
||||
.radio_rx_running (radio0_radio_rx_running),
|
||||
.radio_tx_data (radio0_radio_tx_data),
|
||||
.radio_tx_stb (radio0_radio_tx_stb),
|
||||
.radio_tx_running (radio0_radio_tx_running),
|
||||
.s_rfnoc_chdr_tdata ({s_radio0_in_1_tdata , s_radio0_in_0_tdata }),
|
||||
.s_rfnoc_chdr_tlast ({s_radio0_in_1_tlast , s_radio0_in_0_tlast }),
|
||||
.s_rfnoc_chdr_tvalid ({s_radio0_in_1_tvalid, s_radio0_in_0_tvalid}),
|
||||
.s_rfnoc_chdr_tready ({s_radio0_in_1_tready, s_radio0_in_0_tready}),
|
||||
.m_rfnoc_chdr_tdata ({m_radio0_out_1_tdata , m_radio0_out_0_tdata }),
|
||||
.m_rfnoc_chdr_tlast ({m_radio0_out_1_tlast , m_radio0_out_0_tlast }),
|
||||
.m_rfnoc_chdr_tvalid ({m_radio0_out_1_tvalid, m_radio0_out_0_tvalid}),
|
||||
.m_rfnoc_chdr_tready ({m_radio0_out_1_tready, m_radio0_out_0_tready}),
|
||||
.s_rfnoc_ctrl_tdata (s_radio0_ctrl_tdata ),
|
||||
.s_rfnoc_ctrl_tlast (s_radio0_ctrl_tlast ),
|
||||
.s_rfnoc_ctrl_tvalid (s_radio0_ctrl_tvalid),
|
||||
.s_rfnoc_ctrl_tready (s_radio0_ctrl_tready),
|
||||
.m_rfnoc_ctrl_tdata (m_radio0_ctrl_tdata ),
|
||||
.m_rfnoc_ctrl_tlast (m_radio0_ctrl_tlast ),
|
||||
.m_rfnoc_ctrl_tvalid (m_radio0_ctrl_tvalid),
|
||||
.m_rfnoc_ctrl_tready (m_radio0_ctrl_tready)
|
||||
);
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Static Router
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
assign s_radio0_in_0_tdata = m_ep0_out0_tdata;
|
||||
assign s_radio0_in_0_tlast = m_ep0_out0_tlast;
|
||||
assign s_radio0_in_0_tvalid = m_ep0_out0_tvalid;
|
||||
assign m_ep0_out0_tready = s_radio0_in_0_tready;
|
||||
|
||||
assign s_ep0_in0_tdata = m_radio0_out_0_tdata;
|
||||
assign s_ep0_in0_tlast = m_radio0_out_0_tlast;
|
||||
assign s_ep0_in0_tvalid = m_radio0_out_0_tvalid;
|
||||
assign m_radio0_out_0_tready = s_ep0_in0_tready;
|
||||
|
||||
assign s_radio0_in_1_tdata = m_ep1_out0_tdata;
|
||||
assign s_radio0_in_1_tlast = m_ep1_out0_tlast;
|
||||
assign s_radio0_in_1_tvalid = m_ep1_out0_tvalid;
|
||||
assign m_ep1_out0_tready = s_radio0_in_1_tready;
|
||||
|
||||
assign s_ep1_in0_tdata = m_radio0_out_1_tdata;
|
||||
assign s_ep1_in0_tlast = m_radio0_out_1_tlast;
|
||||
assign s_ep1_in0_tvalid = m_radio0_out_1_tvalid;
|
||||
assign m_radio0_out_1_tready = s_ep1_in0_tready;
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Unused Ports
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Clock Domains and Resets
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
assign radio0_radio_clk = radio_clk;
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// IO Port Connection
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
// Master/Slave Connections:
|
||||
assign m_ctrlport_req_wr = radio0_m_ctrlport_req_wr;
|
||||
assign m_ctrlport_req_rd = radio0_m_ctrlport_req_rd;
|
||||
assign m_ctrlport_req_addr = radio0_m_ctrlport_req_addr;
|
||||
assign m_ctrlport_req_data = radio0_m_ctrlport_req_data;
|
||||
assign m_ctrlport_req_byte_en = radio0_m_ctrlport_req_byte_en;
|
||||
assign m_ctrlport_req_has_time = radio0_m_ctrlport_req_has_time;
|
||||
assign m_ctrlport_req_time = radio0_m_ctrlport_req_time;
|
||||
assign radio0_m_ctrlport_resp_ack = m_ctrlport_resp_ack;
|
||||
assign radio0_m_ctrlport_resp_status = m_ctrlport_resp_status;
|
||||
assign radio0_m_ctrlport_resp_data = m_ctrlport_resp_data;
|
||||
|
||||
assign radio0_radio_rx_data = radio_rx_data;
|
||||
assign radio0_radio_rx_stb = radio_rx_stb;
|
||||
assign radio_rx_running = radio0_radio_rx_running;
|
||||
assign radio_tx_data = radio0_radio_tx_data;
|
||||
assign radio0_radio_tx_stb = radio_tx_stb;
|
||||
assign radio_tx_running = radio0_radio_tx_running;
|
||||
|
||||
// Broadcaster/Listener Connections:
|
||||
assign radio0_radio_time = radio_time;
|
||||
|
||||
endmodule
|
||||
|
||||
|
||||
`default_nettype wire
|
||||
@@ -1,19 +0,0 @@
|
||||
//
|
||||
// Copyright 2023 Ettus Research, a National Instruments Brand
|
||||
//
|
||||
// SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
//
|
||||
// Header: rfnoc_image_core.vh (for e31x)
|
||||
//
|
||||
// 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: e310_rfnoc_image_core.yml
|
||||
//
|
||||
|
||||
`define CHDR_WIDTH 64
|
||||
`define RFNOC_PROTOVER { 8'd1, 8'd0 }
|
||||
@@ -8,8 +8,10 @@ license: >- # License information used in file heade
|
||||
version: '1.0' # File version
|
||||
chdr_width: 64 # Bit width of the CHDR bus for this image
|
||||
device: 'e310' # USRP type
|
||||
image_core_name: 'e310' # Name to use for the RFNoC Image Core files
|
||||
default_target: 'E310_SG3'
|
||||
image_core_name: 'usrp_e310_sg3_fpga' # Name to use for the generated output files.
|
||||
# Change image_core_name and default_target in tandem,
|
||||
# because we won't generate the correct DTS files otherwise.
|
||||
|
||||
# A list of all stream endpoints in design
|
||||
# ----------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user