initial migration to new Hammer

This commit is contained in:
Harrison Liew
2023-02-01 10:21:37 -08:00
committed by abejgonzalez
parent a6921d15c6
commit 22fda3a6a7
19 changed files with 4396 additions and 4111 deletions

3
.gitmodules vendored
View File

@@ -28,9 +28,6 @@
[submodule "generators/block-inclusivecache-sifive"]
path = generators/sifive-cache
url = https://github.com/chipsalliance/rocket-chip-inclusive-cache.git
[submodule "vlsi/hammer"]
path = vlsi/hammer
url = https://github.com/ucb-bar/hammer.git
[submodule "tools/dsptools"]
path = tools/dsptools
url = https://github.com/ucb-bar/dsptools.git

View File

@@ -127,6 +127,7 @@ dependencies:
- mypy-boto3-ec2==1.21.9
- sure==2.0.0
- pylddwrap==1.2.1
- hammer-vlsi
# doc requirements
- sphinx

13
conda-reqs/vlsi.yaml Normal file
View File

@@ -0,0 +1,13 @@
dependencies:
# https://conda-forge.org/feedstock-outputs/
# filterable list of all conda-forge packages
# https://conda-forge.org/#contribute
# instructions on adding a recipe
# https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/pkg-specs.html#package-match-specifications
# documentation on package_spec syntax for constraining versions
- pip:
- -e ../vlsi/hammer-cadence-plugins
- -e ../vlsi/hammer-synopsys-plugins
- -e ../vlsi/hammer-mentor-plugins

View File

@@ -13,6 +13,15 @@ if [[ $1 != *openroad* ]] && [[ $2 != *openroad* ]]; then
fi
# Initialize HAMMER tech plugin
# And add tech plugin to conda dependencies
if [[ $1 != *asap7* ]] && [[ $1 != *sky130* ]]; then
git submodule update --init --recursive vlsi/hammer-$1-plugin
echo ' '- -e ../vlsi/hammer-$1-plugin >> conda-reqs/vlsi.yaml
fi
# Update the conda-env with the plugins
if [[ `basename $CONDA_PREFIX` != .conda-env ]]; then
echo 'Activating Chipyard conda environment...'
source env.sh
fi
conda env update -f conda-reqs/vlsi.yaml

View File

@@ -21,8 +21,8 @@ include $(base_dir)/variables.mk
sim_name ?= vcs # needed for GenerateSimFiles, but is unused
tech_name ?= asap7
tech_dir ?= $(if $(filter $(tech_name),sky130 asap7 nangate45),\
$(vlsi_dir)/hammer/src/hammer-vlsi/technology/$(tech_name), \
$(vlsi_dir)/hammer-$(tech_name)-plugin/$(tech_name))
$(vlsi_dir)/hammer/hammer/technology/$(tech_name), \
$(vlsi_dir)/hammer-$(tech_name)-plugin/hammer/technology/$(tech_name))
SMEMS_COMP ?= $(tech_dir)/sram-compiler.json
SMEMS_CACHE ?= $(tech_dir)/sram-cache.json
SMEMS_HAMMER ?= $(build_dir)/$(long_name).mems.hammer.json

View File

@@ -1,6 +1,6 @@
# Technology Setup
# Technology used is ASAP7
vlsi.core.technology: asap7
vlsi.core.technology: "hammer.technology.asap7"
# Specify dir with ASAP7 Calibre deck tarball
technology.asap7.tarball_dir: "/path/to/asap7"
# Specify PDK and std cell install directories
@@ -94,7 +94,4 @@ vlsi.inputs.pin.assignments: [
]
# SRAM Compiler compiler options
vlsi.core.sram_generator_tool: "sram_compiler"
# You should specify a location for the SRAM generator in the tech plugin
vlsi.core.sram_generator_tool_path: ["hammer/src/hammer-vlsi/technology/asap7"]
vlsi.core.sram_generator_tool_path_meta: "append"
vlsi.core.sram_generator_tool: "hammer.technology.asap7.sram_compiler"

View File

@@ -1,22 +1,9 @@
# SRAM Compiler compiler options
vlsi.core.sram_generator_tool: "sram_compiler"
# You should specify a location for the SRAM generator in the tech plugin
vlsi.core.sram_generator_tool_path: []
vlsi.core.sram_generator_tool_path_meta: "append"
# Tool options. Replace with your tool plugin of choice.
# Yosys options
vlsi.core.synthesis_tool: "yosys"
vlsi.core.synthesis_tool_path: ["hammer/src/hammer-vlsi/synthesis"]
vlsi.core.synthesis_tool_path_meta: "append"
# Innovus options
vlsi.core.par_tool: "openroad"
vlsi.core.par_tool_path: ["hammer/src/hammer-vlsi/par"]
vlsi.core.par_tool_path_meta: "append"
# Magic options
vlsi.core.drc_tool: "magic"
vlsi.core.drc_tool_path: ["hammer/src/hammer-vlsi/drc"]
drc.magic.magic_bin: "magic"
# Netgen options
vlsi.core.lvs_tool: "netgen"
vlsi.core.lvs_tool_path: ["hammer/src/hammer-vlsi/lvs"]
# Yosys
vlsi.core.synthesis_tool: "hammer.synthesis.yosys"
# OpenROAD
vlsi.core.par_tool: "hammer.par.openroad"
# Magic
vlsi.core.drc_tool: "hammer.drc.magic"
# Netgen
vlsi.core.lvs_tool: "hammer.lvs.netgen"

View File

@@ -1,6 +1,6 @@
# Technology Setup
# Technology used is Sky130
vlsi.core.technology: sky130
vlsi.core.technology: "hammer.technology.sky130"
vlsi.core.max_threads: 12
@@ -71,7 +71,4 @@ vlsi.inputs.pin.assignments: [
]
# SRAM Compiler compiler options
vlsi.core.sram_generator_tool: "sram_compiler"
# You should specify a location for the SRAM generator in the tech plugin
vlsi.core.sram_generator_tool_path: ["hammer/src/hammer-vlsi/technology/sky130"]
vlsi.core.sram_generator_tool_path_meta: "append"
vlsi.core.sram_generator_tool: "hammer.technology.sky130.sram_compiler"

View File

@@ -1,7 +1,5 @@
# Technology Setup
vlsi.core.technology: <tech_name>
vlsi.core.technology_path: ["hammer-<tech_name>-plugin"]
vlsi.core.technology_path_meta: append
vlsi.core.technology: "hammer.technology.<tech_name>"
# technology files installation directory
technology.<tech_name>.install_dir: "</path/to/technology/pdk/>"

View File

@@ -1,36 +1,25 @@
# SRAM Compiler compiler options
vlsi.core.sram_generator_tool: "sram_compiler"
# You should specify a location for the SRAM generator in the tech plugin
vlsi.core.sram_generator_tool_path: []
vlsi.core.sram_generator_tool_path_meta: "append"
vlsi.core.sram_generator_tool: "hammer.technology.<tech_name>.sram_compiler"
# Tool options. Replace with your tool plugin of choice.
# Genus options
vlsi.core.synthesis_tool: "genus"
vlsi.core.synthesis_tool_path: ["hammer-cadence-plugins/synthesis"]
vlsi.core.synthesis_tool_path_meta: "append"
synthesis.genus.version: "1813"
vlsi.core.synthesis_tool: "hammer.synthesis.genus"
synthesis.genus.version: "211"
# Innovus options
vlsi.core.par_tool: "innovus"
vlsi.core.par_tool_path: ["hammer-cadence-plugins/par"]
vlsi.core.par_tool_path_meta: "append"
par.innovus.version: "191_ISR3"
vlsi.core.par_tool: "hammer.par.innovus"
par.innovus.version: "211"
par.innovus.design_flow_effort: "standard"
par.inputs.gds_merge: true
# Calibre options
vlsi.core.drc_tool: "calibre"
vlsi.core.drc_tool_path: ["hammer-mentor-plugins/drc"]
drc.calibre.version: "2017.3_38.30"
vlsi.core.lvs_tool: "calibre"
vlsi.core.lvs_tool_path: ["hammer-mentor-plugins/lvs"]
lvs.calibre.version: "2017.3_38.30"
vlsi.core.drc_tool: "hammer.drc.calibre"
drc.calibre.version: "2022.2_24.16"
vlsi.core.lvs_tool: "hammer.lvs.calibre"
lvs.calibre.version: "2022.2_24.16"
# VCS options
vlsi.core.sim_tool: "vcs"
vlsi.core.sim_tool_path: ["hammer-synopsys-plugins/sim"]
sim.vcs.version: "P-2019.06-SP2-5"
vlsi.core.sim_tool: "hammer.sim.vcs"
sim.vcs.version: "T-2022.06-SP2"
# Voltus options
vlsi.core.power_tool: "voltus"
vlsi.core.power_tool_path: ["hammer-cadence-plugins/power"]
vlsi.core.power_tool: "hammer.power.voltus"
vlsi.core.power_tool_path_meta: "append"
power.voltus.version: "191_ISR3"
power.voltus.version: "211_ISR3"
# NOTE (about VCS+Voltus versions): if using FSDB, the VCS version should be approx 2 years older than the Voltus version for compatibility

View File

@@ -5,12 +5,11 @@
import os
import hammer_vlsi
from hammer_vlsi import CLIDriver, HammerToolHookAction
from hammer.vlsi import CLIDriver, HammerTool, HammerToolHookAction
from typing import Dict, Callable, Optional, List
def example_place_tap_cells(x: hammer_vlsi.HammerTool) -> bool:
def example_place_tap_cells(x: HammerTool) -> bool:
if x.get_setting("vlsi.core.technology") == "asap7":
x.append('''
# TODO
@@ -18,7 +17,7 @@ def example_place_tap_cells(x: hammer_vlsi.HammerTool) -> bool:
''')
return True
def example_add_fillers(x: hammer_vlsi.HammerTool) -> bool:
def example_add_fillers(x: HammerTool) -> bool:
if x.get_setting("vlsi.core.technology") == "asap7":
x.append('''
# TODO
@@ -26,7 +25,7 @@ def example_add_fillers(x: hammer_vlsi.HammerTool) -> bool:
''')
return True
def example_tool_settings(x: hammer_vlsi.HammerTool) -> bool:
def example_tool_settings(x: HammerTool) -> bool:
if x.get_setting("vlsi.core.technology") == "asap7":
x.append('''
# TODO
@@ -43,16 +42,16 @@ class ExampleDriver(CLIDriver):
# make_pre_insertion_hook will execute the custom hook before the specified step
# SYNTAX: make_pre_insertion_hook("EXISTING_STEP", INSERTED_HOOK)
# hammer_vlsi.HammerTool.make_pre_insertion_hook("route_design", example_add_fillers),
# HammerTool.make_pre_insertion_hook("route_design", example_add_fillers),
# make_post_insertion_hook will execute the custom hook after the specified step
# hammer_vlsi.HammerTool.make_post_insertion_hook("init_design", example_tool_settings),
# HammerTool.make_post_insertion_hook("init_design", example_tool_settings),
# make_replacement_hook will replace the specified step with a custom hook
# hammer_vlsi.HammerTool.make_replacement_hook("place_tap_cells", example_place_tap_cells),
# HammerTool.make_replacement_hook("place_tap_cells", example_place_tap_cells),
# make_removal_hook will remove the specified step from the flow
hammer_vlsi.HammerTool.make_removal_hook("place_bumps"),
HammerTool.make_removal_hook("place_bumps"),
# The target step in any of the above calls may be a default step or another one of your custom hooks
]

View File

@@ -4,14 +4,13 @@
import os
import hammer_vlsi
from hammer_vlsi import CLIDriver, HammerToolHookAction
from hammer.vlsi import CLIDriver, HammerTool, HammerToolHookAction
from typing import Dict, Callable, Optional, List
from technology.sky130 import SKY130Tech
from hammer.technology.sky130 import SKY130Tech
def example_place_tap_cells(x: hammer_vlsi.HammerTool) -> bool:
def example_place_tap_cells(x: HammerTool) -> bool:
if x.get_setting("vlsi.core.technology") == "sky130":
x.append('''
# TODO
@@ -19,7 +18,7 @@ def example_place_tap_cells(x: hammer_vlsi.HammerTool) -> bool:
''')
return True
def example_add_fillers(x: hammer_vlsi.HammerTool) -> bool:
def example_add_fillers(x: HammerTool) -> bool:
if x.get_setting("vlsi.core.technology") == "sky130":
x.append('''
# TODO
@@ -27,7 +26,7 @@ def example_add_fillers(x: hammer_vlsi.HammerTool) -> bool:
''')
return True
def example_tool_settings(x: hammer_vlsi.HammerTool) -> bool:
def example_tool_settings(x: HammerTool) -> bool:
if x.get_setting("vlsi.core.technology") == "sky130":
x.append('''
# TODO
@@ -45,16 +44,16 @@ class ExampleDriver(CLIDriver):
# make_pre_insertion_hook will execute the custom hook before the specified step
# SYNTAX: make_pre_insertion_hook("EXISTING_STEP", INSERTED_HOOK)
# hammer_vlsi.HammerTool.make_pre_insertion_hook("route_design", example_add_fillers),
# HammerTool.make_pre_insertion_hook("route_design", example_add_fillers),
# make_post_insertion_hook will execute the custom hook after the specified step
# hammer_vlsi.HammerTool.make_post_insertion_hook("init_design", example_tool_settings),
# HammerTool.make_post_insertion_hook("init_design", example_tool_settings),
# make_replacement_hook will replace the specified step with a custom hook
# hammer_vlsi.HammerTool.make_replacement_hook("place_tap_cells", example_place_tap_cells),
# HammerTool.make_replacement_hook("place_tap_cells", example_place_tap_cells),
# make_removal_hook will remove the specified step from the flow
hammer_vlsi.HammerTool.make_removal_hook("place_bumps"),
HammerTool.make_removal_hook("place_bumps"),
# The target step in any of the above calls may be a default step or another one of your custom hooks
]

Submodule vlsi/hammer deleted from 41105f964f

View File

@@ -17,7 +17,7 @@ ifeq ($(tutorial),sky130-commercial)
tech_name ?= sky130
CONFIG ?= TinyRocketConfig
TOOLS_CONF ?= example-tools.yml
TECH_CONF ?= example-sky130.yml
TECH_CONF ?= hammer/e2e/pdks/sky130-bwrc.yml
DESIGN_CONF ?= example-designs/sky130-commercial.yml
EXTRA_CONFS ?= $(if $(filter $(VLSI_TOP),Rocket), example-designs/sky130-rocket.yml, )
INPUT_CONFS ?= $(TOOLS_CONF) $(TECH_CONF) $(DESIGN_CONF) $(EXTRA_CONFS)