fmcomms8: ZCU102: Initial commit

main
Adrian Costina 2019-10-31 14:56:21 +00:00
parent ea06fcd7b6
commit 016a1d540d
8 changed files with 902 additions and 0 deletions

View File

@ -0,0 +1,6 @@
####################################################################################
## Copyright 2018(c) Analog Devices, Inc.
## Auto-generated, do not modify!
####################################################################################
include ../scripts/project-toplevel.mk

View File

@ -0,0 +1,246 @@
create_bd_port -dir I ref_clk_c
create_bd_port -dir I ref_clk_d
create_bd_port -dir I core_clk_c
create_bd_port -dir I core_clk_d
# TX parameters
set TX_NUM_OF_LANES 8 ; # L
set TX_NUM_OF_CONVERTERS 8 ; # M
set TX_SAMPLES_PER_FRAME 1 ; # S
set TX_SAMPLE_WIDTH 16 ; # N/NP
set TX_SAMPLES_PER_CHANNEL 2 ; # L * 32 / (M * N)
# RX parameters
set RX_NUM_OF_LANES 4 ; # L
set RX_NUM_OF_CONVERTERS 8 ; # M
set RX_SAMPLES_PER_FRAME 1 ; # S
set RX_SAMPLE_WIDTH 16 ; # N/NP
set RX_SAMPLES_PER_CHANNEL 1 ; # L * 32 / (M * N)
# RX Observation parameters
set OBS_NUM_OF_LANES 4 ; # L
set OBS_NUM_OF_CONVERTERS 4 ; # M
set OBS_SAMPLES_PER_FRAME 1 ; # S
set OBS_SAMPLE_WIDTH 16 ; # N/NP
set OBS_SAMPLES_PER_CHANNEL 2 ; # L * 32 / (M * N)
source $ad_hdl_dir/library/jesd204/scripts/jesd204.tcl
ad_ip_instance axi_adxcvr axi_adrv9009_fmc_tx_xcvr
ad_ip_parameter axi_adrv9009_fmc_tx_xcvr CONFIG.NUM_OF_LANES $TX_NUM_OF_LANES
ad_ip_parameter axi_adrv9009_fmc_tx_xcvr CONFIG.QPLL_ENABLE 1
ad_ip_parameter axi_adrv9009_fmc_tx_xcvr CONFIG.TX_OR_RX_N 1
adi_axi_jesd204_tx_create axi_adrv9009_fmc_tx_jesd $TX_NUM_OF_LANES
set_property -dict [list CONFIG.SYSREF_IOB {false}] [get_bd_cells axi_adrv9009_fmc_tx_jesd/tx]
ad_ip_instance util_upack2 util_fmc_tx_upack [list \
NUM_OF_CHANNELS $TX_NUM_OF_CONVERTERS \
SAMPLES_PER_CHANNEL $TX_SAMPLES_PER_CHANNEL \
SAMPLE_DATA_WIDTH $TX_SAMPLE_WIDTH \
]
adi_tpl_jesd204_tx_create tx_adrv9009_fmc_tpl_core $TX_NUM_OF_LANES \
$TX_NUM_OF_CONVERTERS \
$TX_SAMPLES_PER_FRAME \
$TX_SAMPLE_WIDTH
ad_ip_instance axi_dmac axi_adrv9009_fmc_tx_dma
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.DMA_TYPE_SRC 0
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.DMA_TYPE_DEST 1
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.CYCLIC 1
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.AXI_SLICE_SRC 1
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.AXI_SLICE_DEST 1
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.DMA_2D_TRANSFER 0
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.DMA_DATA_WIDTH_DEST 128
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.DMA_DATA_WIDTH_SRC 128
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.FIFO_SIZE 32
ad_ip_parameter axi_adrv9009_fmc_tx_dma CONFIG.MAX_BYTES_PER_BURST 512
ad_ip_instance axi_adxcvr axi_adrv9009_fmc_rx_xcvr
ad_ip_parameter axi_adrv9009_fmc_rx_xcvr CONFIG.NUM_OF_LANES $RX_NUM_OF_LANES
ad_ip_parameter axi_adrv9009_fmc_rx_xcvr CONFIG.QPLL_ENABLE 0
ad_ip_parameter axi_adrv9009_fmc_rx_xcvr CONFIG.TX_OR_RX_N 0
adi_axi_jesd204_rx_create axi_adrv9009_fmc_rx_jesd $RX_NUM_OF_LANES
ad_ip_instance util_cpack2 util_fmc_rx_cpack [list \
NUM_OF_CHANNELS $RX_NUM_OF_CONVERTERS \
SAMPLES_PER_CHANNEL $RX_SAMPLES_PER_CHANNEL \
SAMPLE_DATA_WIDTH $RX_SAMPLE_WIDTH \
]
adi_tpl_jesd204_rx_create rx_adrv9009_fmc_tpl_core $RX_NUM_OF_LANES \
$RX_NUM_OF_CONVERTERS \
$RX_SAMPLES_PER_FRAME \
$RX_SAMPLE_WIDTH
ad_ip_instance axi_dmac axi_adrv9009_fmc_rx_dma
ad_ip_parameter axi_adrv9009_fmc_rx_dma CONFIG.DMA_TYPE_SRC 2
ad_ip_parameter axi_adrv9009_fmc_rx_dma CONFIG.DMA_TYPE_DEST 0
ad_ip_parameter axi_adrv9009_fmc_rx_dma CONFIG.CYCLIC 0
ad_ip_parameter axi_adrv9009_fmc_rx_dma CONFIG.SYNC_TRANSFER_START 0
ad_ip_parameter axi_adrv9009_fmc_rx_dma CONFIG.AXI_SLICE_SRC 1
ad_ip_parameter axi_adrv9009_fmc_rx_dma CONFIG.AXI_SLICE_DEST 1
ad_ip_parameter axi_adrv9009_fmc_rx_dma CONFIG.DMA_2D_TRANSFER 0
ad_ip_parameter axi_adrv9009_fmc_rx_dma CONFIG.DMA_DATA_WIDTH_SRC 128
ad_ip_parameter axi_adrv9009_fmc_rx_dma CONFIG.DMA_DATA_WIDTH_DEST 128
ad_ip_instance axi_adxcvr axi_adrv9009_fmc_obs_xcvr
ad_ip_parameter axi_adrv9009_fmc_obs_xcvr CONFIG.NUM_OF_LANES $RX_NUM_OF_LANES
ad_ip_parameter axi_adrv9009_fmc_obs_xcvr CONFIG.QPLL_ENABLE 0
ad_ip_parameter axi_adrv9009_fmc_obs_xcvr CONFIG.TX_OR_RX_N 0
adi_axi_jesd204_rx_create axi_adrv9009_fmc_obs_jesd $OBS_NUM_OF_LANES
ad_ip_instance util_cpack2 util_fmc_obs_cpack [list \
NUM_OF_CHANNELS $OBS_NUM_OF_CONVERTERS \
SAMPLES_PER_CHANNEL $OBS_SAMPLES_PER_CHANNEL\
SAMPLE_DATA_WIDTH $OBS_SAMPLE_WIDTH \
]
adi_tpl_jesd204_rx_create obs_adrv9009_fmc_tpl_core $OBS_NUM_OF_LANES \
$OBS_NUM_OF_CONVERTERS \
$OBS_SAMPLES_PER_FRAME \
$OBS_SAMPLE_WIDTH
ad_ip_instance axi_dmac axi_adrv9009_fmc_obs_dma
ad_ip_parameter axi_adrv9009_fmc_obs_dma CONFIG.DMA_TYPE_SRC 2
ad_ip_parameter axi_adrv9009_fmc_obs_dma CONFIG.DMA_TYPE_DEST 0
ad_ip_parameter axi_adrv9009_fmc_obs_dma CONFIG.CYCLIC 0
ad_ip_parameter axi_adrv9009_fmc_obs_dma CONFIG.SYNC_TRANSFER_START 1
ad_ip_parameter axi_adrv9009_fmc_obs_dma CONFIG.AXI_SLICE_SRC 1
ad_ip_parameter axi_adrv9009_fmc_obs_dma CONFIG.AXI_SLICE_DEST 1
ad_ip_parameter axi_adrv9009_fmc_obs_dma CONFIG.DMA_2D_TRANSFER 0
ad_ip_parameter axi_adrv9009_fmc_obs_dma CONFIG.DMA_DATA_WIDTH_SRC 128
ad_ip_parameter axi_adrv9009_fmc_obs_dma CONFIG.DMA_DATA_WIDTH_DEST 128
ad_ip_instance util_adxcvr util_adrv9009_fmc_xcvr
ad_ip_parameter util_adrv9009_fmc_xcvr CONFIG.RX_NUM_OF_LANES [expr $RX_NUM_OF_LANES+$OBS_NUM_OF_LANES]
ad_ip_parameter util_adrv9009_fmc_xcvr CONFIG.TX_NUM_OF_LANES $TX_NUM_OF_LANES
ad_ip_parameter util_adrv9009_fmc_xcvr CONFIG.TX_OUT_DIV 2
ad_ip_parameter util_adrv9009_fmc_xcvr CONFIG.CPLL_FBDIV 4
ad_ip_parameter util_adrv9009_fmc_xcvr CONFIG.RX_CLK25_DIV 10
ad_ip_parameter util_adrv9009_fmc_xcvr CONFIG.TX_CLK25_DIV 10
ad_ip_parameter util_adrv9009_fmc_xcvr CONFIG.QPLL_FBDIV 80
ad_ip_parameter util_adrv9009_fmc_xcvr CONFIG.QPLL_REFCLK_DIV 1
ad_xcvrpll ref_clk_c util_adrv9009_fmc_xcvr/qpll_ref_clk_0
ad_xcvrpll ref_clk_d util_adrv9009_fmc_xcvr/cpll_ref_clk_0
ad_xcvrpll ref_clk_d util_adrv9009_fmc_xcvr/cpll_ref_clk_1
ad_xcvrpll ref_clk_c util_adrv9009_fmc_xcvr/cpll_ref_clk_2
ad_xcvrpll ref_clk_c util_adrv9009_fmc_xcvr/cpll_ref_clk_3
ad_xcvrpll ref_clk_c util_adrv9009_fmc_xcvr/qpll_ref_clk_4
ad_xcvrpll ref_clk_d util_adrv9009_fmc_xcvr/cpll_ref_clk_4
ad_xcvrpll ref_clk_d util_adrv9009_fmc_xcvr/cpll_ref_clk_5
ad_xcvrpll ref_clk_c util_adrv9009_fmc_xcvr/cpll_ref_clk_6
ad_xcvrpll ref_clk_c util_adrv9009_fmc_xcvr/cpll_ref_clk_7
ad_xcvrpll axi_adrv9009_fmc_tx_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_qpll_rst_0
ad_xcvrpll axi_adrv9009_fmc_rx_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_cpll_rst_0
ad_xcvrpll axi_adrv9009_fmc_rx_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_cpll_rst_1
ad_xcvrpll axi_adrv9009_fmc_obs_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_cpll_rst_2
ad_xcvrpll axi_adrv9009_fmc_obs_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_cpll_rst_3
ad_xcvrpll axi_adrv9009_fmc_tx_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_qpll_rst_4
ad_xcvrpll axi_adrv9009_fmc_rx_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_cpll_rst_4
ad_xcvrpll axi_adrv9009_fmc_rx_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_cpll_rst_5
ad_xcvrpll axi_adrv9009_fmc_obs_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_cpll_rst_6
ad_xcvrpll axi_adrv9009_fmc_obs_xcvr/up_pll_rst util_adrv9009_fmc_xcvr/up_cpll_rst_7
ad_connect sys_cpu_resetn util_adrv9009_fmc_xcvr/up_rstn
ad_connect sys_cpu_clk util_adrv9009_fmc_xcvr/up_clk
ad_xcvrcon util_adrv9009_fmc_xcvr axi_adrv9009_fmc_tx_xcvr axi_adrv9009_fmc_tx_jesd {} core_clk_c
ad_xcvrcon util_adrv9009_fmc_xcvr axi_adrv9009_fmc_rx_xcvr axi_adrv9009_fmc_rx_jesd {0 1 4 5} core_clk_d
ad_xcvrcon util_adrv9009_fmc_xcvr axi_adrv9009_fmc_obs_xcvr axi_adrv9009_fmc_obs_jesd {2 3 6 7} core_clk_c
ad_connect core_clk_c tx_adrv9009_fmc_tpl_core/link_clk
ad_connect axi_adrv9009_fmc_tx_jesd/tx_data tx_adrv9009_fmc_tpl_core/link
ad_connect core_clk_c util_fmc_tx_upack/clk
ad_connect core_clk_c_rstgen/peripheral_reset util_fmc_tx_upack/reset
ad_connect tx_adrv9009_fmc_tpl_core/dac_valid_0 util_fmc_tx_upack/fifo_rd_en
for {set i 0} {$i < $TX_NUM_OF_CONVERTERS} {incr i} {
ad_connect util_fmc_tx_upack/fifo_rd_data_$i tx_adrv9009_fmc_tpl_core/dac_data_$i
ad_connect tx_adrv9009_fmc_tpl_core/dac_enable_$i util_fmc_tx_upack/enable_$i
}
ad_connect tx_adrv9009_fmc_tpl_core/dac_dunf util_fmc_tx_upack/fifo_rd_underflow
ad_connect core_clk_d rx_adrv9009_fmc_tpl_core/link_clk
ad_connect axi_adrv9009_fmc_rx_jesd/rx_sof rx_adrv9009_fmc_tpl_core/link_sof
ad_connect axi_adrv9009_fmc_rx_jesd/rx_data_tdata rx_adrv9009_fmc_tpl_core/link_data
ad_connect axi_adrv9009_fmc_rx_jesd/rx_data_tvalid rx_adrv9009_fmc_tpl_core/link_valid
ad_connect core_clk_d util_fmc_rx_cpack/clk
ad_connect core_clk_d_rstgen/peripheral_reset util_fmc_rx_cpack/reset
ad_connect rx_adrv9009_fmc_tpl_core/adc_valid_0 util_fmc_rx_cpack/fifo_wr_en
for {set i 0} {$i < $RX_NUM_OF_CONVERTERS} {incr i} {
ad_connect rx_adrv9009_fmc_tpl_core/adc_enable_$i util_fmc_rx_cpack/enable_$i
ad_connect rx_adrv9009_fmc_tpl_core/adc_data_$i util_fmc_rx_cpack/fifo_wr_data_$i
}
ad_connect rx_adrv9009_fmc_tpl_core/adc_dovf util_fmc_rx_cpack/fifo_wr_overflow
ad_connect axi_adrv9009_fmc_rx_dma/fifo_wr util_fmc_rx_cpack/packed_fifo_wr
ad_connect core_clk_d axi_adrv9009_fmc_rx_dma/fifo_wr_clk
# connections (adc-os)
ad_connect core_clk_c obs_adrv9009_fmc_tpl_core/link_clk
ad_connect axi_adrv9009_fmc_obs_jesd/rx_sof obs_adrv9009_fmc_tpl_core/link_sof
ad_connect axi_adrv9009_fmc_obs_jesd/rx_data_tdata obs_adrv9009_fmc_tpl_core/link_data
ad_connect axi_adrv9009_fmc_obs_jesd/rx_data_tvalid obs_adrv9009_fmc_tpl_core/link_valid
ad_connect core_clk_c util_fmc_obs_cpack/clk
ad_connect core_clk_c_rstgen/peripheral_reset util_fmc_obs_cpack/reset
ad_connect core_clk_c axi_adrv9009_fmc_obs_dma/fifo_wr_clk
ad_connect obs_adrv9009_fmc_tpl_core/adc_valid_0 util_fmc_obs_cpack/fifo_wr_en
for {set i 0} {$i < $OBS_NUM_OF_CONVERTERS} {incr i} {
ad_connect obs_adrv9009_fmc_tpl_core/adc_enable_$i util_fmc_obs_cpack/enable_$i
ad_connect obs_adrv9009_fmc_tpl_core/adc_data_$i util_fmc_obs_cpack/fifo_wr_data_$i
}
ad_connect obs_adrv9009_fmc_tpl_core/adc_dovf util_fmc_obs_cpack/fifo_wr_overflow
ad_connect util_fmc_obs_cpack/packed_fifo_wr axi_adrv9009_fmc_obs_dma/fifo_wr
ad_connect core_clk_c axi_adrv9009_fmc_tx_dma/m_axis_aclk
ad_connect util_fmc_tx_upack/s_axis_valid VCC_1/dout
ad_cpu_interconnect 0x45A00000 rx_adrv9009_fmc_tpl_core
ad_cpu_interconnect 0x45A04000 tx_adrv9009_fmc_tpl_core
ad_cpu_interconnect 0x45A08000 obs_adrv9009_fmc_tpl_core
ad_cpu_interconnect 0x45A20000 axi_adrv9009_fmc_tx_xcvr
ad_cpu_interconnect 0x45A30000 axi_adrv9009_fmc_tx_jesd
ad_cpu_interconnect 0x45A40000 axi_adrv9009_fmc_rx_xcvr
ad_cpu_interconnect 0x45A50000 axi_adrv9009_fmc_rx_jesd
ad_cpu_interconnect 0x45A60000 axi_adrv9009_fmc_obs_xcvr
ad_cpu_interconnect 0x45A70000 axi_adrv9009_fmc_obs_jesd
ad_cpu_interconnect 0x7d400000 axi_adrv9009_fmc_tx_dma
ad_cpu_interconnect 0x7d420000 axi_adrv9009_fmc_rx_dma
ad_cpu_interconnect 0x7d440000 axi_adrv9009_fmc_obs_dma
ad_mem_hp0_interconnect $sys_cpu_clk axi_adrv9009_fmc_rx_xcvr/m_axi
ad_mem_hp0_interconnect $sys_cpu_clk axi_adrv9009_fmc_obs_xcvr/m_axi
# interconnect (mem/dac)
ad_mem_hp1_interconnect $sys_dma_clk sys_ps7/S_AXI_HP1
ad_mem_hp1_interconnect $sys_dma_clk axi_adrv9009_fmc_tx_dma/m_src_axi
ad_mem_hp2_interconnect $sys_dma_clk sys_ps7/S_AXI_HP2
ad_mem_hp2_interconnect $sys_dma_clk axi_adrv9009_fmc_rx_dma/m_dest_axi
ad_mem_hp3_interconnect $sys_dma_clk sys_ps7/S_AXI_HP3
ad_mem_hp3_interconnect $sys_dma_clk axi_adrv9009_fmc_obs_dma/m_dest_axi
ad_connect $sys_dma_resetn axi_adrv9009_fmc_rx_dma/m_dest_axi_aresetn
ad_connect $sys_dma_resetn axi_adrv9009_fmc_tx_dma/m_src_axi_aresetn
ad_connect $sys_dma_resetn axi_adrv9009_fmc_obs_dma/m_dest_axi_aresetn
ad_cpu_interrupt ps-2 mb-2 axi_adrv9009_fmc_obs_dma/irq
ad_cpu_interrupt ps-3 mb-3 axi_adrv9009_fmc_tx_dma/irq
ad_cpu_interrupt ps-4 mb-4 axi_adrv9009_fmc_rx_dma/irq
ad_cpu_interrupt ps-5 mb-5 axi_adrv9009_fmc_obs_jesd/irq
ad_cpu_interrupt ps-6 mb-6 axi_adrv9009_fmc_tx_jesd/irq
ad_cpu_interrupt ps-7 mb-7 axi_adrv9009_fmc_rx_jesd/irq

View File

@ -0,0 +1,100 @@
// ***************************************************************************
// ***************************************************************************
// Copyright 2014 - 2019 (c) Analog Devices, Inc. All rights reserved.
//
// In this HDL repository, there are many different and unique modules, consisting
// of various HDL (Verilog or VHDL) components. The individual modules are
// developed independently, and may be accompanied by separate and unique license
// terms.
//
// The user should read each of these license terms, and understand the
// freedoms and responsibilities that he or she has by using this source/core.
//
// This core is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
// A PARTICULAR PURPOSE.
//
// Redistribution and use of source or resulting binaries, with or without modification
// of this file, are permitted under one of the following two license terms:
//
// 1. The GNU General Public License version 2 as published by the
// Free Software Foundation, which can be found in the top level directory
// of this repository (LICENSE_GPL2), and also online at:
// <https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
//
// OR
//
// 2. An ADI specific BSD license, which can be found in the top level directory
// of this repository (LICENSE_ADIBSD), and also on-line at:
// https://github.com/analogdevicesinc/hdl/blob/master/LICENSE_ADIBSD
// This will allow to generate bit files and not release the source code,
// as long as it attaches to an ADI device.
//
// ***************************************************************************
// ***************************************************************************
`timescale 1ns/100ps
module fmcomms8_spi (
input [ 7:0] spi_csn,
input spi_clk,
input spi_mosi,
input spi_miso_i,
output spi_miso_o,
inout spi_sdio);
// internal registers
reg [ 5:0] spi_count = 'd0;
reg spi_rd_wr_n = 'd0;
reg spi_enable = 'd0;
// internal signals
wire spi_csn_s;
wire spi_enable_s;
wire spi_miso_io;
// check on rising edge and change on falling edge
assign spi_csn_s = & spi_csn;
assign spi_enable_s = spi_enable & (~spi_csn[2]);
always @(posedge spi_clk or posedge spi_csn_s) begin
if (spi_csn_s == 1'b1) begin
spi_count <= 6'd0;
spi_rd_wr_n <= 1'd0;
end else begin
spi_count <= (spi_count < 6'h3f) ? spi_count + 1'b1 : spi_count;
if (spi_count == 6'd0) begin
spi_rd_wr_n <= spi_mosi;
end
end
end
always @(negedge spi_clk or posedge spi_csn_s) begin
if (spi_csn_s == 1'b1) begin
spi_enable <= 1'b0;
end else begin
if (spi_count == 6'd16) begin
spi_enable <= spi_rd_wr_n;
end
end
end
// io buffer
IOBUF i_iobuf_sdio (
.T (spi_enable_s),
.I (spi_mosi),
.O (spi_miso_io),
.IO (spi_sdio));
assign spi_miso_o = spi_enable_s ? spi_miso_io : spi_miso_i;
endmodule
// ***************************************************************************
// ***************************************************************************

View File

@ -0,0 +1,33 @@
####################################################################################
## Copyright 2018(c) Analog Devices, Inc.
## Auto-generated, do not modify!
####################################################################################
PROJECT_NAME := fmcomms8_zcu102
M_DEPS += ../common/fmcomms8_bd.tcl
M_DEPS += ../../common/zcu102/zcu102_system_constr.xdc
M_DEPS += ../../common/zcu102/zcu102_system_bd.tcl
M_DEPS += ../../common/xilinx/dacfifo_bd.tcl
M_DEPS += ../../common/xilinx/adi_fir_filter_bd.tcl
M_DEPS += ../../../library/xilinx/common/ad_iobuf.v
M_DEPS += ../../../library/jesd204/scripts/jesd204.tcl
LIB_DEPS += jesd204/ad_ip_jesd204_tpl_adc
LIB_DEPS += jesd204/ad_ip_jesd204_tpl_dac
LIB_DEPS += axi_dmac
LIB_DEPS += axi_sysid
LIB_DEPS += jesd204/axi_jesd204_rx
LIB_DEPS += jesd204/axi_jesd204_tx
LIB_DEPS += jesd204/jesd204_rx
LIB_DEPS += jesd204/jesd204_tx
LIB_DEPS += util_pack/util_cpack2
LIB_DEPS += util_pack/util_upack2
LIB_DEPS += sysid_rom
LIB_DEPS += xilinx/axi_adcfifo
LIB_DEPS += xilinx/axi_dacfifo
LIB_DEPS += xilinx/axi_adxcvr
LIB_DEPS += xilinx/util_adxcvr
include ../../scripts/project-xilinx.mk

View File

@ -0,0 +1,12 @@
source $ad_hdl_dir/projects/common/zcu102/zcu102_system_bd.tcl
source $ad_hdl_dir/projects/common/xilinx/dacfifo_bd.tcl
#system ID
ad_ip_parameter axi_sysid_0 CONFIG.ROM_ADDR_BITS 9
ad_ip_parameter rom_sys_0 CONFIG.PATH_TO_FILE "[pwd]/mem_init_sys.txt"
ad_ip_parameter rom_sys_0 CONFIG.ROM_ADDR_BITS 9
set sys_cstring "sys rom custom string placeholder"
sysid_gen_sys_init_file $sys_cstring
source ../common/fmcomms8_bd.tcl

View File

@ -0,0 +1,129 @@
set_property PACKAGE_PIN G8 [get_ports ref_clk_c_p]; # D04 FMC_HPC0_GBTCLK0_M2C_C_P
set_property PACKAGE_PIN G7 [get_ports ref_clk_c_n]; # D05 FMC_HPC0_GBTCLK0_M2C_C_N
set_property PACKAGE_PIN H2 [get_ports {rx_data_c_p[0]}]; # C06 FMC_HPC0_DP0_M2C_P
set_property PACKAGE_PIN H1 [get_ports {rx_data_c_n[0]}]; # C07 FMC_HPC0_DP0_M2C_N
set_property PACKAGE_PIN J4 [get_ports {rx_data_c_p[1]}]; # A02 FMC_HPC0_DP1_M2C_P
set_property PACKAGE_PIN J3 [get_ports {rx_data_c_n[1]}]; # A03 FMC_HPC0_DP1_M2C_N
set_property PACKAGE_PIN F2 [get_ports {rx_data_c_p[2]}]; # A06 FMC_HPC0_DP2_M2C_P
set_property PACKAGE_PIN F1 [get_ports {rx_data_c_n[2]}]; # A07 FMC_HPC0_DP2_M2C_N
set_property PACKAGE_PIN K2 [get_ports {rx_data_c_p[3]}]; # A10 FMC_HPC0_DP3_M2C_P
set_property PACKAGE_PIN K1 [get_ports {rx_data_c_n[3]}]; # A11 FMC_HPC0_DP3_M2C_N
set_property PACKAGE_PIN H6 [get_ports {tx_data_c_p[0]}]; # A22 FMC_HPC0_DP1_C2M_P
set_property PACKAGE_PIN H5 [get_ports {tx_data_c_n[0]}]; # A23 FMC_HPC0_DP1_C2M_N
set_property PACKAGE_PIN G4 [get_ports {tx_data_c_p[1]}]; # C02 FMC_HPC0_DP0_C2M_P
set_property PACKAGE_PIN G3 [get_ports {tx_data_c_n[1]}]; # C03 FMC_HPC0_DP0_C2M_N
set_property PACKAGE_PIN F6 [get_ports {tx_data_c_p[2]}]; # A26 FMC_HPC0_DP2_C2M_P
set_property PACKAGE_PIN F5 [get_ports {tx_data_c_n[2]}]; # A27 FMC_HPC0_DP2_C2M_N
set_property PACKAGE_PIN K6 [get_ports {tx_data_c_p[3]}]; # A30 FMC_HPC0_DP3_C2M_P
set_property PACKAGE_PIN K5 [get_ports {tx_data_c_n[3]}]; # A31 FMC_HPC0_DP3_C2M_N
set_property PACKAGE_PIN L8 [get_ports ref_clk_d_p]; # B20 FMC_HPC0_GBTCLK1_M2C_C_P
set_property PACKAGE_PIN L7 [get_ports ref_clk_d_n]; # B21 FMC_HPC0_GBTCLK1_M2C_C_N
set_property PACKAGE_PIN L4 [get_ports {rx_data_d_p[0]}]; # A14 FMC_HPC0_DP4_M2C_P
set_property PACKAGE_PIN L3 [get_ports {rx_data_d_n[0]}]; # A15 FMC_HPC0_DP4_M2C_N
set_property PACKAGE_PIN P2 [get_ports {rx_data_d_p[1]}]; # A18 FMC_HPC0_DP5_M2C_P
set_property PACKAGE_PIN P1 [get_ports {rx_data_d_n[1]}]; # A19 FMC_HPC0_DP5_M2C_N
set_property PACKAGE_PIN T2 [get_ports {rx_data_d_p[2]}]; # B16 FMC_HPC0_DP6_M2C_P
set_property PACKAGE_PIN T1 [get_ports {rx_data_d_n[2]}]; # B17 FMC_HPC0_DP6_M2C_N
set_property PACKAGE_PIN M2 [get_ports {rx_data_d_p[3]}]; # B12 FMC_HPC0_DP7_M2C_P
set_property PACKAGE_PIN M1 [get_ports {rx_data_d_n[3]}]; # B13 FMC_HPC0_DP7_M2C_N
set_property PACKAGE_PIN M6 [get_ports {tx_data_d_p[0]}]; # A34 FMC_HPC0_DP4_C2M_P
set_property PACKAGE_PIN M5 [get_ports {tx_data_d_n[0]}]; # A35 FMC_HPC0_DP4_C2M_N
set_property PACKAGE_PIN P6 [get_ports {tx_data_d_p[1]}]; # A38 FMC_HPC0_DP5_C2M_P
set_property PACKAGE_PIN P5 [get_ports {tx_data_d_n[1]}]; # A39 FMC_HPC0_DP5_C2M_N
set_property PACKAGE_PIN R4 [get_ports {tx_data_d_p[2]}]; # B36 FMC_HPC0_DP6_C2M_P
set_property PACKAGE_PIN R3 [get_ports {tx_data_d_n[2]}]; # B37 FMC_HPC0_DP6_C2M_N
set_property PACKAGE_PIN N4 [get_ports {tx_data_d_p[3]}]; # B32 FMC_HPC0_DP7_C2M_P
set_property PACKAGE_PIN N3 [get_ports {tx_data_d_n[3]}]; # B33 FMC_HPC0_DP7_C2M_N
set_property -dict {PACKAGE_PIN AA7 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports core_clk_c_p]; # H04 FMC_HPC0_CLK0_M2C_P
set_property -dict {PACKAGE_PIN AA6 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports core_clk_c_n]; # H05 FMC_HPC0_CLK0_M2C_N
set_property -dict {PACKAGE_PIN T8 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports core_clk_d_p]; # G02 FMC_HPC0_CLK1_M2C_P
set_property -dict {PACKAGE_PIN R8 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports core_clk_d_n]; # G03 FMC_HPC0_CLK1_M2C_N
set_property -dict {PACKAGE_PIN AB6 IOSTANDARD LVDS} [get_ports rx_sync_c_p]; # H16 FMC_HPC0_LA11_P
set_property -dict {PACKAGE_PIN AB5 IOSTANDARD LVDS} [get_ports rx_sync_c_n]; # H17 FMC_HPC0_LA11_N
set_property -dict {PACKAGE_PIN W7 IOSTANDARD LVDS} [get_ports rx_os_sync_c_p]; # G15 FMC_HPC0_LA12_P
set_property -dict {PACKAGE_PIN W6 IOSTANDARD LVDS} [get_ports rx_os_sync_c_n]; # G16 FMC_HPC0_LA12_N
set_property -dict {PACKAGE_PIN L13 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_c_p]; # H22 FMC_HPC0_LA19_P
set_property -dict {PACKAGE_PIN K13 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_c_n]; # H23 FMC_HPC0_LA19_N
set_property -dict {PACKAGE_PIN N13 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_c_1_p]; # G21 FMC_HPC0_LA20_P
set_property -dict {PACKAGE_PIN M13 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_c_1_n]; # G22 FMC_HPC0_LA20_N
set_property -dict {PACKAGE_PIN AB4 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports sysref_c_p]; # D08 FMC_HPC0_LA01_CC_P
set_property -dict {PACKAGE_PIN AC4 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports sysref_c_n]; # D09 FMC_HPC0_LA01_CC_N
set_property -dict {PACKAGE_PIN W5 IOSTANDARD LVCMOS18} [get_ports adrv9009_tx1_enable_c]; # C14 FMC_HPC0_LA10_P
set_property -dict {PACKAGE_PIN W4 IOSTANDARD LVCMOS18} [get_ports adrv9009_tx2_enable_c]; # C15 FMC_HPC0_LA10_N
set_property -dict {PACKAGE_PIN AC2 IOSTANDARD LVCMOS18} [get_ports adrv9009_rx1_enable_c]; # C10 FMC_HPC0_LA06_P
set_property -dict {PACKAGE_PIN AC1 IOSTANDARD LVCMOS18} [get_ports adrv9009_rx2_enable_c]; # C11 FMC_HPC0_LA06_N
set_property -dict {PACKAGE_PIN AB8 IOSTANDARD LVCMOS18} [get_ports adrv9009_reset_b_c]; # D17 FMC_HPC0_LA13_P
set_property -dict {PACKAGE_PIN M11 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpint_c]; # G27 FMC_HPC2_LA25_P
set_property -dict {PACKAGE_PIN U9 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_00_c]; # G30 FMC_HPC0_LA29_P
set_property -dict {PACKAGE_PIN V8 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_01_c]; # G33 FMC_HPC0_LA31_P
set_property -dict {PACKAGE_PIN V12 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_02_c]; # G36 FMC_HPC0_LA33_P
set_property -dict {PACKAGE_PIN V2 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_03_c]; # H07 FMC_HPC0_LA02_P
set_property -dict {PACKAGE_PIN AA2 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_04_c]; # H10 FMC_HPC0_LA04_P
set_property -dict {PACKAGE_PIN L12 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_05_c]; # H28 FMC_HPC0_LA24_P
set_property -dict {PACKAGE_PIN T7 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_06_c]; # H31 FMC_HPC0_LA28_P
set_property -dict {PACKAGE_PIN V6 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_07_c]; # H34 FMC_HPC0_LA30_P
set_property -dict {PACKAGE_PIN U11 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_08_c]; # H37 FMC_HPC0_LA32_P
set_property -dict {PACKAGE_PIN Y10 IOSTANDARD LVDS} [get_ports rx_sync_d_p]; # H19 FMC_HPC0_LA15_P
set_property -dict {PACKAGE_PIN Y9 IOSTANDARD LVDS} [get_ports rx_sync_d_n]; # H20 FMC_HPC0_LA15_N
set_property -dict {PACKAGE_PIN Y12 IOSTANDARD LVDS} [get_ports rx_os_sync_d_p]; # G18 FMC_HPC0_LA16_P
set_property -dict {PACKAGE_PIN AA12 IOSTANDARD LVDS} [get_ports rx_os_sync_d_n]; # G19 FMC_HPC0_LA16_N
set_property -dict {PACKAGE_PIN P12 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_d_p]; # H25 FMC_HPC0_LA21_P
set_property -dict {PACKAGE_PIN N12 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_d_n]; # H26 FMC_HPC0_LA21_N
set_property -dict {PACKAGE_PIN M15 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_d_1_p]; # G24 FMC_HPC0_LA22_P
set_property -dict {PACKAGE_PIN M14 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports tx_sync_d_1_n]; # G25 FMC_HPC0_LA22_N
set_property -dict {PACKAGE_PIN Y4 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports sysref_d_p]; # G06 FMC_HPC0_LA00_CC_P
set_property -dict {PACKAGE_PIN Y3 IOSTANDARD LVDS DIFF_TERM_ADV TERM_100} [get_ports sysref_d_n]; # G07 FMC_HPC0_LA00_CC_N
set_property -dict {PACKAGE_PIN M10 IOSTANDARD LVCMOS18} [get_ports adrv9009_tx1_enable_d]; # C26 FMC_HPC0_LA27_P
set_property -dict {PACKAGE_PIN L10 IOSTANDARD LVCMOS18} [get_ports adrv9009_tx2_enable_d]; # C27 FMC_HPC0_LA27_N
set_property -dict {PACKAGE_PIN AC7 IOSTANDARD LVCMOS18} [get_ports adrv9009_rx1_enable_d]; # C18 FMC_HPC0_LA14_P
set_property -dict {PACKAGE_PIN AC6 IOSTANDARD LVCMOS18} [get_ports adrv9009_rx2_enable_d]; # C19 FMC_HPC0_LA14_N
set_property -dict {PACKAGE_PIN AC8 IOSTANDARD LVCMOS18} [get_ports adrv9009_reset_b_d]; # D18 FMC_HPC0_LA13_N
set_property -dict {PACKAGE_PIN L11 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpint_d]; # G28 FMC_HPC0_LA25_N
set_property -dict {PACKAGE_PIN U8 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_00_d]; # G31 FMC_HPC0_LA29_N
set_property -dict {PACKAGE_PIN V7 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_01_d]; # G34 FMC_HPC0_LA31_N
set_property -dict {PACKAGE_PIN V11 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_02_d]; # G37 FMC_HPC0_LA33_N
set_property -dict {PACKAGE_PIN V1 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_03_d]; # H08 FMC_HPC0_LA02_N
set_property -dict {PACKAGE_PIN AA1 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_04_d]; # H11 FMC_HPC0_LA04_N
set_property -dict {PACKAGE_PIN K12 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_05_d]; # H29 FMC_HPC0_LA24_N
set_property -dict {PACKAGE_PIN T6 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_06_d]; # H32 FMC_HPC0_LA28_N
set_property -dict {PACKAGE_PIN U6 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_07_d]; # H35 FMC_HPC0_LA30_N
set_property -dict {PACKAGE_PIN T11 IOSTANDARD LVCMOS18} [get_ports adrv9009_gpio_08_d]; # H38 FMC_HPC0_LA32_N
set_property -dict {PACKAGE_PIN Y2 IOSTANDARD LVCMOS18} [get_ports hmc7044_reset]; # G09 FMC_HPC0_LA03_P
set_property -dict {PACKAGE_PIN Y1 IOSTANDARD LVCMOS18} [get_ports hmc7044_sync]; # G10 FMC_HPC0_LA03_N
set_property -dict {PACKAGE_PIN V4 IOSTANDARD LVCMOS18} [get_ports hmc7044_gpio_1]; # G12 FMC_HPC0_LA08_P
set_property -dict {PACKAGE_PIN V3 IOSTANDARD LVCMOS18} [get_ports hmc7044_gpio_2]; # G13 FMC_HPC0_LA08_N
set_property -dict {PACKAGE_PIN U5 IOSTANDARD LVCMOS18} [get_ports hmc7044_gpio_3]; # H13 FMC_HPC0_LA07_P
set_property -dict {PACKAGE_PIN U4 IOSTANDARD LVCMOS18} [get_ports hmc7044_gpio_4]; # H14 FMC_HPC0_LA07_N
set_property -dict {PACKAGE_PIN L16 IOSTANDARD LVCMOS18} [get_ports spi_clk]; # D23 FMC_HPC0_LA23_P
set_property -dict {PACKAGE_PIN K15 IOSTANDARD LVCMOS18} [get_ports spi_sdio]; # D27 FMC_HPC0_LA26_N
set_property -dict {PACKAGE_PIN L15 IOSTANDARD LVCMOS18} [get_ports spi_miso]; # D26 FMC_HPC0_LA26_P
set_property -dict {PACKAGE_PIN AB3 IOSTANDARD LVCMOS18} [get_ports spi_csn_adrv9009_c]; # D11 FMC_HPC0_LA05_P
set_property -dict {PACKAGE_PIN W2 IOSTANDARD LVCMOS18} [get_ports spi_csn_adrv9009_d]; # D14 FMC_HPC0_LA09_P
set_property -dict {PACKAGE_PIN K16 IOSTANDARD LVCMOS18} [get_ports spi_csn_hmc7044]; # D24 FMC_HPC0_LA23_N
set_property -dict {PACKAGE_PIN N9 IOSTANDARD LVCMOS18} [get_ports fan_tach]; # C22 FMC_HPC0_LA18_CC_P
set_property -dict {PACKAGE_PIN N8 IOSTANDARD LVCMOS18} [get_ports fan_pwm]; # C23 FMC_HPC0_LA18_CC_N
create_clock -name tx_fmc_dev_clk -period 4.00 [get_ports core_clk_c_p]
create_clock -name rx_fmc_dev_clk -period 4.00 [get_ports core_clk_d_p]
create_clock -name jesd_tx_fmc_ref_clk -period 4.00 [get_ports ref_clk_c_p]
create_clock -name jesd_rx_fmc_ref_clk -period 4.00 [get_ports ref_clk_d_p]
set_input_delay -clock rx_fmc_dev_clk -max 4 [get_ports sysref_c_p];
set_input_delay -clock rx_fmc_dev_clk -min 4 [get_ports sysref_c_p];
set_input_delay -clock tx_fmc_dev_clk -max 4 [get_ports sysref_d_p];
set_input_delay -clock tx_fmc_dev_clk -min 4 [get_ports sysref_d_p];

View File

@ -0,0 +1,14 @@
source ../../scripts/adi_env.tcl
source $ad_hdl_dir/projects/scripts/adi_project_xilinx.tcl
source $ad_hdl_dir/projects/scripts/adi_board.tcl
adi_project fmcomms8_zcu102
adi_project_files fmcomms8_zcu102 [list \
"system_top.v" \
"system_constr.xdc"\
"../common/fmcomms8_spi.v" \
"$ad_hdl_dir/library/xilinx/common/ad_iobuf.v" \
"$ad_hdl_dir/projects/common/zcu102/zcu102_system_constr.xdc" ]
adi_project_run fmcomms8_zcu102

View File

@ -0,0 +1,362 @@
// ***************************************************************************
// ***************************************************************************
// Copyright 2014 - 2017 (c) Analog Devices, Inc. All rights reserved.
//
// In this HDL repository, there are many different and unique modules, consisting
// of various HDL (Verilog or VHDL) components. The individual modules are
// developed independently, and may be accompanied by separate and unique license
// terms.
//
// The user should read each of these license terms, and understand the
// freedoms and responsibilities that he or she has by using this source/core.
//
// This core is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
// A PARTICULAR PURPOSE.
//
// Redistribution and use of source or resulting binaries, with or without modification
// of this file, are permitted under one of the following two license terms:
//
// 1. The GNU General Public License version 2 as published by the
// Free Software Foundation, which can be found in the top level directory
// of this repository (LICENSE_GPL2), and also online at:
// <https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
//
// OR
//
// 2. An ADI specific BSD license, which can be found in the top level directory
// of this repository (LICENSE_ADIBSD), and also on-line at:
// https://github.com/analogdevicesinc/hdl/blob/master/LICENSE_ADIBSD
// This will allow to generate bit files and not release the source code,
// as long as it attaches to an ADI device.
//
// ***************************************************************************
// ***************************************************************************
`timescale 1ns/100ps
module system_top (
input [12:0] gpio_bd_i,
output [ 7:0] gpio_bd_o,
inout iic_scl,
inout iic_sda,
input ref_clk_c_p,
input ref_clk_c_n,
input core_clk_c_p,
input core_clk_c_n,
input [ 3:0] rx_data_c_p,
input [ 3:0] rx_data_c_n,
output [ 3:0] tx_data_c_p,
output [ 3:0] tx_data_c_n,
output rx_sync_c_p,
output rx_sync_c_n,
output rx_os_sync_c_p,
output rx_os_sync_c_n,
input tx_sync_c_p,
input tx_sync_c_n,
input tx_sync_c_1_p,
input tx_sync_c_1_n,
input sysref_c_p,
input sysref_c_n,
inout adrv9009_tx1_enable_c,
inout adrv9009_tx2_enable_c,
inout adrv9009_rx1_enable_c,
inout adrv9009_rx2_enable_c,
inout adrv9009_test_c,
inout adrv9009_reset_b_c,
inout adrv9009_gpint_c,
inout adrv9009_gpio_00_c,
inout adrv9009_gpio_01_c,
inout adrv9009_gpio_02_c,
inout adrv9009_gpio_03_c,
inout adrv9009_gpio_04_c,
inout adrv9009_gpio_05_c,
inout adrv9009_gpio_06_c,
inout adrv9009_gpio_07_c,
inout adrv9009_gpio_08_c,
input ref_clk_d_p,
input ref_clk_d_n,
input core_clk_d_p,
input core_clk_d_n,
input [ 3:0] rx_data_d_p,
input [ 3:0] rx_data_d_n,
output [ 3:0] tx_data_d_p,
output [ 3:0] tx_data_d_n,
output rx_sync_d_p,
output rx_sync_d_n,
output rx_os_sync_d_p,
output rx_os_sync_d_n,
input tx_sync_d_p,
input tx_sync_d_n,
input tx_sync_d_1_p,
input tx_sync_d_1_n,
input sysref_d_p,
input sysref_d_n,
inout adrv9009_tx1_enable_d,
inout adrv9009_tx2_enable_d,
inout adrv9009_rx1_enable_d,
inout adrv9009_rx2_enable_d,
inout adrv9009_test_d,
inout adrv9009_reset_b_d,
inout adrv9009_gpint_d,
inout adrv9009_gpio_00_d,
inout adrv9009_gpio_01_d,
inout adrv9009_gpio_02_d,
inout adrv9009_gpio_03_d,
inout adrv9009_gpio_04_d,
inout adrv9009_gpio_05_d,
inout adrv9009_gpio_06_d,
inout adrv9009_gpio_07_d,
inout adrv9009_gpio_08_d,
input fan_tach,
input fan_pwm,
output hmc7044_reset,
inout hmc7044_sync,
inout hmc7044_gpio_1,
inout hmc7044_gpio_2,
inout hmc7044_gpio_3,
inout hmc7044_gpio_4,
output spi_csn_hmc7044,
output spi_csn_adrv9009_c,
output spi_csn_adrv9009_d,
output spi_clk,
inout spi_sdio,
input spi_miso
);
// internal signals
wire [94:0] gpio_i;
wire [94:0] gpio_o;
wire [94:0] gpio_t;
wire [20:0] gpio_bd;
wire [2:0] spi_csn;
wire ref_clk_c;
wire core_clk_c;
wire rx_sync_rx;
wire tx_sync_c;
wire sysref_c;
wire ref_clk_d;
wire core_clk_d;
wire rx_sync_obs;
wire rx_os_sync_d;
wire tx_sync_d;
wire sysref_d;
wire tx_sync;
wire spi_mosi;
wire spi0_miso;
reg [7:0] spi_3_to_8_csn;
always @(*) begin
case (spi_csn)
3'h0: spi_3_to_8_csn = 8'b11111110;
3'h1: spi_3_to_8_csn = 8'b11111101;
3'h2: spi_3_to_8_csn = 8'b11111011;
default: spi_3_to_8_csn = 8'b11111111;
endcase
end
assign spi_csn_adrv9009_c = spi_3_to_8_csn[0];
assign spi_csn_adrv9009_d = spi_3_to_8_csn[1];
assign spi_csn_hmc7044 = spi_3_to_8_csn[2];
fmcomms8_spi i_spi (
.spi_csn(spi_3_to_8_csn),
.spi_clk(spi_clk),
.spi_mosi(spi_mosi),
.spi_miso_i(spi_miso),
.spi_miso_o(spi0_miso),
.spi_sdio(spi_sdio));
assign tx_sync = tx_sync_c & tx_sync_d;
assign gpio_i[94:68] = gpio_o[94:68];
assign gpio_i[31:21] = gpio_o[31:21];
assign gpio_i[ 7: 0] = gpio_o[ 7: 0];
assign gpio_i[20: 8] = gpio_bd_i;
assign gpio_bd_o = gpio_o[ 7: 0];
// instantiations
ad_iobuf #(.DATA_WIDTH(36)) i_iobuf (
.dio_t ({gpio_t[67:32]}),
.dio_i ({gpio_o[67:32]}),
.dio_o ({gpio_i[67:32]}),
.dio_p ({
hmc7044_gpio_4, // 67
hmc7044_gpio_3, // 66
hmc7044_gpio_2, // 65
hmc7044_gpio_1, // 64
hmc7044_sync, // 63
hmc7044_reset, // 62
adrv9009_tx2_enable_d, // 61
adrv9009_tx1_enable_d, // 60
adrv9009_rx2_enable_d, // 59
adrv9009_rx1_enable_d, // 58
adrv9009_reset_b_d, // 57
adrv9009_gpint_d, // 56
adrv9009_gpio_08_d, // 55
adrv9009_gpio_07_d, // 54
adrv9009_gpio_06_d, // 53
adrv9009_gpio_05_d, // 52
adrv9009_gpio_04_d, // 51
adrv9009_gpio_03_d, // 50
adrv9009_gpio_02_d, // 49
adrv9009_gpio_01_d, // 48
adrv9009_gpio_00_d, // 47
adrv9009_tx2_enable_c, // 46
adrv9009_tx1_enable_c, // 45
adrv9009_rx2_enable_c, // 44
adrv9009_rx1_enable_c, // 43
adrv9009_reset_b_c, // 42
adrv9009_gpint_c, // 41
adrv9009_gpio_08_c, // 40
adrv9009_gpio_07_c, // 39
adrv9009_gpio_06_c, // 38
adrv9009_gpio_05_c, // 37
adrv9009_gpio_04_c, // 36
adrv9009_gpio_03_c, // 35
adrv9009_gpio_02_c, // 34
adrv9009_gpio_01_c, // 33
adrv9009_gpio_00_c})); // 32
IBUFDS_GTE4 i_ibufds_ref_clk_1 (
.CEB (1'd0),
.I (ref_clk_c_p),
.IB (ref_clk_c_n),
.O (ref_clk_c),
.ODIV2 ());
IBUFDS_GTE4 i_ibufds_ref_clk_2 (
.CEB (1'd0),
.I (ref_clk_d_p),
.IB (ref_clk_d_n),
.O (ref_clk_d),
.ODIV2 ());
IBUFDS i_ibufds_sysref_1 (
.I (sysref_c_p),
.IB (sysref_c_n),
.O (sysref_c));
IBUFDS i_ibufds_sysref_2 (
.I (sysref_d_p),
.IB (sysref_d_n),
.O (sysref_d));
IBUFGDS i_rx_clk_ibufg_1 (
.I (core_clk_c_p),
.IB (core_clk_c_n),
.O (core_clk_c));
IBUFGDS i_rx_clk_ibufg_2 (
.I (core_clk_d_p),
.IB (core_clk_d_n),
.O (core_clk_d));
IBUFDS i_ibufds_tx_sync_1 (
.I (tx_sync_c_p),
.IB (tx_sync_c_n),
.O (tx_sync_c));
IBUFDS i_ibufds_tx_sync_2 (
.I (tx_sync_d_p),
.IB (tx_sync_d_n),
.O (tx_sync_d));
OBUFDS i_obufds_rx_sync_1 (
.I (rx_sync_rx),
.O (rx_sync_c_p),
.OB (rx_sync_c_n));
OBUFDS i_obufds_rx_os_sync_1 (
.I (rx_sync_obs),
.O (rx_os_sync_c_p),
.OB (rx_os_sync_c_n));
OBUFDS i_obufds_rx_sync_2 (
.I (rx_sync_rx),
.O (rx_sync_d_p),
.OB (rx_sync_d_n));
OBUFDS i_obufds_rx_os_sync_2 (
.I (rx_sync_obs),
.O (rx_os_sync_d_p),
.OB (rx_os_sync_d_n));
system_wrapper i_system_wrapper (
.gpio_i (gpio_i),
.gpio_o (gpio_o),
.gpio_t (gpio_t),
.core_clk_c(core_clk_c),
.core_clk_d(core_clk_d),
.ref_clk_c(ref_clk_c),
.ref_clk_d(ref_clk_d),
.rx_data_0_n (rx_data_c_n[0]),
.rx_data_0_p (rx_data_c_p[0]),
.rx_data_1_n (rx_data_c_n[1]),
.rx_data_1_p (rx_data_c_p[1]),
.rx_data_2_n (rx_data_c_n[2]),
.rx_data_2_p (rx_data_c_p[2]),
.rx_data_3_n (rx_data_c_n[3]),
.rx_data_3_p (rx_data_c_p[3]),
.rx_data_4_n (rx_data_d_n[0]),
.rx_data_4_p (rx_data_d_p[0]),
.rx_data_5_n (rx_data_d_n[1]),
.rx_data_5_p (rx_data_d_p[1]),
.rx_data_6_n (rx_data_d_n[2]),
.rx_data_6_p (rx_data_d_p[2]),
.rx_data_7_n (rx_data_d_n[3]),
.rx_data_7_p (rx_data_d_p[3]),
.rx_sync_0 (rx_sync_rx),
.rx_sync_4 (rx_sync_obs),
.rx_sysref_0 (sysref_d),
.rx_sysref_4 (sysref_c),
.tx_data_0_n (tx_data_c_n[0]),
.tx_data_0_p (tx_data_c_p[0]),
.tx_data_1_n (tx_data_c_n[1]),
.tx_data_1_p (tx_data_c_p[1]),
.tx_data_2_n (tx_data_c_n[2]),
.tx_data_2_p (tx_data_c_p[2]),
.tx_data_3_n (tx_data_c_n[3]),
.tx_data_3_p (tx_data_c_p[3]),
.tx_data_4_n (tx_data_d_n[0]),
.tx_data_4_p (tx_data_d_p[0]),
.tx_data_5_n (tx_data_d_n[1]),
.tx_data_5_p (tx_data_d_p[1]),
.tx_data_6_n (tx_data_d_n[2]),
.tx_data_6_p (tx_data_d_p[2]),
.tx_data_7_n (tx_data_d_n[3]),
.tx_data_7_p (tx_data_d_p[3]),
.tx_sync_0 (tx_sync),
.tx_sysref_0 (sysref_c),
//.dac_fifo_bypass(gpio_o[90]),
.spi0_sclk (spi_clk),
.spi0_csn (spi_csn),
.spi0_miso (spi_miso),
.spi0_mosi (spi_mosi),
.spi1_sclk (),
.spi1_csn (),
.spi1_miso (1'b0),
.spi1_mosi ());
endmodule
// ***************************************************************************
// ***************************************************************************