Using yosys with Libero Soc
===========================

Yosys does synthesis and therefore could be used instead of Synplify in
the Libero workflow.  You still have to use LiberoSoc for place, route,
bitsteam generation, timing analysis...

This is unfortunately not trivial, but this is also not too difficult.
When you run the Synthesize step, three tools are executed one after the other.

You'd better to write a simple script, like this one (assuming the top module
is top):

----------- run_yosys.sh --------------
#!/bin/sh

set -e

yosys -p 'read_verilog hdl/top.v; synth_sf2; write_verilog -defparam synthesis/top_yosys.v'

rwnetlist64 --script yosys/rwnetlist.tcl

echo "##### run g4compile"

g4compile --script yosys/run_compile.tcl

libero SCRIPT:run_yosys.tcl
------------------------------------

Yosys will do the synthesis and write a netlist in verilog.  Then you have
to call microsemi tools to build the netlist for the P&R tools.

The first one do a file format conversion.  During the normal workflow, the
tcl file is created in a temporary file.  You can use this one:

------------- tcl/rwnetlist.tcl ---------
set_device -fam SmartFusion2
read_verilog  \
    -file {../synthesis/top_yosys.v}
write_adl -file {../designer/top/top.adl}
----------------------------------------

Probably, you will have to change the family for Igloo2.

The second command link the netlists.  The tcl script is generated by
liberoSoc in designer/top/run_compile.tcl.  You can use it as it.
The "Source Files" value could be changed but it looks to have no effect.
This commands create the .afl file.

Then you can use the normal flow.  This is done by the run_yosys.tcl:

-----------  run_yosys.tcl --------------
open_project -file {./top.prjx}
run_tool -name {PLACEROUTE} 
run_tool -name {PROGRAMDEVICE} 
-----------------------------------------


Using MSS, HPMS or other IPs
============================

This works.  You'd better to configure CCC (~ the PLL) and the MSS using
liberoSoc as the configuration bits are not documented.
Then you have to manually gather the HDL sources generated for the IPs.
They are in the component subdirectory. Sometimes there are both a _syn and
a _pre version of the same file.  They are for symplify and precision.
Use only once, the symplify version should be OK.  For the MSS, these are the
blackboxes, so you don't need them.

SYSRESET and XTLOSC have one fake port.  This is handled, provided you use
the blackbox module declared by Yosys in cell_sim.v.  This is OK by default
too.


What is missing
===============

Always flatten your design (this is the default).  Hierarchical designs
don't work.

Constraints (SDC files) are not supported by Yosys.  Furthermore, due to
flattening and optimization, nets name may change.

More testing...
