Merge branch 'rebar-dev' of https://github.com/ucb-bar/project-template into firesim-integration
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
REBAR CI
|
Chipyard CI
|
||||||
========
|
===========
|
||||||
|
|
||||||
Website: https://circleci.com/gh/ucb-bar/project-template
|
Website: https://circleci.com/gh/ucb-bar/project-template
|
||||||
|
|
||||||
@@ -32,17 +32,17 @@ Here the key is built from a string where the `checksum` portion converts the fi
|
|||||||
.circleci directory
|
.circleci directory
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
This directory contains all the collateral for the REBAR CI to work.
|
This directory contains all the collateral for the Chipyard CI to work.
|
||||||
The following is included:
|
The following is included:
|
||||||
|
|
||||||
build-toolchains.sh # build either riscv-tools or esp-tools
|
build-toolchains.sh # build either riscv-tools or esp-tools
|
||||||
build-verilator.sh # build verilator
|
build-verilator.sh # build verilator
|
||||||
create-hash.sh # create hashes of riscv-tools/esp-tools so circleci caching can work
|
create-hash.sh # create hashes of riscv-tools/esp-tools so circleci caching can work
|
||||||
do-rtl-build.sh # use verilator to build a sim executable
|
do-rtl-build.sh # use verilator to build a sim executable
|
||||||
config.yml # main circleci config script to enumerate jobs/workflows
|
config.yml # main circleci config script to enumerate jobs/workflows
|
||||||
|
|
||||||
How things are setup for REBAR
|
How things are setup for Chipyard
|
||||||
------------------------------
|
---------------------------------
|
||||||
|
|
||||||
The steps for CI to run are as follows.
|
The steps for CI to run are as follows.
|
||||||
1st, build the toolchains in parallel (note: `esp-tools` is currently not used in the run).
|
1st, build the toolchains in parallel (note: `esp-tools` is currently not used in the run).
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ if [ ! -d "$HOME/$1-install" ]; then
|
|||||||
cd $HOME/
|
cd $HOME/
|
||||||
|
|
||||||
# init all submodules including the tools
|
# init all submodules including the tools
|
||||||
REBAR_DIR=$HOME/project ./project/scripts/build-toolchains.sh $1
|
CHIPYARD_DIR=$HOME/project ./project/scripts/build-toolchains.sh $1
|
||||||
fi
|
fi
|
||||||
|
|||||||
40
.circleci/check-commit.sh
Executable file
40
.circleci/check-commit.sh
Executable file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# check to see that submodule commits are present on the master branch
|
||||||
|
|
||||||
|
# turn echo on and error on earliest command
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
# enter bhd repo
|
||||||
|
cd $HOME/project
|
||||||
|
|
||||||
|
# initialize submodules and get the hashes
|
||||||
|
git submodule update --init
|
||||||
|
status=$(git submodule status)
|
||||||
|
|
||||||
|
search () {
|
||||||
|
for submodule in "${submodules[@]}"
|
||||||
|
do
|
||||||
|
echo "Running check on submodule $submodule in $dir"
|
||||||
|
hash=$(echo "$status" | grep $submodule | awk '{print$1}' | grep -o "[[:alnum:]]*")
|
||||||
|
echo "Searching for $hash in origin/master of $submodule"
|
||||||
|
git -C $dir/$submodule branch -r --contains "$hash" | grep "origin/master" # needs init'ed submodules
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
submodules=("boom" "hwacha" "rocket-chip" "sifive-blocks" "testchipip")
|
||||||
|
dir="generators"
|
||||||
|
|
||||||
|
search
|
||||||
|
|
||||||
|
submodules=("esp-tools" "riscv-tools")
|
||||||
|
dir="toolchains"
|
||||||
|
|
||||||
|
search
|
||||||
|
|
||||||
|
submodules=("barstools" "chisel3" "firrtl" "torture")
|
||||||
|
dir="tools"
|
||||||
|
|
||||||
|
search
|
||||||
|
|
||||||
|
echo "Done checking all submodules"
|
||||||
@@ -5,6 +5,22 @@ version: 2
|
|||||||
|
|
||||||
# set of jobs to run
|
# set of jobs to run
|
||||||
jobs:
|
jobs:
|
||||||
|
commit-on-master-check:
|
||||||
|
docker:
|
||||||
|
- image: riscvboom/riscvboom-images:0.0.5
|
||||||
|
environment:
|
||||||
|
JVM_OPTS: -Xmx3200m # Customize the JVM maximum heap limit
|
||||||
|
TERM: dumb
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# Checkout the code
|
||||||
|
- checkout
|
||||||
|
|
||||||
|
- run:
|
||||||
|
name: Check commits of each submodule
|
||||||
|
command: |
|
||||||
|
.circleci/check-commit.sh
|
||||||
|
|
||||||
install-riscv-toolchain:
|
install-riscv-toolchain:
|
||||||
docker:
|
docker:
|
||||||
- image: riscvboom/riscvboom-images:0.0.5
|
- image: riscvboom/riscvboom-images:0.0.5
|
||||||
@@ -468,8 +484,11 @@ jobs:
|
|||||||
# Order and dependencies of jobs to run
|
# Order and dependencies of jobs to run
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
version: 2
|
||||||
build-and-test-rebar-integration:
|
build-and-test-chipyard-integration:
|
||||||
jobs:
|
jobs:
|
||||||
|
# check to make sure commits are on master
|
||||||
|
- commit-on-master-check
|
||||||
|
|
||||||
# Make the toolchains
|
# Make the toolchains
|
||||||
- install-riscv-toolchain
|
- install-riscv-toolchain
|
||||||
|
|
||||||
|
|||||||
16
README.md
16
README.md
@@ -1,20 +1,20 @@
|
|||||||
# REBAR Framework [](https://circleci.com/gh/ucb-bar/project-template/tree/master)
|
# Chipyard Framework [](https://circleci.com/gh/ucb-bar/project-template/tree/master)
|
||||||
|
|
||||||
## Using REBAR
|
## Using Chipyard
|
||||||
|
|
||||||
To get started using REBAR, see the documentation on the REBAR documentation site: https://bar-project-template.readthedocs.io/en/latest/
|
To get started using Chipyard, see the documentation on the Chipyard documentation site: https://bar-project-template.readthedocs.io/en/latest/
|
||||||
|
|
||||||
## What is REBAR
|
## What is Chipyard
|
||||||
|
|
||||||
REBAR is an open source starter template for your custom Chisel project.
|
Chipyard is an open source starter template for your custom Chisel project.
|
||||||
It will allow you to leverage the Chisel HDL, Rocket Chip SoC generator, and other [Berkeley][berkeley] projects to produce a [RISC-V][riscv] SoC with everything from MMIO-mapped peripherals to custom accelerators.
|
It will allow you to leverage the Chisel HDL, Rocket Chip SoC generator, and other [Berkeley][berkeley] projects to produce a [RISC-V][riscv] SoC with everything from MMIO-mapped peripherals to custom accelerators.
|
||||||
It contains processor cores ([Rocket][rocket-chip], [BOOM][boom]), accelerators ([Hwacha][hwacha]), FPGA simulation tools ([FireSim][firesim]), ASIC tools ([HAMMER][hammer]) and other tooling to help create a full featured SoC.
|
It contains processor cores ([Rocket][rocket-chip], [BOOM][boom]), accelerators ([Hwacha][hwacha]), FPGA simulation tools ([FireSim][firesim]), ASIC tools ([HAMMER][hammer]) and other tooling to help create a full featured SoC.
|
||||||
REBAR is actively developed in the [Berkeley Architecture Research Group][ucb-bar] in the [Electrical Engineering and Computer Sciences Department][eecs] at the [University of California, Berkeley][berkeley].
|
Chipyard is actively developed in the [Berkeley Architecture Research Group][ucb-bar] in the [Electrical Engineering and Computer Sciences Department][eecs] at the [University of California, Berkeley][berkeley].
|
||||||
|
|
||||||
## Resources
|
## Resources
|
||||||
|
|
||||||
* REBAR Website: ...TBD at a later date...
|
* Chipyard Website: ...TBD at a later date...
|
||||||
* REBAR Documentation: https://bar-project-template.readthedocs.io/
|
* Chipyard Documentation: https://bar-project-template.readthedocs.io/
|
||||||
|
|
||||||
[hwacha]:http://hwacha.org
|
[hwacha]:http://hwacha.org
|
||||||
[hammer]:https://github.com/ucb-bar/hammer
|
[hammer]:https://github.com/ucb-bar/hammer
|
||||||
|
|||||||
10
common.mk
10
common.mk
@@ -24,10 +24,10 @@ TESTCHIPIP_CLASSES ?= "$(TESTCHIP_DIR)/target/scala-$(SCALA_VERSION_MAJOR)/class
|
|||||||
#########################################################################################
|
#########################################################################################
|
||||||
FIRRTL_JAR := $(base_dir)/lib/firrtl.jar
|
FIRRTL_JAR := $(base_dir)/lib/firrtl.jar
|
||||||
|
|
||||||
$(FIRRTL_JAR): $(call lookup_scala_srcs, $(REBAR_FIRRTL_DIR)/src/main/scala)
|
$(FIRRTL_JAR): $(call lookup_scala_srcs, $(CHIPYARD_FIRRTL_DIR)/src/main/scala)
|
||||||
$(MAKE) -C $(REBAR_FIRRTL_DIR) SBT="$(SBT)" root_dir=$(REBAR_FIRRTL_DIR) build-scala
|
$(MAKE) -C $(CHIPYARD_FIRRTL_DIR) SBT="$(SBT)" root_dir=$(CHIPYARD_FIRRTL_DIR) build-scala
|
||||||
mkdir -p $(@D)
|
mkdir -p $(@D)
|
||||||
cp -p $(REBAR_FIRRTL_DIR)/utils/bin/firrtl.jar $@
|
cp -p $(CHIPYARD_FIRRTL_DIR)/utils/bin/firrtl.jar $@
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
@@ -39,11 +39,9 @@ $(sim_dotf): $(call lookup_scala_srcs,$(base_dir)/generators/utilities/src/main/
|
|||||||
#########################################################################################
|
#########################################################################################
|
||||||
# create firrtl file rule and variables
|
# create firrtl file rule and variables
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
CHISEL_ARGS ?=
|
|
||||||
|
|
||||||
$(FIRRTL_FILE) $(ANNO_FILE): $(SCALA_SOURCES) $(sim_dotf)
|
$(FIRRTL_FILE) $(ANNO_FILE): $(SCALA_SOURCES) $(sim_dotf)
|
||||||
mkdir -p $(build_dir)
|
mkdir -p $(build_dir)
|
||||||
cd $(base_dir) && $(SBT) "project $(SBT_PROJECT)" "runMain $(GENERATOR_PACKAGE).Generator $(CHISEL_ARGS) $(build_dir) $(MODEL_PACKAGE) $(MODEL) $(CONFIG_PACKAGE) $(CONFIG)"
|
cd $(base_dir) && $(SBT) "project $(SBT_PROJECT)" "runMain $(GENERATOR_PACKAGE).Generator $(build_dir) $(MODEL_PACKAGE) $(MODEL) $(CONFIG_PACKAGE) $(CONFIG)"
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
# create verilog files rules and variables
|
# create verilog files rules and variables
|
||||||
|
|||||||
126
docs/Advanced-Usage/Heterogeneous-SoCs.rst
Normal file
126
docs/Advanced-Usage/Heterogeneous-SoCs.rst
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
Heterogeneous SoCs
|
||||||
|
===============================
|
||||||
|
|
||||||
|
The Chipyard framework involves multiple cores and accelerators that can be composed in arbitrary ways.
|
||||||
|
This discussion will focus on how you combine Rocket, BOOM and Hwacha in particular ways to create a unique SoC.
|
||||||
|
|
||||||
|
Creating a Rocket and BOOM System
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
Instantiating an SoC with Rocket and BOOM cores is all done with the configuration system and two specific mixins.
|
||||||
|
Both BOOM and Rocket have mixins labelled ``WithNBoomCores(X)`` and ``WithNBigCores(X)`` that automatically create ``X`` copies of the core.
|
||||||
|
When used together you can create a heterogeneous system.
|
||||||
|
The following example shows a dual core BOOM with a single core Rocket.
|
||||||
|
|
||||||
|
.. code-block:: scala
|
||||||
|
|
||||||
|
class DualBoomAndOneRocketConfig extends Config(
|
||||||
|
new WithNormalBoomRocketTop ++
|
||||||
|
new WithBootROM ++
|
||||||
|
new boom.system.WithRenumberHarts ++
|
||||||
|
new boom.common.WithRVC ++
|
||||||
|
new boom.common.DefaultBoomConfig ++
|
||||||
|
new boom.system.WithNBoomCores(2) ++
|
||||||
|
new freechips.rocketchip.subsystem.WithoutTLMonitors ++
|
||||||
|
new freechips.rocketchip.subsystem.WithNBigCores(1) ++
|
||||||
|
new freechips.rocketchip.system.BaseConfig)
|
||||||
|
|
||||||
|
In this example, the ``WithNBoomCores`` and ``WithNBigCores`` mixins set up the default parameters for the multiple BOOM and Rocket cores, respectively.
|
||||||
|
However, for BOOM, an extra mixin called ``DefaultBoomConfig`` is added to override the default parameters with a different set of more common default parameters.
|
||||||
|
This mixin applies to all BOOM cores in the system and changes the parameters for each.
|
||||||
|
|
||||||
|
Great! Now you have a heterogeneous setup with BOOMs and Rockets.
|
||||||
|
The final thing you need to make this system work is to renumber the ``hartId``'s of the cores so that each core has a unique ``hartId`` (a ``hartId`` is the hardware thread id of the core).
|
||||||
|
This is done with ``WithRenumberHarts`` (which can label the Rocket cores first or the BOOM cores first).
|
||||||
|
The reason this is needed is because by default the ``WithN...Cores(X)`` mixin assumes that there are only BOOM or only Rocket cores in the system.
|
||||||
|
Thus, without the ``WithRenumberHarts`` mixin, each set of cores is labeled starting from zero causing multiple cores to be assigned the same ``hartId``.
|
||||||
|
|
||||||
|
Another alternative option to create a multi heterogeneous core system is to override the parameters yourself so you can specify the core parameters per core.
|
||||||
|
The mixin to add to your system would look something like the following.
|
||||||
|
|
||||||
|
.. code-block:: scala
|
||||||
|
|
||||||
|
// create 6 cores (4 boom and 2 rocket)
|
||||||
|
class WithHeterCoresSetup extends Config((site, here, up) => {
|
||||||
|
case BoomTilesKey => {
|
||||||
|
val boomTile0 = BoomTileParams(...) // params for boom core 0
|
||||||
|
val boomTile1 = BoomTileParams(...) // params for boom core 1
|
||||||
|
val boomTile2 = BoomTileParams(...) // params for boom core 2
|
||||||
|
val boomTile3 = BoomTileParams(...) // params for boom core 3
|
||||||
|
boomTile0 ++ boomTile1 ++ boomTile2 ++ boomTile3
|
||||||
|
}
|
||||||
|
|
||||||
|
case RocketTilesKey => {
|
||||||
|
val rocketTile0 = RocketTileParams(...) // params for rocket core 0
|
||||||
|
val rocketTile1 = RocketTileParams(...) // params for rocket core 1
|
||||||
|
rocketTile0 ++ rocketTile1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
Then you could use this new mixin like the following.
|
||||||
|
|
||||||
|
.. code-block:: scala
|
||||||
|
|
||||||
|
class SixCoreConfig extends Config(
|
||||||
|
new WithNormalBoomRocketTop ++
|
||||||
|
new WithBootROM ++
|
||||||
|
new WithHeterCoresSetup ++
|
||||||
|
new freechips.rocketchip.system.BaseConfig)
|
||||||
|
|
||||||
|
Note, in this setup you need to specify the ``hartId`` of each core in the "TileParams", where each ``hartId`` is unique.
|
||||||
|
|
||||||
|
Adding Hwachas
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
Adding a Hwacha accelerator is as easy as adding the ``DefaultHwachaConfig`` so that it can setup the Hwacha parameters and add itself to the ``BuildRoCC`` parameter.
|
||||||
|
An example of adding a Hwacha to all tiles in the system is below.
|
||||||
|
|
||||||
|
.. code-block:: scala
|
||||||
|
|
||||||
|
class DualBoomAndRocketWithHwachasConfig extends Config(
|
||||||
|
new WithNormalBoomRocketTop ++
|
||||||
|
new WithBootROM ++
|
||||||
|
new hwacha.DefaultHwachaConfig ++
|
||||||
|
new boom.system.WithRenumberHarts ++
|
||||||
|
new boom.common.WithRVC ++
|
||||||
|
new boom.common.DefaultBoomConfig ++
|
||||||
|
new boom.system.WithNBoomCores(2) ++
|
||||||
|
new freechips.rocketchip.subsystem.WithoutTLMonitors ++
|
||||||
|
new freechips.rocketchip.subsystem.WithNBigCores(1) ++
|
||||||
|
new freechips.rocketchip.system.BaseConfig)
|
||||||
|
|
||||||
|
In this example, Hwachas are added to both BOOM tiles and to the Rocket tile.
|
||||||
|
All with the same Hwacha parameters.
|
||||||
|
|
||||||
|
Assigning Accelerators to Specific Tiles with MultiRoCC
|
||||||
|
-------------------------------------------------------
|
||||||
|
|
||||||
|
Located in ``generators/example/src/main/scala/ConfigMixins.scala`` is a mixin that provides support for adding RoCC accelerators to specific tiles in your SoC.
|
||||||
|
Named ``MultiRoCCKey``, this key allows you to attach RoCC accelerators based on the ``hartId`` of the tile.
|
||||||
|
For example, using this allows you to create a 8 tile system with a RoCC accelerator on only a subset of the tiles.
|
||||||
|
An example is shown below with two BOOM cores, and one Rocket tile with a RoCC accelerator (Hwacha) attached.
|
||||||
|
|
||||||
|
.. code-block:: scala
|
||||||
|
|
||||||
|
class DualBoomAndOneHwachaRocketConfig extends Config(
|
||||||
|
new WithNormalBoomRocketTop ++
|
||||||
|
new WithBootROM ++
|
||||||
|
new WithMultiRoCC ++
|
||||||
|
new WithMultiRoCCHwacha(0) ++ // put Hwacha just on hart0 which was renumbered to Rocket
|
||||||
|
new boom.system.WithRenumberHarts(rocketFirst = true) ++
|
||||||
|
new hwacha.DefaultHwachaConfig ++
|
||||||
|
new boom.common.WithRVC ++
|
||||||
|
new boom.common.DefaultBoomConfig ++
|
||||||
|
new boom.system.WithNBoomCores(2) ++
|
||||||
|
new freechips.rocketchip.subsystem.WithoutTLMonitors ++
|
||||||
|
new freechips.rocketchip.subsystem.WithNBigCores(1) ++
|
||||||
|
new freechips.rocketchip.system.BaseConfig)
|
||||||
|
|
||||||
|
In this example, the ``WithRenumberHarts`` relabels the ``hartId``'s of all the BOOM/Rocket cores.
|
||||||
|
Then after that is applied to the parameters, the ``WithMultiRoCCHwacha(0)`` is used to assign to ``hartId`` zero a Hwacha (in this case ``hartId`` zero is Rocket).
|
||||||
|
Finally, the ``WithMultiRoCC`` mixin is called.
|
||||||
|
This mixin sets the ``BuildRoCC`` key to use the ``MultiRoCCKey`` instead of the default.
|
||||||
|
This must be used after all the RoCC parameters are set because it needs to override the ``BuildRoCC`` parameter.
|
||||||
|
If this is used earlier in the configuration sequence, then MultiRoCC does not work.
|
||||||
|
|
||||||
|
This mixin can be changed to put more accelerators on more cores by changing the arguments to cover more ``hartId``'s (i.e. ``WithMultiRoCCHwacha(0,1,3,6,...)``).
|
||||||
11
docs/Advanced-Usage/index.rst
Normal file
11
docs/Advanced-Usage/index.rst
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
Advanced Usage
|
||||||
|
================================
|
||||||
|
|
||||||
|
The following sections are advanced topics about how to use Chipyard and special features of the framework.
|
||||||
|
They expect you to know about Chisel, Parameters, Configs, etc.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Getting Started:
|
||||||
|
|
||||||
|
Heterogeneous-SoCs
|
||||||
@@ -5,7 +5,7 @@ Generator can be thought of as a generalized RTL design, written using a mix of
|
|||||||
This type of meta-programming is enabled by the Chisel hardware description language (see :ref:`Chisel`).
|
This type of meta-programming is enabled by the Chisel hardware description language (see :ref:`Chisel`).
|
||||||
A standard RTL design is essentially just a single instance of a design coming from a generator.
|
A standard RTL design is essentially just a single instance of a design coming from a generator.
|
||||||
However, by using meta-programming and parameter systems, generators can allow for integration of complex hardware designs in automated ways.
|
However, by using meta-programming and parameter systems, generators can allow for integration of complex hardware designs in automated ways.
|
||||||
The following pages introduce the generators integrated with the REBAR framework.
|
The following pages introduce the generators integrated with the Chipyard framework.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ Integrating into the Generator Build System
|
|||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
While developing, you want to include Chisel code in a submodule so that it can be shared by different projects.
|
While developing, you want to include Chisel code in a submodule so that it can be shared by different projects.
|
||||||
To add a submodule to the REBAR framework, make sure that your project is organized as follows.
|
To add a submodule to the Chipyard framework, make sure that your project is organized as follows.
|
||||||
|
|
||||||
.. code-block:: none
|
.. code-block:: none
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ Then add it as a submodule to under the following directory hierarchy: ``generat
|
|||||||
cd generators/
|
cd generators/
|
||||||
git submodule add https://git-repository.com/yourproject.git
|
git submodule add https://git-repository.com/yourproject.git
|
||||||
|
|
||||||
Then add ``yourproject`` to the REBAR top-level build.sbt file.
|
Then add ``yourproject`` to the Chipyard top-level build.sbt file.
|
||||||
|
|
||||||
.. code-block:: scala
|
.. code-block:: scala
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ the ``example`` project, change the final line in build.sbt to the following.
|
|||||||
|
|
||||||
lazy val example = (project in file(".")).settings(commonSettings).dependsOn(testchipip, yourproject)
|
lazy val example = (project in file(".")).settings(commonSettings).dependsOn(testchipip, yourproject)
|
||||||
|
|
||||||
Finally, add ``yourproject`` to the ``PACKAGES`` variable in the ``common.mk`` file in the REBAR top level.
|
Finally, add ``yourproject`` to the ``PACKAGES`` variable in the ``common.mk`` file in the Chipyard top level.
|
||||||
This will allow make to detect that your source files have changed when building the Verilog/FIRRTL files.
|
This will allow make to detect that your source files have changed when building the Verilog/FIRRTL files.
|
||||||
|
|
||||||
MMIO Peripheral
|
MMIO Peripheral
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
REBAR Basics
|
Chipyard Basics
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
Generators
|
Generators
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
The REBAR Framework currently consists of the following RTL generators:
|
The Chipyard Framework currently consists of the following RTL generators:
|
||||||
|
|
||||||
Processor Cores
|
Processor Cores
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@@ -72,7 +72,7 @@ Toolchains
|
|||||||
A collection of software toolchains used to develop and execute software on the RISC-V ISA.
|
A collection of software toolchains used to develop and execute software on the RISC-V ISA.
|
||||||
The include compiler and assembler toolchains, functional ISA simulator (spike), the Berkeley Boot Loader (BBL) and proxy kernel.
|
The include compiler and assembler toolchains, functional ISA simulator (spike), the Berkeley Boot Loader (BBL) and proxy kernel.
|
||||||
The riscv-tools repository was previously required to run any RISC-V software, however, many of the riscv-tools components have since been upstreamed to their respective open-source projects (Linux, GNU, etc.).
|
The riscv-tools repository was previously required to run any RISC-V software, however, many of the riscv-tools components have since been upstreamed to their respective open-source projects (Linux, GNU, etc.).
|
||||||
Nevertheless, for consistent versioning, as well as software design flexibility for custom hardware, we include the riscv-tools repository and installation in the REBAR framework.
|
Nevertheless, for consistent versioning, as well as software design flexibility for custom hardware, we include the riscv-tools repository and installation in the Chipyard framework.
|
||||||
|
|
||||||
**esp-tools**
|
**esp-tools**
|
||||||
A fork of riscv-tools, designed to work with the Hwacha non-standard RISC-V extension.
|
A fork of riscv-tools, designed to work with the Hwacha non-standard RISC-V extension.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
Configs, Parameters, Mix-ins, and Everything In Between
|
Configs, Parameters, Mix-ins, and Everything In Between
|
||||||
========================================================
|
========================================================
|
||||||
|
|
||||||
A significant portion of generators in the REBAR framework use the Rocket Chip parameter system.
|
A significant portion of generators in the Chipyard framework use the Rocket Chip parameter system.
|
||||||
This parameter system enables for the flexible configuration of the SoC without invasive RTL changes.
|
This parameter system enables for the flexible configuration of the SoC without invasive RTL changes.
|
||||||
In order to use the parameter system correctly, we will use several terms and conventions:
|
In order to use the parameter system correctly, we will use several terms and conventions:
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ Cake Pattern
|
|||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
A cake pattern is a Scala programming pattern, which enable "mixing" of multiple traits or interface definitions (sometimes referred to as dependency injection).
|
A cake pattern is a Scala programming pattern, which enable "mixing" of multiple traits or interface definitions (sometimes referred to as dependency injection).
|
||||||
It is used in the Rocket Chip SoC library and REBAR framework in merging multiple system components and IO interfaces into a large system component.
|
It is used in the Rocket Chip SoC library and Chipyard framework in merging multiple system components and IO interfaces into a large system component.
|
||||||
|
|
||||||
:numref:`cake-example` shows a Rocket Chip based SoC that merges multiple system components (BootROM, UART, etc) into a single top-level design.
|
:numref:`cake-example` shows a Rocket Chip based SoC that merges multiple system components (BootROM, UART, etc) into a single top-level design.
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
Development Ecosystem
|
Development Ecosystem
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
REBAR Approach
|
Chipyard Approach
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|
||||||
The trend towards agile hardware design and evaluation provides an ecosystem of debugging and implementation tools, that make it easier for computer architecture researchers to develop novel concepts.
|
The trend towards agile hardware design and evaluation provides an ecosystem of debugging and implementation tools, that make it easier for computer architecture researchers to develop novel concepts.
|
||||||
REBAR hopes to build on this prior work in order to create a singular location to which multiple projects within the `Berkeley Architecture Research <https://bar.eecs.berkeley.edu/index.html>`__ can coexist and be used together.
|
Chipyard hopes to build on this prior work in order to create a singular location to which multiple projects within the `Berkeley Architecture Research <https://bar.eecs.berkeley.edu/index.html>`__ can coexist and be used together.
|
||||||
REBAR aims to be the "one-stop shop" for creating and testing your own unique System on a Chip (SoC).
|
Chipyard aims to be the "one-stop shop" for creating and testing your own unique System on a Chip (SoC).
|
||||||
|
|
||||||
Chisel/FIRRTL
|
Chisel/FIRRTL
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
Running A Simulation
|
Running A Simulation
|
||||||
========================================================
|
========================================================
|
||||||
|
|
||||||
REBAR provides support and integration for multiple simulation flows, for various user levels and requirements.
|
Chipyard provides support and integration for multiple simulation flows, for various user levels and requirements.
|
||||||
In the majority of cases during a digital design development process, simple software RTL simulation is needed.
|
In the majority of cases during a digital design development process, simple software RTL simulation is needed.
|
||||||
When more advanced full-system evaluation is required, with long running workloads, FPGA-accelerated simulation will then become a preferable solution.
|
When more advanced full-system evaluation is required, with long running workloads, FPGA-accelerated simulation will then become a preferable solution.
|
||||||
|
|
||||||
Software RTL Simulation
|
Software RTL Simulation
|
||||||
------------------------
|
------------------------
|
||||||
The REBAR framework provides wrappers for two common software RTL simulators:
|
The Chipyard framework provides wrappers for two common software RTL simulators:
|
||||||
the open-source Verilator simulator and the proprietary VCS simulator.
|
the open-source Verilator simulator and the proprietary VCS simulator.
|
||||||
For more information on either of these simulators, please refer to :ref:`Verilator` or :ref:`VCS`.
|
For more information on either of these simulators, please refer to :ref:`Verilator` or :ref:`VCS`.
|
||||||
The following instructions assume at least one of these simulators is installed.
|
The following instructions assume at least one of these simulators is installed.
|
||||||
@@ -97,7 +97,7 @@ FireSim enables simulations at 1000x-100000x the speed of standard software simu
|
|||||||
This is enabled using FPGA-acceleration on F1 instances of the AWS (Amazon Web Services) public cloud.
|
This is enabled using FPGA-acceleration on F1 instances of the AWS (Amazon Web Services) public cloud.
|
||||||
Therefore FireSim simulation requires to be set-up on the AWS public cloud rather than on our local development machine.
|
Therefore FireSim simulation requires to be set-up on the AWS public cloud rather than on our local development machine.
|
||||||
|
|
||||||
To run an FPGA-accelerated simulation using FireSim, a we need to clone the REBAR repository (or our fork of the REBAR repository) to an AWS EC2, and follow the setup instructions specified in the FireSim Initial Setup documentation page.
|
To run an FPGA-accelerated simulation using FireSim, a we need to clone the Chipyard repository (or our fork of the Chipyard repository) to an AWS EC2, and follow the setup instructions specified in the FireSim Initial Setup documentation page.
|
||||||
|
|
||||||
After setting up the FireSim environment, we now need to generate a FireSim simulation around our selected digital design.
|
After setting up the FireSim environment, we now need to generate a FireSim simulation around our selected digital design.
|
||||||
We will work from within the ``sims/firesim`` directory.
|
We will work from within the ``sims/firesim`` directory.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Getting Started
|
Getting Started
|
||||||
================================
|
================================
|
||||||
|
|
||||||
These guides will walk you through the basics of the REBAR framework:
|
These guides will walk you through the basics of the Chipyard framework:
|
||||||
|
|
||||||
- First, we will go over the different configurations available.
|
- First, we will go over the different configurations available.
|
||||||
|
|
||||||
@@ -13,9 +13,9 @@ Hit next to get started!
|
|||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
:caption: Getting Started:
|
:caption: Getting Started:
|
||||||
|
|
||||||
REBAR-Basics
|
Chipyard-Basics
|
||||||
Configs-Parameters-Mixins
|
Configs-Parameters-Mixins
|
||||||
Adding-An-Accelerator-Tutorial
|
Adding-An-Accelerator-Tutorial
|
||||||
Initial-Repo-Setup
|
Initial-Repo-Setup
|
||||||
Running-A-Simulation
|
Running-A-Simulation
|
||||||
rebar-generator-mixins
|
Chipyard-Generator-Mixins
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# You can set these variables from the command line.
|
# You can set these variables from the command line.
|
||||||
SPHINXOPTS =
|
SPHINXOPTS =
|
||||||
SPHINXBUILD = python -msphinx
|
SPHINXBUILD = python -msphinx
|
||||||
SPHINXPROJ = REBAR
|
SPHINXPROJ = Chipyard
|
||||||
SOURCEDIR = .
|
SOURCEDIR = .
|
||||||
BUILDDIR = _build
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ VCS
|
|||||||
|
|
||||||
`VCS <https://www.synopsys.com/verification/simulation/vcs.html>`__ is a commercial RTL simulator developed by Synopsys.
|
`VCS <https://www.synopsys.com/verification/simulation/vcs.html>`__ is a commercial RTL simulator developed by Synopsys.
|
||||||
It requires commercial licenses.
|
It requires commercial licenses.
|
||||||
The REBAR framework can compile and execute simulations using VCS.
|
The Chipyard framework can compile and execute simulations using VCS.
|
||||||
VCS simulation will generally compile faster than Verilator simulations.
|
VCS simulation will generally compile faster than Verilator simulations.
|
||||||
|
|
||||||
To run a simulation using VCS, perform the following steps:
|
To run a simulation using VCS, perform the following steps:
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ FireSim allows RTL-level simulation at orders-of-magnitude faster speeds than so
|
|||||||
FireSim also provides additional device models to allow full-system simulation, including memory models and network models.
|
FireSim also provides additional device models to allow full-system simulation, including memory models and network models.
|
||||||
|
|
||||||
FireSim currently supports running only on Amazon EC2 F1 FPGA-enabled virtual instances on the public cloud.
|
FireSim currently supports running only on Amazon EC2 F1 FPGA-enabled virtual instances on the public cloud.
|
||||||
In order to simulate your REBAR design using FireSim, you should follow the following steps:
|
In order to simulate your Chipyard design using FireSim, you should follow the following steps:
|
||||||
|
|
||||||
Follow the initial EC2 setup instructions as detailed in the `FireSim documentation <http://docs.fires.im/en/latest/Initial-Setup/index.html>`__.
|
Follow the initial EC2 setup instructions as detailed in the `FireSim documentation <http://docs.fires.im/en/latest/Initial-Setup/index.html>`__.
|
||||||
Then clone your full REBAR repository onto your Amazon EC2 FireSim manager instance.
|
Then clone your full Chipyard repository onto your Amazon EC2 FireSim manager instance.
|
||||||
|
|
||||||
Enter the ``sims/FireSim`` directory, and follow the FireSim instructions for `running a simulation <http://docs.fires.im/en/latest/Running-Simulations-Tutorial/index.html>`__.
|
Enter the ``sims/FireSim`` directory, and follow the FireSim instructions for `running a simulation <http://docs.fires.im/en/latest/Running-Simulations-Tutorial/index.html>`__.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Verilator
|
|||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
`Verilator <https://www.veripool.org/wiki/verilator>`__ is an open-source LGPL-Licensed simulator maintained by `Veripool <https://www.veripool.org/>`__.
|
`Verilator <https://www.veripool.org/wiki/verilator>`__ is an open-source LGPL-Licensed simulator maintained by `Veripool <https://www.veripool.org/>`__.
|
||||||
The REBAR framework can download, build, and execute simulations using Verilator.
|
The Chipyard framework can download, build, and execute simulations using Verilator.
|
||||||
|
|
||||||
To run a simulation using Verilator, perform the following steps:
|
To run a simulation using Verilator, perform the following steps:
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
Simulators
|
Simulators
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
REBAR provides support and integration for multiple simulation flows, for various user levels and requirements.
|
Chipyard provides support and integration for multiple simulation flows, for various user levels and requirements.
|
||||||
In the majority of cases during a digital design development process, a simple software RTL simulation will do.
|
In the majority of cases during a digital design development process, a simple software RTL simulation will do.
|
||||||
When more advanced full-system evaluation is required, with long running workloads, FPGA-accelerated simulation will then become a preferable solution.
|
When more advanced full-system evaluation is required, with long running workloads, FPGA-accelerated simulation will then become a preferable solution.
|
||||||
The following pages provide detailed information about the simulation possibilities within the REBAR framework.
|
The following pages provide detailed information about the simulation possibilities within the Chipyard framework.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Tools
|
Tools
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
The REBAR framework relays heavily on a set of Scala-based tools.
|
The Chipyard framework relays heavily on a set of Scala-based tools.
|
||||||
The following pages will introduce them, and how we can use them in order to generate flexible designs.
|
The following pages will introduce them, and how we can use them in order to generate flexible designs.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
VLSI Production
|
VLSI Production
|
||||||
================================
|
================================
|
||||||
|
|
||||||
The REBAR framework aim to provide wrappers to a general VLSI flow.
|
The Chipyard framework aim to provide wrappers to a general VLSI flow.
|
||||||
In particular, we aim to support the HAMMER flow.
|
In particular, we aim to support the HAMMER flow.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
|
|||||||
14
docs/conf.py
14
docs/conf.py
@@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# REBAR documentation build configuration file, created by
|
# Chipyard documentation build configuration file, created by
|
||||||
# sphinx-quickstart on Fri Mar 8 11:46:38 2019.
|
# sphinx-quickstart on Fri Mar 8 11:46:38 2019.
|
||||||
#
|
#
|
||||||
# This file is execfile()d with the current directory set to its
|
# This file is execfile()d with the current directory set to its
|
||||||
@@ -52,7 +52,7 @@ source_suffix = '.rst'
|
|||||||
master_doc = 'index'
|
master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = u'REBAR'
|
project = u'Chipyard'
|
||||||
copyright = u'2019, Berkeley Architecture Research'
|
copyright = u'2019, Berkeley Architecture Research'
|
||||||
author = u'Berkeley Architecture Research'
|
author = u'Berkeley Architecture Research'
|
||||||
|
|
||||||
@@ -125,7 +125,7 @@ html_sidebars = {
|
|||||||
# -- Options for HTMLHelp output ------------------------------------------
|
# -- Options for HTMLHelp output ------------------------------------------
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'REBARdoc'
|
htmlhelp_basename = 'Chipyarddoc'
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
@@ -152,7 +152,7 @@ latex_elements = {
|
|||||||
# (source start file, target name, title,
|
# (source start file, target name, title,
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(master_doc, 'REBAR.tex', u'REBAR Documentation',
|
(master_doc, 'Chipyard.tex', u'Chipyard Documentation',
|
||||||
u'Berkeley Architecture Research', 'manual'),
|
u'Berkeley Architecture Research', 'manual'),
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ latex_documents = [
|
|||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [
|
||||||
(master_doc, 'rebar', u'REBAR Documentation',
|
(master_doc, 'chipyard', u'Chipyard Documentation',
|
||||||
[author], 1)
|
[author], 1)
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -173,8 +173,8 @@ man_pages = [
|
|||||||
# (source start file, target name, title, author,
|
# (source start file, target name, title, author,
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
(master_doc, 'REBAR', u'REBAR Documentation',
|
(master_doc, 'Chipyard', u'Chipyard Documentation',
|
||||||
author, 'REBAR', 'One line description of project.',
|
author, 'Chipyard', 'One line description of project.',
|
||||||
'Miscellaneous'),
|
'Miscellaneous'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
.. REBAR documentation master file, created by
|
.. Chipyard documentation master file, created by
|
||||||
sphinx-quickstart on Fri Mar 8 11:46:38 2019.
|
sphinx-quickstart on Fri Mar 8 11:46:38 2019.
|
||||||
You can adapt this file completely to your liking, but it should at least
|
You can adapt this file completely to your liking, but it should at least
|
||||||
contain the root `toctree` directive.
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
Welcome to REBAR's documentation!
|
Welcome to Chipyard's documentation!
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
REBAR is a a framework for designing and evaluating full-system hardware using agile teams.
|
Chipyard is a a framework for designing and evaluating full-system hardware using agile teams.
|
||||||
It is composed of a collection of tools and libraries designed to provide an intergration between open-source and commercial tools for the development of systems-on-chip.
|
It is composed of a collection of tools and libraries designed to provide an intergration between open-source and commercial tools for the development of systems-on-chip.
|
||||||
New to REBAR? Jump to the :ref:`Getting Started` page for more info.
|
New to Chipyard? Jump to the :ref:`Getting Started` page for more info.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 3
|
:maxdepth: 3
|
||||||
@@ -37,6 +37,10 @@ New to REBAR? Jump to the :ref:`Getting Started` page for more info.
|
|||||||
:numbered:
|
:numbered:
|
||||||
VLSI/index
|
VLSI/index
|
||||||
|
|
||||||
|
:maxdepth: 3
|
||||||
|
:caption: Advanced Usage:
|
||||||
|
:numbered:
|
||||||
|
Advanced-Usage/index
|
||||||
|
|
||||||
Indices and tables
|
Indices and tables
|
||||||
==================
|
==================
|
||||||
|
|||||||
Submodule generators/boom updated: 2f8c419ff8...22c5f9ec3f
@@ -205,7 +205,7 @@ class GPIOBoomAndRocketConfig extends Config(
|
|||||||
new WithGPIOBoomRocketTop ++
|
new WithGPIOBoomRocketTop ++
|
||||||
new BaseBoomAndRocketConfig)
|
new BaseBoomAndRocketConfig)
|
||||||
|
|
||||||
class DualCoreBoomAndOneRocketConfig extends Config(
|
class DualBoomAndOneRocketConfig extends Config(
|
||||||
new WithNormalBoomRocketTop ++
|
new WithNormalBoomRocketTop ++
|
||||||
new WithBootROM ++
|
new WithBootROM ++
|
||||||
new boom.system.WithRenumberHarts ++
|
new boom.system.WithRenumberHarts ++
|
||||||
@@ -216,12 +216,12 @@ class DualCoreBoomAndOneRocketConfig extends Config(
|
|||||||
new freechips.rocketchip.subsystem.WithNBigCores(1) ++
|
new freechips.rocketchip.subsystem.WithNBigCores(1) ++
|
||||||
new freechips.rocketchip.system.BaseConfig)
|
new freechips.rocketchip.system.BaseConfig)
|
||||||
|
|
||||||
class DualCoreBoomAndOneHwachaRocketConfig extends Config(
|
class DualBoomAndOneHwachaRocketConfig extends Config(
|
||||||
new WithNormalBoomRocketTop ++
|
new WithNormalBoomRocketTop ++
|
||||||
new WithBootROM ++
|
new WithBootROM ++
|
||||||
new WithMultiRoCC ++
|
new WithMultiRoCC ++
|
||||||
new WithMultiRoCCHwacha(0) ++ // put Hwacha just on hart0 which was renumbered to Rocket
|
new WithMultiRoCCHwacha(0) ++ // put Hwacha just on hart0 which was renumbered to Rocket
|
||||||
new boom.system.WithRenumberHarts ++
|
new boom.system.WithRenumberHarts(rocketFirst = true) ++
|
||||||
new hwacha.DefaultHwachaConfig ++
|
new hwacha.DefaultHwachaConfig ++
|
||||||
new boom.common.WithRVC ++
|
new boom.common.WithRVC ++
|
||||||
new boom.common.DefaultBoomConfig ++
|
new boom.common.DefaultBoomConfig ++
|
||||||
|
|||||||
@@ -57,11 +57,11 @@ object Generator extends GeneratorApp {
|
|||||||
import freechips.rocketchip.system.DefaultTestSuites._
|
import freechips.rocketchip.system.DefaultTestSuites._
|
||||||
val xlen = params(XLen)
|
val xlen = params(XLen)
|
||||||
|
|
||||||
// TODO: for now only generate tests for the first rocket/boom tile in the subsystem
|
|
||||||
// TODO: support heterogenous systems?
|
// TODO: support heterogenous systems?
|
||||||
|
// TODO: generate tests for hart0 of the system since asm tests run on hart0 by default
|
||||||
|
|
||||||
// rocket specific tests
|
// rocket specific tests
|
||||||
params(RocketTilesKey).headOption.map { tileParams =>
|
params(RocketTilesKey).find(_.hartId == 0).map { tileParams =>
|
||||||
val coreParams = tileParams.core
|
val coreParams = tileParams.core
|
||||||
val vm = coreParams.useVM
|
val vm = coreParams.useVM
|
||||||
val env = if (vm) List("p","v") else List("p")
|
val env = if (vm) List("p","v") else List("p")
|
||||||
@@ -95,7 +95,7 @@ object Generator extends GeneratorApp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// boom specific tests
|
// boom specific tests
|
||||||
params(BoomTilesKey).headOption.map { tileParams =>
|
params(BoomTilesKey).find(_.hartId == 0).map { tileParams =>
|
||||||
val coreParams = tileParams.core
|
val coreParams = tileParams.core
|
||||||
val vm = coreParams.useVM
|
val vm = coreParams.useVM
|
||||||
val env = if (vm) List("p","v") else List("p")
|
val env = if (vm) List("p","v") else List("p")
|
||||||
|
|||||||
@@ -16,13 +16,13 @@ import sifive.blocks.devices.gpio._
|
|||||||
// BOOM and/or Rocket Top Level Systems
|
// BOOM and/or Rocket Top Level Systems
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
|
||||||
class BoomRocketTop(implicit p: Parameters) extends boom.system.ExampleBoomAndRocketSystem
|
class BoomRocketTop(implicit p: Parameters) extends boom.system.BoomRocketSystem
|
||||||
with HasNoDebug
|
with HasNoDebug
|
||||||
with HasPeripherySerial {
|
with HasPeripherySerial {
|
||||||
override lazy val module = new BoomRocketTopModule(this)
|
override lazy val module = new BoomRocketTopModule(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
class BoomRocketTopModule[+L <: BoomRocketTop](l: L) extends boom.system.ExampleBoomAndRocketSystemModule(l)
|
class BoomRocketTopModule[+L <: BoomRocketTop](l: L) extends boom.system.BoomRocketSystemModule(l)
|
||||||
with HasNoDebugModuleImp
|
with HasNoDebugModuleImp
|
||||||
with HasPeripherySerialModuleImp
|
with HasPeripherySerialModuleImp
|
||||||
with DontTouch
|
with DontTouch
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ set -o pipefail
|
|||||||
|
|
||||||
unamestr=$(uname)
|
unamestr=$(uname)
|
||||||
RDIR=$(pwd)
|
RDIR=$(pwd)
|
||||||
: ${REBAR_DIR:=$(pwd)} #default value is the PWD unless overridden
|
: ${CHIPYARD_DIR:=$(pwd)} #default value is the PWD unless overridden
|
||||||
|
|
||||||
if [ $# -ne 0 ]; then
|
if [ $# -ne 0 ]; then
|
||||||
TOOLCHAIN=$1
|
TOOLCHAIN=$1
|
||||||
@@ -26,8 +26,8 @@ RISCV="$(pwd)/$INSTALL_DIR"
|
|||||||
|
|
||||||
# install risc-v tools
|
# install risc-v tools
|
||||||
export RISCV="$RISCV"
|
export RISCV="$RISCV"
|
||||||
git -C $REBAR_DIR submodule update --init --recursive toolchains/$TOOLCHAIN #--jobs 8
|
git -C $CHIPYARD_DIR submodule update --init --recursive toolchains/$TOOLCHAIN #--jobs 8
|
||||||
cd "$REBAR_DIR/toolchains/$TOOLCHAIN"
|
cd "$CHIPYARD_DIR/toolchains/$TOOLCHAIN"
|
||||||
export MAKEFLAGS="-j16"
|
export MAKEFLAGS="-j16"
|
||||||
./build.sh
|
./build.sh
|
||||||
cd $RDIR
|
cd $RDIR
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# run this script in the main rebar directory to generate ctags for all relevant repos
|
# run this script in the main Chipyard directory to generate ctags for all relevant repos
|
||||||
# note: this requires exuberant-ctags
|
# note: this requires exuberant-ctags
|
||||||
# tested with: Exuberant Ctags 5.8
|
# tested with: Exuberant Ctags 5.8
|
||||||
# instructions:
|
# instructions:
|
||||||
# cd /path/to/rebar/
|
# cd /path/to/chipyard/
|
||||||
# ./scripts/gen-tags.sh
|
# ./scripts/gen-tags.sh
|
||||||
#
|
#
|
||||||
# input:
|
# input:
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#########################################################################################
|
#########################################################################################
|
||||||
# verilator version, binary, and path
|
# verilator version, binary, and path
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
VERILATOR_VERSION=4.008
|
VERILATOR_VERSION=4.016
|
||||||
VERILATOR_SRCDIR=verilator/src/verilator-$(VERILATOR_VERSION)
|
VERILATOR_SRCDIR=verilator/src/verilator-$(VERILATOR_VERSION)
|
||||||
INSTALLED_VERILATOR=$(abspath verilator/install/bin/verilator)
|
INSTALLED_VERILATOR=$(abspath verilator/install/bin/verilator)
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ INSTALLED_VERILATOR=$(abspath verilator/install/bin/verilator)
|
|||||||
$(INSTALLED_VERILATOR): $(VERILATOR_SRCDIR)/bin/verilator
|
$(INSTALLED_VERILATOR): $(VERILATOR_SRCDIR)/bin/verilator
|
||||||
$(MAKE) -C $(VERILATOR_SRCDIR) installbin installdata
|
$(MAKE) -C $(VERILATOR_SRCDIR) installbin installdata
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
.PHONY:
|
.PHONY:
|
||||||
verilator_install: $(INSTALLED_VERILATOR)
|
verilator_install: $(INSTALLED_VERILATOR)
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ ifeq ($(SUB_PROJECT),boom)
|
|||||||
CONFIG_PACKAGE ?= boom.system
|
CONFIG_PACKAGE ?= boom.system
|
||||||
GENERATOR_PACKAGE ?= boom.system
|
GENERATOR_PACKAGE ?= boom.system
|
||||||
TB ?= TestDriver
|
TB ?= TestDriver
|
||||||
TOP ?= ExampleBoomAndRocketSystem
|
TOP ?= BoomRocketSystem
|
||||||
endif
|
endif
|
||||||
# for Rocket-chip developers
|
# for Rocket-chip developers
|
||||||
ifeq ($(SUB_PROJECT),rocketchip)
|
ifeq ($(SUB_PROJECT),rocketchip)
|
||||||
@@ -90,9 +90,9 @@ endif
|
|||||||
#########################################################################################
|
#########################################################################################
|
||||||
# path to rocket-chip and testchipip
|
# path to rocket-chip and testchipip
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
ROCKETCHIP_DIR = $(base_dir)/generators/rocket-chip
|
ROCKETCHIP_DIR = $(base_dir)/generators/rocket-chip
|
||||||
TESTCHIP_DIR = $(base_dir)/generators/testchipip
|
TESTCHIP_DIR = $(base_dir)/generators/testchipip
|
||||||
REBAR_FIRRTL_DIR = $(base_dir)/tools/firrtl
|
CHIPYARD_FIRRTL_DIR = $(base_dir)/tools/firrtl
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
# names of various files needed to compile and run things
|
# names of various files needed to compile and run things
|
||||||
|
|||||||
Reference in New Issue
Block a user