[pinmux] Add block level synth setup Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/ip/pinmux/pinmux.core b/hw/ip/pinmux/pinmux.core index e32e3b8..3c5a364 100644 --- a/hw/ip/pinmux/pinmux.core +++ b/hw/ip/pinmux/pinmux.core
@@ -34,4 +34,11 @@ verilator_options: - "-Wall" - + syn: + <<: *default_target + # TODO: set default to DC once + # this option is available + # olofk/edalize#89 + default_tool: icarus + parameters: + - SYNTHESIS=true
diff --git a/hw/ip/pinmux/syn/constraints.sdc b/hw/ip/pinmux/syn/constraints.sdc new file mode 100644 index 0000000..8c1275d --- /dev/null +++ b/hw/ip/pinmux/syn/constraints.sdc
@@ -0,0 +1,58 @@ +# 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 +set AON_CLK_PIN clk_aon_i + + +# set main clock 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 1.0 +set OUT_DEL 1.0 +set DELAY ${MAIN_TCK} + +create_clock ${MAIN_CLK_PIN} -period ${MAIN_TCK} +create_clock ${AON_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] [get_ports -of_objects [get_clocks]]] -clock ${MAIN_CLK_PIN} +set_output_delay ${OUT_DEL} [all_outputs] -clock ${MAIN_CLK_PIN} + +set_clock_groups -name group1 -async \ + -group [get_clocks ${MAIN_CLK_PIN} ] \ + -group [get_clocks ${AON_CLK_PIN} ] \ + +##################### +# 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
diff --git a/hw/ip/pinmux/syn/pinmux_syn_cfg.hjson b/hw/ip/pinmux/syn/pinmux_syn_cfg.hjson new file mode 100644 index 0000000..ca919a0 --- /dev/null +++ b/hw/ip/pinmux/syn/pinmux_syn_cfg.hjson
@@ -0,0 +1,26 @@ +// Copyright lowRISC contributors. +// Licensed under the Apache License, Version 2.0, see LICENSE for details. +// SPDX-License-Identifier: Apache-2.0 +{ + // Top level dut name (sv module). + name: pinmux + + // Fusesoc core file used for building the file list. + fusesoc_core: lowrisc:ip:pinmux:0.1 + + import_cfgs: [// Project wide common synthesis config file + "{proj_root}/hw/syn/tools/dvsim/common_syn_cfg.hjson"], + + overrides: [ + { + name: design_level + value: "top" + } + ] + + // Timing constraints for this module + sdc_file: "{proj_root}/hw/ip/pinmux/syn/constraints.sdc" + + // Technology specific timing constraints for this module + foundry_sdc_file: "{foundry_root}/top_earlgrey/syn/foundry.constraints.sdc" +}