Use -match-init to not synth contradicting init values
authorPepijn de Vos <pepijndevos@gmail.com>
Tue, 3 Dec 2019 14:12:25 +0000 (15:12 +0100)
committerPepijn de Vos <pepijndevos@gmail.com>
Tue, 3 Dec 2019 14:12:25 +0000 (15:12 +0100)
techlibs/gowin/synth_gowin.cc
tests/arch/gowin/init.ys

index 49fde540c7ac08321932cac05284cd0d2786236f..6cf058f292a8ea0f22b06fc6c55e7f113e96d241 100644 (file)
@@ -216,7 +216,7 @@ struct SynthGowinPass : public ScriptPass
                if (check_label("map_ffs"))
                {
                        run("dffsr2dff");
-                       run("dff2dffs");
+                       run("dff2dffs -match-init");
                        run("opt_clean");
                        if (!nodffe)
                                run("dff2dffe -direct-match $_DFF_* -direct-match $__DFFS_*");
index dc82068259e85c201c4c56551d10bf97e04477ce..ddc0e47579f9f88e95523df02cb10e39317a579b 100644 (file)
@@ -36,7 +36,8 @@ design -load read
 # these should synth to a flop with reset
 chparam -set INIT 1 myDFF myDFFN myDFFE myDFFNE
 
-# these should give a warning
+# async should give a warning
+# sync should synth to a mux
 chparam -set INIT 0 myDFF*S* myDFF*P*
 chparam -set INIT 1 myDFF*R* myDFF*C*
 
@@ -45,28 +46,29 @@ flatten
 synth_gowin -run coarse:
 
 # check the flops mapped as expected
-select -assert-count 0 t:DFF
+select -assert-count 1 t:DFF
 select -assert-count 1 t:DFFC
 select -assert-count 1 t:DFFCE
-select -assert-count 0 t:DFFE
-select -assert-count 0 t:DFFN
+select -assert-count 1 t:DFFE
+select -assert-count 1 t:DFFN
 select -assert-count 1 t:DFFNC
 select -assert-count 1 t:DFFNCE
-select -assert-count 0 t:DFFNE
+select -assert-count 1 t:DFFNE
 select -assert-count 1 t:DFFNP
 select -assert-count 1 t:DFFNPE
-select -assert-count 1 t:DFFNR
-select -assert-count 1 t:DFFNRE
+select -assert-count 0 t:DFFNR
+select -assert-count 0 t:DFFNRE
 select -assert-count 2 t:DFFNS
 select -assert-count 2 t:DFFNSE
 select -assert-count 1 t:DFFP
 select -assert-count 1 t:DFFPE
-select -assert-count 1 t:DFFR
-select -assert-count 1 t:DFFRE
+select -assert-count 0 t:DFFR
+select -assert-count 0 t:DFFRE
 select -assert-count 2 t:DFFS
 select -assert-count 2 t:DFFSE
+select -assert-count 12 t:LUT2
 
 # check the expected leftover init values
 # this would happen if your reset value is not the initial value
 # which would be weird
-select -assert-count 16 a:init
+select -assert-count 8 a:init