forked from f4pga/f4pga-arch-defs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathicestorm.cmake
78 lines (69 loc) · 3.03 KB
/
icestorm.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
function(icestorm_setup)
get_target_property_required(PYTHON3 env PYTHON3)
set(ICESTORM_SRC ${symbiflow-arch-defs_SOURCE_DIR}/third_party/icestorm CACHE PATH "Path to icestorm repository")
set(PYUTILS_PATH ${symbiflow-arch-defs_SOURCE_DIR}/utils:${symbiflow-arch-defs_SOURCE_DIR}/ice40/utils/fasm_icebox)
set(FASM2ASC ${symbiflow-arch-defs_SOURCE_DIR}/ice40/utils/fasm_icebox/fasm2asc.py)
add_custom_target(
fasm2asc_deps
DEPENDS ${FASM2ASC_DEPS} ${FASM2ASC} ${PYTHON3}
)
add_custom_target(
ice40_import_timing_deps
DEPENDS ${ICE40_IMPORT_TIMING} ${PYTHON3}
)
set_target_properties(
ice40_import_timing_deps
PROPERTIES ICE40_IMPORT_TIMING ${symbiflow-arch-defs_SOURCE_DIR}/ice40/utils/ice40_import_bel_timing.py
)
get_target_property_required(ICEBOX_VLOG env ICEBOX_VLOG)
get_target_property_required(ICEPACK env ICEPACK)
get_target_property_required(ICETIME env ICETIME)
get_target_property_required(ICEBOX_HLC2ASC env ICEBOX_HLC2ASC)
get_filename_component(ICEBOX_PATH ${ICEBOX_VLOG} DIRECTORY)
set(ICEBOX_SHARE ${ICEBOX_PATH}/../share/icebox CACHE PATH "")
set(CELLS_SIM ${YOSYS_DATADIR}/ice40/cells_sim.v)
add_file_target(FILE ${CELLS_SIM} ABSOLUTE)
set(PYPATH_ARG "PYTHONPATH=\${ICEBOX_PATH}:${PYUTILS_PATH}")
define_arch(
ARCH ice40
YOSYS_SYNTH_SCRIPT ${symbiflow-arch-defs_SOURCE_DIR}/ice40/yosys/synth.tcl
YOSYS_CONV_SCRIPT ${symbiflow-arch-defs_SOURCE_DIR}/ice40/yosys/conv.tcl
DEVICE_FULL_TEMPLATE \${DEVICE}-\${PACKAGE}
VPR_ARCH_ARGS "\
--clock_modeling route \
--allow_unrelated_clustering off \
--target_ext_pin_util 0.5 \
--astar_fac 1.0 \
--router_init_wirelength_abort_threshold 2 \
--congested_routing_iteration_threshold 0.8"
RR_PATCH_TOOL
${symbiflow-arch-defs_SOURCE_DIR}/ice40/utils/ice40_import_routing_from_icebox.py
RR_PATCH_CMD "\${QUIET_CMD} \${CMAKE_COMMAND} -E env ${PYPATH_ARG} \
\${PYTHON3} \${RR_PATCH_TOOL} \
--device=\${DEVICE} \
--read_rr_graph \${OUT_RRXML_VIRT} \
--write_rr_graph \${OUT_RRXML_REAL}"
PLACE_TOOL
${symbiflow-arch-defs_SOURCE_DIR}/ice40/utils/ice40_create_ioplace.py
PLACE_TOOL_CMD "\${QUIET_CMD} \${CMAKE_COMMAND} -E env ${PYPATH_ARG} \
\${PYTHON3} \${PLACE_TOOL} \
--map \${PINMAP} \
--blif \${OUT_EBLIF} \
--pcf \${INPUT_IO_FILE}"
CELLS_SIM ${CELLS_SIM}
BIT_TO_V ${ICEBOX_VLOG}
BIT_TO_V_CMD "${ICEBOX_VLOG} -D -c -n \${TOP} -p \${INPUT_IO_FILE} -d \${PACKAGE} \${OUT_BITSTREAM} > \${OUT_BIT_VERILOG}"
BITSTREAM_EXTENSION asc
BIT_TO_BIN ${ICEPACK}
BIT_TO_BIN_CMD "${ICEPACK} \${OUT_BITSTREAM} > \${OUT_BIN}"
BIT_TIME ${ICETIME}
BIN_EXTENSION bin
BIT_TIME_CMD "${ICETIME} -v -t -p \${INPUT_IO_FILE} -d \${DEVICE} \${OUT_BITSTREAM} -o \${OUT_TIME_VERILOG}"
FASM_TO_BIT fasm2asc_deps
FASM_TO_BIT_CMD "\${QUIET_CMD} \${CMAKE_COMMAND} -E env ${PYPATH_ARG} \
\${PYTHON3} ${FASM2ASC} --device \${DEVICE} \${OUT_FASM} \${OUT_BITSTREAM}"
USE_FASM
ROUTE_CHAN_WIDTH 100
NO_PLACE_CONSTR
)
endfunction()