From 8f319428ce6f4d3c66bdd41d50d74f8bd90d7d5a Mon Sep 17 00:00:00 2001 From: peteraa Date: Mon, 10 Jun 2019 16:37:27 +0200 Subject: [PATCH] Fix and add stuff --- Images/DotProd.png | Bin 0 -> 30302 bytes Images/MatMul.png | Bin 0 -> 33693 bytes Images/Source/MatMul.png | Bin 0 -> 33693 bytes Images/Source/waveform.tex | 51 +++++++++++ TODOs.org | 11 +++ circuitRendering.org | 4 +- exercise.org | 84 ++++++++++++++++-- introduction.org | 9 ++ oppgavetekst.org | 0 src/main/scala/DotProd.scala | 2 + src/main/scala/fileUtils.scala | 0 src/main/scala/main.scala | 10 +++ src/test/resources/svgs/SumOrSquare.png | Bin 0 -> 79785 bytes src/test/scala/DotProdSpec.scala | 19 ++-- src/test/scala/Example.scala | 0 src/test/scala/Examples/softwareDotProd.scala | 42 +++++++++ src/test/scala/MatMulSpec.scala | 6 +- src/test/scala/MatMulTips.org | 58 ------------ src/test/scala/MatrixSpec.scala | 26 ++++-- src/test/scala/TestUtils.scala | 28 +++++- src/test/scala/VectorSpec.scala | 2 +- 21 files changed, 271 insertions(+), 81 deletions(-) create mode 100644 Images/DotProd.png create mode 100644 Images/MatMul.png create mode 100644 Images/Source/MatMul.png create mode 100644 Images/Source/waveform.tex delete mode 100644 oppgavetekst.org delete mode 100644 src/main/scala/fileUtils.scala create mode 100644 src/test/resources/svgs/SumOrSquare.png delete mode 100644 src/test/scala/Example.scala create mode 100644 src/test/scala/Examples/softwareDotProd.scala diff --git a/Images/DotProd.png b/Images/DotProd.png new file mode 100644 index 0000000000000000000000000000000000000000..e2d3c38a240697c6df96c88c0b3875903b99d0be GIT binary patch literal 30302 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 literal 0 HcmV?d00001 diff --git a/Images/Source/MatMul.png b/Images/Source/MatMul.png new file mode 100644 index 0000000000000000000000000000000000000000..48fd1b4e524bcc6203700531fec1434a53561eda GIT binary patch literal 33693 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 literal 0 HcmV?d00001 diff --git a/Images/Source/waveform.tex b/Images/Source/waveform.tex new file mode 100644 index 0000000..1e61c46 --- /dev/null +++ b/Images/Source/waveform.tex @@ -0,0 +1,51 @@ +\documentclass{article} +\usepackage[utf8]{inputenc} +\usepackage{tikz-timing} +\usetikztiminglibrary[rising arrows]{clockarrows} +\usepackage{xparse} % NewDocumentCommand, IfValueTF, IFBooleanTF + +% Reference a bus. +% +% Usage: +% +% \busref[3::0]{C/BE} -> C/BE[3::0] +% \busref*{AD} -> AD# +% \busref*[3::0]{C/BE} -> C/BE[3::0]# +% +\NewDocumentCommand{\busref}{som}{\texttt{% +#3% +\IfValueTF{#2}{[#2]}{}% +\IfBooleanTF{#1}{\#}{}% +}} + +\title{Waveform drawing} +\author{peteraa } +\date{June 2019} + +\begin{document} + +\begin{tikztimingtable}[% + timing/dslope=0.1, + timing/.style={x=5ex,y=2ex}, + x=5ex, + timing/rowdist=3ex, + timing/name/.style={font=\sffamily\scriptsize} +] +\busref{CLK} & 32{c} \\ +\busref{A} & 1D{5} 1D{0} 1D{4} 1D{8} 1D{1} 1D{6} 1D{6} 1D{2} 1D{9} 1D{0} 1D{8} 1D{3} 1D{9} 1D{3} 2U \\ +\busref{B} & 1D{8} 1D{3} 1D{3} 1D{2} 1D{7} 1D{6} 1D{7} 1D{8} 1D{5} 1D{2} 1D{7} 1D{1} 1D{8} 1D{2} 2U \\ +\busref{VALID} & 6U 1H 6U 1H 2U\\ +\busref{Output} & 1D{40} 1D{40} 1D{52} 1D{68} 1D{75} 1D{111} 1D{153} 1D{16} 1D{61} 1D{61} 1D{117} 1D{120} 1D{192} 1D{198} 2U\\ +\extracode +\begin{pgfonlayer}{background} +\begin{scope}[semitransparent ,semithick] +\vertlines[darkgray,dotted]{0.5,1.5 ,...,8.0} +\end{scope} +\end{pgfonlayer} +\end{tikztimingtable} + +\maketitle + +\section{Introduction} + +\end{document} diff --git a/TODOs.org b/TODOs.org index 54a99d6..843014a 100644 --- a/TODOs.org +++ b/TODOs.org @@ -49,3 +49,14 @@ bi-directional busses. Otherwise, the value is simply outputted and the module receiving the output simply ignores it if it didn’t ask for anything. + +* Jahre comments +** DONE Block diagrams +** DONE Specify timing constraints +*** DONE For dot prod +*** DONE -ish For mat mul +** DONE Make dot prod sim easier to find + It was gone. Oops +** DONE Direct link to chisel docs +** DONE Modularize MatMul +** DONE Unrandomize tests diff --git a/circuitRendering.org b/circuitRendering.org index 36187dc..217dad8 100644 --- a/circuitRendering.org +++ b/circuitRendering.org @@ -6,7 +6,7 @@ drawing programs. As an example we will use a very simple circuit: - [[./Images/inkscape.jpg]] + [[./Images/inkscape.png]] This circuit has a register, and we want to see how its state evolves, thus we add a label. The name of the register is "Reg_A", which will be replaced by the actual value as the circuit @@ -82,7 +82,7 @@ ** Draw the circuit in inkscape You can add as much detail as you want here, the only thing the parser looks for is - text fields that are postfixed with "_field" + text fields that are postfixed with "_field". The fields I would be interested in are the row and column counters, and the dot product accumulator state. Save the svg as diff --git a/exercise.org b/exercise.org index 446894a..470c650 100644 --- a/exercise.org +++ b/exercise.org @@ -40,19 +40,59 @@ case class DotProdCalculator(vectorLen: Int, timeStep: Int, accumulator: Int){ def update(inputA: Int, inputB: Int): (Int, Boolean, DotProdCalculator) = { val product = inputA * inputB - if(((timeStep + 1) % vectorLen) == 0){ + if(((timeStep + 1) % vectorLen) == 0) (accumulator + product, true, this.copy(timeStep = 0, accumulator = 0)) else (accumulator + product, false, this.copy(timeStep = this.timeStep + 1, accumulator = accumulator + product)) - } } } #+end_src - To see it in action run ~testOnly Ex0.DPCsimulatorSpec~ in your sbt console. + To see it in action run ~testOnly Examples.SoftwareDotProdSpec~ in your sbt console. As with the previous tasks, the dot product calculator must pass the tests with ~testOnly Ex0.DotProdSpec~ + +*** Timing + As shown in the timing diagram below, the dot product calculator should deliver the result as + soon as possible. + This means you will have to drive the output with the sum of the accumulator and the product of + the two inputs. + If you choose to drive the output only by the value of the accumulator your circuit will + lag behind by one cycle, which while good for pipelining purposes is not good for passing the test + purposes. + #+CAPTION: The expected output of the dot product calculator + [[./Images/counter.png]] + + +*** Chisel counters and a short detour on scala documentation + Doing an action for a set amount of timesteps is a very common task in hardware design, so this + functionality is included in chisel via the Counter class. + In order to understand how this counter works you can google "chisel counter" and get the following + https://chisel.eecs.berkeley.edu/api/3.0.1/chisel3/util/Counter.html as first result. + However, this is for the counter Class, what you actually want is the counter Object: + https://chisel.eecs.berkeley.edu/api/3.0.1/chisel3/util/Counter$.html + + This can be very confusing when new to scala, but it is simply convention: + When a class and an object share name this is just a convenience for keeping static methods, such + as constructors, separated from the non-static methods. + + In the Counter object (the second link) there is an apply method: + #+begin_src scala + def apply(cond: Bool, n: Int): (UInt, Bool) + #+end_src + The type signature tells you that the input is a regular scala integer, and a chisel boolean + (scala booleans are of type ~Boolean~, rather than ~Bool~) and the output is a UInt and a chisel + boolean. + This means that upon instantiating a Counter with its apply method you only get the outputs from + the counter, not the object itself. + The result is a convenient method of making a counter, simply supply how many ticks it takes for the + counter to roll over, as well as an input signal for enabling the clock, and receive a tuple with the + signal for the counters value, as well as a boolean signal that toggles whenever the clock rolls over. + + A special property of apply methods are that they can be called directly on the object. + ~Counter.apply(cCond, 10)~ does the same as ~Counter(cCond, 10)~. + To call the class constructor, use the ~new~ keyword. ** Task 4 - Matrix Matrix multiplication @@ -106,9 +146,43 @@ The skeleton code for the matrix multiplier is less detailed, with only one test. You're encouraged to write your own tests to make this easier. - Additionally, if you feel like you're getting stuck you can take a look at - MatMulTips.org +*** Structuring your circuit + It is very easy to get bogged down with details in this exercise, so it's useful to take + a few moments to plan ahead. + + A natural way to break down the task is to split it into two phases: setup and execution. + For setup you simply want to shuffle data from the input signals to your two matrix modules. + + The next task is to actually perform the calculation. + This is a little more complex, seeing as the read patterns are different from matrix A and B. + + To make this simpler a good idea is to introduce a control module. + This module should keep track of which state the multiplier is in, setup or execution, and + provide the appropriate row and column select signals. + + You may also choose to split the control module into an init controller and an execution + controller if you see fit. + + A suggested design is shown underneath: + [[./Images/MatMul.png]] + +*** Timing + The timing for your matrix multiplier is straight forward. For a 3x4 matrix it takes + 12 cycles to input data (cycles 0 to 11), and execution should proceed on cycle 12. + While you can technically start execution sooner than this the tests expect you to + not start executing before all data is loaded. + As long as you start executing just as data has been loaded your dot prod design will + take care of the rest. + +*** Testing + In order to make testing easier, consider testing your row and column select signals + first. + The actual values stored in the matrixes are just noise, the important part is that + you select the correct rows and columns at the correct times for the correct matrixes, + and if you do this the rest is comparatively easy. + + ** Bonus exercise - Introspection on code quality and design choices This last exercise has no deliverable, but you should spend some time thinking about where you spent most of your efforts. diff --git a/introduction.org b/introduction.org index 23d13ec..257b35d 100644 --- a/introduction.org +++ b/introduction.org @@ -852,9 +852,18 @@ Just don't bank your money on the correctness, it might fail in rare circumstances making debugging a nightmare) +** Visualizing generated circuits + While limited, it is possible to visualize your generated circuit using [[https://github.com/freechipsproject/diagrammer][diagrammer]]. + The necessary code to generate .fir file is in the main.scala file, just comment it out to generate + these. + I encourage you to give it a fair shake to see if you find it useful or not. ** Visualizing circuit state (Optional) In order to make debugging easier it is helpful to render the state of the circuit to see where errors happen. A prototype for this is included in this project, read more about it here [[./circuitRendering.org][Here]] + +** Resources + Chisel cheat sheet + https://chisel.eecs.berkeley.edu/doc/chisel-cheatsheet3.pdf diff --git a/oppgavetekst.org b/oppgavetekst.org deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/scala/DotProd.scala b/src/main/scala/DotProd.scala index c87b7e3..9a65cc2 100644 --- a/src/main/scala/DotProd.scala +++ b/src/main/scala/DotProd.scala @@ -21,6 +21,8 @@ class DotProd(val elements: Int) extends Module { */ val counter = Counter(elements) val accumulator = RegInit(UInt(32.W), 0.U) + + // Please don't manually implement product! val product = io.dataInA * io.dataInB // placeholder diff --git a/src/main/scala/fileUtils.scala b/src/main/scala/fileUtils.scala deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/scala/main.scala b/src/main/scala/main.scala index 674dc5d..9b0a7c9 100644 --- a/src/main/scala/main.scala +++ b/src/main/scala/main.scala @@ -1,12 +1,22 @@ package Ex0 +import chisel3._ +import java.io.File object main { def main(args: Array[String]): Unit = { val s = """ | Attempting to "run" a chisel program is rather meaningless. | Instead, try running the tests, for instance with "test" or "testOnly Examples.MyIncrementTest + | + | If you want to create chisel graphs, simply remove this message and comment in the code underneath + | to generate the modules you're interested in. """.stripMargin println(s) } + + // Uncomment to dump .fir file + // val f = new File("MatMul.fir") + // chisel3.Driver.dumpFirrtl(chisel3.Driver.elaborate(() => new MatMul(5, 4)), Option(f)) + } diff --git a/src/test/resources/svgs/SumOrSquare.png b/src/test/resources/svgs/SumOrSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..26fe8f3f6e4cd5ee2360ec56da37ee82a3ff2425 GIT binary patch literal 79785 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 WoEvlY!s~Q0XpE`(;>3kp4*egtMFF4y literal 0 HcmV?d00001 diff --git a/src/test/scala/DotProdSpec.scala b/src/test/scala/DotProdSpec.scala index ff8030b..d19d1ee 100644 --- a/src/test/scala/DotProdSpec.scala +++ b/src/test/scala/DotProdSpec.scala @@ -8,7 +8,8 @@ import TestUtils._ class DotProdSpec extends FlatSpec with Matchers { import DotProdTests._ - val elements = scala.util.Random.nextInt(5) + 2 + val rand = new scala.util.Random(100) + val elements = 7 behavior of "DotProd" @@ -41,6 +42,8 @@ class DotProdSpec extends FlatSpec with Matchers { object DotProdTests { + val rand = new scala.util.Random(100) + class SignalsWhenDone(c: DotProd) extends PeekPokeTester(c) { for(ii <- 0 until c.elements - 1){ @@ -61,8 +64,11 @@ object DotProdTests { class CalculatesCorrectResult(c: DotProd) extends PeekPokeTester(c) { - val inputsA = List.fill(c.elements)(scala.util.Random.nextInt(10)) - val inputsB = List.fill(c.elements)(scala.util.Random.nextInt(10)) + val inputsA = List.fill(c.elements)(rand.nextInt(10)) + val inputsB = List.fill(c.elements)(rand.nextInt(10)) + println("runnign dot prod calc with inputs:") + println(inputsA.mkString("[", "] [", "]")) + println(inputsB.mkString("[", "] [", "]")) val expectedOutput = (for ((a, b) <- inputsA zip inputsB) yield a * b) sum for(ii <- 0 until c.elements){ @@ -77,8 +83,11 @@ object DotProdTests { class CalculatesCorrectResultAndSignals(c: DotProd) extends PeekPokeTester(c) { - val inputsA = List.fill(c.elements)(scala.util.Random.nextInt(10)) - val inputsB = List.fill(c.elements)(scala.util.Random.nextInt(10)) + val inputsA = List.fill(c.elements)(rand.nextInt(10)) + val inputsB = List.fill(c.elements)(rand.nextInt(10)) + println("runnign dot prod calc with inputs:") + println(inputsA.mkString("[", "] [", "]")) + println(inputsB.mkString("[", "] [", "]")) val expectedOutput = (for ((a, b) <- inputsA zip inputsB) yield a * b) sum for(ii <- 0 until c.elements){ diff --git a/src/test/scala/Example.scala b/src/test/scala/Example.scala deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/scala/Examples/softwareDotProd.scala b/src/test/scala/Examples/softwareDotProd.scala new file mode 100644 index 0000000..b33b2c0 --- /dev/null +++ b/src/test/scala/Examples/softwareDotProd.scala @@ -0,0 +1,42 @@ +/** + * This code supplements instructions.org + */ +package Examples +import Ex0._ +import org.scalatest.{Matchers, FlatSpec} + +case class DotProdCalculator(vectorLen: Int, timeStep: Int = 0, accumulator: Int = 0){ + def update(inputA: Int, inputB: Int): (Int, Boolean, DotProdCalculator) = { + val product = inputA * inputB + if(((timeStep + 1) % vectorLen) == 0) + (accumulator + product, true, this.copy(timeStep = 0, accumulator = 0)) + else + (accumulator + product, false, this.copy(timeStep = this.timeStep + 1, accumulator = accumulator + product)) + } +} + +class SoftwareDotProdSpec extends FlatSpec with Matchers { + import DotProdTests._ + + val elements = scala.util.Random.nextInt(5) + 2 + + behavior of "DotProdSim" + + it should "Simulate dot product calculation" in { + + println("Running a simulated dot product calculator with input vector size = 5") + println("Note how output is only valid on cycles divisible by 5, and how the accumulator flushes\n\n") + ((0 to 15).map(_ => util.Random.nextInt(8)) zip + (0 to 15).map(_ => util.Random.nextInt(8))) + .foldLeft(DotProdCalculator(5)){ case(dotProd, (inputA, inputB)) => + val (output, valid, nextDotProd) = dotProd.update(inputA, inputB) + val inputString = s"At timestep ${dotProd.timeStep} inputs A: " + Console.YELLOW + s"$inputA " + Console.RESET + "B: " + Console.YELLOW + s"$inputB" + Console.RESET + val outputString = s"the output was: output: " + Console.YELLOW + s"$output" + Console.RESET + ", valid: " + (if(valid) Console.GREEN else Console.RED) + s"$valid\n" + Console.RESET + println(inputString) + println(outputString) + nextDotProd + } + + true + } +} diff --git a/src/test/scala/MatMulSpec.scala b/src/test/scala/MatMulSpec.scala index 1dfecfb..9e1c0a5 100644 --- a/src/test/scala/MatMulSpec.scala +++ b/src/test/scala/MatMulSpec.scala @@ -8,8 +8,8 @@ import TestUtils._ class MatMulSpec extends FlatSpec with Matchers { import MatMulTests._ - val rowDims = scala.util.Random.nextInt(5) + 3 - val colDims = scala.util.Random.nextInt(5) + 3 + val rowDims = 3 + val colDims = 7 behavior of "MatMul" @@ -25,6 +25,8 @@ class MatMulSpec extends FlatSpec with Matchers { object MatMulTests { + val rand = new scala.util.Random(100) + class TestExample(c: MatMul) extends PeekPokeTester(c) { val mA = genMatrix(c.rowDimsA, c.colDimsA) val mB = genMatrix(c.rowDimsA, c.colDimsA) diff --git a/src/test/scala/MatMulTips.org b/src/test/scala/MatMulTips.org index c224fd7..e69de29 100644 --- a/src/test/scala/MatMulTips.org +++ b/src/test/scala/MatMulTips.org @@ -1,58 +0,0 @@ -The most important part of this task is keeping track of which row and column should be -accessed in each matrix. - -In short, there are three values you need to have control over: -Column select, Row select A and Row select B - -Further, it is useful to separate input phase and calculation phase. - -In the input phase Row select A should be the same as Row select B since -you're simply inputting values. -For a 3x2 matrix you want to first input the first vector (that is, row 0), -so for cycle 0, 1 and 2 rowSelect should be 0, whereas column select should be -the same as the (cycle % columns) - -After Inputting data all three values should be reset to 0. -This is a fairly typical task, so chisel.util has you covered with the Counter class -https://chisel.eecs.berkeley.edu/api/3.0.1/chisel3/util/Counter.html -https://chisel.eecs.berkeley.edu/api/3.0.1/chisel3/util/Counter$.html - -The second link links to the Counter object rather than the class. Typically we put -constructors and static methods in the companion object of a class. -Object methods named apply can be called directly from the object, which means -~MyObject.apply(123)~ is the same as ~MyObject(123)~ -Very convenient once you're used to it, but a little odd first time you see it. - -In the Counter object there is an apply method: -#+begin_src scala - def apply(cond: Bool, n: Int): (UInt, Bool) -#+end_src - -From the signature we see (well, I see because I happen to know that scala bools are called Boolean) -that the input is a chisel.data.Bool and a scala Int, and the output is a tuple of -chisel.data.UInt and chisel.data.Bool - -The return values for the call to Counter.apply is a wire containing the current value of the counter, -and a wire that is toggled whenever the clock rolls over. - -The arguments are a scala int, specifying how many ticks it takes for the clock to roll over, and a -wire whose signal toggles the clock on or off. - -In our matrix multiplier this is pretty handy: - -#+begin_src scala -val (colCounter, colCounterWrap) = Counter(true.B, colDimsA) -val (rowSelA, rowSelAWrap) = Counter(colCounterWrap, ???) -#+end_src - -Here we have defined two counters. The column counter always ticks, wrapping around when it reaches colDimsA. -When the column counter wraps, the colCounterWrap wire is toggled, and the rowSelect clock makes a single tick. - -If you can get row select A, B and col select to work in both phases you're very close to done, so these -should be your priority. -To test them, write your own test for MatMul that simply runs your MatMul unit and peeks at these values each -timestep until you're confident that they're correct. -As described in the debugging section, you should make a separate debug IO port with debug signals enabling you -to read out these values. Attempting to read them directly will throw an error. - -The best tip of course is to actually show up during lab hours. diff --git a/src/test/scala/MatrixSpec.scala b/src/test/scala/MatrixSpec.scala index c7ff13b..580881e 100644 --- a/src/test/scala/MatrixSpec.scala +++ b/src/test/scala/MatrixSpec.scala @@ -12,12 +12,22 @@ class MatrixSpec extends FlatSpec with Matchers { behavior of "Matrix" - val rowDims = scala.util.Random.nextInt(5) + 3 - val colDims = scala.util.Random.nextInt(5) + 3 + val rand = new scala.util.Random(100) + val rowDims = 5 + val colDims = 3 - it should "Update its contents" in { + it should "Update its contents with a square shape" in { wrapTester( - chisel3.iotesters.Driver(() => new Matrix(10,10)) { c => + chisel3.iotesters.Driver(() => new Matrix(rowDims,rowDims)) { c => + new UpdatesData(c) + } should be(true) + ) + } + + + it should "Update its contents with a rectangular shape" in { + wrapTester( + chisel3.iotesters.Driver(() => new Matrix(rowDims,colDims)) { c => new UpdatesData(c) } should be(true) ) @@ -26,7 +36,7 @@ class MatrixSpec extends FlatSpec with Matchers { it should "Retain its contents when writeEnable is low" in { wrapTester( - chisel3.iotesters.Driver(() => new Matrix(10,10)) { c => + chisel3.iotesters.Driver(() => new Matrix(rowDims, colDims)) { c => new UpdatesData(c) } should be(true) ) @@ -35,10 +45,12 @@ class MatrixSpec extends FlatSpec with Matchers { object MatrixTests { + val rand = new scala.util.Random(100) + class UpdatesData(c: Matrix) extends PeekPokeTester(c) { val inputs = List.fill(c.colsDim){ - List.fill(c.rowsDim)(scala.util.Random.nextInt(20) + 1) + List.fill(c.rowsDim)(rand.nextInt(20) + 1) } poke(c.io.writeEnable, true) @@ -65,7 +77,7 @@ object MatrixTests { class RetainsData(c: Matrix) extends PeekPokeTester(c) { val inputs = List.fill(c.colsDim){ - List.fill(c.rowsDim)(scala.util.Random.nextInt(20) + 1) + List.fill(c.rowsDim)(rand.nextInt(20) + 1) } poke(c.io.writeEnable, true) diff --git a/src/test/scala/TestUtils.scala b/src/test/scala/TestUtils.scala index 34a392c..3ded57a 100644 --- a/src/test/scala/TestUtils.scala +++ b/src/test/scala/TestUtils.scala @@ -7,8 +7,10 @@ import org.scalatest.{Matchers, FlatSpec} object TestUtils { + val rand = new scala.util.Random(100) + def genMatrix(rows: Int, cols: Int) = List.fill(rows)( - List.fill(cols)(scala.util.Random.nextInt(5)) + List.fill(cols)(rand.nextInt(5)) ) def printVector(v: List[Int]): String = @@ -40,6 +42,30 @@ object TestUtils { println("##########################################################") println("##########################################################") } + case e: chisel3.core.Binding.ExpectedHardwareException => { + println("##########################################################") + println("##########################################################") + println("##########################################################") + println("Your design is using raw chisel types!") + println("error:\n") + println(e.getMessage) + println("") + println("") + println("This typically occurs when you forget to wrap a module") + println("e.g") + println(""" +class MyBundle extends Bundle { + val signal = UInt(32.W) +} +val mySignal = new MyBundle + ^^^^ Wrong! +should be +val mySignal = Wire(new MyBundle) +""") + println("##########################################################") + println("##########################################################") + println("##########################################################") + } case e: Exception => throw e } } diff --git a/src/test/scala/VectorSpec.scala b/src/test/scala/VectorSpec.scala index c830357..355f458 100644 --- a/src/test/scala/VectorSpec.scala +++ b/src/test/scala/VectorSpec.scala @@ -11,7 +11,7 @@ import scala.collection.immutable.{ Vector => _ } class VectorSpec extends FlatSpec with Matchers { import VectorTests._ - val elements = scala.util.Random.nextInt(5) + 2 + val elements = 7 behavior of "Vector"