]> rtime.felk.cvut.cz Git - fpga/lx-cpu1/lx-rocon.git/blobdiff - hw/Makefile
Report detailed analysis of timing problems for 20 worst signal traces.
[fpga/lx-cpu1/lx-rocon.git] / hw / Makefile
index cfdb561c7337da33bc2ddf0177a008e616b0c613..882628de2c9d915ded9309acd30e3938e6763666 100644 (file)
@@ -47,6 +47,8 @@ NCD_MAP        := $(OUTB)_map.ncd
 NCD            := $(OUTB).ncd
 BIN            := $(OUTB).bin
 PKG            := $(OUTB).pkg
+TWR            := $(OUTB).twr
+TSI            := $(OUTB).tsi
 
 REQ_NGC            := $(REQB).ngc
 REQ_NGD            := $(REQB).ngd
@@ -60,11 +62,13 @@ REQ_SRC            := .
 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
@@ -72,7 +76,7 @@ XST_WRITE_TIMING_CONSTRAINTS := NO
 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
@@ -83,7 +87,15 @@ XST_IOBUF := 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
@@ -92,7 +104,7 @@ MAP_LUT_COMBINING := 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
@@ -100,9 +112,9 @@ TARGET_OBJDUMP := $(MB_CROSS_COMPILE)objdump
 
 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)
 
@@ -133,10 +145,11 @@ re-synthesize $(REQ_NGC): $(addprefix $(REQ_SRC)/,$(PRJ))
          -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) \
@@ -153,7 +166,10 @@ re-synthesize $(REQ_NGC): $(addprefix $(REQ_SRC)/,$(PRJ))
          -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)
@@ -166,7 +182,7 @@ 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
@@ -174,7 +190,9 @@ re-map $(REQ_NCD_MAP) $(REQ_PCF): $(REQ_NGD)
 .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)
@@ -206,10 +224,17 @@ $(OUT)/bin2mem: $(FIRMWARE_DIR)/utils/bin2mem.c
 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