Getting Started With Bluespec

Posted on Oct 7, 2022

Disclaimer

I should also tell you up front is that there is a REAL learning curve to get comfortable with Bluespec. But good languages such as Rust, Scala, and Haskell often come with a price tag to correctly wield their true powers.

First Steps

If you're wondering why it may be worth your while to learn Bluespec, I'd suggest reading through Bluespec. The Rust of Hardware Design?.

I'd also watch Nikhil's video where he demos Bluespec at the CIRCT weekly meetup(email me if that link doesn't work: yimmanuel3@gatech.edu)

Typically, when getting started with a new language, you should first grab it's compiler right? You can find bsc sources here and use these instructions if you need to build it from source. But before even delving into BSC, I would actually start by learning a little bit of Haskell. You could learn Bluespec without learning Haskell of course, but good bit of the syntax and design decisions may be completely lost on you. Personally, I like to understand why the tools I use do what they do.

Learning Haskell

I learned Haskell(at least enough of it to learn Bluespec) by using the online edition of Real World Haskell. I'd suggest at least working through all the exercises, at least up until chapter 3.

I'd then suggest learning what a Monad is. This may take multiple links and tutorials to really grasp - but it's an important concept as hardware in Bluespec is collected using Monads. Also, return in Bluespec injects logic into a container, and <- simply aliases a the result of a monadic computation to a name.

Lastly, I'd suggest going through Write Yourself a Scheme in 48 Hours. This should really solidify your Haskell education. I never finished writing a scheme in Haskell - mainly because I began it on vacation, and then life happened - but it shouldn't be difficult to finish.

Learning Bluespec Haskell

I'd then read through these slides, don't try to understand everything, but rather get familiar with the syntax.

I'd then suggest learning Bluespec Haskell - I find Bluespec Verilog syntax cumbersome.

You can use Nikhil's tutorial from ICFP 2020 to help you get started with Bluespec Haskell.

Once you've started to get into that BH tutorial, you can cross-reference against the equivalent code from Nikhil's BSV tutorial.

Finally, you may find the following resources helpful along the way:

Resources

  1. BluespecTM SystemVerilog Reference Guide
  2. BSV by Example
  3. Bluespec SystemVerilog and Bluespec Development Workstation User Guide