| # Copyright lowRISC contributors. |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| # Generic constraints file for simple testsynthesis flow |
| |
| # note that we do not fix hold timing in this flow |
| set SETUP_CLOCK_UNCERTAINTY 0.5 |
| |
| ##################### |
| # main clock # |
| ##################### |
| set MAIN_CLK_PIN clk_i |
| set MAIN_RST_PIN rst_ni |
| # overconstrain to 125 MHz |
| set MAIN_TCK 8.0 |
| set_ideal_network ${MAIN_CLK_PIN} |
| set_ideal_network ${MAIN_RST_PIN} |
| set_clock_uncertainty ${SETUP_CLOCK_UNCERTAINTY} ${MAIN_CLK_PIN} |
| |
| # other timing constraint in ns |
| set IN_DEL 7.0 |
| set OUT_DEL 0.0 |
| set DELAY ${MAIN_TCK} |
| |
| create_clock ${MAIN_CLK_PIN} -period ${MAIN_TCK} |
| |
| # in to out |
| set_max_delay ${DELAY} -from [all_inputs] -to [all_outputs] |
| # in to reg / reg to out |
| set_input_delay ${IN_DEL} [remove_from_collection [all_inputs] {${MAIN_CLK_PIN}}] -clock ${MAIN_CLK_PIN} |
| set_output_delay ${OUT_DEL} [all_outputs] -clock ${MAIN_CLK_PIN} |
| |
| ##################### |
| # otp clock # |
| ##################### |
| set OTP_CLK_PIN clk_otp_i |
| set OTP_RST_PIN rst_otp_ni |
| # overconstrain to 125 MHz |
| set OTP_TCK 8.0 |
| set_ideal_network ${OTP_CLK_PIN} |
| set_ideal_network ${OTP_RST_PIN} |
| set_clock_uncertainty ${SETUP_CLOCK_UNCERTAINTY} ${OTP_CLK_PIN} |
| |
| create_clock ${OTP_CLK_PIN} -period ${OTP_TCK} |
| |
| ##################### |
| # I/O drive/load # |
| ##################### |
| |
| # attach load and drivers to IOs to get a more realistic estimate |
| set_driving_cell -no_design_rule -lib_cell ${DRIVING_CELL} -pin ${DRIVING_CELL_PIN} [all_inputs] |
| set_load [load_of ${LOAD_CELL_LIB}/${LOAD_CELL}/${LOAD_CELL_PIN}] [all_outputs] |
| |
| # set a nonzero critical range to be able to spot the violating paths better |
| # in the report |
| set_critical_range 0.5 ${DUT} |
| |
| ##################### |
| # Size Only Cells # |
| ##################### |
| |
| set_size_only -all_instances [get_cells -h *u_size_only*] true |