Finished Custom Core Docs

This commit is contained in:
Zitao Fang
2020-06-28 21:26:50 -07:00
parent 42f93ff32d
commit 7b5f474b04
4 changed files with 15 additions and 16 deletions

View File

@@ -4,7 +4,7 @@ Adding a custom core
==================== ====================
You may want to add a custom RISC-V core to Chipyard generator. If the top module of your core is not in Chisel, You may want to add a custom RISC-V core to Chipyard generator. If the top module of your core is not in Chisel,
you will first need to create a Verilog blackbox for it. See ::ref:`_incorporating-verilog-blocks` for instructions. you will first need to create a Verilog blackbox for it. See :ref:`incorporating-verilog-blocks` for instructions.
Once you have a top module in Chisel, you are ready to create integrate it with Chipyard. Once you have a top module in Chisel, you are ready to create integrate it with Chipyard.
.. note:: .. note::
@@ -184,7 +184,7 @@ in the tile class. Below is an example of how to connect a core using AXI4 to th
:= AXI4Fragmenter() // deal with multi-beat xacts := AXI4Fragmenter() // deal with multi-beat xacts
:= memAXI4Node) // The custom node, see below := memAXI4Node) // The custom node, see below
Remember, you may not need all of these intermediate widgets. See :::ref:`Diplomatic-Widgets` for the meaning of each intermediate Remember, you may not need all of these intermediate widgets. See :ref:`diplomatic_widgets` for the meaning of each intermediate
widget. If you are using TileLink, then you only need the tap node and the TileLink node used by your components. Also, Chipyard widget. If you are using TileLink, then you only need the tap node and the TileLink node used by your components. Also, Chipyard
support AHB, APB and AXIS, and most of the AXI4 widgets has equivalent widget for these bus protocol. See the reference page for support AHB, APB and AXIS, and most of the AXI4 widgets has equivalent widget for these bus protocol. See the reference page for
more info. more info.
@@ -200,7 +200,7 @@ more info.
id = IdRange(0, 1 << idBits)))))) id = IdRange(0, 1 << idBits))))))
where ``portName`` and ``idBits`` (number of bits to represent a port ID) are the parameter provides by the tile. where ``portName`` and ``idBits`` (number of bits to represent a port ID) are the parameter provides by the tile.
Make sure to read :::ref:`node-tyoes` to check out what type of nodes Chipyard supports and their parameters! Make sure to read :ref:`node_types` to check out what type of nodes Chipyard supports and their parameters!
Also, by default, there are boundary buffers for both master and slave connections to the bus when they are leaving the tile, and you Also, by default, there are boundary buffers for both master and slave connections to the bus when they are leaving the tile, and you
can override the following two functions to control how to buffer the bus requests/responses: can override the following two functions to control how to buffer the bus requests/responses:
@@ -210,7 +210,7 @@ can override the following two functions to control how to buffer the bus reques
protected def makeMasterBoundaryBuffers(implicit p: Parameters): TLBuffer protected def makeMasterBoundaryBuffers(implicit p: Parameters): TLBuffer
protected def makeSlaveBoundaryBuffers(implicit p: Parameters): TLBuffer protected def makeSlaveBoundaryBuffers(implicit p: Parameters): TLBuffer
You can find more information on ``TLBuffer`` in :::ref:`Diplomatic-Widgets`. You can find more information on ``TLBuffer`` in :ref:`diplomatic_widgets`.
Interrupt Interrupt
--------- ---------
@@ -313,20 +313,14 @@ the current config. An example of such config will be like this:
.. code-block:: scala .. code-block:: scala
class WithNMyCores(n: Int) extends Config( class WithNMyCores(n: Int) extends Config((site, here, up) => {
new RegisterCore(new CoreEntry[MyTileParams, MyTile]("MyCore", MyTilesKey, MyCrossingKey)) ++ case MyTilesKey => {
new Config((site, here, up) => { List.tabulate(n)(i => MyTileParams(hartId = i))
case MyTilesKey => { }
List.tabulate(n)(i => MyTileParams(hartId = i)) })
}
})
)
Where ``RegisterCore`` will register the core with chipyard so that it can be recognized by generic config. This is required for
all custom cores. You can also create other config fragments to change other parameters.
Now you have finished all the steps to prepare your cores for Chipyard! To generate the custom core, simply follow the instructions Now you have finished all the steps to prepare your cores for Chipyard! To generate the custom core, simply follow the instructions
in :::ref:`_custom_chisel` to add your project to the build system, then create a config by following the steps in :::ref:`_hetero_socs_`. in :ref:`custom_chisel` to add your project to the build system, then create a config by following the steps in :ref:`hetero_socs_`.
You can now run any desired workflow for the new config just as you do for the built-in cores. You can now run any desired workflow for the new config just as you do for the built-in cores.
Appendix: Common Config Keys Appendix: Common Config Keys

View File

@@ -37,6 +37,7 @@ We recommend reading all these pages in order. Hit next to get started!
Heterogeneous-SoCs Heterogeneous-SoCs
Custom-Chisel Custom-Chisel
Custom-Core
RoCC-or-MMIO RoCC-or-MMIO
RoCC-Accelerators RoCC-Accelerators
MMIO-Peripherals MMIO-Peripherals

View File

@@ -1,3 +1,5 @@
.. _node_types:
TileLink Node Types TileLink Node Types
=================== ===================

View File

@@ -1,3 +1,5 @@
.. _diplomatic_widgets:
Diplomatic Widgets Diplomatic Widgets
================== ==================