#
# Copyright 2008-2012 Ettus Research LLC
#

##################################################
# Project Setup
##################################################
TOP_MODULE = x300
BUILD_DIR = build-$(NAME)

# set me in a custom makefile
CUSTOM_SRCS =
CUSTOM_DEFS =

##################################################
# Include other makefiles
##################################################

include ../Makefile.common
include coregen/Makefile.srcs
include coregen_dsp/Makefile.srcs
include ../../lib/control/Makefile.srcs
include ../../lib/fifo/Makefile.srcs
include ../../lib/simple_gemac/Makefile.srcs
include ../../lib/timing/Makefile.srcs
include ../../lib/zpu/Makefile.srcs
include ../../lib/wishbone/Makefile.srcs
include ../../lib/packet_proc/Makefile.srcs
include ../../lib/vita/Makefile.srcs
include ../../lib/xge/Makefile.srcs
include ../../lib/xge_interface/Makefile.srcs
include ../../lib/dsp/Makefile.srcs
include ../../lib/io_port2/Makefile.srcs
include ../../lib/axi/Makefile.srcs

promgen: $(BIT_FILE)
	promgen -w -p bin -o $(BIN_FILE) -u 0 $<

##################################################
# Project Properties
##################################################
export PROJECT_PROPERTIES := \
family "Kintex7" \
device $(DEVICE) \
package ffg900 \
speed -2 \
top_level_module_type "HDL" \
synthesis_tool "XST (VHDL/Verilog)" \
simulator "ISim (VHDL/Verilog)" \
"Preferred Language" "Verilog" \
"Enable Message Filtering" FALSE \
"Display Incremental Messages" FALSE

##################################################
# Sources
##################################################
TOP_SRCS = \
x300.v \
x300_pcie_int.v \
x300_core.v \
x300_zpu_config.vhd \
soft_ctrl.v \
dbuf_bootram.v \
capture_ddrlvds.v \
gen_ddrlvds.v \
radio.v \
bus_int.v \
x300.ucf \
stc3.ucf \
timing.ucf

ONE_GIG_SRCS = $(COREGEN_ONE_GIG_SRCS) \
gige_phy/gige_phy_mdio.v \
gige_phy/gige_sfp_mdio_block.v \
gige_phy/gige_sfp_mdio_reset_sync.v \
gige_phy/gige_sfp_mdio_sync_block.v \
gige_phy/transceiver/gige_sfp_mdio_transceiver.v \
gige_phy/transceiver/gige_sfp_mdio_gtwizard.v \
gige_phy/transceiver/gige_sfp_mdio_gtwizard_gt.v \
gige_phy/transceiver/gige_sfp_mdio_gtwizard_init.v \
gige_phy/transceiver/gige_sfp_mdio_tx_startup_fsm.v \
gige_phy/transceiver/gige_sfp_mdio_rx_startup_fsm.v \
gige_phy/transceiver/gige_sfp_mdio_recclk_monitor.v \

TEN_GIG_SRCS = $(COREGEN_TEN_GIG_SRCS) \
ten_gige_phy/ten_gig_eth_pcs_pma_x300_top.v \
ten_gige_phy/ten_gig_eth_pcs_pma_x300_top.ucf \
ten_gige_phy/ten_gig_eth_pcs_pma_block.v \
ten_gige_phy/ten_gig_eth_pcs_pma_mod.v \
ten_gige_phy/gtx/ten_gig_eth_pcs_pma_gt_usrclk_source.v \
ten_gige_phy/gtx/ten_gig_eth_pcs_pma_gtwizard_10gbaser_gt.v \
ten_gige_phy/gtx/ten_gig_eth_pcs_pma_gtwizard_10gbaser.v \

ifeq ($(FLOORPLAN), 1)
  ifeq ($(DEVICE), XC7K325T)
    TOP_SRCS+=floorplan_X300.ucf
  endif

  ifeq ($(DEVICE), XC7K410T)
    TOP_SRCS+=floorplan_X310.ucf
  endif
endif

ifdef BUILD_10G
ETH_SRCS+=$(abspath $(TEN_GIG_SRCS)) $(XGE_SRCS) $(XGE_INTERFACE_SRCS) $(abspath x300_10ge.ucf)
endif

ifdef BUILD_1G
ETH_SRCS+=$(abspath $(ONE_GIG_SRCS)) $(abspath x300_1ge.ucf)
endif

ifdef ETH10G_PORT0
ETH_SRCS+=$(abspath x300_10ge_port0.ucf)
endif

ifdef ETH10G_PORT1
ETH_SRCS+=$(abspath x300_10ge_port1.ucf)
endif

ifndef NO_DRAM_FIFOS
DRAM_SRCS= \
$(abspath ddr3.ucf) \
$(COREGEN_DRAM_SRCS)
else
DRAM_SRCS=
endif


SOURCES = $(abspath $(TOP_SRCS)) $(FIFO_SRCS) \
$(CONTROL_LIB_SRCS) $(SDR_LIB_SRCS) $(SERDES_SRCS) \
$(SIMPLE_GEMAC_SRCS) $(TIMING_SRCS) $(COREGEN_DSP_SRCS) \
$(VRT_SRCS) $(UDP_SRCS) $(COREGEN_SRCS) $(EXTRAM_SRCS) \
$(ZPU_CORE_SRCS) $(WISHBONE_SRCS) \
$(ETH_SRCS) $(IOPORT2_SRCS) $(COREGEN_CHIPSCOPE_SRCS) \
$(PACKET_PROC_SRCS) $(VITA_SRCS) $(DSP_SRCS) $(DRAM_SRCS) $(AXI_SRCS)


##################################################
# Process Properties
##################################################
SYNTHESIZE_PROPERTIES = \
"Number of Clock Buffers" 8 \
"Pack I/O Registers into IOBs" Yes \
"Optimization Effort" High \
"Optimize Instantiated Primitives" TRUE \
"Register Balancing" Yes \
"Use Clock Enable" Auto \
"Use Synchronous Reset" Auto \
"Use Synchronous Set" Auto \
"Verilog Macros" "$(EXTRA_DEFS) $(CUSTOM_DEFS)"

TRANSLATE_PROPERTIES = \
"Macro Search Path" "$(shell pwd)/coregen"

MAP_PROPERTIES = \
"Generate Detailed MAP Report" TRUE \
"Allow Logic Optimization Across Hierarchy" TRUE \
"Pack I/O Registers/Latches into IOBs" "For Inputs and Outputs" \
"Combinatorial Logic Optimization" TRUE \
"Register Duplication" On \
"Placer Effort Level" High \
"Placer Extra Effort" Normal \
"Enable Multi-Threading" 2 \
"Starting Placer Cost Table (1-100)" $(shell awk 'BEGIN{srand();printf("%d", (100*rand()%100)+1)}') 

PLACE_ROUTE_PROPERTIES = \
"Place & Route Effort Level (Overall)" High \
"Extra Effort (Highest PAR level only)" Normal \
"Enable Multi-Threading" 4

STATIC_TIMING_PROPERTIES = \
"Number of Paths in Error/Verbose Report" 10 \
"Report Type" "Error Report"

GEN_PROG_FILE_PROPERTIES = \
"Configuration Rate" 6 \
"Create Binary Configuration File" TRUE \
"Done (Output Events)" 5 \
"Enable Bitstream Compression" FALSE \
"Enable Outputs (Output Events)" 6 \
"Wait for DCI Match (Output Events)" NoWait

SIM_MODEL_PROPERTIES = ""