summaryrefslogtreecommitdiff
path: root/src/test/scala/chiselTests/util/random
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/scala/chiselTests/util/random')
-rw-r--r--src/test/scala/chiselTests/util/random/LFSRSpec.scala76
-rw-r--r--src/test/scala/chiselTests/util/random/PRNGSpec.scala28
2 files changed, 57 insertions, 47 deletions
diff --git a/src/test/scala/chiselTests/util/random/LFSRSpec.scala b/src/test/scala/chiselTests/util/random/LFSRSpec.scala
index 975a3c93..d47c2d7d 100644
--- a/src/test/scala/chiselTests/util/random/LFSRSpec.scala
+++ b/src/test/scala/chiselTests/util/random/LFSRSpec.scala
@@ -23,7 +23,7 @@ class LFSRMaxPeriod(gen: => UInt) extends BasicTester {
val (_, wrap) = Counter(started, math.pow(2.0, rv.getWidth).toInt - 1)
- when (rv === seed && started) {
+ when(rv === seed && started) {
chisel3.assert(wrap)
stop()
}
@@ -49,7 +49,7 @@ class LFSRDistribution(gen: => UInt, cycles: Int = 10000) extends BasicTester {
val (trial, done) = Counter(true.B, cycles)
- val rollValue = die0 +& die1 // Note +& is critical because sum will need an extra bit.
+ val rollValue = die0 +& die1 // Note +& is critical because sum will need an extra bit.
bins(rollValue) := bins(rollValue) + 1.U
@@ -88,17 +88,17 @@ class LFSRResetTester(gen: => LFSR, lockUpValue: BigInt) extends BasicTester {
lfsr.io.seed.bits := lockUpValue.U(lfsr.width.W).asBools
lfsr.io.increment := true.B
- when (count === 2.U) {
+ when(count === 2.U) {
assert(lfsr.io.out.asUInt === lockUpValue.U, "LFSR is NOT locked up, but should be!")
}
lfsr.reset := count === 3.U
- when (count === 4.U) {
+ when(count === 4.U) {
assert(lfsr.io.out.asUInt =/= lockUpValue.U, "LFSR is locked up, but should not be after reset!")
}
- when (done) {
+ when(done) {
stop()
}
@@ -110,29 +110,34 @@ class LFSRSpec extends ChiselFlatSpec with Utils {
val testName = s"have a maximal period over a range of widths (${range.head} to ${range.last})" +
s" using ${reduction.getClass}"
it should testName in {
- range
- .foreach{ width =>
- LFSR.tapsMaxPeriod(width).foreach{ taps =>
- info(s"""width $width okay using taps: ${taps.mkString(", ")}""")
- assertTesterPasses(new LFSRMaxPeriod(PRNG(gen(width, taps, reduction))),
- annotations = TesterDriver.verilatorOnly)
- }
+ range.foreach { width =>
+ LFSR.tapsMaxPeriod(width).foreach { taps =>
+ info(s"""width $width okay using taps: ${taps.mkString(", ")}""")
+ assertTesterPasses(
+ new LFSRMaxPeriod(PRNG(gen(width, taps, reduction))),
+ annotations = TesterDriver.verilatorOnly
+ )
}
+ }
}
}
- behavior of "LFSR"
+ behavior.of("LFSR")
it should "throw an exception if initialized to a seed of zero for XOR configuration" in {
- { the [IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
- ChiselStage.elaborate(new FooLFSR(XOR, Some(0))) }
- }.getMessage should include ("Seed cannot be zero")
+ {
+ the[IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
+ ChiselStage.elaborate(new FooLFSR(XOR, Some(0)))
+ }
+ }.getMessage should include("Seed cannot be zero")
}
it should "throw an exception if initialized to a seed of all ones for XNOR configuration" in {
- { the [IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
- ChiselStage.elaborate(new FooLFSR(XNOR, Some(15))) }
- }.getMessage should include ("Seed cannot be all ones")
+ {
+ the[IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
+ ChiselStage.elaborate(new FooLFSR(XNOR, Some(15)))
+ }
+ }.getMessage should include("Seed cannot be all ones")
}
it should "reset correctly without a seed for XOR configuration" in {
@@ -143,34 +148,35 @@ class LFSRSpec extends ChiselFlatSpec with Utils {
assertTesterPasses(new LFSRResetTester(new FooLFSR(XNOR, None), 15))
}
- behavior of "MaximalPeriodGaloisLFSR"
+ behavior.of("MaximalPeriodGaloisLFSR")
it should "throw an exception if no LFSR taps are known" in {
- { the [IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
- ChiselStage.elaborate(new MaxPeriodGaloisLFSR(787)) }
- }.getMessage should include ("No max period LFSR taps stored for requested width")
+ {
+ the[IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
+ ChiselStage.elaborate(new MaxPeriodGaloisLFSR(787))
+ }
+ }.getMessage should include("No max period LFSR taps stored for requested width")
}
- periodCheck((w: Int, t: Set[Int], r: LFSRReduce) => new GaloisLFSR(w, t, reduction=r), XOR, 2 to 16)
- periodCheck((w: Int, t: Set[Int], r: LFSRReduce) => new GaloisLFSR(w, t, reduction=r), XNOR, 2 to 16)
+ periodCheck((w: Int, t: Set[Int], r: LFSRReduce) => new GaloisLFSR(w, t, reduction = r), XOR, 2 to 16)
+ periodCheck((w: Int, t: Set[Int], r: LFSRReduce) => new GaloisLFSR(w, t, reduction = r), XNOR, 2 to 16)
ignore should "have a sane distribution for larger widths" in {
- ((17 to 32) ++ Seq(64, 128, 256, 512, 1024, 2048, 4096))
- .foreach{ width =>
- info(s"width $width okay!")
- assertTesterPasses(new LFSRDistribution(LFSR(width), math.pow(2, 22).toInt))
- }
+ ((17 to 32) ++ Seq(64, 128, 256, 512, 1024, 2048, 4096)).foreach { width =>
+ info(s"width $width okay!")
+ assertTesterPasses(new LFSRDistribution(LFSR(width), math.pow(2, 22).toInt))
+ }
}
- behavior of "MaximalPeriodFibonacciLFSR"
+ behavior.of("MaximalPeriodFibonacciLFSR")
- periodCheck((w: Int, t: Set[Int], r: LFSRReduce) => new FibonacciLFSR(w, t, reduction=r), XOR, 2 to 16)
- periodCheck((w: Int, t: Set[Int], r: LFSRReduce) => new FibonacciLFSR(w, t, reduction=r), XNOR, 2 to 16)
+ periodCheck((w: Int, t: Set[Int], r: LFSRReduce) => new FibonacciLFSR(w, t, reduction = r), XOR, 2 to 16)
+ periodCheck((w: Int, t: Set[Int], r: LFSRReduce) => new FibonacciLFSR(w, t, reduction = r), XNOR, 2 to 16)
- behavior of "LFSR maximal period taps"
+ behavior.of("LFSR maximal period taps")
it should "contain all the expected widths" in {
- ((2 to 786) ++ Seq(1024, 2048, 4096)).foreach(LFSR.tapsMaxPeriod.keys should contain (_))
+ ((2 to 786) ++ Seq(1024, 2048, 4096)).foreach(LFSR.tapsMaxPeriod.keys should contain(_))
}
}
diff --git a/src/test/scala/chiselTests/util/random/PRNGSpec.scala b/src/test/scala/chiselTests/util/random/PRNGSpec.scala
index 71a8635c..36fdf9cb 100644
--- a/src/test/scala/chiselTests/util/random/PRNGSpec.scala
+++ b/src/test/scala/chiselTests/util/random/PRNGSpec.scala
@@ -28,15 +28,15 @@ class PRNGStepTest extends BasicTester {
val (_, done) = Counter(true.B, 16)
- when (count2 === 0.U) {
+ when(count2 === 0.U) {
assert(a === b, "1-step and 2-step PRNGs did not agree! (0b%b != 0b%b)", a, b)
}
- when (count4 === 0.U) {
+ when(count4 === 0.U) {
assert(a === c, "1-step and 4-step PRNGs did not agree!")
}
- when (done) {
+ when(done) {
stop()
}
@@ -52,11 +52,11 @@ class PRNGUpdateSeedTest(updateSeed: Boolean, seed: BigInt, expected: BigInt) ex
a.io.seed.valid := count === 2.U
a.io.seed.bits := seed.U(a.width.W).asBools
- when (count === 3.U) {
+ when(count === 3.U) {
assert(a.io.out.asUInt === expected.U, "Output didn't match!")
}
- when (done) {
+ when(done) {
stop()
}
@@ -64,18 +64,22 @@ class PRNGUpdateSeedTest(updateSeed: Boolean, seed: BigInt, expected: BigInt) ex
class PRNGSpec extends ChiselFlatSpec with Utils {
- behavior of "PRNG"
+ behavior.of("PRNG")
it should "throw an exception if the step size is < 1" in {
- { the [IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
- ChiselStage.elaborate(new CyclePRNG(0, Some(1), 1, true)) }
- }.getMessage should include ("Width must be greater than zero!")
+ {
+ the[IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
+ ChiselStage.elaborate(new CyclePRNG(0, Some(1), 1, true))
+ }
+ }.getMessage should include("Width must be greater than zero!")
}
it should "throw an exception if the step size is <= 0" in {
- { the [IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
- ChiselStage.elaborate(new CyclePRNG(1, Some(1), 0, true)) }
- }.getMessage should include ("Step size must be greater than one!")
+ {
+ the[IllegalArgumentException] thrownBy extractCause[IllegalArgumentException] {
+ ChiselStage.elaborate(new CyclePRNG(1, Some(1), 0, true))
+ }
+ }.getMessage should include("Step size must be greater than one!")
}
it should "handle non-unary steps" in {