diff options
| author | ducky | 2015-09-23 18:51:33 -0700 |
|---|---|---|
| committer | ducky | 2015-09-23 19:00:00 -0700 |
| commit | 987a3cc8a09dcffe2d7fbcc2d42d9824722fec8a (patch) | |
| tree | 82b4d5ed5dee040758f1944664abbf108625385e /README.md | |
| parent | 0a022b53f5bf40b0c2b1fbcf1fbc8eaabd3cd7c5 (diff) | |
Eliminate outdated parts of readme, add skeleton for new format
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 110 |
1 files changed, 57 insertions, 53 deletions
@@ -1,64 +1,68 @@ # Chisel3 -chisel3 is a new FIRRTL based chisel - -the current backward incompatiabilities with chisel 2.x are: - -```scala -val wire = Bits(width = 15) -``` -is - -```scala -val wire = Wire(Bits(width = 15)) -``` - -## Chisel3 Infrastructure. - -Chisel3 is much more modular than Chisel2. What was once provided by a -monolithic Scala program, is provided by separate components. - -Currently, those components are: - - Chisel3 (Scala) - - firrtl (Stanza) - -and for the C++ simulator - - flo-llvm (C++) - - clang - -firrtl can generate Verilog output directly, so fewer components are -required for Verilog testing. - -### Stanza +Chisel3 is a new FIRRTL based chisel + +*TODO: A better description, perhaps lifted off Chisel2's README* + +## Chisel2 Migration +For those moving from Chisel2, there were some backwards incompatible changes +and your RTL needs to be modified to work with Chisel3. The required +modifications are: + + - Wire declaration style: + ``` + val wire = Bits(width = 15) + ``` + becomes (in Chisel3): + ``` + val wire = Wire(Bits(width = 15)) + ``` + +## Getting Started + +### Overview +Chisel3 is much more modular than Chisel2, and the compilation pipeline looks +like: + - Chisel3 (Scala) to FIRRTL (this is your "Chisel RTL") + - FIRRTL to Verilog (which then be passed into FPGA or ASIC tools) + - Optionally, Verilog to C++ (for simulation and testing) + +#### Stanza In order to build firrtl, you need a (currently patched) copy of Stanza. (We should add this to the firrtl repo in utils/bin.) -### firrtl -We assume that copies (or links to) firrtl are in -chisel3/bin. flo-llvm and clang should be found in your $PATH. +### Hello, World + +*TODO: quick "Hello, World" tutorial* -Follow the instructions on the firrtl repo for building firrtl and put -the resulting binary (utils/bin/firrtl) in chisel3/bin. +## For Developers -### flo-llvm -flo-llvm is Palmer's flo to (.o,.v) converter. It's hosted at: - https://github.com/ucb-bar/flo -and - https://github.com/palmer-dabbelt/flo-llvm +### Environment Setup +*TODO: tools needed* -Installation instructions can be found at: - https://wiki.eecs.berkeley.edu/dreamer/Main/DistroSetup +*TODO: running Scala unit tests locally* -### clang -clang is available for Linux and Mac OS X and usually comes installed -with development tools. You need to ensure that the version you're -using is compatible with flo-llvm (currently, clang/llvm 3.6). There -are instructions on the web for managing multiple versions of -clang/llvm. +*TODO: running circuit regression tests locally* -Once you have all the components in place, build and publish Chisel3: +### Chisel3 Architecture Overview -```shell -% cd chisel3 -% sbt clean publish-local -``` +The Chisel3 compiler consists of these main parts: + - **The frontend**, which is the publicly visible "API" of Chisel and what is + used in Chisel RTL. All these do is build... + *TODO: filenames (or package names, once the split is complete* + - **The intermediate data structures**, which is syntactically very similar + to FIRRTL. Once the entire circuit has been elaborated, the top-level object + (a `Circuit`) is then passed to... + *TODO: filenames (or package names, once the split is complete* + - **The FIRRTL emitter**, which turns the intermediate data structures into + a string that can be written out into a FIRRTL file for further processing. + *TODO: filenames (or package names, once the split is complete* + +Also included is: + - **The standard library** of circuit generators, currently Utils.scala. These + contain commonly used interfaces and constructors (like `Decoupled`, which + wraps a signal with a ready-valid pair) as well as fully parameterizable + circuit generators (like arbiters and muxes). + *TODO: update once standard library gets properly broken you* + - *TODO: add details on the testing framework* + - *TODO: add details on simulators* |
