Giter VIP home page Giter VIP logo

chisel-bootcamp's People

Contributors

azidar avatar azureskyresearch avatar chick avatar diningyo avatar dkravitz-sifive avatar ducky64 avatar edwardcwang avatar england2233 avatar eymay avatar grebe avatar imeshbalasuriya avatar jackkoenig avatar jl102 avatar jyhi avatar lizhirui avatar martoni avatar nelewb avatar pranith avatar ptorru avatar rachelzoll avatar schoeberl avatar seldridge avatar sequencer avatar sgandham2 avatar shunshou avatar sterin avatar stevobailey avatar ucbjrl avatar vidhatre avatar wunderabt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chisel-bootcamp's Issues

Binder: Could not find a kernel matching Scala

Lately I've been seeing this error when using the bootcamp on binder with the error: "Could not find a kernel matching Scala. Please select a kernel" with the only option being "Python 3". Did binder change its kernel options/settings recently?

2.5 Classpath and Parametization type issue

I'm running a local installation (following the README instructions) of the bootcamp on Windows 10 Education, and on 2.5 I run into one of two issues: Either "chisel3.package.experimental" is missing from the CLASSPATH (resolves itself by just re-running all, though sometimes re-running causes it to appear) or

"cmd21.sc:14: type arguments [D,U,EO,EI,B] do not conform to trait DspBlock's type parameter bounds [D,U,EO,EI,B <: chisel3.Data]
extends DspBlock[D, U, EO, EI, B] with HasCSR {
^Compilation Failed"

I've replaced any (potential and accidental) changes to the DspBlock section of the code with the LKG on github, and running non-local installation of the bootcamp works, but I'm not sure what I need/should change to get this cell block running locally.

jupyter notebook added below

https://drive.google.com/open?id=1bBESGHNUIccYjCY2n5YXwebw_0rQkTP0

java.lang.AssertionError in 3.4 Example: FIR Filter Tester

In section 3.4, MyFir test codes doesn't work due to java.lang.AssertionError. The entire error message is attached below.

java.lang.AssertionError: assertion failed: 
  List(method apply$mcI$sp, method apply$mcI$sp)
     while compiling: cmd12.sc
        during phase: globalPhase=specialize, enteringPhase=explicitouter
     library version: version 2.12.10
    compiler version: version 2.12.10
  reconstructed args: -nowarn -Xsource:2.11.12 -Yresolve-term-conflict:object

  last tree to typer: Select(Apply(method until), foreach$mVc$sp)
       tree position: line 37 of cmd12.sc
            tree tpe: (f: Int => Unit)Unit
              symbol: (final override) method foreach$mVc$sp in class Range
   symbol definition: final override def foreach$mVc$sp(f: Int => Unit): Unit (a MethodSymbol)
      symbol package: scala.collection.immutable
       symbol owners: method foreach$mVc$sp -> class Range
           call site: method $anonfun$new in package $sess

== Source file context for tree position ==

    34 
    35     // push data through our FIR and check the result
    36     reset(5)
    37     for (i <- 0 until n) {
    38       poke(c.io.in, sine(i))
    39       if (i >= length-1) { // wait for all registers to be initialized since we didn't zero-pad the data
    40         expect(c.io.out, expected(i-length+1))
  scala.reflect.internal.SymbolTable.throwAssertionError(SymbolTable.scala:184)
  scala.reflect.internal.Symbols$Symbol.suchThat(Symbols.scala:2000)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.matchingSymbolInPrefix$1(SpecializeTypes.scala:1559)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transformSelect$1(SpecializeTypes.scala:1582)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1677)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.internal.Trees.itransform(Trees.scala:1385)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformTrees$1(Trees.scala:2567)
  scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2567)
  scala.reflect.internal.Trees.itransform(Trees.scala:1385)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformTrees$1(Trees.scala:2567)
  scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2567)
  scala.reflect.internal.Trees.itransform(Trees.scala:1385)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.internal.Trees.itransform(Trees.scala:1406)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2597)
  scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2595)
  scala.reflect.internal.Trees.itransform(Trees.scala:1404)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.internal.Trees.$anonfun$itransform$2(Trees.scala:1401)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
  scala.reflect.internal.Trees.itransform(Trees.scala:1399)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1786)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2597)
  scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2595)
  scala.reflect.internal.Trees.itransform(Trees.scala:1404)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformTrees$1(Trees.scala:2567)
  scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2567)
  scala.reflect.internal.Trees.itransform(Trees.scala:1385)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformTrees$1(Trees.scala:2567)
  scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2567)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.$anonfun$transform$25(SpecializeTypes.scala:1700)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transformTemplate$1(SpecializeTypes.scala:1700)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1702)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2571)
  scala.reflect.internal.Trees.$anonfun$itransform$4(Trees.scala:1446)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
  scala.reflect.internal.Trees.itransform(Trees.scala:1445)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2597)
  scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2595)
  scala.reflect.internal.Trees.itransform(Trees.scala:1404)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.internal.Trees.$anonfun$itransform$2(Trees.scala:1401)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
  scala.reflect.internal.Trees.itransform(Trees.scala:1399)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1786)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2597)
  scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2595)
  scala.reflect.internal.Trees.itransform(Trees.scala:1404)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformTrees$1(Trees.scala:2567)
  scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2567)
  scala.reflect.internal.Trees.itransform(Trees.scala:1385)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.internal.Trees.$anonfun$itransform$1(Trees.scala:1395)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
  scala.reflect.internal.Trees.itransform(Trees.scala:1394)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformTrees$1(Trees.scala:2567)
  scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2567)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.$anonfun$transform$25(SpecializeTypes.scala:1700)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transformTemplate$1(SpecializeTypes.scala:1700)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1702)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2571)
  scala.reflect.internal.Trees.$anonfun$itransform$4(Trees.scala:1446)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
  scala.reflect.internal.Trees.itransform(Trees.scala:1445)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformTrees$1(Trees.scala:2567)
  scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2567)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.$anonfun$transform$25(SpecializeTypes.scala:1700)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transformTemplate$1(SpecializeTypes.scala:1700)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1702)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2571)
  scala.reflect.internal.Trees.$anonfun$itransform$4(Trees.scala:1446)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:32)
  scala.reflect.internal.Trees.itransform(Trees.scala:1445)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1374)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:28)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2563)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:51)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1806)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2597)
  scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2595)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.$anonfun$transform$21(SpecializeTypes.scala:1683)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1681)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.reflect.api.Trees$Transformer.$anonfun$transformStats$1(Trees.scala:2597)
  scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2595)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.$anonfun$transform$21(SpecializeTypes.scala:1683)
  scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:37)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1681)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transform(SpecializeTypes.scala:1470)
  scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:147)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.super$transformUnit(SpecializeTypes.scala:1475)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.$anonfun$transformUnit$1(SpecializeTypes.scala:1475)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.transformUnit(SpecializeTypes.scala:1475)
  scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:37)
  scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:453)
  scala.tools.nsc.Global$GlobalPhase.run(Global.scala:399)
  scala.tools.nsc.transform.SpecializeTypes$SpecializationPhase.run(SpecializeTypes.scala:208)
  scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1503)
  scala.tools.nsc.Global$Run.compileUnits(Global.scala:1487)
  scala.tools.nsc.Global$Run.compileSources(Global.scala:1480)
  scala.tools.nsc.Global$Run.compileFiles(Global.scala:1588)
  ammonite.interp.Compiler$$anon$1.compile(Compiler.scala:326)
  ammonite.interp.CompilerLifecycleManager.compileClass(CompilerLifecycleManager.scala:146)
  ammonite.interp.Interpreter.$anonfun$evaluateLine$2(Interpreter.scala:285)
  ammonite.util.Catching.flatMap(Res.scala:115)
  ammonite.interp.Interpreter.evaluateLine(Interpreter.scala:281)
  ammonite.interp.Interpreter.$anonfun$processLine$6(Interpreter.scala:268)
  ammonite.util.Res$Success.flatMap(Res.scala:62)
  ammonite.interp.Interpreter.$anonfun$processLine$4(Interpreter.scala:252)
  ammonite.util.Res$Success.flatMap(Res.scala:62)
  ammonite.interp.Interpreter.$anonfun$processLine$2(Interpreter.scala:245)
  ammonite.util.Catching.flatMap(Res.scala:115)
  ammonite.interp.Interpreter.processLine(Interpreter.scala:244)
  almond.Execute.$anonfun$ammResult$9(Execute.scala:227)
  almond.internals.CaptureImpl.$anonfun$apply$2(CaptureImpl.scala:53)
  scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
  scala.Console$.withErr(Console.scala:196)
  almond.internals.CaptureImpl.$anonfun$apply$1(CaptureImpl.scala:45)
  scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
  scala.Console$.withOut(Console.scala:167)
  almond.internals.CaptureImpl.apply(CaptureImpl.scala:45)
  almond.Execute.capturingOutput(Execute.scala:165)
  almond.Execute.$anonfun$ammResult$8(Execute.scala:223)
  almond.Execute.$anonfun$withClientStdin$1(Execute.scala:145)
  scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
  scala.Console$.withIn(Console.scala:230)
  almond.Execute.withClientStdin(Execute.scala:141)
  almond.Execute.$anonfun$ammResult$7(Execute.scala:223)
  almond.Execute.withInputManager(Execute.scala:133)
  almond.Execute.$anonfun$ammResult$6(Execute.scala:222)
  ammonite.repl.Signaller.apply(Signaller.scala:28)
  almond.Execute.interruptible(Execute.scala:182)
  almond.Execute.$anonfun$ammResult$5(Execute.scala:221)
  ammonite.util.Res$Success.flatMap(Res.scala:62)
  almond.Execute.$anonfun$ammResult$1(Execute.scala:212)
  almond.Execute.withOutputHandler(Execute.scala:156)
  almond.Execute.ammResult(Execute.scala:212)
  almond.Execute.apply(Execute.scala:296)
  almond.ScalaInterpreter.execute(ScalaInterpreter.scala:120)
  almond.interpreter.InterpreterToIOInterpreter.$anonfun$execute$2(InterpreterToIOInterpreter.scala:69)
  cats.effect.internals.IORunLoop$.cats$effect$internals$IORunLoop$$loop(IORunLoop.scala:87)
  cats.effect.internals.IORunLoop$RestartCallback.signal(IORunLoop.scala:355)
  cats.effect.internals.IORunLoop$RestartCallback.apply(IORunLoop.scala:376)
  cats.effect.internals.IORunLoop$RestartCallback.apply(IORunLoop.scala:316)
  cats.effect.internals.IOShift$Tick.run(IOShift.scala:36)
  java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  java.lang.Thread.run(Thread.java:748)

2.3 control flow . cell 8 . the exercise of Polynomial Circuit

the program of generating the circuit didn't work even if I brought in correct solution into "???". and the error info is:

cmd8.sc:29: overloaded method value expect with alternatives:
(signal: chisel3.Bundle,expected: Map[String,BigInt])Boolean
(signal: chisel3.core.Aggregate,expected: IndexedSeq[BigInt])Boolean
(signal: chisel3.Bits,expected: BigInt,msg: => String)Boolean
(good: Boolean,msg: => String)Boolean
cannot be applied to (chisel3.core.SInt, AnyVal)
expect(c.io.fOfX, poly(select, x))
^
Compilation Failed

java.io.IOException: Cannot run program "dot": error=2, No such file or directory

0_demo.ipynb
// same 3-point moving average filter as before
visualize(() => new FirFilter(8, Seq(1.U, 1.U, 1.U)))
[info] [0.000] Elaborating design...
[info] [0.071] Done elaborating.
Total FIRRTL Compile Time: 159.2 ms

java.io.IOException: Cannot run program "dot": error=2, No such file or directory
java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
scala.sys.process.ProcessBuilderImpl$Simple.run(ProcessBuilderImpl.scala:75)
scala.sys.process.ProcessBuilderImpl$AbstractBuilder.run(ProcessBuilderImpl.scala:104)
scala.sys.process.ProcessBuilderImpl$AbstractBuilder.run(ProcessBuilderImpl.scala:103)
dotvisualizer.FirrtlDiagrammer$.render(FirrtlDiagrammer.scala:93)
dotvisualizer.transforms.ModuleLevelDiagrammer.execute(ModuleLevelDiagrammer.scala:184)
dotvisualizer.transforms.MakeDiagramGroup.execute(MakeDiagramGroup.scala:48)
ammonite.$file.dummy.source.load$minusivy_2$Helper.generateVisualizations(Main.sc:155)
ammonite.$file.dummy.source.load$minusivy_2$Helper.visualize(Main.sc:173)
ammonite.$sess.cmd5$Helper.(cmd5.sc:1)
ammonite.$sess.cmd5$.(cmd5.sc:7)
ammonite.$sess.cmd5$.(cmd5.sc:-1)
java.io.IOException: error=2, No such file or directory
java.lang.UNIXProcess.forkAndExec(Native Method)
java.lang.UNIXProcess.(UNIXProcess.java:247)
java.lang.ProcessImpl.start(ProcessImpl.java:134)
java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
scala.sys.process.ProcessBuilderImpl$Simple.run(ProcessBuilderImpl.scala:75)
scala.sys.process.ProcessBuilderImpl$AbstractBuilder.run(ProcessBuilderImpl.scala:104)
scala.sys.process.ProcessBuilderImpl$AbstractBuilder.run(ProcessBuilderImpl.scala:103)
dotvisualizer.FirrtlDiagrammer$.render(FirrtlDiagrammer.scala:93)
dotvisualizer.transforms.ModuleLevelDiagrammer.execute(ModuleLevelDiagrammer.scala:184)
dotvisualizer.transforms.MakeDiagramGroup.execute(MakeDiagramGroup.scala:48)
ammonite.$file.dummy.source.load$minusivy_2$Helper.generateVisualizations(Main.sc:155)
ammonite.$file.dummy.source.load$minusivy_2$Helper.visualize(Main.sc:173)
ammonite.$sess.cmd5$Helper.(cmd5.sc:1)
ammonite.$sess.cmd5$.(cmd5.sc:7)
ammonite.$sess.cmd5$.(cmd5.sc:-1)

tester2 Jupyter Notebook test output

I've noticed that when all the test cases pass, the notebook outputs

test xxx Success: 0 tests passed in xxx cycles in xxx seconds xxx Hz

While the same message appears even if a test fails, though now accompanied with an exception getting thrown. I'm not sure if this behavior is intended, but I think a successful run should display # of tests passed (alternatively, 0 tests failed), with test failure displaying number of failures.

2.1_first_module.ipynb: Module name

Note that the Name of our module is cmd<#>WrapperHelperPassthrough, which is an artifact of running this tutorial in Jupyter. In your normal code, its name should just be Passthrough. This is an important lesson though - although Chisel does its best to preserve the names of your modules and other hardware components, sometimes it fails to do so.

I think, this is (luckily) not the case anymore:

Screenshot from 2020-05-20 20-46-05

2.3_control_flow.ipynb: thrid polynomial circuit exercise solution does not work

On page 2.3_control_flow.ipynb, in the thrid polynomial circuit exercise, if I paste in the solution, it does not compile. Below is the message.

cmd2.sc:11: value \* is not a member of chisel3.SInt
    square := io.x \* io.x
                   ^cmd2.sc:13: value \* is not a member of chisel3.SInt
        result := (square - (2.S \* io.x)) + 1.S
                                 ^cmd2.sc:15: value \* is not a member of chisel3.SInt
        result := (2.S \* square) + (6.S \* io.x) + 3.S
                       ^cmd2.sc:15: value \* is not a member of chisel3.SInt
        result := (2.S \* square) + (6.S \* io.x) + 3.S
                                         ^cmd2.sc:17: value \* is not a member of chisel3.SInt
        result := (4.S \* square) - (10.S \* io.x) - 5.S
                       ^cmd2.sc:17: value \* is not a member of chisel3.SInt
        result := (4.S \* square) - (10.S \* io.x) - 5.S
                                          ^cmd2.sc:29: not found: value poly
      expect(c.io.fOfX, poly(select, x))
                        ^Compilation Failed

Update Windows bootcamp instructions

Update for bootcamp attendees 9/6/19:

java -noverify -jar coursier bootstrap -r jitpack -i user -I user:sh.almond:scala-kernel-api_2.12.8:0.6.0 sh.almond:scala-kernel_2.12.8:0.6.0 --sources --default=true -o almond

almond --install

Originally posted by @sagark in #73 (comment)

Parameterized Shift Register Exercise in module 2.4 has incorrect tester

Lines 30 - 40 in the Parameterized SR Exercise

The tester is calling step(1) after checking the output of the SR, therefore checking the output immediately after giving an input without allowing the SR to advance. step(1) should be before expect(c.io.out, state).

The solution given to the exercise is also connecting io.out := nextState, which is incorrect as the SR now has an asynchronous output. This should be io.out := state and will pass with the corrected tester.

2.4_sequential_logic (Exercise: Shift Register) Solution (minor issue)

Really minor point here.

In the exercise description it says,
"Outputs the parallel output of the shift register, with the most significant bit being the last element of the shift register and the least significant bit being the first element of the shift register. Cat may come in handy."

One solution using Cat is:

state := Cat(state, io.in)
io.out := state

the Solution lists:

val nextState = (state << 1) | io.in
state := nextState
io.out := state

Both are valid.

Maybe list both under Solution?

2 4_sequential_logic_exercise

3.6_types: SomeGeneratorParameters class should be redeclared or imported

In Unapply chapter, following code generate an error :

def delay(p: SomeGeneratorParameters): Int = p match {
    case sg @ SomeGeneratorParameters(_, _, true) => sg.totalWidth * 3
    case SomeGeneratorParameters(_, sw, false) => sw * 2
}
println(delay(SomeGeneratorParameters(10, 10)))
println(delay(SomeGeneratorParameters(10, 10, true)))

The error :

cmd2.sc:1: not found: type SomeGeneratorParameters
def delay(p: SomeGeneratorParameters): Int = p match {
             ^cmd2.sc:6: not found: value SomeGeneratorParameters
val res2_1 = println(delay(SomeGeneratorParameters(10, 10)))
                           ^cmd2.sc:7: not found: value SomeGeneratorParameters
val res2_2 = println(delay(SomeGeneratorParameters(10, 10, true)))
                           ^cmd2.sc:2: not found: value SomeGeneratorParameters
    case sg @ SomeGeneratorParameters(_, _, true) => sg.totalWidth * 3
              ^cmd2.sc:3: not found: value SomeGeneratorParameters
    case SomeGeneratorParameters(_, sw, false) => sw * 2
         ^Compilation Failed

To make it working, I had to go to 3.5 lesson and copy paste SomeGeneratorParameters class just before delay() declaration :

case class SomeGeneratorParameters(
    someWidth: Int,
    someOtherWidth: Int = 10,
    pipelineMe: Boolean = false
) {
    require(someWidth >= 0)
    require(someOtherWidth >= 0)
    val totalWidth = someWidth + someOtherWidth
}

def delay(p: SomeGeneratorParameters): Int = p match {
    case sg @ SomeGeneratorParameters(_, _, true) => sg.totalWidth * 3
    case SomeGeneratorParameters(_, sw, false) => sw * 2
}

println(delay(SomeGeneratorParameters(10, 10)))
println(delay(SomeGeneratorParameters(10, 10, true)))

On Online Bootcamp Instance, Cannot Connect to Kernel

When loading a page in the instance of the bootcamp hosted online at: https://mybinder.org/v2/gh/freechipsproject/chisel-bootcamp/master it will spend a significant amount of time (~30 seconds) attempting to connect to the kernel, and then show the error:

"A connection to the notebook server could not be established. The notebook will continue trying to reconnect. Check your network connection or notebook server configuration."

At which point it attempts to restart the kernel and the entire issue repeats. The bootcamp was working until late last week on this exact same machine (using Firefox 73 on Windows 10) and network location, and I have replicated the issue on other people's machines.

Compilation error in cell 12 of 1_intro_to_scala

I'm getting an error trying to run code in the cell number 12 in the notebook:

val randomList = List(util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt())
var listSum = 0
for (value <- randomList) {
  listSum += value
}
println("sum is " + listSum)

error is:
cmd17.sc:1: object Random is not a member of package ammonite.util val randomList = List(util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt()) ^cmd17.sc:1: object Random is not a member of package ammonite.util val randomList = List(util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt()) ^cmd17.sc:1: object Random is not a member of package ammonite.util val randomList = List(util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt()) ^cmd17.sc:1: object Random is not a member of package ammonite.util val randomList = List(util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt(), util.Random.nextInt()) ^Compilation Failed Compilation Failed

According to the Coursier log i should have
https://repo1.maven.org/maven2/com/lihaoyi/ammonite-util_2.11/1.2.1-12-bc459e3/ammonite-util_2.11-1.2.1-12-bc459e3.pom 100,0% [##########] 1,9 KiB (11,0 KiB / s)
installed as a dependency for almond.

FIRRTL Annotations, Target, Transform Example

The current FIRRTL stuff looks great. Judging by comments from attendees at CCC 2018, annotations are still confusing, though. Likely this can be improved with an example that shows:

  • A Chisel API to emit custom annotations
  • A FIRRTL transform that consumes these annotations

More advanced concepts would have to touch on:

  • EliminateTargetPaths
  • Target syntax

As an step before this, #22 could be fixed and then referred back to.

rocket-dsp-utils-assembly-1.0.jar not found

Hi, sorry, it's me again.
When I'm working on section Setup of 2.5, it throws:
java.nio.file.NoSuchFileException: /Users/Powei/Dropbox/riscv/rocket-dsp-utils-assembly-1.0.jar
sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55)
sun.nio.fs.UnixFileSystemProvider.readAttributes(UnixFileSystemProvider.java:144)
java.nio.file.Files.readAttributes(Files.java:1737)
ammonite.ops.stat$full$.apply(Model.scala:69)
ammonite.ops.package$.fileData(package.scala:105)
ammonite.runtime.SpecialClassLoader.jarSignature(ClassLoaders.scala:155)
ammonite.runtime.SpecialClassLoader.add(ClassLoaders.scala:141)
ammonite.runtime.Frame$$anonfun$addClasspath$2.apply(ClassLoaders.scala:35)
ammonite.runtime.Frame$$anonfun$addClasspath$2.apply(ClassLoaders.scala:35)
scala.collection.immutable.List.foreach(List.scala:392)
ammonite.runtime.Frame.addClasspath(ClassLoaders.scala:35)
ammonite.interp.Interpreter.handleEvalClasspath(Interpreter.scala:671)
ammonite.interp.Interpreter$$anon$2$$anon$1.handleClasspath(Interpreter.scala:697)
ammonite.interp.Interpreter$DefaultLoadJar.doHandleClasspath(Interpreter.scala:838)
ammonite.interp.Interpreter$DefaultLoadJar.cp(Interpreter.scala:845)
$sess.cmd17Wrapper$Helper.(cmd17.sc:2)
$sess.cmd17Wrapper.(cmd17.sc:329)
$sess.cmd17$.(cmd17.sc:258)
$sess.cmd17$.(cmd17.sc:-1)

Make notebooks proxy aware

To execute the first cell of 2.1_first_module inside the environment behind the proxy i have tomake ammonite shell proxy aware and found this solution:

System.setProperty("https.proxyHost","proxy.example.com")
System.setProperty("https.proxyPort","3128")

^---- should be added before importing chisel packages
I haven't tried running the jupyter itself with JAVA_OPTS="-Dhttps.proxyHost=proxy.example.com -Dhttps.proxyPort=3128"

2.5 IPXact Example is broken

on an up-to-date Fedora box (java 1.8.0 shipping with the distro), when I try to run the segment defining "class MyManyDynamicElementVecFir", I get:

scala.reflect.internal.MissingRequirementError: object java.lang.Object in compiler mirror not found.
scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:17)
scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:18)
scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:53)
scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:45)
scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:45)
scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:66)
scala.reflect.internal.Mirrors$RootsBase.getClassByName(Mirrors.scala:102)
scala.reflect.internal.Mirrors$RootsBase.getRequiredClass(Mirrors.scala:105)
scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass$lzycompute(Definitions.scala:257)
scala.reflect.internal.Definitions$DefinitionsClass.ObjectClass(Definitions.scala:257)
scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1390)
scala.tools.nsc.Global$Run.(Global.scala:1242)
ammonite.interp.Compiler$$anon$2.(Compiler.scala:266)
...

Nothing inside 2.5 works from that point forward.

RingCounter in module 3.5 seems to be orphaned

@grebe @stevobailey - can we go ahead and just delete the cell since its contents seem to be orphaned?

    "class GrayCounter(val bitwidth: Int) extends NoGlitchCounter(bitwidth) {\n",
    "    // todo\n",
    "}\n",
    "\n",
    "class RingCounter(maxCount: Int) extends NoGlitchCounter(maxCount) {\n",
    "    // todo\n",
    "}"

Generated images don't display in Jupyter Lab

Take the example of 0_demo.ipynb:

image

Inspect Element gives the following HTML output

<img src="http://localhost:8888/files/%20build/MovingAverage368251718.dot.svg?_xsrf=2%7Cb4c0efbf%7C0f080edcfcae8c04d70c24d5ae5b69a7%7C1590588518&amp;1590637312836" alt="Module View" ;"="">

Apparently the path files/build is mistyped as files/%20build. The bug doesn't manifest itself when I use Jupyter Notebook. I'm not sure if it's a bug of Jupyter Lab or this repository.

This issue is cross-posted at jupyterlab.

Question about optional reset module

HI, in example of optional reset in 3.1, it said "If resetValue = None, which is the default, the register will have no reset value and be initialized to garbage. ".
However, the generated code still contains an always block and doesn't have any reset. The code now is not synthesizable and may be buggy if used. Why don't we just use assertion and don't generate code in that situation?

module cmd9WrapperHelperDelayBy1( // @[:@3.2]
  input         clock, // @[:@4.4]
  input         reset, // @[:@5.4]
  input  [15:0] io_in, // @[:@6.4]
  output [15:0] io_out // @[:@6.4]
);
  reg [15:0] reg$; // @[cmd9.sc 9:12:@8.4]
  reg [31:0] _RAND_0;
  assign io_out = reg$;
`ifdef RANDOMIZE
  integer initvar;
  initial begin
    `ifndef verilator
      #0.002 begin end
    `endif
  `ifdef RANDOMIZE_REG_INIT
  _RAND_0 = {1{$random}};
  reg$ = _RAND_0[15:0];
  `endif // RANDOMIZE_REG_INIT
  end
`endif // RANDOMIZE
  always @(posedge clock) begin
    reg$ <= io_in;
  end
endmodule

Switch to Driver.emitVerilog instead of Bootcamp-only getVerilog

For easy Verilog generation, getVerilog is great, but it leads to questions like: "How do I import getVerilog?" once people migrate out of the bootcamp.

I think this can be trivially switched throughout the Bootcamp to always use Driver.emitVerilog.

Also, probably Driver.emit for FIRRTL (CHIRRTL) generation. It may make sense to add an API in Driver for emitFirrtl so that this isn't terrifically confusing for the bootcamp.

2.5_exercise: Pointer to Diplomacy page is stale.

The URL for the Diplomacy site in the following section of text:

DspBlocks use diplomatic interfaces from rocket. This site (https://www.lowrisc.org/docs/diplomacy/) has a good overview of the basic of diplomacy, but don't worry too much about how it's working for this example.

yields a "404 page not found" error.

The perhaps next closest reference I could find was:

https://github.com/Intensivate/learning-journey/wiki/Diplomacy

It also has a pointer to the same web page:
This is based on the Main Diplomacy Page (https://www.lowrisc.org/docs/diplomacy/)

3.6 partialFunction practice has an incorrect test statement

partialFunc3 is composed of partialFunc2 (which is defined for i == 2), and partialFunc1 (which is defined for i == 1). Therefore, it partialFunc3 is fine for i == 1 and i == 2, but not i == 0. The current tutorial lists i == 1 as failing.

Unit Testing -- Yes we need it here.

As this tutorial grows it becomes harder to figure out if errors are introduced. This is a call for a UnitTest facility to be created. Doing some research I found here
I have played with their example tests and it seems to work

Windows 10 download and import dependencies failed

Hi all,
I got below issue under Windows 10 environment while executing instructions in Jupyter lab/notebook, does anyone know how can I solve it?

Setup
Before we start, we need to download and imports the dependencies needed for the demo.

Please run the following two cell blocks by either pressing SHIFT+ENTER on your keyboard or the Run button in the menu.

val path = System.getProperty("user.dir") + "/source/load-ivy.sc"
interp.load.module(ammonite.ops.Path(java.nio.file.FileSystems.getDefault().getPath(path)))
Compiling C:\Workspace\chisel-bootcamp\Main.sc
Main.sc:2: not found: value coursierapi
  coursierapi.MavenRepository.of("https://oss.sonatype.org/content/repositories/snapshots")
  ^
ammonite.util.CompilationError: Compilation Failed
  ammonite.interp.Interpreter$$anon$1$load$.module(Interpreter.scala:716)
  ammonite.$sess.cmd0$Helper.<init>(cmd0.sc:2)
  ammonite.$sess.cmd0$.<init>(cmd0.sc:7)
  ammonite.$sess.cmd0$.<clinit>(cmd0.sc:-1)

Lot's of TODO's

  • 3.3: Add better description of an Arbiter, and the arguments to the Arbiter constructor
  • 3.4: Never define scan, or what the Left or Right means
  • 3.6: No description about the @ sign in a match/case statement.
  • 3.6: () => new MyModule passed to getVerilog is broken everywhere
  • 3.6: SomeGeneratorParameters is from 3.5, need to move it over
  • 3.6: Type generic shift register example has a clonetype warning
  • 3.6: Type generics with typeclasses, add link to dsptools readme/documentation
  • Link to ScalaDoc, Wiki, Cheatsheet, and Github in every module
  • 3.6: Fix ShiftRegister[UInt](..) text, thinks its a link, need \'s
  • 4.4: Remove extra comments in imports
  • 4.4: Remove firrtl.ir import in loadivy2.sc, fixup stringing type declaration

2_5 DspBlock example : It dose not work.

Hi, in my case, 2_5 DspBlock example doesn't work.
my environment is notebook server 6.0.0, python 3.7.3, scala lib 2.12.8 and Java 1.8.0_221. is anyone running this example?

here is my error log.

cmd2.sc:20: Symbol 'type chisel3.experimental.MultiIOModule' is missing from the classpath.
This symbol is required by 'class freechips.rocketchip.diplomacy.LazyModuleImp'.
Make sure that type MultiIOModule is in your classpath and check for conflicting dependencies with -Ylog-classpath.
A full rebuild may help if 'LazyModuleImp.class' was compiled against an incompatible version of chisel3.experimental.
lazy val module = new LazyModuleImp(this) {
^cmd2.sc:30: not found: value Reg
val taps = Reg(Vec(nFilters, Vec(nTaps, UInt(8.W))))
^cmd2.sc:30: not found: value Vec
val taps = Reg(Vec(nFilters, Vec(nTaps, UInt(8.W))))
^cmd2.sc:30: not found: value Vec
val taps = Reg(Vec(nFilters, Vec(nTaps, UInt(8.W))))
^cmd2.sc:30: not found: value UInt
val taps = Reg(Vec(nFilters, Vec(nTaps, UInt(8.W))))
^cmd2.sc:30: value W is not a member of Int
val taps = Reg(Vec(nFilters, Vec(nTaps, UInt(8.W))))
^cmd2.sc:34: value U is not a member of Int
RegField.r(64, nFilters.U, RegFieldDesc("nFilters", "Number of filter lanes"))
^cmd2.sc:44: not found: value Module
val fir = Module(new MyManyDynamicElementVecFir(nTaps))
^cmd2.sc:44: not found: type MyManyDynamicElementVecFir
val fir = Module(new MyManyDynamicElementVecFir(nTaps))
^cmd2.sc:55: not found: type UInt
outs.reduce((x: UInt, y: UInt) => Cat(y, x))
^cmd2.sc:55: not found: type UInt
outs.reduce((x: UInt, y: UInt) => Cat(y, x))
^cmd2.sc:55: not found: value Cat
outs.reduce((x: UInt, y: UInt) => Cat(y, x))
^Compilation Failed

why I install enveriment followd by install.md failled? (windows10)

I downloaded coursier at first, then run the follow prompt and I meet
`PS C:\Users\28614\Desktop> java -noverify -jar coursier launch -r jitpack -i user -I user:sh.almond:scala-kernel-api_2.12.8:0.2.1 sh.almond:scala-kernel_2.12.8:0.2.1 --sources --default=true -- --install'
Unrecognized argument: --sources
Unrecognized argument: --default=true

what the correct prompt is ?

Links to Cheatsheet and API are broken

While doing the bootcamp when i tried to access the links provided in the notebook, they did not resolve. I assume there was an update on where the cheatsheet and API is now.

Bootcamp module: 2.2_comb_logic
Links broken:

I was able to find the API documentation at https://www.chisel-lang.org/api/latest/
I was not able to find the cheatsheet.

weird compile result.

it's weird compile result is occurred In the '2.2_comb_logic' chapter

In the case of addition of this example, io.out_add should be 4'h8(or 4'b1000), but it's 4'h0 in the generated verilog code.
I want to make sure whether I missed something or not.
or, is this a kind of bug?
for your reference, I ran this one on Jupyter notebook

ss1

Some typo

  1. In 3.1: Taking actions based on the type of a variable when β€œit's” type is unknown or underspecified, for example when
    (its)
  2. In 3.2 Interlude: One of the commonly used interfaces provided by Chisel is DecoupledIO, providing a ready-valid interface for transferring data. The idea is that the "sink" drives the bits signal with the data to be transferred and the valid signal when there is data to be transferred. The sink drives the ready signal when it is ready to accept data, and data is considered transferred when both ready and valid are asserted on a cycle.
    (should be source)

Boxed error in 2.1_first_module

I got a Boxed Error in 2.1_first_module.
My OS is Windows10. Scala version is 2.12.8 and almond version is 0.2.1 .
Does anyone know what causes this error?
Thanks

first_module_error

[request] Add an example of Chisel Printf

The 2.1 First Module introduces the peekPostTester. It also uses a Scala Println() to show test completion.

It does not however show the most useful testing construct of all --- the magical Printf!

I've gotten feedback from users who keep trying to use Println() to debug their Chisel code and became very confused.

Thanks and keep up the good work!

chisel3_2.13-3.2.0.pom in Load-Ivy.sc Not Found

With a local install of the Chisel Bootcamp launched using "jupyter notebook" on Arch Linux, in the chapter 2.4 on Sequential Logic I recieve the following error when attempting to run the imports for the chapter:
"val path = System.getProperty("user.dir") + "/source/load-ivy.sc"

interp.load.module(ammonite.ops.Path(java.nio.file.FileSystems.getDefault().getPath(path)))

Compiling /home/jsaunders/Build/chisel-bootcamp/Main.sc

Downloading https://repo1.maven.org/maven2/edu/berkeley/cs/chisel3_2.13/3.2.0/chisel3_2.13-3.2.0.pom
Downloaded https://repo1.maven.org/maven2/edu/berkeley/cs/chisel3_2.13/3.2.0/chisel3_2.13-3.2.0.pom
Downloading https://repo1.maven.org/maven2/edu/berkeley/cs/chisel3_2.13/3.2.0/chisel3_2.13-3.2.0.pom.sha1
Downloaded https://repo1.maven.org/maven2/edu/berkeley/cs/chisel3_2.13/3.2.0/chisel3_2.13-3.2.0.pom.sha1

ammonite.util.CompilationError: Failed to resolve ivy dependencies:Error downloading edu.berkeley.cs:chisel3_2.13:3.2.0
not found: /home/jsaunders/.ivy2/local/edu.berkeley.cs/chisel3_2.13/3.2.0/ivys/ivy.xml
not found: https://repo1.maven.org/maven2/edu/berkeley/cs/chisel3_2.13/3.2.0/chisel3_2.13-3.2.0.pom
ammonite.interp.Interpreter$$anon$1$load$.module(Interpreter.scala:716)
ammonite.$sess.cmd0$Helper.(cmd0.sc:2)
ammonite.$sess.cmd0$.(cmd0.sc:7)"

The same occurs with other chapters using the same source for loading dependencies.

comment given for Width inference of RegNext

In module 2.4

val io = IO(new Bundle {
val in = Input(UInt(12.W))
val out = Output(UInt(5.W))
})

// register bitwidth is inferred from io.out
io.out := RegNext(io.in + 1.U)

In the verilog generated, the register bitwidth is inferred according to the maximum bitwidth of 'io.in'(12 bit) and not 'io.out'(5 bit)
reg [11:0] _T_13;
The comment which you have added is misleading and it will make confusion in Module 3.2 , while using RegNext with mutable.ArrayBuffers

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.