Merge remote-tracking branch 'origin/main' into caliptra-aes
This commit is contained in:
@@ -119,12 +119,12 @@ $(BOOTROM_TARGETS): $(build_dir)/bootrom.%.img: $(TESTCHIP_RSRCS_DIR)/testchipip
|
||||
#########################################################################################
|
||||
# compile scala jars
|
||||
#########################################################################################
|
||||
$(CHIPYARD_CLASSPATH_TARGETS) &: $(CHIPYARD_SCALA_SOURCES) $(SCALA_BUILDTOOL_DEPS)
|
||||
$(CHIPYARD_CLASSPATH_TARGETS) &: $(CHIPYARD_SCALA_SOURCES) $(SCALA_BUILDTOOL_DEPS) $(CHIPYARD_VLOG_SOURCES)
|
||||
mkdir -p $(dir $@)
|
||||
$(call run_sbt_assembly,$(SBT_PROJECT),$(CHIPYARD_CLASSPATH))
|
||||
|
||||
# order only dependency between sbt runs needed to avoid concurrent sbt runs
|
||||
$(TAPEOUT_CLASSPATH_TARGETS) &: $(BARSTOOLS_SCALA_SOURCES) $(SCALA_BUILDTOOL_DEPS) | $(CHIPYARD_CLASSPATH_TARGETS)
|
||||
$(TAPEOUT_CLASSPATH_TARGETS) &: $(BARSTOOLS_SCALA_SOURCES) $(SCALA_BUILDTOOL_DEPS) $(BARSTOOLS_VLOG_SOURCES) | $(CHIPYARD_CLASSPATH_TARGETS)
|
||||
mkdir -p $(dir $@)
|
||||
$(call run_sbt_assembly,tapeout,$(TAPEOUT_CLASSPATH))
|
||||
|
||||
@@ -227,7 +227,7 @@ $(FINAL_ANNO_FILE): $(EXTRA_ANNO_FILE) $(SFC_EXTRA_ANNO_FILE) $(SFC_LEVEL)
|
||||
touch $@
|
||||
|
||||
$(SFC_MFC_TARGETS) &: private TMP_DIR := $(shell mktemp -d -t cy-XXXXXXXX)
|
||||
$(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(SFC_LEVEL) $(EXTRA_FIRRTL_OPTIONS) $(MFC_LOWERING_OPTIONS) $(CHIPYARD_VLOG_SOURCES) $(BARSTOOLS_VLOG_SOURCES)
|
||||
$(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_FILE) $(SFC_LEVEL) $(EXTRA_FIRRTL_OPTIONS) $(MFC_LOWERING_OPTIONS)
|
||||
rm -rf $(GEN_COLLATERAL_DIR)
|
||||
$(call run_jar_scala_main,$(TAPEOUT_CLASSPATH),barstools.tapeout.transforms.GenerateModelStageMain,\
|
||||
--no-dedup \
|
||||
@@ -246,9 +246,7 @@ $(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_F
|
||||
@if [ $(shell cat $(SFC_LEVEL)) = low ]; then cat $(TMP_DIR)/unnec-anno-deleted2.sfc.anno.json > $(SFC_ANNO_FILE) && rm $(TMP_DIR)/unnec-anno-deleted.sfc.anno.json && rm $(TMP_DIR)/unnec-anno-deleted2.sfc.anno.json; fi
|
||||
firtool \
|
||||
--format=fir \
|
||||
--dedup \
|
||||
--export-module-hierarchy \
|
||||
--emit-metadata \
|
||||
--verify-each=true \
|
||||
--warn-on-unprocessed-annotations \
|
||||
--disable-annotation-classless \
|
||||
@@ -257,7 +255,6 @@ $(SFC_MFC_TARGETS) &: $(TAPEOUT_CLASSPATH_TARGETS) $(FIRRTL_FILE) $(FINAL_ANNO_F
|
||||
--lowering-options=$(shell cat $(MFC_LOWERING_OPTIONS)) \
|
||||
--repl-seq-mem \
|
||||
--repl-seq-mem-file=$(MFC_SMEMS_CONF) \
|
||||
--repl-seq-mem-circuit=$(MODEL) \
|
||||
--annotation-file=$(SFC_ANNO_FILE) \
|
||||
--split-verilog \
|
||||
-o $(GEN_COLLATERAL_DIR) \
|
||||
|
||||
@@ -29,7 +29,7 @@ dependencies:
|
||||
- conda-gcc-specs
|
||||
- binutils
|
||||
|
||||
- firtool==1.30.0 # from ucb-bar channel - https://github.com/ucb-bar/firtool-feedstock
|
||||
- firtool==1.58.0 # from ucb-bar channel - https://github.com/ucb-bar/firtool-feedstock
|
||||
|
||||
# misc
|
||||
- autoconf
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -161,4 +161,31 @@ transformed or augmented by any Chipyard FIRRTL transform.
|
||||
As mentioned earlier in this section, ``BlackBox`` resource files must
|
||||
be integrated into the build process, so any project providing
|
||||
``BlackBox`` resources must be made visible to the ``tapeout`` project
|
||||
in ``build.sbt``
|
||||
in ``build.sbt``.
|
||||
|
||||
Differences between ``HasBlackBoxPath`` and ``HasBlackBoxResource``
|
||||
-------------------------------------------------------------------
|
||||
|
||||
Chisel provides two mechanisms for integrating blackbox files into a Chisel project that work slightly differently in Chipyard: ``HasBlackBoxPath`` and ``HasBlackBoxResource``.
|
||||
|
||||
``HasBlackBoxResource`` incorporates extra files by looking up the relative path of the files within the ``src/main/resources`` area of project.
|
||||
This requires that the file added by ``addResource`` is present in the ``src/main/resources`` area and is **not** auto-generated (the file is static throughout the lifetime of generating RTL).
|
||||
This is due to the fact that when the Chisel sources are compiled they are put in a ``jar`` file, along with the ``src/main/resources`` area, and that ``jar`` is used to run the Chisel generator.
|
||||
Files referenced by the ``addResource`` must be located within this ``jar`` file during the Chisel elaboration.
|
||||
Thus if a file is generated during Chisel generation it will not be present in the ``jar`` file until the next time the Chisel sources are compiled.
|
||||
|
||||
``HasBlackBoxPath`` differs in that it incorporates extra files by using an absolute path to them.
|
||||
Later in the build process, the FIRRTL compiler will copy the file from that location to the generated sources directory.
|
||||
Thus, the file must be present before the FIRRTL compiler is run (i.e. the file doesn't need to be in the ``src/main/resources`` or it can be auto-generated during Chisel elaboration).
|
||||
|
||||
Additionally, both mechanisms do not enforce the order of files added.
|
||||
For example:
|
||||
|
||||
.. code-block:: scala
|
||||
|
||||
addResource("fileA")
|
||||
addResource("fileB")
|
||||
|
||||
In this case, ``fileA`` is not guaranteed to be before ``fileB`` when passed to downstream tools.
|
||||
To bypass this, it is recommended to auto-generate a single file with the ordering needed by concatenating the files and using ``addPath`` given by ``HasBlackBoxPath``.
|
||||
An example of this is https://github.com/ucb-bar/ibex-wrapper/blob/main/src/main/scala/IbexCoreBlackbox.scala.
|
||||
|
||||
@@ -81,6 +81,24 @@ For example:
|
||||
|
||||
.. _sw-sim-custom:
|
||||
|
||||
Custom Benchmarks/Tests
|
||||
-------------------------------
|
||||
|
||||
To compile your own bare-metal code to run in a Verilator/VCS simulation, add it to Chipyard's ``tests`` directory then add its name to the list of ``PROGRAMS`` inside the ``Makefile``. These binaries are compiled with the libgloss-htif library, which implements a minimal set of useful syscalls for bare-metal binaries. Then when you run ``make``, all of the programs inside ``tests`` will be compiled into ``.riscv`` ELF binaries, which can be used with the simulator as described above.
|
||||
|
||||
.. code-block:: shell
|
||||
|
||||
# Enter Tests directory
|
||||
cd tests
|
||||
make
|
||||
|
||||
# Enter Verilator or VCS directory
|
||||
cd ../sims/verilator
|
||||
make run-binary BINARY=../../tests/hello.riscv
|
||||
|
||||
.. Note:: On multi-core configurations, only hart (**har**\ dware **t**\ hread) 0 executes the ``main()`` function. All other harts execute the secondary ``__main()`` function, which defaults to a busy loop. To run a multi-threaded workload on a Verilator/VCS simulation, override ``__main()`` with your own code. More details can be found `here <https://github.com/ucb-bar/libgloss-htif>`_
|
||||
|
||||
|
||||
Makefile Variables and Commands
|
||||
-------------------------------
|
||||
You can get a list of useful Makefile variables and commands available from the Verilator or VCS directories. simply run ``make help``:
|
||||
|
||||
@@ -13,7 +13,7 @@ import freechips.rocketchip.util.UIntIsOneOf
|
||||
|
||||
// DOC include start: GCD params
|
||||
case class GCDParams(
|
||||
address: BigInt = 0x1000,
|
||||
address: BigInt = 0x4000,
|
||||
width: Int = 32,
|
||||
useAXI4: Boolean = false,
|
||||
useBlackBox: Boolean = true)
|
||||
|
||||
@@ -13,6 +13,13 @@ fi
|
||||
for TOOLCHAIN_TYPE in riscv-tools esp-tools; do
|
||||
# note: lock file must end in .conda-lock.yml - see https://github.com/conda-incubator/conda-lock/issues/154
|
||||
LOCKFILE=$REQS_DIR/conda-lock-reqs/conda-requirements-$TOOLCHAIN_TYPE-linux-64.conda-lock.yml
|
||||
rm -rf $LOCKFILE
|
||||
|
||||
conda-lock -f "$REQS_DIR/chipyard.yaml" -f "$REQS_DIR/$TOOLCHAIN_TYPE.yaml" -p linux-64 --lockfile $LOCKFILE
|
||||
conda-lock \
|
||||
--no-mamba \
|
||||
--no-micromamba \
|
||||
-f "$REQS_DIR/chipyard.yaml" \
|
||||
-f "$REQS_DIR/$TOOLCHAIN_TYPE.yaml" \
|
||||
-p linux-64 \
|
||||
--lockfile $LOCKFILE
|
||||
done
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# replaces a `include with the full include file
|
||||
# replaces a `include with the full include file.
|
||||
# recursively replaces `include's until none are left
|
||||
#
|
||||
# args
|
||||
# $1 - file to remove includes from
|
||||
|
||||
@@ -109,7 +109,7 @@ def generate_copy(c, sfx):
|
||||
new_file = os.path.join(args.gcpath, new_file)
|
||||
|
||||
shutil.copy(cur_file, new_file)
|
||||
bash(f"sed -i s/\"module {cur_name}\"/\"module {new_name}\"/ {new_file}")
|
||||
bash(f"sed -i 's/module\( \+\){cur_name}/module\\1{new_name}/' {new_file}")
|
||||
return new_file
|
||||
|
||||
def bfs_uniquify_modules(tree, common_fnames, verilog_module_filename):
|
||||
@@ -136,7 +136,7 @@ def bfs_uniquify_modules(tree, common_fnames, verilog_module_filename):
|
||||
new_file = generate_copy(cur_file, MODEL_SFX)
|
||||
if parent is not None and ((parent, mod) not in updated_submodule):
|
||||
parent_file = os.path.join(args.gcpath, verilog_module_filename[parent])
|
||||
bash(f"sed -i s/\"{mod} \"/\"{mod}_{MODEL_SFX} \"/ {parent_file}")
|
||||
bash(f"sed -i 's/\( \*\){mod}\( \+\)/\\1{mod}_{MODEL_SFX}\\2/' {parent_file}")
|
||||
updated_submodule.add((parent, mod))
|
||||
|
||||
# add the uniquified module to the verilog_modul_filename dict
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#include "mmio.h"
|
||||
|
||||
#define GCD_STATUS 0x1000
|
||||
#define GCD_X 0x1004
|
||||
#define GCD_Y 0x1008
|
||||
#define GCD_GCD 0x100C
|
||||
#define GCD_STATUS 0x4000
|
||||
#define GCD_X 0x4004
|
||||
#define GCD_Y 0x4008
|
||||
#define GCD_GCD 0x400C
|
||||
|
||||
unsigned int gcd_ref(unsigned int x, unsigned int y) {
|
||||
while (y != 0) {
|
||||
|
||||
Reference in New Issue
Block a user