Repository navigation
Replies: 8 comments 13 replies
|
Clarification
Not true of set_opt_config |
|
|
Thanks for writing this up. Before answering the numbered questions, I did a Chesterton's-fence check on why these commands exist at all. Why they exist today
What I'd rather do Separate design state from tool options, and keep the second out of global state entirely:
This is how ORFS already works:
The current odb persistence breaks this. For example, Other domains with complex flows draw the same line:
On POLA: sticky persisted options are familiar from commercial tools, so they're unsurprising for interactive use. For checkpointed, scripted flows, though, a stage that behaves differently because of something stored by an earlier stage is the most surprising outcome. Answers to the questions
|
|
One more angle: a primary user of OpenROAD going forward is AI agents driving flows, and I want to avoid sending them squirrel chasing. An agent reasons from the command lines and files it can see. If behavior depends on config set earlier in the session, or restored from an odb, the agent chases squirrels: timing constraints, placement density, the library, anything except the hidden setting that actually caused it. Copying a command from a log into a fresh session won't reproduce the result either, which sends it after yet another squirrel. If each command's behavior is fully determined by its inputs (odb, SDC, arguments), the log line is the reproducer and there are no squirrels to chase. That's a strong reason to keep tool options as explicit arguments. |
|
I will try to remember to give a more comprehensive reply in the morning but the general idea is I welcome this because this is quite close to how I do configuration. I think persisting the configuration in the database at all is confusing though, but a @mole99 Opinion also appreciated here |
|
I may be in the minority, but I never really liked the idea of configurations at all. Configurations lead to hidden state and there can be confusion about which configurations affect which tools. Yes, there are reporting of configs, but a user has to know how to do this and also think about checking the configs in the first place. When it's passed by argument, it's clear prima facie what settings are being applied to the tool. Persisting the configurations in the db can also be frustrating because if there was an unintentional saving of an option into a db, the user can't e.g. exit OR, reload the design, and have the problematic option reset. Maybe this is moot in the age of AI but that was my experience with a certain proprietary tool that likes to use configs somewhat haphazardly. |
|
I hear either dislike for db stored options or irrelevance due to overriding. It sounds like that isn't a win. I'm trying to reconcile this with #2745 where I argued for explicit arguments in Python. I still prefer that but didn't see a good parallel for TCL. Claude suggests using a dict as in this elaborate example: You have the usual TCL tricks to assemble the dictionary and use variables. It does push validation more heavily on the c++ code as dictionaries have no schema. Opinions? I'm guessing the 'minority' will like this more. |
|
#11755 shows a prototype for the |
Uh oh!
There was an error while loading. Please reload this page.
Problem
Tool settings are currently spread across per-tool commands:
set_opt_config,set_cts_config,set_dft_config,set_global_sizing_config, and soonset_place_config(#11610). Each has its own matchingreset_*andreport_*command, thoughreset_dft_configis missing. Today:set_*_config.get_*. Settings can be printed but not read back into a script.-set_early_sizing_cap_ratio), and negated booleans (-disable_buffer_pruning).Proposal
A single set of commands with hierarchical names:
At startup, each tool registers its settings with a type, constraints (e.g. non-negative integer), a default and a help string.
set_configchecks values when they're set, so errors report the same way from Tcl and Python:report_configshows every setting and marks the ones changed from their defaults. All settings are written to the odb and restored byread_db.set_opt_config -limit_sizing_area 100set_config opt.sizing_area_limit 100set_opt_config -disable_buffer_pruning trueset_config opt.buffer_pruning falseset_cts_config -sink_clustering_size 20set_config cts.sink_clustering.size 20set_dft_config -max_chains 4set_config dft.max_chains 4set_global_sizing_config -max_iterations 50set_config opt.global_sizing.max_iterations 50Scope
Config holds sticky state that affects multiple commands or steps. Something that only affects one run of a command stays a flag on that command.
Proposed naming rules
[a-z0-9_], separated by., and can nest:place.global.density,place.detail.max_displacement.place,cts,opt,route,dft), not the code module (gpl,rsz). Users think in steps, and modules get split or rewritten.buffer_pruning false, notdisable_buffer_pruning true), and names contain no verbs.flow.*) may be reserved for ORFS and other flow scripts.Questions
set_*_configcommands would eventually be removed. Should they first become deprecated wrappers that warn and callset_config?set_config, or stay as object commands likeset_dont_useandset_dont_touch? Related: settings that name design objects (cts -buf_list,-root_buf,-skip_nets) — store them in the odb by name or by object, and what happens when the object is renamed or removed?opt.global_sizing?read_db. Does it overwrite values already set in the session, merge with them, or warn on conflict?set_config effort low set_config cts.effort high ;# cts uses high; every other tool inherits lowset_config(which makes the order ofset_configcalls matter), or when the tool runs?@QuantamHD @gadfort @oharboe @rovinski @donn @povik @mikesinouye
All reactions