3.2. Setting up a Hammer CAD Tool Plugin
This guide will discuss what a Hammer user may do if they want to implement their own CAD tool plugin or extend the current CAD tool plugins. There are some basic mock-up examples of how this can be done in the par
and synthesis
directories inside hammer/
.
3.2.1. Tool Class
Writing a tool plugin starts with writing the tool class. Hammer already provides a set of classes and mixins for a new tool to extend. For example, the Hammer Innovus plugin inherits from HammerPlaceAndRouteTool
and CadenceTool
.
3.2.2. Steps
Each tool implements a steps method. For instance, a portion of the steps method for a place-and-route tool may look like:
@property
def steps(self) -> List[HammerToolStep]:
steps = [
self.init_design,
self.floorplan_design,
self.route_design
]
return self.make_steps_from_methods(steps)
Each of the steps are their own methods in the class that will write TCL that will execute with the tool.
3.2.3. Getting Settings
Hammer provides the method get_setting("KEY_NAME")
for the tool to actually grab the settings from the user’s input YML or JSON files. One example would be self.get_setting("par.blockage_spacing")
so that Hammer can specify to the desired P&R tool what spacing to use around place and route blockages.
3.2.4. Writing TCL
Hammer provides two main methods for writing TCL to a file: append
and verbose_append
. Both do similar things but verbose_append
will emit additional TCL code to print the command to the terminal upon execution.
3.2.5. Executing the Tool
When all the desired TCL has been written by various step methods, it is time to execute the tool itself. Hammer provides the method run_executable(args, cwd=self.run_dir)
to do so. args
is a Python list of flags to be run with the tool executable. cwd=self.run_dir
sets the “current working directory” and allows the plugin to specify in what directory to execute the command.
3.2.6. Tool Outputs
After execution, the Hammer driver will emit a copy of the Hammer IR database in JSON format to the run directory as well as specific new fields created by the activity.
The name of the output JSON files will be related to the activity type (e.g. par-output.json
and par-output-full.json
for the par
activity).
The -full
verison contains the entire Hammer IR database, while the other version contains only the output entries created by this activity.
The individual fields are created when the export_config_outputs
method is called.
Each implementation of this tool must override this method with a new one that calls its super
method and appends any additional output fields to the output dictionary, as necessary.
3.2.7. defaults.yml
Each tool may optionally implement a set of default Hammer IR and Meta Variables. These defaults may set different values for global Hammer IR configuration, or add new tool-specific keys. Tool-specific keys must have a namespace in the format <action>.<tool_name>.<key_name>
. This file should have a companion defaults_types.yml
that defines the required types as well.