diff --git a/README.md b/README.md index 6c0f7432..f784d648 100644 --- a/README.md +++ b/README.md @@ -166,67 +166,45 @@ to stress-test both the core and uncore portions of the design. In addition to submodules, which are tracked as different git repositories, the rocket-chip Chisel code base is factored into a number of Scala packages. -Here is a brief description -of what can be found in each package: +Here is a brief description of what can be found in each package: * **rocket** -([https://github.com/ucb-bar/rocket](https://github.com/ucb-bar/rocket)): -The rocket repository holds the actual source code of the Rocket core. +The rocket package holds the actual source code of the Rocket core. Note that the L1 blocking I$ and the L1 non-blocking D$ are considered part of the core, and hence we keep the L1 cache source code in this repository. This repository is not meant to stand alone; it needs to be included in a chip repository (e.g. rocket-chip) that instantiates the core within a memory system and connects it to the outside world. * **uncore** -([https://github.com/ucb-bar/uncore](https://github.com/ucb-bar/uncore)): -This repository implements the uncore logic, such as the coherence hub +This package implements the uncore logic, such as the L2 coherence hub (the agent that keeps multiple L1 D$ coherent). The definition of the coherent interfaces between tiles ("tilelink") and the debug interface also live in this repository. * **junctions** -([https://github.com/ucb-bar/junctions](https://github.com/ucb-bar/junctions)): -This repository contains code and +This package contains code and converters for various bus protocols and interfaces. * **groundtest** -([https://github.com/ucb-bar/groundtest](https://github.com/ucb-bar/groundtest)): -This repository contains code which can test the uncore by generating randomized +This package contains code which can test the uncore by generating randomized instruction streams. It replaces the rocket processor with an instruction stream generator to stress-test the uncore portions of the design. +* **coreplex** +This package pieces together the parts of a working coreplex, including +the rocket tiles, L1-to-L2 network, L2 coherence agents, and internal devices +like the debug unit and boot ROM. +* **rocketchip** +The top-level package instantiates the coreplex and drops in any +external-facing devices. It also includes clock-crossers and converters +from TileLink to external bus protocols (like AXI or AHB). ### The Top Level Module -Next, take a look at rocket-chip's src/main/scala directory. +Take a look at the src/main/scala/rocketchip directory. This directory has the Chisel source files including the top level -RocketChip.scala, which -instantiates both a Rocket core and the uncore logic, and then glues -them together. Here's a brief overview of source files found in the -rocket-chip repository: - -* **RocketChip.scala**: Top-level source file (Top is the top-level -module name), which instantiates a Rocket core, uncore logic, and glues -them together. -* **Network.scala**: This source file holds the crossbar network used in -the uncore for multi-core implementations. -* **Configs.scala**: This holds all the rocket-chip parameters. -Probably this file is the most important file for external users. We -will revisit this topic in the next section "How should I use the Rocket -chip generator?", and will also post a more detailed explanation of the -parameter infrastructure in the near future. -* **Backends.scala**: An example of how the Chisel compiler's VLSI -backend can be extended to route a pin named "init" to all SRAM blocks -used in the design. This separation cleans up the source RTL of the -design, since we don't need to add all the vendor-specific stuff in the -Chisel source code, yet still can correctly hook up our particular -SRAMs. The transformation is just a "compiler pass" in the Chisel -backend that happens as the compiler translates the Chisel source code -down to Verilog. Pretty neat huh? -* **Vlsi.scala**: This file is pretty specific to our tapeouts. It -implements logic to interface with an arbitrary number of slow -single-ended digital I/Os when implementing a test chip. +RocketChip.scala. Take a look at the top-level I/O pins. Open up -src/main/scala/RocketChip.scala, and search for TopIO. You will read the -following: +src/main/scala/rocketchip/RocketChip.scala, and search for TopIO. +You will read the following: /** Top-level io for the chip */ class BasicTopIO(implicit val p: Parameters) extends ParameterizedBundle()(p) @@ -260,13 +238,6 @@ configuration of the design, these may be visible as AXI or AHB. * **Interrupts interface (interrupts)**: This interface is used to deliver external interrupts to the processor core. -Of course, there's a lot more in the submodules, but -this should be enough to get you started with the Rocket chip -generator. We will keep documenting more about our designs in the -respective README of each submodules, release notes, and even blog -posts. In the mean time, please post questions to the hw-dev mailing -list. - ## How should I use the Rocket chip generator? Chisel can generate code for three targets: a high-performance