summaryrefslogtreecommitdiff
path: root/src/test/scala/examples
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/scala/examples')
-rw-r--r--src/test/scala/examples/ImplicitStateVendingMachine.scala8
-rw-r--r--src/test/scala/examples/SimpleVendingMachine.scala45
-rw-r--r--src/test/scala/examples/VendingMachineGenerator.scala41
-rw-r--r--src/test/scala/examples/VendingMachineUtils.scala2
4 files changed, 51 insertions, 45 deletions
diff --git a/src/test/scala/examples/ImplicitStateVendingMachine.scala b/src/test/scala/examples/ImplicitStateVendingMachine.scala
index 817240d5..36ac82ab 100644
--- a/src/test/scala/examples/ImplicitStateVendingMachine.scala
+++ b/src/test/scala/examples/ImplicitStateVendingMachine.scala
@@ -12,14 +12,14 @@ class ImplicitStateVendingMachine extends SimpleVendingMachine {
val incValue = WireDefault(0.asUInt(3.W))
val doDispense = value >= 4.U // 4 * nickel as 1 == $0.20
- when (doDispense) {
+ when(doDispense) {
value := 0.U // No change given
- } .otherwise {
+ }.otherwise {
value := value + incValue
}
- when (io.nickel) { incValue := 1.U }
- when (io.dime) { incValue := 2.U }
+ when(io.nickel) { incValue := 1.U }
+ when(io.dime) { incValue := 2.U }
io.dispense := doDispense
}
diff --git a/src/test/scala/examples/SimpleVendingMachine.scala b/src/test/scala/examples/SimpleVendingMachine.scala
index dff60a4d..819669a3 100644
--- a/src/test/scala/examples/SimpleVendingMachine.scala
+++ b/src/test/scala/examples/SimpleVendingMachine.scala
@@ -9,8 +9,8 @@ import chisel3.util._
class SimpleVendingMachineIO extends Bundle {
val nickel = Input(Bool())
- val dime = Input(Bool())
- val dispense = Output(Bool())
+ val dime = Input(Bool())
+ val dispense = Output(Bool())
}
// Superclass for vending machines with very simple IO
@@ -24,24 +24,24 @@ class FSMVendingMachine extends SimpleVendingMachine {
val sIdle :: s5 :: s10 :: s15 :: sOk :: Nil = Enum(5)
val state = RegInit(sIdle)
- switch (state) {
- is (sIdle) {
- when (io.nickel) { state := s5 }
- when (io.dime) { state := s10 }
+ switch(state) {
+ is(sIdle) {
+ when(io.nickel) { state := s5 }
+ when(io.dime) { state := s10 }
}
- is (s5) {
- when (io.nickel) { state := s10 }
- when (io.dime) { state := s15 }
+ is(s5) {
+ when(io.nickel) { state := s10 }
+ when(io.dime) { state := s15 }
}
- is (s10) {
- when (io.nickel) { state := s15 }
- when (io.dime) { state := sOk }
+ is(s10) {
+ when(io.nickel) { state := s15 }
+ when(io.dime) { state := sOk }
}
- is (s15) {
- when (io.nickel) { state := sOk }
- when (io.dime) { state := sOk }
+ is(s15) {
+ when(io.nickel) { state := sOk }
+ when(io.dime) { state := sOk }
}
- is (sOk) {
+ is(sOk) {
state := sIdle
}
}
@@ -73,11 +73,11 @@ class SimpleVendingMachineTester(mod: => SimpleVendingMachine) extends BasicTest
val dut = Module(mod)
val (cycle, done) = Counter(true.B, 10)
- when (done) { stop(); stop() } // Stop twice because of Verilator
+ when(done) { stop(); stop() } // Stop twice because of Verilator
val nickelInputs = VecInit(true.B, true.B, true.B, true.B, true.B, false.B, false.B, false.B, true.B, false.B)
- val dimeInputs = VecInit(false.B, false.B, false.B, false.B, false.B, true.B, true.B, false.B, false.B, true.B)
- val expected = VecInit(false.B, false.B, false.B, false.B, true.B , false.B, false.B, true.B, false.B, false.B)
+ val dimeInputs = VecInit(false.B, false.B, false.B, false.B, false.B, true.B, true.B, false.B, false.B, true.B)
+ val expected = VecInit(false.B, false.B, false.B, false.B, true.B, false.B, false.B, true.B, false.B, false.B)
dut.io.nickel := nickelInputs(cycle)
dut.io.dime := dimeInputs(cycle)
@@ -89,7 +89,10 @@ class SimpleVendingMachineSpec extends ChiselFlatSpec {
assertTesterPasses { new SimpleVendingMachineTester(new FSMVendingMachine) }
}
"An Verilog implementation of a vending machine" should "work" in {
- assertTesterPasses(new SimpleVendingMachineTester(new VerilogVendingMachineWrapper),
- List("/chisel3/VerilogVendingMachine.v"), annotations = TesterDriver.verilatorOnly)
+ assertTesterPasses(
+ new SimpleVendingMachineTester(new VerilogVendingMachineWrapper),
+ List("/chisel3/VerilogVendingMachine.v"),
+ annotations = TesterDriver.verilatorOnly
+ )
}
}
diff --git a/src/test/scala/examples/VendingMachineGenerator.scala b/src/test/scala/examples/VendingMachineGenerator.scala
index 72bfdf53..4adae987 100644
--- a/src/test/scala/examples/VendingMachineGenerator.scala
+++ b/src/test/scala/examples/VendingMachineGenerator.scala
@@ -12,12 +12,14 @@ import VendingMachineUtils._
class VendingMachineIO(val legalCoins: Seq[Coin]) extends Bundle {
require(legalCoins.size >= 1, "The vending machine must accept at least 1 coin!")
// Order of coins by value
- val coins: Seq[Coin] = legalCoins sortBy (_.value)
+ val coins: Seq[Coin] = legalCoins.sortBy(_.value)
// Map of coin names to their relative position in value (ie. index in inputs)
val indexMap: Map[String, Int] = coins.map(_.name).zipWithIndex.toMap
- require(coins map (_.value % coins.head.value == 0) reduce (_ && _),
- "All coins must be a multiple of the lowest value coin!")
+ require(
+ coins.map(_.value % coins.head.value == 0).reduce(_ && _),
+ "All coins must be a multiple of the lowest value coin!"
+ )
val inputs = Input(Vec(legalCoins.size, Bool()))
val dispense = Output(Bool())
@@ -34,17 +36,17 @@ abstract class ParameterizedVendingMachine(legalCoins: Seq[Coin], val sodaCost:
// Enforce one hot
if (io.inputs.size > 1) {
for (input <- io.inputs) {
- when (input) {
- assert(io.inputs.filterNot(_ == input).map(!_).reduce(_ && _),
- "Only 1 coin can be input in a given cycle!")
+ when(input) {
+ assert(io.inputs.filterNot(_ == input).map(!_).reduce(_ && _), "Only 1 coin can be input in a given cycle!")
}
}
}
}
class VendingMachineGenerator(
- legalCoins: Seq[Coin],
- sodaCost: Int) extends ParameterizedVendingMachine(legalCoins, sodaCost) {
+ legalCoins: Seq[Coin],
+ sodaCost: Int)
+ extends ParameterizedVendingMachine(legalCoins, sodaCost) {
require(sodaCost > 0, "Sodas must actually cost something!")
// All coin values are normalized to a multiple of the minimum coin value
@@ -57,21 +59,22 @@ class VendingMachineGenerator(
val incValue = WireDefault(0.asUInt(width))
val doDispense = value >= (sodaCost / minCoin).U
- when (doDispense) {
+ when(doDispense) {
value := 0.U // No change given
- } .otherwise {
+ }.otherwise {
value := value + incValue
}
for ((coin, index) <- io.coins.zipWithIndex) {
- when (io.inputs(index)) { incValue := (coin.value / minCoin).U }
+ when(io.inputs(index)) { incValue := (coin.value / minCoin).U }
}
io.dispense := doDispense
}
class ParameterizedVendingMachineTester(
- mod: => ParameterizedVendingMachine,
- testLength: Int) extends BasicTester {
+ mod: => ParameterizedVendingMachine,
+ testLength: Int)
+ extends BasicTester {
require(testLength > 0, "Test length must be positive!")
// Construct the module
@@ -81,24 +84,24 @@ class ParameterizedVendingMachineTester(
// Inputs and expected results
// Do random testing
private val _rand = scala.util.Random
- val inputs: Seq[Option[Coin]] = Seq.fill(testLength)(coins.lift(_rand.nextInt(coins.size + 1)))
+ val inputs: Seq[Option[Coin]] = Seq.fill(testLength)(coins.lift(_rand.nextInt(coins.size + 1)))
val expected: Seq[Boolean] = getExpectedResults(inputs, dut.sodaCost)
- val inputVec: Vec[UInt] = VecInit(inputs map {
+ val inputVec: Vec[UInt] = VecInit(inputs.map {
case Some(coin) => (1 << dut.io.indexMap(coin.name)).asUInt(coins.size.W)
- case None => 0.asUInt(coins.size.W)
+ case None => 0.asUInt(coins.size.W)
})
- val expectedVec: Vec[Bool] = VecInit(expected map (_.B))
+ val expectedVec: Vec[Bool] = VecInit(expected.map(_.B))
val (idx, done) = Counter(true.B, testLength + 1)
- when (done) { stop(); stop() } // Two stops for Verilator
+ when(done) { stop(); stop() } // Two stops for Verilator
dut.io.inputs := inputVec(idx).asBools
assert(dut.io.dispense === expectedVec(idx))
}
class VendingMachineGeneratorSpec extends ChiselFlatSpec {
- behavior of "The vending machine generator"
+ behavior.of("The vending machine generator")
it should "generate a vending machine that accepts only nickels and dimes and costs $0.20" in {
val coins = Seq(Nickel, Dime)
diff --git a/src/test/scala/examples/VendingMachineUtils.scala b/src/test/scala/examples/VendingMachineUtils.scala
index 6847768a..8d5aea57 100644
--- a/src/test/scala/examples/VendingMachineUtils.scala
+++ b/src/test/scala/examples/VendingMachineUtils.scala
@@ -24,7 +24,7 @@ object VendingMachineUtils {
for (input <- inputs) {
val incValue = input match {
case Some(coin) => coin.value
- case None => 0
+ case None => 0
}
if (value >= sodaCost) {
outputs.append(true)