Thursday, May 10, 2018

Another Scala Cheatsheet

I recently wrote up a "cheat sheet" for Scala.

You can download a .pdf copy of the file here.

My office is coming together nicely thanks to "decorations" as such.

References (75% “copied” from his material) (see: The Ultimate Scala Option Cheat Sheet)

Tuesday, May 8, 2018

Trying to gain traction

Few updates this time. The company is still in "stealth" mode and trying to gain market traction. The target market is quite small, and that is OK. The original business plan calls for developing partnerships with other businesses.  Unfortunately, one potential opportunity is on hold for reasons outside of my control. I have not spent sufficient time on marketing over the past 4-5 months.  This does not mean going out of "stealth" mode.  I expect it will happen before 2019.  Personal cash flow is not yet an issue.  However, I am slowly beginning to look for suitable (i.e., interesting) short-term contracting opportunities.  The timing of the search is arguably premature but I do not have a good sense of what the market for shorter-term contract work is like.  Therefore, some caution is necessary.

I have been updating my gist repository on GitHub several times per week. Check it out here.

Tuesday, April 10, 2018

Using IntelliJ as RocketChip IDE

• Checkout the code according to instructions here.

$ git clone
$ cd rocket-chip
$ git submodule update --init
$ export ROCKET_CHIP=`realpath ./rocket-chip`

• Build and publish FIRRTL, as usual:

$ cd $ROCKET_CHIP/firrtl
$ sbt clean publishLocal

• Verify that Rocket Chip can be compiled outside of IDE:

$ sbt clean publishLocal

• Wipe existing IDE configuration .idea, if necessary:

$ rm -rf $ROCKET_CHIP/.idea

• Import project into IntelliJ

Navigate to build.sbt, select default settings.

• (Optional) Attempt to compile using sbt, within IntelliJ:

• Rebuild project using IntelliJ

• Now for the secret sauce, write your generator object:

Start with running freechips.rocketchip.groundtest.Generator.

It will fail.  That is good.

Exception in thread "main" java.lang.IllegalArgumentException: requirement failed: Usage: sbt> run TargetDir TopModuleProjectName TopModuleName ConfigProjectName ConfigNameString
at scala.Predef$.require(Predef.scala:224)
at freechips.rocketchip.util.GeneratorApp$class.names(GeneratorUtils.scala:76)
at freechips.rocketchip.groundtest.Generator$.names$lzycompute(Generator.scala:7)
at freechips.rocketchip.groundtest.Generator$.names(Generator.scala:7)
at freechips.rocketchip.groundtest.Generator$.delayedEndpoint$freechips$rocketchip$groundtest$Generator$1(Generator.scala:8)
at freechips.rocketchip.groundtest.Generator$delayedInit$body.apply(Generator.scala:7)

Fixing this is left as an exercise to the reader, but I will provide this simple (and, oh so powerful, tip).

Right click on 'GeneratorApp' from line 'object Generator extends App' and click 'Go To'.  This will bring you the definition of the GeneratorApp trait.

So, why not add a breakpoint and debug yourself?  The process is outside of the scope of this post.

• Tips for advanced users:

I typically do not do work inside the rocket-chip repo.  Similar to the firrtl publishLocal step, I do a publishLocal of rocketchip and import the jar into my project.  My generator function is highly customized.

See the following for more information:

Sunday, March 4, 2018

Super! Busy!

I am always working.  It is a good thing and a bad thing.

It took me a long time, but I officially made the Red Hat to Ubuntu switch.  I have been a Red Hat/Fedora user since version 6 (nope, not RHEL 6).  That is nearly twenty years.  Why?  It is nothing against Red Hat.  Ubuntu simply has a stronger community.

Sunday, January 21, 2018

Publishing my gists (i.e., ramp up notes)

Detailed notes are important when ramping on new technologies.  I recently decided to publish these notes at: