diff options
Diffstat (limited to 'src/test/scala/examples/ImplicitStateVendingMachine.scala')
| -rw-r--r-- | src/test/scala/examples/ImplicitStateVendingMachine.scala | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/test/scala/examples/ImplicitStateVendingMachine.scala b/src/test/scala/examples/ImplicitStateVendingMachine.scala new file mode 100644 index 00000000..ae1e28dd --- /dev/null +++ b/src/test/scala/examples/ImplicitStateVendingMachine.scala @@ -0,0 +1,31 @@ +// See LICENSE for license details. + +package examples + +import chiselTests.ChiselFlatSpec +import chisel3._ + +// Vending machine implemented with an implicit state machine +class ImplicitStateVendingMachine extends SimpleVendingMachine { + // We let the value of nickel be 1 and dime be 2 for efficiency reasons + val value = Reg(init = 0.asUInt(3.W)) + val incValue = Wire(init = 0.asUInt(3.W)) + val doDispense = value >= 4.U // 4 * nickel as 1 == $0.20 + + when (doDispense) { + value := 0.U // No change given + } .otherwise { + value := value + incValue + } + + when (io.nickel) { incValue := 1.U } + when (io.dime) { incValue := 2.U } + + io.dispense := doDispense +} + +class ImplicitStateVendingMachineSpec extends ChiselFlatSpec { + "An vending machine implemented with implicit state" should "work" in { + assertTesterPasses { new SimpleVendingMachineTester(new ImplicitStateVendingMachine) } + } +} |
