synth_quicklogic - Synthesis for QuickLogic FPGAs

yosys> help synth_quicklogic
synth_quicklogic [options]
This command runs synthesis for QuickLogic FPGAs
-top <module>
use the specified module as top module
-family <family>
run synthesis for the specified QuickLogic architecture
generate the synthesis netlist for the specified family.
supported values:
- pp3: PolarPro 3
- qlf_k6n10f: K6N10f
-nodsp
do not use dsp_t1_* to implement multipliers and associated logic
(qlf_k6n10f only).
-nocarry
do not use adder_carry cells in output netlist.
-nobram
do not use block RAM cells in output netlist.
-bramtypes
Emit specialized BRAM cells for particular address and data width
configurations.
-blif <file>
write the design to the specified BLIF file. writing of an output file
is omitted if this parameter is not specified.
-verilog <file>
write the design to the specified verilog file. writing of an output
file is omitted if this parameter is not specified.
-abc
use old ABC flow, which has generally worse mapping results but is less
likely to have bugs.
The following commands are executed by this synthesis command:

    begin:
        read_verilog -lib -specify +/quicklogic/common/cells_sim.v +/quicklogic/<family>/cells_sim.v
        hierarchy -check -top <top>

    prepare:
        proc
        flatten
        tribuf -logic                       (for pp3)
        deminout
        opt_expr
        opt_clean
        check
        opt -nodffe -nosdff
        fsm
        opt
        wreduce
        peepopt
        opt_clean
        share

    map_dsp:    (for qlf_k6n10f, skip if -nodsp)
        wreduce t:$mul
        ql_dsp_macc
        techmap -map +/mul2dsp.v -D DSP_A_MAXWIDTH=20 -D DSP_B_MAXWIDTH=18 -D DSP_A_MINWIDTH=11 -D DSP_B_MINWIDTH=10 -D DSP_NAME=$__QL_MUL20X18
        techmap -map +/mul2dsp.v -D DSP_A_MAXWIDTH=10 -D DSP_B_MAXWIDTH=9 -D DSP_A_MINWIDTH=4 -D DSP_B_MINWIDTH=4 -D DSP_NAME=$__QL_MUL10X9
        chtype -set $mul t:$__soft_mul
        techmap -map +/quicklogic/<family>/dsp_map.v -D USE_DSP_CFG_PARAMS=0
        ql_dsp_simd
        techmap -map +/quicklogic/<family>/dsp_final_map.v
        ql_dsp_io_regs

    coarse:
        techmap -map +/cmp2lut.v -D LUT_WIDTH=4
        opt_expr
        opt_clean
        alumacc
        pmuxtree
        opt
        memory -nomap
        opt_clean

    map_bram:    (for qlf_k6n10f, skip if -no_bram)
        memory_libmap -lib +/quicklogic/<family>/libmap_brams.txt
        ql_bram_merge
        techmap -map +/quicklogic/<family>/libmap_brams_map.v
        techmap -autoproc -map +/quicklogic/<family>/brams_map.v
        ql_bram_types    (if -bramtypes)

    map_ffram:
        opt -fast -mux_undef -undriven -fine
        memory_map -iattr -attr !ram_block -attr !rom_block -attr logic_block -attr syn_ramstyle=auto -attr syn_ramstyle=registers -attr syn_romstyle=auto -attr syn_romstyle=logic
        opt -undriven -fine

    map_gates:
        techmap
        opt -fast
        muxcover -mux8 -mux4    (for pp3)

    map_ffs:
        opt_expr
        shregmap -minlen <min> -maxlen <max>    (for qlf_k6n10f)
        dfflegalize -cell <supported FF types>
        techmap -map +/quicklogic/<family>/cells_map.v    (for pp3)
        techmap -map +/quicklogic/<family>/ffs_map.v    (for ql_k6n10f)
        opt

    map_luts:    (for pp3)
        techmap -map +/quicklogic/<family>/latches_map.v
        read_verilog -lib -specify -icells +/quicklogic/<family>/abc9_model.v
        techmap -map +/quicklogic/<family>/abc9_map.v
        abc9 -maxlut 4 -dff
        techmap -map +/quicklogic/<family>/abc9_unmap.v
        clean

    map_luts:    (for qlf_k6n10f)
        abc9 -maxlut 6
        clean
        opt_lut

    map_cells:    (for pp3)
        techmap -map +/quicklogic/<family>/lut_map.v
        clean
        opt_lut

    check:
        autoname
        hierarchy -check
        stat
        check -noinit

    iomap:    (for pp3)
        clkbufmap -inpad ckpad Q:P
        iopadmap -bits -outpad outpad A:P -inpad inpad Q:P -tinoutpad bipad EN:Q:A:P A:top

    finalize:
        setundef -zero -params -undriven    (for pp3)
        opt_clean -purge
        check
        blackbox =A:whitebox

    blif:    (if -blif)
        write_blif -attr -param -auto-top

    verilog:    (if -verilog)
        write_verilog -noattr -nohex <file-name>