All Projects → freechipsproject → Chisel Bootcamp

freechipsproject / Chisel Bootcamp

Licence: apache-2.0
Generator Bootcamp Material: Learn Chisel the Right Way

Projects that are alternatives of or similar to Chisel Bootcamp

Colabcat
😺 Running Hashcat on Google Colab with session backup and restore.
Stars: ✭ 407 (-1.45%)
Mutual labels:  jupyter-notebook
Stat479 Deep Learning Ss19
Course material for STAT 479: Deep Learning (SS 2019) at University Wisconsin-Madison
Stars: ✭ 412 (-0.24%)
Mutual labels:  jupyter-notebook
Neural Style Audio Tf
TensorFlow implementation for audio neural style.
Stars: ✭ 413 (+0%)
Mutual labels:  jupyter-notebook
Jupyters and slides
Stars: ✭ 409 (-0.97%)
Mutual labels:  jupyter-notebook
Tsai
Time series Timeseries Deep Learning Pytorch fastai - State-of-the-art Deep Learning with Time Series and Sequences in Pytorch / fastai
Stars: ✭ 407 (-1.45%)
Mutual labels:  jupyter-notebook
Pytorch Original Transformer
My implementation of the original transformer model (Vaswani et al.). I've additionally included the playground.py file for visualizing otherwise seemingly hard concepts. Currently included IWSLT pretrained models.
Stars: ✭ 411 (-0.48%)
Mutual labels:  jupyter-notebook
Your first decentralized application
This is the code for "A Guide to Building Your First Decentralized Application" by Siraj Raval on Youtube
Stars: ✭ 408 (-1.21%)
Mutual labels:  jupyter-notebook
Qiskit Textbook
A university quantum algorithms/computation course supplement based on Qiskit
Stars: ✭ 404 (-2.18%)
Mutual labels:  jupyter-notebook
Pycon 2019 Tutorial
Data Science Best Practices with pandas
Stars: ✭ 410 (-0.73%)
Mutual labels:  jupyter-notebook
Handwriting Ocr
OCR software for recognition of handwritten text
Stars: ✭ 411 (-0.48%)
Mutual labels:  jupyter-notebook
Tensorflow Multigpu Vae Gan
A single jupyter notebook multi gpu VAE-GAN example with latent space algebra and receptive field visualizations.
Stars: ✭ 409 (-0.97%)
Mutual labels:  jupyter-notebook
Python Essentials
Stars: ✭ 411 (-0.48%)
Mutual labels:  jupyter-notebook
Self Driving Cars
Coursera Open Courses from University of Toronto
Stars: ✭ 412 (-0.24%)
Mutual labels:  jupyter-notebook
Imagenette
A smaller subset of 10 easily classified classes from Imagenet, and a little more French
Stars: ✭ 407 (-1.45%)
Mutual labels:  jupyter-notebook
Agile data code 2
Code for Agile Data Science 2.0, O'Reilly 2017, Second Edition
Stars: ✭ 413 (+0%)
Mutual labels:  jupyter-notebook
Rrpn
Source code of RRPN ---- Arbitrary-Oriented Scene Text Detection via Rotation Proposals
Stars: ✭ 408 (-1.21%)
Mutual labels:  jupyter-notebook
Spark Syntax
This is a repo documenting the best practices in PySpark.
Stars: ✭ 412 (-0.24%)
Mutual labels:  jupyter-notebook
Vegans
A library providing various existing GANs in PyTorch.
Stars: ✭ 414 (+0.24%)
Mutual labels:  jupyter-notebook
Datasciencestudynotes
这个仓库保管从(数据科学学习手札69)开始的所有代码、数据等相关附件内容
Stars: ✭ 412 (-0.24%)
Mutual labels:  jupyter-notebook
Enterprise gateway
A lightweight, multi-tenant, scalable and secure gateway that enables Jupyter Notebooks to share resources across distributed clusters such as Apache Spark, Kubernetes and others.
Stars: ✭ 412 (-0.24%)
Mutual labels:  jupyter-notebook

Binder

For previous users of the bootcamp, we have upgraded from Scala 2.11 to Scala 2.12. If you are encountering errors, please follow the installation instructions to upgrade to 2.12.

Chisel Bootcamp

Elevate the level of your hardware design from instances to generators! This bootcamp teaches you Chisel, a Berkeley hardware construction DSL written in Scala. It teaches you Scala along the way, and it frames the learning of Chisel on the idea of hardware generators.

What you'll learn

  • Why hardware designs are better expressed as generators, not instances
  • Basics and some advanced features of Scala, a modern programming language
  • Basics and some advanced features of Chisel, a hardware description language embedded in Scala
  • How to write unit tests for Chisel designs
  • Basic introduction to some useful features in Chisel libraries, including dsptools and rocketchip.

Prerequisites

  • Familiarity with Verilog, VHDL, or at least some digital hardware design
  • Programming experience in with a "high-level" language, be it in Python, Java, C++, etc.
  • An earnest desire to learn

Getting Started

Try it out HERE! No local installation required!

If you want to try it out locally, look at installation instructions here.

Outline

The bootcamp is divided into modules, which are further subdivided. This README serves as Module 0, an introduction and motivation to learning the material contained within. Module 1 gives a quick introduction to Scala. It teaches you enough to start writing Chisel, but many more Scala concepts are taught along the way. Chisel is introduced in Module 2, starting with a hardware example and breaking it down. The rest of Module 2 covers combinational and sequential logic, as well as software and hardware control flow. Module 3 teaches you how to write hardware generators in Chisel that take advantage of Scala's high-level programming language features. By the end, you will be able to read and understand most of the Chisel code base and begin using Rocket Chip. This tutorial does not yet cover SBT, build systems, backend flows for FPGA or ASIC processes, or analog circuits.

Motivation

All hardware description languages support writing single instances. However, writing instances is tedious. Why make the same mistakes writing a slightly modified version of something somebody else has likely already designed? Verilog supports limited parameterization, such as bitwidths and generate statements, but this only gets you so far. If we can't write a Verilog generator, we need to write a new instance, thus doubling our code size. As a better option, we should write one program that generates both hardware instances, which would reduce our code size and make tedious things easier. These programs are called generators.

Ideally, we want our generators to be (1) composable, (2) powerful, and (3) enable fine-grained control over the generated design. Error checking is necessary to make sure a composition is legal; without it, debugging is difficult. This requires a generator language to understand the semantics of the design (to know what’s legal and what’s not). Also, the generator should not be overly verbose! We want the generator program to concisely express many different designs, without rewriting it in if statements for each instance. Finally, it should be a zero-cost abstraction. Hardware design performance is very sensitive to small changes, and because of that, you need to be able to exactly specify the microarchitecture. Generators are very different than high-level-synthesis (HLS).

The benefits of Chisel are in how you use it, not in the language itself. If you decide to write instances instead of generators, you will see fewer advantages of Chisel over Verilog. But if you take the time to learn how to write generators, then the power of Chisel will become apparent and you will realize you can never go back to writing Verilog. Learning to write generators is difficult, but we hope this tutorial will pave the way for you to become a better hardware designer, programmer, and thinker!

FAQ

Kernel Crashes Upon Startup

I get the following error upon launching a Scala notebook and Jupyter says that the kernel has crashed:

Exception in thread "main" java.lang.RuntimeException: java.lang.NullPointerException
	at jupyter.kernel.server.ServerApp$.apply(ServerApp.scala:174)
	at jupyter.scala.JupyterScalaApp.delayedEndpoint$jupyter$scala$JupyterScalaApp$1(JupyterScala.scala:93)
	at jupyter.scala.JupyterScalaApp$delayedInit$body.apply(JupyterScala.scala:13)
  ...

Caused by: java.lang.NullPointerException
	at ammonite.runtime.Classpath$.classpath(Classpath.scala:31)
	at ammonite.interp.Interpreter.init(Interpreter.scala:93)
	at ammonite.interp.Interpreter.processModule(Interpreter.scala:409)
	at ammonite.interp.Interpreter$$anonfun$10.apply(Interpreter.scala:151)
	at ammonite.interp.Interpreter$$anonfun$10.apply(Interpreter.scala:148)
  ...

Make sure that you have Java 8 selected for running Jupyter (see the instructions above).

Contributors

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].