diff --git a/config.py b/config.py index e094d86..fb138fd 100644 --- a/config.py +++ b/config.py @@ -65,6 +65,8 @@ class Config: flow.dreamplace_bin_path = sec.get('dreamplace_bin_path') if sec.get('yosys_bin_path'): flow.yosys_bin_path = sec.get('yosys_bin_path') + if sec.get('cadence_version'): + flow.cadence_version = sec.get('cadence_version') flow.config() return flow diff --git a/demo/config.sample.ini b/demo/config.sample.ini index e86489d..3edd199 100644 --- a/demo/config.sample.ini +++ b/demo/config.sample.ini @@ -33,6 +33,7 @@ ; liberty_input str Path to the input .lib file ; # External toolkit settings +; cadence_version str 15/19 ; dreamplace_bin_path str Path/to/DREAMPlace/.../Placer.py ; yosys_bin_path str Path/to/Yosys/build_dir/, which contains yosys and yosys-abc binaries @@ -58,21 +59,22 @@ lef_input = /home/wxm/cocoon/demo/lib/gscl45nm.lef liberty_input = /home/wxm/cocoon/demo/lib/gscl45nm.lib # External toolkit settings +cadence_version = 15 dreamplace_bin_path = /home/wxm/DREAMPlace/install/dreamplace/Placer.py yosys_bin_path = /home/wxm/yosys/build # Flow settings flow = {'synth':'genus', 'placement':'innovus', 'routing':'innovus'} -n_iter_IFT = 1 +n_iter_IFT = 0 verbose = False -[ALU(Chisel)] +[gcd-test] # Design settings -design_name = AluTop -is_Chisel_design = True +design_name = gcd +is_Chisel_design = False rtl_input = /home/wxm/cocoon/demo/gcd/gcd.v Chisel_input = /home/wxm/cocoon/demo/alu-chisel/ -result_dir = /home/wxm/cocoon/results/ +result_dir = /home/wxm/cocoon/results/test/ clk_name = clk delay = 1000 @@ -82,12 +84,38 @@ lef_input = /home/wxm/cocoon/demo/lib/gscl45nm.lef liberty_input = /home/wxm/cocoon/demo/lib/gscl45nm.lib # External toolkit settings +cadence_version = 15 dreamplace_bin_path = /home/wxm/DREAMPlace/install/dreamplace/Placer.py yosys_bin_path = /home/wxm/yosys/build # Flow settings -flow = {'synth':'yosys', 'placement':'dreamplace', 'routing':'innovus'} +flow = {'synth':'genus', 'placement':'innovus', 'routing':'innovus'} n_iter_IFT = 0 verbose = False +; [ALU(Chisel)] +; # Design settings +; design_name = AluTop +; is_Chisel_design = True +; rtl_input = /home/wxm/cocoon/demo/gcd/gcd.v +; Chisel_input = /home/wxm/cocoon/demo/alu-chisel/ +; result_dir = /home/wxm/cocoon/results/ +; clk_name = clk +; delay = 1000 + +; # Library settings +; lib_name = gscl45nm +; lef_input = /home/wxm/cocoon/demo/lib/gscl45nm.lef +; liberty_input = /home/wxm/cocoon/demo/lib/gscl45nm.lib + +; # External toolkit settings +; dreamplace_bin_path = /home/wxm/DREAMPlace/install/dreamplace/Placer.py +; yosys_bin_path = /home/wxm/yosys/build + +; # Flow settings +; flow = {'synth':'genus', 'placement':'innovus', 'routing':'innovus'} +; n_iter_IFT = 0 +; verbose = False + + diff --git a/engine.py b/engine.py index 010455b..42fd883 100644 --- a/engine.py +++ b/engine.py @@ -63,6 +63,7 @@ def run(design, flow, flow_name): if x[0] == "InnovusPlace": tmp_op_pdn = place.InnovusPlace(design) + tmp_op_pdn.params['cadence_version'] = flow.cadence_version tmp_op_pdn.config(design, design_name + "_" + x[1]) overall_tcl.write('source %s%s_to_place.tcl\n'%(tcl_path, design_name)) diff --git a/flow.py b/flow.py index 77212a6..4bad948 100644 --- a/flow.py +++ b/flow.py @@ -13,6 +13,7 @@ class MyFlow(object): self.params_drc = [] self.n_iter_IFT = 0 self.verbose = True + self.cadence_version = '19' self.dreamplace_bin_path = " " self.yosys_bin_path = " " diff --git a/ops/cds/drc.py b/ops/cds/drc.py index a48c6e2..763fe37 100644 --- a/ops/cds/drc.py +++ b/ops/cds/drc.py @@ -18,7 +18,7 @@ class InnovusDRC(): def config(self, design, tcl_file): tcl_path = util.getScriptPath(self.design) ret = 'check_design' - if self.params['out_file'] is not 'default': + if self.params['out_file'] != 'default': ret = ret + " -out_file " + self.params['out_file'] if self.params['no_check']: diff --git a/ops/cds/place.py b/ops/cds/place.py index 07a727d..e594337 100644 --- a/ops/cds/place.py +++ b/ops/cds/place.py @@ -11,6 +11,7 @@ class InnovusPlace(object): self.params['concurrent_macros'] = False self.params['incremental'] = False self.params['noPrePlaceOpt'] = False + self.params['cadence_version'] = '19' def setParams(self, param): if self.params.get(param) == None: @@ -21,6 +22,13 @@ class InnovusPlace(object): def config(self, design, tcl_file): tcl_path = util.getScriptPath(self.design) ret = 'place_design' + if self.params['cadence_version'] == '19': + ret = 'place_design' + elif self.params['cadence_version'] == '15': + ret = 'placeDesign' + else: + Exception("Invalid Cadence version!\n") + for i in self.params: if self.params[i] == True: ret = ret + " -" + i