@@ -532,25 +532,29 @@ def error(self, logmessage):
532532
533533 def gen_setup_script (self ):
534534 script = '# Autogenerated by SBY stage setup\n '
535- script += 'select *'
535+ script += 'read_ilang design.il\n '
536+ script += 'select *\n '
536537
537538 def cutpoint (v ):
538- return f"cutpoint { v } "
539+ return f"cutpoint { v } \n "
539540
540541 def disable (v ):
541- return f"select -del { v } "
542+ return f"select -del { v } \n "
542543
543544 def enable (v ):
544- return f"select -add { v } "
545+ return f"select -add { v } \n "
545546
546547 def assume (v ):
547- return f"chformal -assert2assume { v } "
548+ return f"chformal -assert2assume { v } \n "
548549
549550 def define (v ):
550- return f"select -set { v } "
551+ defines = str ()
552+ for defn in v :
553+ defines += f"select -set { v } \n "
554+ return defines
551555
552556 def invoke (v ):
553- return f"{ v } "
557+ return f"{ v } \n "
554558
555559 for k , v in self .setup .items ():
556560 script += {
@@ -560,11 +564,12 @@ def invoke(v):
560564 'assume' : assume (v ),
561565 'define' : define (v ),
562566 'invoke' : invoke (v )
563- }.get (k , '' ) + ' \n '
567+ }.get (k , '' )
564568
565569 script += 'select -set _setup %\n '
566570 script += 'select @_setup %n\n '
567571 script += 'chformal -assert -remove %\n '
572+ script += 'write_ilang design_setup.il\n '
568573 return script
569574
570575
@@ -796,9 +801,14 @@ def make_model(self, model_name):
796801 os .makedirs (f"{ self .workdir } /model" )
797802
798803 if model_name == "prep" :
804+ has_setup = len (self .setup ) > 0
805+
799806 with open (f"""{ self .workdir } /model/design_prep.ys""" , "w" ) as f :
800807 print (f"# running in { self .workdir } /model/" , file = f )
801- print (f"""read_ilang design.il""" , file = f )
808+ if has_setup :
809+ print (f"""read_ilang design_setup.il""" , file = f )
810+ else :
811+ print (f"""read_ilang design.il""" , file = f )
802812 print ("scc -select; simplemap; select -clear" , file = f )
803813 print ("memory_nordff" , file = f )
804814 if self .opt_multiclock :
@@ -826,7 +836,7 @@ def make_model(self, model_name):
826836 proc = SbyProc (
827837 self ,
828838 model_name ,
829- self .model ("base" ),
839+ self .model ("setup" if has_setup else " base" ),
830840 "cd {}/model; {} -ql design_{s}.log design_{s}.ys" .format (self .workdir , self .exe_paths ["yosys" ], s = model_name )
831841 )
832842 proc .checkretcode = True
@@ -961,6 +971,19 @@ def instance_hierarchy_error_callback(retcode):
961971
962972 return [proc ]
963973
974+ if model_name == "setup" :
975+ with open (f"{ self .workdir } /model/design_setup.ys" , "w" ) as f :
976+ f .write (self .gen_setup_script ())
977+
978+ proc = SbyProc (
979+ self ,
980+ "setup" ,
981+ self .model ("base" ),
982+ f"""cd { self .workdir } /model; { self .exe_paths ["yosys" ]} -ql design_setup.log design_setup.ys"""
983+ )
984+
985+ return [proc ]
986+
964987 self .error (f"Invalid model name: { model_name } " )
965988
966989 def model (self , model_name ):
0 commit comments