diff options
| author | jackkoenig | 2016-10-26 16:40:36 -0700 |
|---|---|---|
| committer | Jack Koenig | 2017-02-02 22:53:03 -0800 |
| commit | dd51b917566e6b30c3f123ca22a0393e73c2afe8 (patch) | |
| tree | f81fce104ccc3405c7924c76618483750a4350bb /src/test/scala/examples/ImplicitStateVendingMachine.scala | |
| parent | b0a328492383108509c322189ed2803f671d7a59 (diff) | |
Revamp VendingMachine.scala as cookbook example
* Move to cookbook
* Change FSM implementation to use switch & is
* Add non-FSM implementation
* Add execution-driven test
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) } + } +} |
