mirror of https://github.com/YosysHQ/yosys.git
124 lines
2.9 KiB
Plaintext
124 lines
2.9 KiB
Plaintext
# Yosys synthesis script for ${TOP_MODULE}
|
|
|
|
#########################
|
|
# Parse input files
|
|
#########################
|
|
# Read verilog files
|
|
read_verilog ${READ_VERILOG_OPTIONS} ${VERILOG_FILES}
|
|
# Read technology library
|
|
read_verilog -lib -specify ${YOSYS_CELL_SIM_VERILOG}
|
|
|
|
#########################
|
|
# Prepare for synthesis
|
|
#########################
|
|
# Identify top module from hierarchy
|
|
hierarchy -check -top ${TOP_MODULE}
|
|
# - Convert process blocks to AST
|
|
proc
|
|
# Flatten all the gates/primitives
|
|
flatten
|
|
# Identify tri-state buffers from 'z' signal in AST
|
|
# with follow-up optimizations to clean up AST
|
|
tribuf -logic
|
|
opt_expr
|
|
opt_clean
|
|
# demote inout ports to input or output port
|
|
# with follow-up optimizations to clean up AST
|
|
deminout
|
|
opt -nodffe
|
|
|
|
opt_expr
|
|
opt_clean
|
|
check
|
|
opt -nodffe
|
|
wreduce -keepdc
|
|
peepopt
|
|
pmuxtree
|
|
opt_clean
|
|
|
|
########################
|
|
# Map multipliers
|
|
# Inspired from synth_xilinx.cc
|
|
#########################
|
|
# Avoid merging any registers into DSP, reserve memory port registers first
|
|
memory_dff
|
|
wreduce t:$mul
|
|
techmap -map +/mul2dsp.v -map ${YOSYS_DSP_MAP_VERILOG} ${YOSYS_DSP_MAP_PARAMETERS}
|
|
select a:mul2dsp
|
|
setattr -unset mul2dsp
|
|
opt_expr -fine
|
|
wreduce
|
|
select -clear
|
|
chtype -set $mul t:$__soft_mul # Extract arithmetic functions
|
|
|
|
#########################
|
|
# Run coarse synthesis
|
|
#########################
|
|
# Run a tech map with default library
|
|
alumacc
|
|
opt
|
|
#techmap -map +/techmap.v -map ${YOSYS_ADDER_MAP_VERILOG}
|
|
#share
|
|
#opt -nodffe
|
|
#fsm
|
|
# Run a quick follow-up optimization to sweep out unused nets/signals
|
|
#opt -fast -nodffe
|
|
# Optimize any memory cells by merging share-able ports and collecting all the ports belonging to memorcy cells
|
|
memory -nomap
|
|
opt_clean
|
|
|
|
#########################
|
|
# Map logics to BRAMs
|
|
#########################
|
|
memory_bram -rules ${YOSYS_BRAM_MAP_RULES}
|
|
techmap -map ${YOSYS_BRAM_MAP_VERILOG}
|
|
opt -fast -mux_undef -undriven -fine -nodffe
|
|
memory_map
|
|
opt -undriven -fine -nodffe
|
|
|
|
########################
|
|
# Map Adders
|
|
#techmap -map +/techmap.v -map ${YOSYS_ADDER_AVG_MAP_VERILOG}
|
|
opt -fast -nodffe
|
|
opt_expr
|
|
opt_merge
|
|
opt_clean
|
|
opt -nodffe
|
|
|
|
#########################
|
|
# Map flip-flops
|
|
#########################
|
|
memory
|
|
dfflegalize -cell $_DFF_?_ 01 -cell $_DFF_???_ 01 -cell $_SDFF_???_ 01
|
|
techmap -map +/techmap.v -map ${YOSYS_DFF_MAP_VERILOG}
|
|
dfflegalize -cell $_DFF_?_ 01 -cell $_DFF_???_ 01 -cell $_SDFF_???_ 01
|
|
techmap -map +/techmap.v -map ${YOSYS_DFF_MAP_VERILOG}
|
|
opt_expr -mux_undef
|
|
simplemap
|
|
opt_expr
|
|
opt_merge
|
|
opt_dff -nodffe
|
|
opt_clean
|
|
opt -nodffe
|
|
|
|
#########################
|
|
# Map LUTs
|
|
#########################
|
|
abc -lut ${LUT_SIZE}
|
|
# Map dff again since ABC may generate some new FFs
|
|
techmap -map ${YOSYS_DFF_MAP_VERILOG}
|
|
techmap -map ${YOSYS_ADDER_MAP_VERILOG}
|
|
|
|
#########################
|
|
# Check and show statisitics
|
|
#########################
|
|
hierarchy -check
|
|
stat
|
|
|
|
#########################
|
|
# Output netlists
|
|
#########################
|
|
opt_clean -purge
|
|
write_blif ${OUTPUT_BLIF}
|
|
write_verilog ${TOP_MODULE}_post_synth.v
|