= Modifying the 802.11 Reference Design for 4 Radios = The 802.11 Reference Design Tx and Rx PHY cores implement ports for 4 RF interfaces. The reference hardware project only connects RF A and RF B in order to maintain compatibility with WARP v3 nodes using third-party FMC modules. In order to use the reference design with 4 RF interfaces (2 WARP v3 on-board, 2 on FMC-RF-2X245 module) the following changes must be made to the XPS project's {{{system.mhs}}} and {{{data/system.ucf}}} files. The changes below are based on 802.11 Reference Design v1.5. == Rx PHY Changes == The Rx PHY core must be modified to include packet detection blocks for the RF C and RF D interfaces. There are placeholders for these blocks in the default Rx PHY core. You can duplicate the packet detection subsystem for RF A to create the subsystems for RF C and RF D. After adding the packet detection blocks for the RF C and D interfaces, you must increment the pcore version (System Generator token -> Settings), export the pcore to the XPS project, then update the HW_VER parameter for the Rx PHY core in the system.mhs file. == MHS Changes == The changes below apply to the XPS project's {{{system.mhs}}} file. Add new top-level ports: {{{#!sh ... # RFC AD pins (FMC RFA) PORT RFC_AD_TRXD = RFC_trxd, DIR = I, VEC = [11:0] PORT RFC_AD_TRXCLK = RFC_trxclk, DIR = I PORT RFC_AD_TRXIQ = RFC_trxiq, DIR = I PORT RFC_AD_TXD = RFC_txd, DIR = O, VEC = [11:0] PORT RFC_AD_TXIQ = RFC_txiq, DIR = O PORT RFC_AD_TXCLK = RFC_txclk, DIR = O # RFD AD pins (FMC RFB) PORT RFD_AD_TRXD = RFD_trxd, DIR = I, VEC = [11:0] PORT RFD_AD_TRXCLK = RFD_trxclk, DIR = I PORT RFD_AD_TRXIQ = RFD_trxiq, DIR = I PORT RFD_AD_TXD = RFD_txd, DIR = O, VEC = [11:0] PORT RFD_AD_TXIQ = RFD_txiq, DIR = O PORT RFD_AD_TXCLK = RFD_txclk, DIR = O # FMC RSSI ADC pins PORT RFC_RSSI_D = RFC_RSSI_D, DIR = I, VEC = [9:0] PORT RFD_RSSI_D = RFD_RSSI_D, DIR = I, VEC = [9:0] PORT FMC_RF_RSSI_CLK = wlan_rssi_clk, DIR = O PORT FMC_RF_RSSI_PD = net_gnd, DIR = O # RFC transceiver and front-end (FMC RFA) PORT RFC_TxEn_pin = RFC_TxEn, DIR = O PORT RFC_RxEn_pin = RFC_RxEn, DIR = O PORT RFC_RxHP_pin = RFC_RxHP, DIR = O PORT RFC_SHDN_pin = RFC_SHDN, DIR = O PORT RFC_SPI_SCLK_pin = RFC_SPI_SCLK, DIR = O PORT RFC_SPI_MOSI_pin = RFC_SPI_MOSI, DIR = O PORT RFC_SPI_CSn_pin = RFC_SPI_CSn, DIR = O PORT RFC_B_pin = RFC_B, DIR = O, VEC = [0:6] PORT RFC_LD_pin = RFC_LD, DIR = I PORT RFC_PAEn_24_pin = RFC_PAEn_24, DIR = O PORT RFC_PAEn_5_pin = RFC_PAEn_5, DIR = O PORT RFC_AntSw_pin = RFC_AntSw, DIR = O, VEC = [0:1] # RFD transceiver and front-end (FMC RFB) PORT RFD_TxEn_pin = RFD_TxEn, DIR = O PORT RFD_RxEn_pin = RFD_RxEn, DIR = O PORT RFD_RxHP_pin = RFD_RxHP, DIR = O PORT RFD_SHDN_pin = RFD_SHDN, DIR = O PORT RFD_SPI_SCLK_pin = RFD_SPI_SCLK, DIR = O PORT RFD_SPI_MOSI_pin = RFD_SPI_MOSI, DIR = O PORT RFD_SPI_CSn_pin = RFD_SPI_CSn, DIR = O PORT RFD_B_pin = RFD_B, DIR = O, VEC = [0:6] PORT RFD_LD_pin = RFD_LD, DIR = I PORT RFD_PAEn_24_pin = RFD_PAEn_24, DIR = O PORT RFD_PAEn_5_pin = RFD_PAEn_5, DIR = O PORT RFD_AntSw_pin = RFD_AntSw, DIR = O, VEC = [0:1] # AD9963 ADC/DAC control pins (RFC & RFD = FMC RFA & RFB)) PORT RFC_AD_spi_cs_n_pin = RFC_AD_spi_cs_n, DIR = O PORT RFC_AD_spi_sdio = RFC_AD_spi_sdio, DIR = IO PORT RFC_AD_spi_sclk_pin = RFC_AD_spi_sclk, DIR = O PORT RFC_AD_reset_n_pin = RFC_AD_reset_n, DIR = O PORT RFD_AD_spi_cs_n_pin = RFD_AD_spi_cs_n, DIR = O PORT RFD_AD_spi_sdio = RFD_AD_spi_sdio, DIR = IO PORT RFD_AD_spi_sclk_pin = RFD_AD_spi_sclk, DIR = O PORT RFD_AD_reset_n_pin = RFD_AD_reset_n, DIR = O # FMC user LEDs (tied directly to radio_controller, not w3_uesrio) PORT RFC_led_g = RFC_led_g, DIR = O PORT RFC_led_r = RFC_led_r, DIR = O PORT RFD_led_g = RFD_led_g, DIR = O PORT RFD_led_r = RFD_led_r, DIR = O # IIC EEPROM pins FMC PORT iic_eeprom_fmc_scl_pin = iic_eeprom_fmc_scl_pin, DIR = IO PORT iic_eeprom_fmc_sda_pin = iic_eeprom_fmc_sda_pin, DIR = IO ... }}} Add new instances of {{{w3_ad_bridge}}} and {{{w3_iic_eeprom_axi}}} cores: {{{#!sh # samp_ce unused in FMC ad_bridge; on-board ad_bridge drives PHY's ce ports BEGIN w3_ad_bridge PARAMETER INSTANCE = ad_bridge_FMC PARAMETER HW_VER = 3.03.a # Clock ports (inputs to w3_ad_bridge) PORT sys_clk = clk_160MHz PORT ad_TXCLK_out_en = RF_AD_TXCLK_out_en # Top-level AD9963 ports PORT ad_RFA_TXD = rfc_txd PORT ad_RFA_TXCLK = rfc_txclk PORT ad_RFA_TXIQ = rfc_txiq PORT ad_RFA_TRXD = rfc_trxd PORT ad_RFA_TRXCLK = rfc_trxclk PORT ad_RFA_TRXIQ = rfc_trxiq PORT ad_RFB_TXD = rfd_txd PORT ad_RFB_TXCLK = rfd_txclk PORT ad_RFB_TXIQ = rfd_txiq PORT ad_RFB_TRXD = rfd_trxd PORT ad_RFB_TRXCLK = rfd_trxclk PORT ad_RFB_TRXIQ = rfd_trxiq PORT user_RFA_TXD_I = RFC_TX_I PORT user_RFA_TXD_Q = RFC_TX_Q PORT user_RFA_RXD_I = RFC_RX_I PORT user_RFA_RXD_Q = RFC_RX_Q PORT user_RFB_TXD_I = RFD_TX_I PORT user_RFB_TXD_Q = RFD_TX_Q PORT user_RFB_RXD_I = RFD_RX_I PORT user_RFB_RXD_Q = RFD_RX_Q END BEGIN w3_iic_eeprom_axi PARAMETER INSTANCE = w3_iic_eeprom_FMC PARAMETER HW_VER = 1.02.a PARAMETER C_BASEADDR = 0x82010000 PARAMETER C_HIGHADDR = 0x8201FFFF PARAMETER C_INTERCONNECT_S_AXI_AW_REGISTER = 7 PARAMETER C_INTERCONNECT_S_AXI_AR_REGISTER = 7 PARAMETER C_INTERCONNECT_S_AXI_W_REGISTER = 7 PARAMETER C_INTERCONNECT_S_AXI_R_REGISTER = 7 PARAMETER C_INTERCONNECT_S_AXI_B_REGISTER = 7 BUS_INTERFACE S_AXI = mb_shared_axi_periph PORT S_AXI_ACLK = clk_160MHz PORT iic_scl_io= iic_eeprom_fmc_scl_pin PORT iic_sda_io= iic_eeprom_fmc_sda_pin END }}} Add port connections to {{{radio_controller_axi}}} instance: {{{#!sh BEGIN radio_controller_axi ... PORT RFC_TxEn = RFC_TxEn PORT RFC_RxEn = RFC_RxEn PORT RFC_RxHP = RFC_RxHP PORT RFC_SHDN = RFC_SHDN PORT RFC_SPI_SCLK = RFC_SPI_SCLK PORT RFC_SPI_MOSI = RFC_SPI_MOSI PORT RFC_SPI_CSn = RFC_SPI_CSn PORT RFC_B = RFC_B PORT RFC_LD = RFC_LD PORT RFC_PAEn_24 = RFC_PAEn_24 PORT RFC_PAEn_5 = RFC_PAEn_5 PORT RFC_AntSw = RFC_AntSw PORT RFD_TxEn = RFD_TxEn PORT RFD_RxEn = RFD_RxEn PORT RFD_RxHP = RFD_RxHP PORT RFD_SHDN = RFD_SHDN PORT RFD_SPI_SCLK = RFD_SPI_SCLK PORT RFD_SPI_MOSI = RFD_SPI_MOSI PORT RFD_SPI_CSn = RFD_SPI_CSn PORT RFD_B = RFD_B PORT RFD_LD = RFD_LD PORT RFD_PAEn_24 = RFD_PAEn_24 PORT RFD_PAEn_5 = RFD_PAEn_5 PORT RFD_AntSw = RFD_AntSw .... PORT usr_RFC_statLED_Tx = RFC_led_g PORT usr_RFC_statLED_Rx = RFC_led_r PORT usr_RFD_statLED_Tx = RFD_led_g PORT usr_RFD_statLED_Rx = RFD_led_r .... PORT usr_RFC_TxEn = phy_rc_txen_c PORT usr_RFC_RxEn = rc_usr_rxen PORT usr_RFC_RxHP = agc_rfc_rxhp PORT usr_RFC_RxGainBB = agc_rfc_g_bb PORT usr_RFC_RxGainRF = agc_rfc_g_rf PORT usr_RFC_TxGain = phy_rc_tx_gain_c PORT usr_RFD_TxEn = phy_rc_txen_d PORT usr_RFD_RxEn = rc_usr_rxen PORT usr_RFD_RxHP = agc_rfd_rxhp PORT usr_RFD_RxGainBB = agc_rfd_g_bb PORT usr_RFD_RxGainRF = agc_rfd_g_rf PORT usr_RFD_TxGain = phy_rc_tx_gain_d .... END }}} Add parameter and port connections to the existing {{{w3_ad_controller_axi}}} instance: {{{#!sh BEGIN w3_ad_controller_axi ... PARAMETER INCLUDE_RFC_RFD_IO = 1 ... PORT RFC_AD_spi_cs_n = RFC_AD_spi_cs_n PORT RFC_AD_spi_sdio = RFC_AD_spi_sdio PORT RFC_AD_spi_sclk = RFC_AD_spi_sclk PORT RFC_AD_reset_n = RFC_AD_reset_n PORT RFD_AD_spi_cs_n = RFD_AD_spi_cs_n PORT RFD_AD_spi_sdio = RFD_AD_spi_sdio PORT RFD_AD_spi_sclk = RFD_AD_spi_sclk PORT RFD_AD_reset_n = RFD_AD_reset_n ... END }}} Add port connections to the existing {{{wlan_mac_hw}}} instance: {{{#!sh BEGIN wlan_mac_hw ... PORT phy_tx_gain_c = mac_phy_tx_gain_c PORT phy_tx_gain_d = mac_phy_tx_gain_d ... END }}} Add port connections to the existing {{{wlan_phy_tx_pmd_axiw}}} instance: {{{#!sh BEGIN wlan_phy_tx_pmd_axiw ... PORT rfc_dac_i = RFC_TX_I PORT rfc_dac_q = RFC_TX_Q PORT rfd_dac_i = RFD_TX_I PORT rfd_dac_q = RFD_TX_Q ... PORT rc_usr_txen_c = phy_rc_txen_c PORT rc_usr_txen_d = phy_rc_txen_d ... PORT rc_tx_gain_c = phy_rc_tx_gain_c PORT rc_tx_gain_d = phy_rc_tx_gain_d ... PORT phy_tx_gain_c = mac_phy_tx_gain_c PORT phy_tx_gain_d = mac_phy_tx_gain_d ... END }}} Add port connections to the existing {{{wlan_phy_rx_pmd_axiw}}} instance: {{{#!sh BEGIN wlan_phy_rx_pmd_axiw ... PORT rfc_rx_i = agc_rfc_i PORT rfc_rx_q = agc_rfc_q PORT rfc_rssi = RFC_RSSI_D PORT rfd_rx_i = agc_rfd_i PORT rfd_rx_q = agc_rfd_q PORT rfd_rssi = RFD_RSSI_D ... PORT rfc_g_rf = agc_rfc_g_rf PORT rfc_g_bb = agc_rfc_g_bb PORT rfd_g_rf = agc_rfd_g_rf PORT rfd_g_bb = agc_rfd_g_bb ... END }}} Add port connections to the existing {{{wlan_agc_axiw}}} instance: {{{#!sh BEGIN wlan_agc_axiw ... PORT rfc_rssi = RFC_RSSI_D PORT rfc_rx_i_in = RFC_RX_I PORT rfc_rx_q_in = RFC_RX_Q PORT rfd_rssi = RFD_RSSI_D PORT rfd_rx_i_in = RFD_RX_I PORT rfd_rx_q_in = RFD_RX_Q ... PORT rfc_rx_i_out = agc_rfc_i PORT rfc_rx_q_out = agc_rfc_q PORT rfd_rx_i_out = agc_rfd_i PORT rfd_rx_q_out = agc_rfd_q ... PORT rfc_agc_g_bb = agc_rfc_g_bb PORT rfc_agc_g_rf = agc_rfc_g_rf PORT rfc_agc_rxhp = agc_rfc_rxhp PORT rfd_agc_g_bb = agc_rfd_g_bb PORT rfd_agc_g_rf = agc_rfd_g_rf PORT rfd_agc_rxhp = agc_rfd_rxhp ... END }}} == UCF Changes == Add LOC and timing constraints for FMC-RF-2X245 signals to {{{data/system.ucf}}}: {{{#!sh ############################# # FMC-RF-2X245 RF Interfaces ############################# #User LEDs NET "RFC_LED_G" LOC = L19 | IOSTANDARD = LVCMOS25; NET "RFC_LED_R" LOC = L18 | IOSTANDARD = LVCMOS25; NET "RFD_LED_G" LOC = D16 | IOSTANDARD = LVCMOS25; NET "RFD_LED_R" LOC = A15 | IOSTANDARD = LVCMOS25; #FMC module I2C EEPROM NET "iic_eeprom_fmc_scl_pin" LOC = F23 | IOSTANDARD = LVCMOS25; NET "iic_eeprom_fmc_sda_pin" LOC = F24 | IOSTANDARD = LVCMOS25; #RSSI ADC NET "RFC_RSSI_D<0>" LOC = D21 | IOSTANDARD = LVCMOS25; NET "RFC_RSSI_D<1>" LOC = E19 | IOSTANDARD = LVCMOS25; NET "RFC_RSSI_D<2>" LOC = G20 | IOSTANDARD = LVCMOS25; NET "RFC_RSSI_D<3>" LOC = E22 | IOSTANDARD = LVCMOS25; NET "RFC_RSSI_D<4>" LOC = E23 | IOSTANDARD = LVCMOS25; NET "RFC_RSSI_D<5>" LOC = F21 | IOSTANDARD = LVCMOS25; NET "RFC_RSSI_D<6>" LOC = B20 | IOSTANDARD = LVCMOS25; NET "RFC_RSSI_D<7>" LOC = B23 | IOSTANDARD = LVCMOS25; NET "RFC_RSSI_D<8>" LOC = C19 | IOSTANDARD = LVCMOS25; NET "RFC_RSSI_D<9>" LOC = C23 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<0>" LOC = D19 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<1>" LOC = E21 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<2>" LOC = A23 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<3>" LOC = A24 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<4>" LOC = F19 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<5>" LOC = H19 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<6>" LOC = F20 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<7>" LOC = H20 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<8>" LOC = C20 | IOSTANDARD = LVCMOS25; NET "RFD_RSSI_D<9>" LOC = J20 | IOSTANDARD = LVCMOS25; NET "FMC_RF_RSSI_CLK" LOC = G13 | IOSTANDARD = LVCMOS25; NET "FMC_RF_RSSI_PD" LOC = A21 | IOSTANDARD = LVCMOS25; #FMC module RF A pins (probably renamed RF C in user project) #ADC/DAC NET "RFC_AD_spi_sclk_pin" LOC = B25 | IOSTANDARD = LVCMOS25; NET "RFC_AD_SPI_SDIO" LOC = D26 | IOSTANDARD = LVCMOS25 | PULLDOWN; NET "RFC_AD_spi_cs_n_pin" LOC = D27 | IOSTANDARD = LVCMOS25; NET "RFC_AD_reset_n_pin" LOC = B27 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXCLK" LOC = C28 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXIQ" LOC = D29 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<0>" LOC = C29 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<1>" LOC = C24 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<2>" LOC = C22 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<3>" LOC = G27 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<4>" LOC = G28 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<5>" LOC = D22 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<6>" LOC = G26 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<7>" LOC = A25 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<8>" LOC = A26 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<9>" LOC = H27 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<10>" LOC = E27 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TRXD<11>" LOC = B26 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXCLK" LOC = C27 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXIQ" LOC = C30 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<0>" LOC = F26 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<1>" LOC = K21 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<2>" LOC = E24 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<3>" LOC = G25 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<4>" LOC = F25 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<5>" LOC = E26 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<6>" LOC = A19 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<7>" LOC = D24 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<8>" LOC = A18 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<9>" LOC = L21 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<10>" LOC = L20 | IOSTANDARD = LVCMOS25; NET "RFC_AD_TXD<11>" LOC = D30 | IOSTANDARD = LVCMOS25; #Front end NET "RFC_PAEn_24_pin" LOC = D14 | IOSTANDARD = LVCMOS25; NET "RFC_PAEn_5_pin" LOC = M12 | IOSTANDARD = LVCMOS25; NET "RFC_AntSw_pin<0>" LOC = M11 | IOSTANDARD = LVCMOS25; NET "RFC_AntSw_pin<1>" LOC = A13 | IOSTANDARD = LVCMOS25; #Transceiver NET "RFC_B_pin<0>" LOC = B30 | IOSTANDARD = LVCMOS25; NET "RFC_B_pin<1>" LOC = F28 | IOSTANDARD = LVCMOS25; NET "RFC_B_pin<2>" LOC = B31 | IOSTANDARD = LVCMOS25; NET "RFC_B_pin<3>" LOC = E28 | IOSTANDARD = LVCMOS25; NET "RFC_B_pin<4>" LOC = D25 | IOSTANDARD = LVCMOS25; NET "RFC_B_pin<5>" LOC = A30 | IOSTANDARD = LVCMOS25; NET "RFC_B_pin<6>" LOC = A31 | IOSTANDARD = LVCMOS25; NET "RFC_SPI_SCLK_pin" LOC = A29 | IOSTANDARD = LVCMOS25; NET "RFC_SPI_CSn_pin" LOC = B18 | IOSTANDARD = LVCMOS25; NET "RFC_SPI_MOSI_pin" LOC = J22 | IOSTANDARD = LVCMOS25; NET "RFC_RXEN_pin" LOC = H22 | IOSTANDARD = LVCMOS25; NET "RFC_RXHP_pin" LOC = B28 | IOSTANDARD = LVCMOS25; NET "RFC_SHDN_pin" LOC = K22 | IOSTANDARD = LVCMOS25; NET "RFC_TXEN_pin" LOC = C18 | IOSTANDARD = LVCMOS25; NET "RFC_LD_pin" LOC = A28 | IOSTANDARD = LVCMOS25; #FMC module RF B pins (probably renamed RF D in user project) #ADC/DAC NET "RFD_AD_spi_sclk_pin" LOC = K17 | IOSTANDARD = LVCMOS25; NET "RFD_AD_SPI_SDIO" LOC = B17 | IOSTANDARD = LVCMOS25 | PULLDOWN; NET "RFD_AD_spi_cs_n_pin" LOC = D15 | IOSTANDARD = LVCMOS25; NET "RFD_AD_reset_n_pin" LOC = G15 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXCLK" LOC = L15 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXIQ" LOC = K18 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<0>" LOC = J16 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<1>" LOC = H17 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<2>" LOC = J17 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<3>" LOC = L16 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<4>" LOC = G18 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<5>" LOC = M18 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<6>" LOC = H18 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<7>" LOC = M17 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<8>" LOC = D17 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<9>" LOC = J19 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<10>" LOC = K19 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TRXD<11>" LOC = E18 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXCLK" LOC = C17 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXIQ" LOC = E17 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<0>" LOC = B16 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<1>" LOC = J15 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<2>" LOC = A16 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<3>" LOC = H15 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<4>" LOC = M15 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<5>" LOC = F15 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<6>" LOC = C15 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<7>" LOC = M16 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<8>" LOC = B15 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<9>" LOC = G16 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<10>" LOC = F18 | IOSTANDARD = LVCMOS25; NET "RFD_AD_TXD<11>" LOC = F16 | IOSTANDARD = LVCMOS25; #Front end NET "RFD_PAEn_24_pin" LOC = A14 | IOSTANDARD = LVCMOS25; NET "RFD_PAEn_5_pin" LOC = B13 | IOSTANDARD = LVCMOS25; NET "RFD_AntSw_pin<0>" LOC = C14 | IOSTANDARD = LVCMOS25; NET "RFD_AntSw_pin<1>" LOC = B12 | IOSTANDARD = LVCMOS25; #Transceiver NET "RFD_B_pin<0>" LOC = H12 | IOSTANDARD = LVCMOS25; NET "RFD_B_pin<1>" LOC = H13 | IOSTANDARD = LVCMOS25; NET "RFD_B_pin<2>" LOC = M13 | IOSTANDARD = LVCMOS25; NET "RFD_B_pin<3>" LOC = G12 | IOSTANDARD = LVCMOS25; NET "RFD_B_pin<4>" LOC = F14 | IOSTANDARD = LVCMOS25; NET "RFD_B_pin<5>" LOC = H14 | IOSTANDARD = LVCMOS25; NET "RFD_B_pin<6>" LOC = J12 | IOSTANDARD = LVCMOS25; NET "RFD_SPI_SCLK_pin" LOC = G10 | IOSTANDARD = LVCMOS25; NET "RFD_SPI_CSn_pin" LOC = K13 | IOSTANDARD = LVCMOS25; NET "RFD_SPI_MOSI_pin" LOC = F11 | IOSTANDARD = LVCMOS25; NET "RFD_RXEN_pin" LOC = K12 | IOSTANDARD = LVCMOS25; NET "RFD_RXHP_pin" LOC = L13 | IOSTANDARD = LVCMOS25; NET "RFD_SHDN_pin" LOC = K11 | IOSTANDARD = LVCMOS25; NET "RFD_TXEN_pin" LOC = H10 | IOSTANDARD = LVCMOS25; NET "RFD_LD_pin" LOC = L11 | IOSTANDARD = LVCMOS25; #Timing #AD9963 data interface clock constraints Net RFC_AD_TRXCLK TNM_NET = TNM_RFC_AD_TRXCLK; Net RFD_AD_TRXCLK TNM_NET = TNM_RFD_AD_TRXCLK; #TRXCLK runs up to 40MHz (no decimation in AD9963s) TIMESPEC TS_RFC_AD_TRXCLK = PERIOD TNM_RFC_AD_TRXCLK TS_samp_clk*2; TIMESPEC TS_RFD_AD_TRXCLK = PERIOD TNM_RFD_AD_TRXCLK TS_samp_clk*2; #Define relationship of TRXD and TRXCLK, based on AD9963 specs # Using worst-case output delay from AD9963 datasheet table 23 # TRXCLK leads TRXD transition by t_OD2; ad_bridge uses IDELAY to shift this to mid valid window # VALID window below assumes DDR interleaved I/Q at 20MSps rate (25nsec / half sample) INST "RFC_AD_TRXD<*>" TNM = RFC_AD_TRXD_group; NET "RFC_AD_TRXCLK" TNM_NET = RFC_AD_TRXCLK; TIMEGRP "RFC_AD_TRXD_group" OFFSET = IN 0.7 ns VALID 22 ns BEFORE "RFC_AD_TRXCLK" RISING; TIMEGRP "RFC_AD_TRXD_group" OFFSET = IN 0.7 ns VALID 22 ns BEFORE "RFC_AD_TRXCLK" FALLING; INST "RFD_AD_TRXD<*>" TNM = RFD_AD_TRXD_group; NET "RFD_AD_TRXCLK" TNM_NET = RFD_AD_TRXCLK; TIMEGRP "RFD_AD_TRXD_group" OFFSET = IN 0.7 ns VALID 22 ns BEFORE "RFD_AD_TRXCLK" RISING; TIMEGRP "RFD_AD_TRXD_group" OFFSET = IN 0.7 ns VALID 22 ns BEFORE "RFD_AD_TRXCLK" FALLING; }}}