| # Copyright 2020-2021 Efabless Corporation |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| yosys -import |
| |
| if { [info exists ::env(FP_WELLTAP_CELL)] && $::env(FP_WELLTAP_CELL) ne ""} { |
| set well_tap_cell "$::env(FP_WELLTAP_CELL)" |
| } |
| set decap_cell_wildcard "$::env(DECAP_CELL)*" |
| set fill_cell_wildcard "$::env(FILL_CELL)*" |
| |
| set vtop $::env(DESIGN_NAME) |
| #set sdc_file $::env(SDC_FILE) |
| |
| # LHS |
| if { [info exists ::env(SYNTH_DEFINES) ] } { |
| foreach define $::env(SYNTH_DEFINES) { |
| puts "Defining $define" |
| verilog_defines -D$define |
| } |
| } |
| if { [info exists ::env(VERILOG_FILES_BLACKBOX)] } { |
| foreach verilog_file $::env(VERILOG_FILES_BLACKBOX) { |
| read_verilog -lib $verilog_file |
| } |
| } |
| foreach lib $::env(LIB_SYNTH_COMPLETE_NO_PG) { |
| read_liberty -nooverwrite -lib -ignore_miss_dir -setattr blackbox $lib |
| } |
| |
| read_verilog $::env(LEC_LHS_NETLIST) |
| rmports |
| if { [info exists well_tap_cell] } { |
| hierarchy -generate $well_tap_cell |
| } |
| hierarchy -generate $decap_cell_wildcard |
| hierarchy -generate $fill_cell_wildcard |
| splitnets -ports;; |
| hierarchy -auto-top |
| if { $::env(SYNTH_FLAT_TOP) } { |
| flatten |
| } |
| setattr -set keep 1 |
| stat |
| renames -top gold |
| design -stash gold |
| |
| |
| # RHS |
| # Rebuild the database due to -stash |
| if { [info exists ::env(SYNTH_DEFINES) ] } { |
| foreach define $::env(SYNTH_DEFINES) { |
| puts "Defining $define" |
| verilog_defines -D$define |
| } |
| } |
| if { [info exists ::env(VERILOG_FILES_BLACKBOX)] } { |
| foreach verilog_file $::env(VERILOG_FILES_BLACKBOX) { |
| read_verilog -lib $verilog_file |
| } |
| } |
| foreach lib $::env(LIB_SYNTH_COMPLETE_NO_PG) { |
| read_liberty -nooverwrite -lib -ignore_miss_dir -setattr blackbox $lib |
| } |
| |
| read_verilog $::env(LEC_RHS_NETLIST) |
| rmports |
| if { [info exists well_tap_cell] } { |
| hierarchy -generate $well_tap_cell |
| } |
| hierarchy -generate $decap_cell_wildcard |
| hierarchy -generate $fill_cell_wildcard |
| splitnets -ports;; |
| hierarchy -auto-top |
| if { $::env(SYNTH_FLAT_TOP) } { |
| flatten |
| } |
| setattr -set keep 1 |
| stat |
| renames -top gate |
| design -stash gate |
| |
| |
| design -copy-from gold -as gold gold |
| design -copy-from gate -as gate gate |
| |
| # Rebuild the database due to -stash |
| if { [info exists ::env(SYNTH_DEFINES) ] } { |
| foreach define $::env(SYNTH_DEFINES) { |
| puts "Defining $define" |
| verilog_defines -D$define |
| } |
| } |
| if { [info exists ::env(VERILOG_FILES_BLACKBOX)] } { |
| foreach verilog_file $::env(VERILOG_FILES_BLACKBOX) { |
| read_verilog -lib $verilog_file |
| } |
| } |
| foreach lib $::env(LIB_SYNTH_COMPLETE_NO_PG) { |
| read_liberty -nooverwrite -lib -ignore_miss_dir -setattr blackbox $lib |
| } |
| |
| equiv_make gold gate equiv |
| if { [info exists well_tap_cell] } { |
| hierarchy -generate $well_tap_cell |
| } |
| hierarchy -generate $decap_cell_wildcard |
| hierarchy -generate $fill_cell_wildcard |
| setattr -set keep 1 |
| prep -flatten -top equiv |
| equiv_simple -seq 10 -v |
| equiv_status -assert |