blob: d5d4c80717f2c56032ac08e36839be7b596cf714 [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
#
# Simple tcl script for DC to do some wire-load-model-based sweep syntheses.
#####################
## PREPARE FLOW ##
#####################
# tool setup
set CONFIG_PATH "../../../foundry/syn/dc/"
source ${CONFIG_PATH}/setup.tcl
# paths
set WORKLIB "WORK"
set REPDIR "REPORTS"
set DDCDIR "DDC"
set VLOGDIR "NETLISTS"
exec mkdir -p ${REPDIR} ${DDCDIR} ${VLOGDIR} ${WORKLIB}
# define work lib path
define_design_lib WORK -path $WORKLIB
######################
## DESIGN SETUP ##
######################
set DUT "prim_prince"
# set DUT "prim_present"
lappend search_path "../../../ip/prim/rtl/"
set SRC { "../../../ip/prim/rtl/prim_assert.sv" \
"../../../ip/prim/rtl/prim_cipher_pkg.sv" \
"../../../ip/prim/rtl/prim_present.sv" \
"../../../ip/prim/rtl/prim_prince.sv" \
}
# additional defines
set DEFINE ""
# additional parameters
set PARAMS ""
set CLK_PIN clk_i
set RST_PIN rst_ni
set TCK_SWEEP { 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 }
set IN_DEL 0.0
set OUT_DEL 0.0
###########################
## SWEEP ##
###########################
foreach TCK $TCK_SWEEP {
###########################
## ELABORATE DESIGN ##
###########################
# delete previous designs.
remove_design -designs
sh rm -rf $WORKLIB/*
analyze -define ${DEFINE} -format sv ${SRC} > "${REPDIR}/${DUT}_${TCK}_analyze.rpt"
elaborate ${DUT} -parameters ${PARAMS} > "${REPDIR}/${DUT}_${TCK}_elab.rpt"
link > "${REPDIR}/${DUT}_${TCK}_link.rpt"
check_design > "${REPDIR}/${DUT}_${TCK}_check.rpt"
write_file -format ddc -hierarchy -output "${DDCDIR}/${DUT}_${TCK}_elab.ddc"
write_file -format verilog -hierarchy -output "${DDCDIR}/${DUT}_${TCK}_elab.v"
###########################
## APPLY CONSTRAINTS ##
###########################
# timing constraint in ns
# set timing to 250 MHz
set DELAY ${TCK}
create_clock ${CLK_PIN} -period ${TCK}
set_ideal_network ${CLK_PIN}
set_ideal_network ${RST_PIN}
set_max_delay ${DELAY} -from [all_inputs] -to [all_outputs]
set_input_delay ${IN_DEL} [remove_from_collection [all_inputs] {${CLK_PIN}}] -clock ${CLK_PIN}
set_output_delay ${OUT_DEL} [all_outputs] -clock ${CLK_PIN}
set_driving_cell -no_design_rule -lib_cell ${DRIVING_CELL} -pin X [all_inputs]
set_load [load_of ${LOAD_LIB}/${LOAD_CELL}/A] [all_outputs]
######################
## MAP DESIGN ##
######################
compile_ultra -gate_clock -scan > "${REPDIR}/${DUT}_${TCK}_compile.rpt"
#################
## REPORTS ##
#################
report_timing -nosplit > "${REPDIR}/${DUT}_${TCK}_timing.rpt"
report_area -hier -nosplit > "${REPDIR}/${DUT}_${TCK}_area.rpt"
report_constraints -all_violators > "${REPDIR}/${DUT}_${TCK}_constraints.rpt"
report_timing -nosplit -nworst 1000 -input -net -trans -cap > "${REPDIR}/${DUT}_${TCK}_timing_long.rpt"
#################
## NETLIST ##
#################
change_names -rules verilog -hierarchy
write_file -format ddc -hierarchy -output "${DDCDIR}/${DUT}_${TCK}_mapped.ddc"
write_file -format verilog -hierarchy -output "${VLOGDIR}/${DUT}_${TCK}_mapped.v"
}