undid some makefile changes
This commit is contained in:
@@ -34,10 +34,9 @@ This example gives a suggested file structure and build system. The ``vlsi/`` fo
|
|||||||
|
|
||||||
* All of the elaborated Chisel and FIRRTL.
|
* All of the elaborated Chisel and FIRRTL.
|
||||||
|
|
||||||
* ``hammer``, ``hammer-<vendor>-plugins``, ``hammer-<tech>-plugin``
|
* ``hammer``, ``hammer/src/hammer-vlsi/<syn-par-drc-lvs>/<tool>``, ``hammer/src/hammer-vlsi/technology/<tech>``
|
||||||
|
|
||||||
* Core repository, and commercial tool and NDA technology plugins.
|
* Core repository, and open-source tool and technology plugins.
|
||||||
* Open-source plugins are located under ``hammer/src/hammer-vlsi/<syn-par-drc-lvs>/<tool>`` and ``hammer/src/hammer-vlsi/technology/<tech>``
|
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
-------------
|
-------------
|
||||||
@@ -75,6 +74,15 @@ Pull the Hammer environment into the shell:
|
|||||||
Running the VLSI Flow
|
Running the VLSI Flow
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
For this tutorial we will be setting the Make variable ``tutorial=sky130-openroad`` to abbreviate the configuration.
|
||||||
|
The current options for this variable are defined in ``tutorial.mk``, a few of which are summarized as follows:
|
||||||
|
|
||||||
|
* ``CONFIG=TinyRocketConfig`` selects the ``TinyRocketConfig`` from the Chipyard configurations.
|
||||||
|
* ``tech_name`` sets a few more necessary paths in the ``Makefile``, such as the appropriate Hammer plugin
|
||||||
|
* ``TOOLS_CONF`` and ``TECH_CONF`` select the approproate YAML configuration files, ``example-openroad.yml`` and ``example-sky130.yml``, which are described below
|
||||||
|
* ``DESIGN_CONF`` and ``EXTRA_CONFS`` allow for additonal design-specific overrides of the Hammer IR in ``example-sky130.yml``
|
||||||
|
* ``VLSI_OBJ_DIR`` gives the build directory a unique name to allow running multiple flows in the same repo.
|
||||||
|
|
||||||
example-vlsi-sky130
|
example-vlsi-sky130
|
||||||
^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^
|
||||||
This is the entry script with placeholders for hooks. In the ``ExampleDriver`` class, a list of hooks is passed in the ``get_extra_par_hooks``. Hooks are additional snippets of python and TCL (via ``x.append()``) to extend the Hammer APIs. Hooks can be inserted using the ``make_pre/post/replacement_hook`` methods as shown in this example. Refer to the Hammer documentation on hooks for a detailed description of how these are injected into the VLSI flow.
|
This is the entry script with placeholders for hooks. In the ``ExampleDriver`` class, a list of hooks is passed in the ``get_extra_par_hooks``. Hooks are additional snippets of python and TCL (via ``x.append()``) to extend the Hammer APIs. Hooks can be inserted using the ``make_pre/post/replacement_hook`` methods as shown in this example. Refer to the Hammer documentation on hooks for a detailed description of how these are injected into the VLSI flow.
|
||||||
@@ -102,7 +110,7 @@ To map the generic memory macros in the generarted Verilog to the SRAMs in your
|
|||||||
|
|
||||||
.. code-block:: shell
|
.. code-block:: shell
|
||||||
|
|
||||||
make srams tech_name=sky130 CONFIG=TinyRocketConfig
|
make srams tutorial=sky130-openroad
|
||||||
|
|
||||||
Generating Verilog
|
Generating Verilog
|
||||||
^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^
|
||||||
@@ -110,7 +118,7 @@ To elaborate the ``TinyRocketConfig`` from Chisel to Verilog, run:
|
|||||||
|
|
||||||
.. code-block:: shell
|
.. code-block:: shell
|
||||||
|
|
||||||
make verilog tech_name=sky130 CONFIG=TinyRocketConfig
|
make verilog tutorial=sky130-openroad
|
||||||
|
|
||||||
The ``CONFIG=TinyRocketConfig`` selects the target generator config in the same manner as the rest of the Chipyard framework. This elaborates a stripped-down Rocket Chip in the interest of minimizing tool runtime. The resulting verilog is located in ``./generated-src/chipyard.TestHarness.TinyRocketConfig/chipyard.TestHarness.TinyRocketConfig.top.v``.
|
The ``CONFIG=TinyRocketConfig`` selects the target generator config in the same manner as the rest of the Chipyard framework. This elaborates a stripped-down Rocket Chip in the interest of minimizing tool runtime. The resulting verilog is located in ``./generated-src/chipyard.TestHarness.TinyRocketConfig/chipyard.TestHarness.TinyRocketConfig.top.v``.
|
||||||
|
|
||||||
@@ -135,7 +143,7 @@ Synthesis
|
|||||||
|
|
||||||
.. code-block:: shell
|
.. code-block:: shell
|
||||||
|
|
||||||
make syn tech_name=sky130 CONFIG=TinyRocketConfig
|
make syn tutorial=sky130-openroad
|
||||||
|
|
||||||
Post-synthesis logs and collateral are in ``build/syn-rundir``.
|
Post-synthesis logs and collateral are in ``build/syn-rundir``.
|
||||||
|
|
||||||
@@ -145,7 +153,7 @@ Place-and-Route
|
|||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
.. code-block:: shell
|
.. code-block:: shell
|
||||||
|
|
||||||
make par tech_name=sky130 CONFIG=TinyRocketConfig
|
make par tutorial=sky130-openroad
|
||||||
|
|
||||||
After completion, the final database can be opened in an interactive OpenROAD session.
|
After completion, the final database can be opened in an interactive OpenROAD session.
|
||||||
|
|
||||||
@@ -174,8 +182,8 @@ To run DRC & LVS:
|
|||||||
|
|
||||||
.. code-block:: shell
|
.. code-block:: shell
|
||||||
|
|
||||||
make drc tech_name=sky130 CONFIG=TinyRocketConfig
|
make drc tutorial=sky130-openroad
|
||||||
make lvs tech_name=sky130 CONFIG=TinyRocketConfig
|
make lvs tutorial=sky130-openroad
|
||||||
|
|
||||||
Some DRC errors are expected from this PDK, especially with regards to the SRAMs, as explained in the
|
Some DRC errors are expected from this PDK, especially with regards to the SRAMs, as explained in the
|
||||||
`Sky130 Hammer plugin README <https://github.com/ucb-bar/hammer/blob/master/src/hammer-vlsi/technology/sky130/README.md>`__.
|
`Sky130 Hammer plugin README <https://github.com/ucb-bar/hammer/blob/master/src/hammer-vlsi/technology/sky130/README.md>`__.
|
||||||
|
|||||||
226
vlsi/Makefile
226
vlsi/Makefile
@@ -28,15 +28,15 @@ SMEMS_CACHE ?= $(tech_dir)/sram-cache.json
|
|||||||
SMEMS_HAMMER ?= $(build_dir)/$(long_name).mems.hammer.json
|
SMEMS_HAMMER ?= $(build_dir)/$(long_name).mems.hammer.json
|
||||||
|
|
||||||
ifdef USE_SRAM_COMPILER
|
ifdef USE_SRAM_COMPILER
|
||||||
MACROCOMPILER_MODE ?= -l $(SMEMS_COMP) --use-compiler -hir $(SMEMS_HAMMER) --mode strict
|
MACROCOMPILER_MODE ?= -l $(SMEMS_COMP) --use-compiler -hir $(SMEMS_HAMMER) --mode strict
|
||||||
else
|
else
|
||||||
MACROCOMPILER_MODE ?= -l $(SMEMS_CACHE) -hir $(SMEMS_HAMMER) --mode strict
|
MACROCOMPILER_MODE ?= -l $(SMEMS_CACHE) -hir $(SMEMS_HAMMER) --mode strict
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ENV_YML ?= $(vlsi_dir)/env.yml
|
ENV_YML ?= $(vlsi_dir)/env.yml
|
||||||
TECH_CONF ?= $(if $(filter $(tech_name),nangate45), example-nangate45.yml,\
|
TECH_CONF ?= $(if $(filter $(tech_name),nangate45), example-nangate45.yml,\
|
||||||
$(if $(filter $(tech_name),asap7), example-asap7.yml,\
|
$(if $(filter $(tech_name),asap7), example-asap7.yml,\
|
||||||
example-sky130.yml))
|
example-sky130.yml))
|
||||||
TOOLS_CONF ?= example-tools.yml
|
TOOLS_CONF ?= example-tools.yml
|
||||||
INPUT_CONFS ?= $(TOOLS_CONF) $(TECH_CONF)
|
INPUT_CONFS ?= $(TOOLS_CONF) $(TECH_CONF)
|
||||||
HAMMER_EXEC ?= $(if $(filter $(tech_name),sky130),\
|
HAMMER_EXEC ?= $(if $(filter $(tech_name),sky130),\
|
||||||
@@ -47,9 +47,9 @@ VLSI_HARNESS_DUT_NAME ?= chiptop
|
|||||||
# If overriding, this should be relative to $(vlsi_dir)
|
# If overriding, this should be relative to $(vlsi_dir)
|
||||||
VLSI_OBJ_DIR ?= build
|
VLSI_OBJ_DIR ?= build
|
||||||
ifneq ($(CUSTOM_VLOG),)
|
ifneq ($(CUSTOM_VLOG),)
|
||||||
OBJ_DIR ?= $(vlsi_dir)/$(VLSI_OBJ_DIR)/custom-$(VLSI_TOP)
|
OBJ_DIR ?= $(vlsi_dir)/$(VLSI_OBJ_DIR)/custom-$(VLSI_TOP)
|
||||||
else
|
else
|
||||||
OBJ_DIR ?= $(vlsi_dir)/$(VLSI_OBJ_DIR)/$(long_name)-$(VLSI_TOP)
|
OBJ_DIR ?= $(vlsi_dir)/$(VLSI_OBJ_DIR)/$(long_name)-$(VLSI_TOP)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
@@ -58,11 +58,11 @@ endif
|
|||||||
ALL_RTL = $(TOP_FILE) $(TOP_SMEMS_FILE)
|
ALL_RTL = $(TOP_FILE) $(TOP_SMEMS_FILE)
|
||||||
extra_v_includes = $(build_dir)/EICG_wrapper.v
|
extra_v_includes = $(build_dir)/EICG_wrapper.v
|
||||||
ifneq ($(CUSTOM_VLOG), )
|
ifneq ($(CUSTOM_VLOG), )
|
||||||
VLSI_RTL = $(CUSTOM_VLOG)
|
VLSI_RTL = $(CUSTOM_VLOG)
|
||||||
VLSI_BB = /dev/null
|
VLSI_BB = /dev/null
|
||||||
else
|
else
|
||||||
VLSI_RTL = $(ALL_RTL) $(extra_v_includes)
|
VLSI_RTL = $(ALL_RTL) $(extra_v_includes)
|
||||||
VLSI_BB = $(sim_top_blackboxes)
|
VLSI_BB = $(sim_top_blackboxes)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
.PHONY: default verilog
|
.PHONY: default verilog
|
||||||
@@ -92,13 +92,13 @@ sram_generator: $(SRAM_CONF)
|
|||||||
$(SMEMS_HAMMER): $(TOP_SMEMS_FILE)
|
$(SMEMS_HAMMER): $(TOP_SMEMS_FILE)
|
||||||
|
|
||||||
$(SRAM_GENERATOR_CONF): $(SMEMS_HAMMER)
|
$(SRAM_GENERATOR_CONF): $(SMEMS_HAMMER)
|
||||||
mkdir -p $(dir $@)
|
mkdir -p $(dir $@)
|
||||||
echo "vlsi.inputs.sram_parameters: '$(SMEMS_HAMMER)'" >> $@
|
echo "vlsi.inputs.sram_parameters: '$(SMEMS_HAMMER)'" >> $@
|
||||||
echo "vlsi.inputs.sram_parameters_meta: [\"transclude\", \"json2list\"]">> $@
|
echo "vlsi.inputs.sram_parameters_meta: [\"transclude\", \"json2list\"]">> $@
|
||||||
|
|
||||||
$(SRAM_CONF): $(SRAM_GENERATOR_CONF)
|
$(SRAM_CONF): $(SRAM_GENERATOR_CONF)
|
||||||
cd $(vlsi_dir) && $(HAMMER_EXEC) -e $(ENV_YML) $(foreach x,$(INPUT_CONFS) $(SRAM_GENERATOR_CONF), -p $(x)) --obj_dir $(build_dir) sram_generator
|
cd $(vlsi_dir) && $(HAMMER_EXEC) -e $(ENV_YML) $(foreach x,$(INPUT_CONFS) $(SRAM_GENERATOR_CONF), -p $(x)) --obj_dir $(build_dir) sram_generator
|
||||||
cd $(vlsi_dir) && cp output.json $@
|
cd $(vlsi_dir) && cp output.json $@
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
# simulation input configuration
|
# simulation input configuration
|
||||||
@@ -106,16 +106,16 @@ $(SRAM_CONF): $(SRAM_GENERATOR_CONF)
|
|||||||
include $(base_dir)/vcs.mk
|
include $(base_dir)/vcs.mk
|
||||||
|
|
||||||
SIM_FILE_REQS += \
|
SIM_FILE_REQS += \
|
||||||
$(ROCKETCHIP_RSRCS_DIR)/vsrc/TestDriver.v
|
$(ROCKETCHIP_RSRCS_DIR)/vsrc/TestDriver.v
|
||||||
|
|
||||||
# copy files but ignore *.h files in *.f since vcs has +incdir+$(build_dir)
|
# copy files but ignore *.h files in *.f since vcs has +incdir+$(build_dir)
|
||||||
$(sim_files): $(SIM_FILE_REQS) | $(build_dir)
|
$(sim_files): $(SIM_FILE_REQS) | $(build_dir)
|
||||||
cp -f $^ $(build_dir)
|
cp -f $^ $(build_dir)
|
||||||
$(foreach file,\
|
$(foreach file,\
|
||||||
$^,\
|
$^,\
|
||||||
$(if $(filter %.h,$(file)),\
|
$(if $(filter %.h,$(file)),\
|
||||||
,\
|
,\
|
||||||
echo "$(addprefix $(build_dir)/, $(notdir $(file)))" >> $@;))
|
echo "$(addprefix $(build_dir)/, $(notdir $(file)))" >> $@;))
|
||||||
|
|
||||||
SIM_CONF = $(OBJ_DIR)/sim-inputs.yml
|
SIM_CONF = $(OBJ_DIR)/sim-inputs.yml
|
||||||
SIM_DEBUG_CONF = $(OBJ_DIR)/sim-debug-inputs.yml
|
SIM_DEBUG_CONF = $(OBJ_DIR)/sim-debug-inputs.yml
|
||||||
@@ -123,97 +123,97 @@ SIM_TIMING_CONF = $(OBJ_DIR)/sim-timing-inputs.yml
|
|||||||
|
|
||||||
include $(vlsi_dir)/sim.mk
|
include $(vlsi_dir)/sim.mk
|
||||||
$(SIM_CONF): $(VLSI_RTL) $(HARNESS_FILE) $(HARNESS_SMEMS_FILE) $(sim_common_files) $(dramsim_lib)
|
$(SIM_CONF): $(VLSI_RTL) $(HARNESS_FILE) $(HARNESS_SMEMS_FILE) $(sim_common_files) $(dramsim_lib)
|
||||||
mkdir -p $(dir $@)
|
mkdir -p $(dir $@)
|
||||||
echo "sim.inputs:" > $@
|
echo "sim.inputs:" > $@
|
||||||
echo " top_module: $(VLSI_TOP)" >> $@
|
echo " top_module: $(VLSI_TOP)" >> $@
|
||||||
echo " input_files:" >> $@
|
echo " input_files:" >> $@
|
||||||
for x in $(HARNESS_FILE) $(HARNESS_SMEMS_FILE); do \
|
for x in $(HARNESS_FILE) $(HARNESS_SMEMS_FILE); do \
|
||||||
echo ' - "'$$x'"' >> $@; \
|
echo ' - "'$$x'"' >> $@; \
|
||||||
done
|
done
|
||||||
echo " input_files_meta: 'append'" >> $@
|
echo " input_files_meta: 'append'" >> $@
|
||||||
echo " timescale: '1ns/10ps'" >> $@
|
echo " timescale: '1ns/10ps'" >> $@
|
||||||
echo " options:" >> $@
|
echo " options:" >> $@
|
||||||
for x in $(VCS_NONCC_OPTS); do \
|
for x in $(VCS_NONCC_OPTS); do \
|
||||||
echo ' - "'$$x'"' >> $@; \
|
echo ' - "'$$x'"' >> $@; \
|
||||||
done
|
done
|
||||||
echo " options_meta: 'append'" >> $@
|
echo " options_meta: 'append'" >> $@
|
||||||
echo " defines:" >> $@
|
echo " defines:" >> $@
|
||||||
for x in $(subst +define+,,$(PREPROC_DEFINES)); do \
|
for x in $(subst +define+,,$(PREPROC_DEFINES)); do \
|
||||||
echo ' - "'$$x'"' >> $@; \
|
echo ' - "'$$x'"' >> $@; \
|
||||||
done
|
done
|
||||||
echo " defines_meta: 'append'" >> $@
|
echo " defines_meta: 'append'" >> $@
|
||||||
echo " compiler_cc_opts:" >> $@
|
echo " compiler_cc_opts:" >> $@
|
||||||
for x in $(filter-out "",$(VCS_CXXFLAGS)); do \
|
for x in $(filter-out "",$(VCS_CXXFLAGS)); do \
|
||||||
echo ' - "'$$x'"' >> $@; \
|
echo ' - "'$$x'"' >> $@; \
|
||||||
done
|
done
|
||||||
echo " compiler_cc_opts_meta: 'append'" >> $@
|
echo " compiler_cc_opts_meta: 'append'" >> $@
|
||||||
echo " compiler_ld_opts:" >> $@
|
echo " compiler_ld_opts:" >> $@
|
||||||
for x in $(filter-out "",$(VCS_LDFLAGS)); do \
|
for x in $(filter-out "",$(VCS_LDFLAGS)); do \
|
||||||
echo ' - "'$$x'"' >> $@; \
|
echo ' - "'$$x'"' >> $@; \
|
||||||
done
|
done
|
||||||
echo " compiler_ld_opts_meta: 'append'" >> $@
|
echo " compiler_ld_opts_meta: 'append'" >> $@
|
||||||
echo " execution_flags_prepend: ['$(PERMISSIVE_ON)']" >> $@
|
echo " execution_flags_prepend: ['$(PERMISSIVE_ON)']" >> $@
|
||||||
echo " execution_flags_append: ['$(PERMISSIVE_OFF)']" >> $@
|
echo " execution_flags_append: ['$(PERMISSIVE_OFF)']" >> $@
|
||||||
echo " execution_flags:" >> $@
|
echo " execution_flags:" >> $@
|
||||||
for x in $(SIM_FLAGS); do \
|
for x in $(SIM_FLAGS); do \
|
||||||
echo ' - "'$$x'"' >> $@; \
|
echo ' - "'$$x'"' >> $@; \
|
||||||
done
|
done
|
||||||
echo " execution_flags_meta: 'append'" >> $@
|
echo " execution_flags_meta: 'append'" >> $@
|
||||||
ifneq ($(BINARY), )
|
ifneq ($(BINARY), )
|
||||||
echo " benchmarks: ['$(BINARY)']" >> $@
|
echo " benchmarks: ['$(BINARY)']" >> $@
|
||||||
endif
|
endif
|
||||||
echo " tb_dut: 'TestDriver.testHarness.$(VLSI_HARNESS_DUT_NAME)'" >> $@
|
echo " tb_dut: 'TestDriver.testHarness.$(VLSI_HARNESS_DUT_NAME)'" >> $@
|
||||||
|
|
||||||
$(SIM_DEBUG_CONF): $(VLSI_RTL) $(HARNESS_FILE) $(HARNESS_SMEMS_FILE) $(sim_common_files)
|
$(SIM_DEBUG_CONF): $(VLSI_RTL) $(HARNESS_FILE) $(HARNESS_SMEMS_FILE) $(sim_common_files)
|
||||||
mkdir -p $(dir $@)
|
mkdir -p $(dir $@)
|
||||||
mkdir -p $(output_dir)
|
mkdir -p $(output_dir)
|
||||||
echo "sim.inputs:" > $@
|
echo "sim.inputs:" > $@
|
||||||
echo " defines: ['DEBUG']" >> $@
|
echo " defines: ['DEBUG']" >> $@
|
||||||
echo " defines_meta: 'append'" >> $@
|
echo " defines_meta: 'append'" >> $@
|
||||||
echo " execution_flags:" >> $@
|
echo " execution_flags:" >> $@
|
||||||
for x in $(VERBOSE_FLAGS) $(WAVEFORM_FLAG); do \
|
for x in $(VERBOSE_FLAGS) $(WAVEFORM_FLAG); do \
|
||||||
echo ' - "'$$x'"' >> $@; \
|
echo ' - "'$$x'"' >> $@; \
|
||||||
done
|
done
|
||||||
echo " execution_flags_meta: 'append'" >> $@
|
echo " execution_flags_meta: 'append'" >> $@
|
||||||
echo " saif.mode: 'time'" >> $@
|
echo " saif.mode: 'time'" >> $@
|
||||||
echo " saif.start_time: '0ns'" >> $@
|
echo " saif.start_time: '0ns'" >> $@
|
||||||
echo " saif.end_time: '`bc <<< $(timeout_cycles)*$(CLOCK_PERIOD)`ns'" >> $@
|
echo " saif.end_time: '`bc <<< $(timeout_cycles)*$(CLOCK_PERIOD)`ns'" >> $@
|
||||||
ifdef USE_FSDB
|
ifdef USE_FSDB
|
||||||
echo " options:" >> $@
|
echo " options:" >> $@
|
||||||
echo ' - "-kdb"' >> $@
|
echo ' - "-kdb"' >> $@
|
||||||
echo " options_meta: 'append'" >> $@
|
echo " options_meta: 'append'" >> $@
|
||||||
echo "sim.outputs.waveforms: ['$(sim_out_name).fsdb']" >> $@
|
echo "sim.outputs.waveforms: ['$(sim_out_name).fsdb']" >> $@
|
||||||
else
|
else
|
||||||
echo "sim.outputs.waveforms: ['$(sim_out_name).vpd']" >> $@
|
echo "sim.outputs.waveforms: ['$(sim_out_name).vpd']" >> $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(SIM_TIMING_CONF): $(VLSI_RTL) $(HARNESS_FILE) $(HARNESS_SMEMS_FILE) $(sim_common_files)
|
$(SIM_TIMING_CONF): $(VLSI_RTL) $(HARNESS_FILE) $(HARNESS_SMEMS_FILE) $(sim_common_files)
|
||||||
mkdir -p $(dir $@)
|
mkdir -p $(dir $@)
|
||||||
echo "sim.inputs:" > $@
|
echo "sim.inputs:" > $@
|
||||||
echo " defines: ['NTC']" >> $@
|
echo " defines: ['NTC']" >> $@
|
||||||
echo " defines_meta: 'append'" >> $@
|
echo " defines_meta: 'append'" >> $@
|
||||||
echo " timing_annotated: 'true'" >> $@
|
echo " timing_annotated: 'true'" >> $@
|
||||||
|
|
||||||
POWER_CONF = $(OBJ_DIR)/power-inputs.yml
|
POWER_CONF = $(OBJ_DIR)/power-inputs.yml
|
||||||
include $(vlsi_dir)/power.mk
|
include $(vlsi_dir)/power.mk
|
||||||
$(POWER_CONF): $(VLSI_RTL) $(HARNESS_FILE) $(HARNESS_SMEMS_FILE) $(sim_common_files)
|
$(POWER_CONF): $(VLSI_RTL) $(HARNESS_FILE) $(HARNESS_SMEMS_FILE) $(sim_common_files)
|
||||||
mkdir -p $(dir $@)
|
mkdir -p $(dir $@)
|
||||||
echo "power.inputs:" > $@
|
echo "power.inputs:" > $@
|
||||||
echo " tb_dut: 'testHarness/$(VLSI_HARNESS_DUT_NAME)'" >> $@
|
echo " tb_dut: 'testHarness/$(VLSI_HARNESS_DUT_NAME)'" >> $@
|
||||||
echo " database: '$(OBJ_DIR)/par-rundir/$(VLSI_TOP)_FINAL'" >> $@
|
echo " database: '$(OBJ_DIR)/par-rundir/$(VLSI_TOP)_FINAL'" >> $@
|
||||||
ifneq ($(BINARY), )
|
ifneq ($(BINARY), )
|
||||||
echo " waveforms: [" >> $@
|
echo " waveforms: [" >> $@
|
||||||
ifdef USE_FSDB
|
ifdef USE_FSDB
|
||||||
echo " '$(sim_out_name).fsdb'" >> $@
|
echo " '$(sim_out_name).fsdb'" >> $@
|
||||||
else
|
else
|
||||||
echo " '$(sim_out_name).vpd'" >> $@
|
echo " '$(sim_out_name).vpd'" >> $@
|
||||||
endif
|
endif
|
||||||
echo " ]" >> $@
|
echo " ]" >> $@
|
||||||
endif
|
endif
|
||||||
echo " start_times: ['0ns']" >> $@
|
echo " start_times: ['0ns']" >> $@
|
||||||
echo " end_times: [" >> $@
|
echo " end_times: [" >> $@
|
||||||
echo " '`bc <<< $(timeout_cycles)*$(CLOCK_PERIOD)`ns'" >> $@
|
echo " '`bc <<< $(timeout_cycles)*$(CLOCK_PERIOD)`ns'" >> $@
|
||||||
echo " ]" >> $@
|
echo " ]" >> $@
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
# synthesis input configuration
|
# synthesis input configuration
|
||||||
@@ -221,23 +221,23 @@ endif
|
|||||||
SYN_CONF = $(OBJ_DIR)/inputs.yml
|
SYN_CONF = $(OBJ_DIR)/inputs.yml
|
||||||
GENERATED_CONFS = $(SYN_CONF)
|
GENERATED_CONFS = $(SYN_CONF)
|
||||||
ifeq ($(CUSTOM_VLOG), )
|
ifeq ($(CUSTOM_VLOG), )
|
||||||
GENERATED_CONFS += $(SRAM_CONF)
|
GENERATED_CONFS += $(SRAM_CONF)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(SYN_CONF): $(VLSI_RTL) $(VLSI_BB)
|
$(SYN_CONF): $(VLSI_RTL) $(VLSI_BB)
|
||||||
mkdir -p $(dir $@)
|
mkdir -p $(dir $@)
|
||||||
echo "sim.inputs:" > $@
|
echo "sim.inputs:" > $@
|
||||||
echo " input_files:" >> $@
|
echo " input_files:" >> $@
|
||||||
for x in $(VLSI_RTL); do \
|
for x in $(VLSI_RTL); do \
|
||||||
echo ' - "'$$x'"' >> $@; \
|
echo ' - "'$$x'"' >> $@; \
|
||||||
done
|
done
|
||||||
echo " input_files_meta: 'append'" >> $@
|
echo " input_files_meta: 'append'" >> $@
|
||||||
echo "synthesis.inputs:" >> $@
|
echo "synthesis.inputs:" >> $@
|
||||||
echo " top_module: $(VLSI_TOP)" >> $@
|
echo " top_module: $(VLSI_TOP)" >> $@
|
||||||
echo " input_files:" >> $@
|
echo " input_files:" >> $@
|
||||||
for x in $(VLSI_RTL) $(shell cat $(VLSI_BB)); do \
|
for x in $(VLSI_RTL) $(shell cat $(VLSI_BB)); do \
|
||||||
echo ' - "'$$x'"' >> $@; \
|
echo ' - "'$$x'"' >> $@; \
|
||||||
done
|
done
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
# AUTO BUILD FLOW
|
# AUTO BUILD FLOW
|
||||||
@@ -249,7 +249,7 @@ buildfile: $(OBJ_DIR)/hammer.d
|
|||||||
# TODO: make this dependency smarter so that we don't need this at all
|
# TODO: make this dependency smarter so that we don't need this at all
|
||||||
HAMMER_D_DEPS ?= $(GENERATED_CONFS)
|
HAMMER_D_DEPS ?= $(GENERATED_CONFS)
|
||||||
$(OBJ_DIR)/hammer.d: $(HAMMER_D_DEPS)
|
$(OBJ_DIR)/hammer.d: $(HAMMER_D_DEPS)
|
||||||
$(HAMMER_EXEC) -e $(ENV_YML) $(foreach x,$(INPUT_CONFS) $(GENERATED_CONFS), -p $(x)) --obj_dir $(OBJ_DIR) build
|
$(HAMMER_EXEC) -e $(ENV_YML) $(foreach x,$(INPUT_CONFS) $(GENERATED_CONFS), -p $(x)) --obj_dir $(OBJ_DIR) build
|
||||||
|
|
||||||
-include $(OBJ_DIR)/hammer.d
|
-include $(OBJ_DIR)/hammer.d
|
||||||
|
|
||||||
@@ -258,4 +258,4 @@ $(OBJ_DIR)/hammer.d: $(HAMMER_D_DEPS)
|
|||||||
#########################################################################################
|
#########################################################################################
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(VLSI_OBJ_DIR) hammer-vlsi*.log __pycache__ output.json $(GENERATED_CONFS) $(gen_dir) $(SIM_CONF) $(SIM_DEBUG_CONF) $(SIM_TIMING_CONF) $(POWER_CONF)
|
rm -rf $(VLSI_OBJ_DIR) hammer-vlsi*.log __pycache__ output.json $(GENERATED_CONFS) $(gen_dir) $(SIM_CONF) $(SIM_DEBUG_CONF) $(SIM_TIMING_CONF) $(POWER_CONF)
|
||||||
|
|||||||
Reference in New Issue
Block a user