NCD := $(OUTB).ncd
BIN := $(OUTB).bin
PKG := $(OUTB).pkg
+TWR := $(OUTB).twr
+TSI := $(OUTB).tsi
REQ_NGC := $(REQB).ngc
REQ_NGD := $(REQB).ngd
REQ_FIRMWARE := $(OUT)/imem.bin $(OUT)/imem.asm $(OUT)/dmem.bin $(OUT)/firmware.lst
#===============================================================================
-# Sythesis settings
+# Sythesis settings (SmartXplorer)
XST_GLOB_OPT := AllClockNets
XST_OPT_LEVEL := 2
+XST_OPT_MODE := Speed
XST_IOB_PACKING := False
+XST_POWER := NO
XST_KEEP_HIEARCHY := No
XST_NETLIST_HIEARCHY := As_Optimized
XST_READ_CORES := YES
XST_CROSS_CLOCK_ANALYSIS := NO
XST_CASE := Maintain
XST_REDUCE_CONTROL_SETS := Auto
-XST_REGISTER_DUPLICATION := Yes
+XST_REGISTER_DUPLICATION := YES
XST_REGISTER_BALANCING := Yes
XST_MOVE_FIRST_STAGE := YES
XST_MOVE_LAST_STAGE := YES
XST_MAX_FANOUT := 100000
XST_RESOURCE_SHARING := YES
XST_SLICE_UTILIZATION_RATIO_MARGIN := 5
-
+XST_SLICE_UTILIZATION_RATIO := 100
+XST_BRAM_UTILIZATION_RATIO := 100
+XST_DSP_UTILIZATION_RATIO := 100
+XST_USE_DSP48 := Auto
+XST_USE_SYNC_SET := Auto
+XST_USE_SYNC_RESET := Auto
+XST_SAFE_IMPLEMENTATION := No
+
+MAP_PLACER_COST_TABLE := 2
MAP_LOGIC_OPT := on
MAP_GLOBAL_OPT := off
MAP_EQUIVALENT_REGISTER_REMOVAL := off
#===============================================================================
# Firmware
-MB_CROSS_COMPILE ?= mb-
+MB_CROSS_COMPILE ?= mbtumbl-elf-
TARGET_CC := $(MB_CROSS_COMPILE)gcc
TARGET_LD := $(MB_CROSS_COMPILE)ld
TARGET_OBJCOPY := $(MB_CROSS_COMPILE)objcopy
C_OBJS := $(OUT)/firmware.o
A_OBJS :=
-CFLAGS := -mxl-soft-div -msoft-float -mno-xl-soft-mul -mxl-barrel-shift -Wno-main -Wl,-no-check-sections -fno-zero-initialized-in-bss -g -O2 -Wall
+CFLAGS := -mxl-soft-div -msoft-float -Wno-main -Wl,-no-check-sections -ffunction-sections -fno-zero-initialized-in-bss -g -O2 -Wall
AFLAGS := -D__ASSEMBLY__ $(CFLAGS)
-LDFLAGS := -static -nostdlib -defsym _STACK_SIZE=0x0200
+LDFLAGS := -static -nostdlib -relax -defsym _STACK_SIZE=0x0200 --gc-sections
OBJS := $(OUT)/start.o $(C_OBJS) $(A_OBJS)
-ofmt NGC \
-top $(TOP) \
-p $(DEVICE) \
- -opt_mode Speed \
-keep_hierarchy $(XST_KEEP_HIEARCHY) \
-glob_opt $(XST_GLOB_OPT) \
+ -opt_mode $(XST_OPT_MODE) \
-opt_level $(XST_OPT_LEVEL) \
+ -power $(XST_POWER) \
-iob $(XST_IOB_PACKING) \
-read_cores $(XST_READ_CORES) \
-write_timing_constraints $(XST_WRITE_TIMING_CONSTRAINTS) \
-optimize_primitives $(XST_OPTIMIZE_PRIMITIVES) \
-use_clock_enable $(XST_USE_CLOCK_ENABLE) \
-equivalent_register_removal $(XST_EQUIVALENT_REGISTER_REMOVAL) \
- -slice_utilization_ratio_maxmargin $(XST_SLICE_UTILIZATION_RATIO_MARGIN)" | xst | tee xst.log
+ -slice_utilization_ratio_maxmargin $(XST_SLICE_UTILIZATION_RATIO_MARGIN) \
+ -slice_utilization_ratio $(XST_SLICE_UTILIZATION_RATIO) \
+ -bram_utilization_ratio $(XST_BRAM_UTILIZATION_RATIO) \
+ -dsp_utilization_ratio $(XST_DSP_UTILIZATION_RATIO)" | xst | tee xst.log
.PHONY: re-translate
re-translate $(REQ_NGD): $(REQ_NGC) $(REQ_UCF)
.PHONY: re-map
re-map $(REQ_NCD_MAP) $(REQ_PCF): $(REQ_NGD)
cd $(OUT); \
- map -w -intstyle $(INTSTYLE) -p $(DEVICE) -logic_opt $(MAP_LOGIC_OPT) -ol high -t 1 -xt 0 \
+ map -w -intstyle $(INTSTYLE) -p $(DEVICE) -logic_opt $(MAP_LOGIC_OPT) -ol high -t $(MAP_PLACER_COST_TABLE) -xt 0 \
-r 4 -global_opt $(MAP_GLOBAL_OPT) -mt off -ir off -pr off -lc $(MAP_LUT_COMBINING) \
-power off -equivalent_register_removal $(MAP_EQUIVALENT_REGISTER_REMOVAL) \
-o $(NCD_MAP) $(NGD) $(PCF) | tee map.log
.PHONY: re-par
re-par $(REQ_NCD): $(REQ_NCD_MAP) $(REQ_PCF)
cd $(OUT); \
- par -w -intstyle $(INTSTYLE) -ol high -mt off $(NCD_MAP) $(NCD) $(PCF) | tee par.log
+ par -w -intstyle $(INTSTYLE) -ol high -xe n -mt off $(NCD_MAP) $(NCD) $(PCF) | tee par.log
+ cd $(OUT); \
+ trce -e 20 -tsi $(TSI) -o $(TWR) $(NCD) $(PCF)
.PHONY: re-gen
re-gen $(REQ_BIN): $(REQ_NCD)
re-firmware $(REQ_FIRMWARE): $(REQ_PKG) $(OUT)/bin2mem $(OUT)/firmware.elf
$(TARGET_OBJCOPY) -O binary $(OUT)/firmware.elf -j .text -S $(OUT)/imem.bin
$(TARGET_OBJCOPY) -O binary $(OUT)/firmware.elf -j .data -S $(OUT)/dmem.bin
- $(TARGET_OBJDUMP) -DSCz $(OUT)/firmware.elf > $@
+ $(TARGET_OBJDUMP) -DSCz $(OUT)/firmware.elf >$(OUT)/firmware.lst
cd $(OUT); \
$(TARGET_OBJDUMP) -b binary -mmbtumbl -EB -D imem.bin | sed -e 's/.data/.text/' > imem.asm
+# imem
+# watch -d ./usb_sendhex -d 0x1669:0x1023 -t 4 -s 0x80000000 -l 0x200 -f dump -u -
+# dmem
+# watch -d ./usb_sendhex -d 0x1669:0x1023 -t 4 -s 0x80001000 -l 0x200 -f dump -u -
+# PC
+# watch -d ./usb_sendhex -d 0x1669:0x1023 -t 4 -s 0x80003008 -l 0x4 -f dump -u -
+
#===============================================================================
.PHONY: clean