Add rocket-chip inspired tests
This commit is contained in:
@@ -223,7 +223,6 @@ class MacroCompilerPass(mems: Option[Seq[Macro]],
|
||||
} else {
|
||||
require(libPort.src.effectiveMaskGran == 1, "only single-bit mask supported for now")
|
||||
|
||||
require(isPowerOfTwo(memPort.src.effectiveMaskGran), "only powers of two masks supported for now")
|
||||
require(isPowerOfTwo(libPort.src.effectiveMaskGran), "only powers of two masks supported for now")
|
||||
|
||||
cat(((low to high) map (i => bits(WRef(mem), i / memPort.src.effectiveMaskGran))).reverse)
|
||||
|
||||
152
macros/src/test/scala/Masks.scala
Normal file
152
macros/src/test/scala/Masks.scala
Normal file
@@ -0,0 +1,152 @@
|
||||
package barstools.macros
|
||||
|
||||
import mdf.macrolib._
|
||||
|
||||
// Test the ability of the compiler to deal with various mask combinations.
|
||||
|
||||
// Simple powers of two with bit-masked lib.
|
||||
|
||||
trait MasksTestSettings {
|
||||
this: MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator =>
|
||||
override lazy val memDepth = 2048
|
||||
override lazy val libDepth = 1024
|
||||
}
|
||||
|
||||
class Masks_PowersOfTwo_8_1 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 64
|
||||
override lazy val memMaskGran = Some(8)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_PowersOfTwo_16_1 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 64
|
||||
override lazy val memMaskGran = Some(16)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_PowersOfTwo_32_1 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 64
|
||||
override lazy val memMaskGran = Some(32)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_PowersOfTwo_64_1 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 64
|
||||
override lazy val memMaskGran = Some(64)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
// Simple powers of two with non bit-masked lib.
|
||||
|
||||
class Masks_PowersOfTwo_32_4 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 128
|
||||
override lazy val memMaskGran = Some(32)
|
||||
override lazy val libMaskGran = Some(4)
|
||||
|
||||
it should "be enabled when non-power of two masks are supported" is (pending)
|
||||
//compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_PowersOfTwo_32_8 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 128
|
||||
override lazy val memMaskGran = Some(32)
|
||||
override lazy val libMaskGran = Some(8)
|
||||
|
||||
it should "be enabled when non-power of two masks are supported" is (pending)
|
||||
//compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_PowersOfTwo_8_8 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 128
|
||||
override lazy val memMaskGran = Some(8)
|
||||
override lazy val libMaskGran = Some(8)
|
||||
|
||||
it should "be enabled when non-power of two masks are supported" is (pending)
|
||||
//compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
// Width as a multiple of the mask, bit-masked lib
|
||||
|
||||
class Masks_IntegerMaskMultiple_20_10 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 20
|
||||
override lazy val memMaskGran = Some(10)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_IntegerMaskMultiple_21_7 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 21
|
||||
override lazy val memMaskGran = Some(21)
|
||||
override lazy val libMaskGran = Some(7)
|
||||
|
||||
it should "be enabled when non-power of two masks are supported" is (pending)
|
||||
//~ compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_IntegerMaskMultiple_21_21 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 21
|
||||
override lazy val memMaskGran = Some(21)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_IntegerMaskMultiple_84_21 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 84
|
||||
override lazy val memMaskGran = Some(21)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_IntegerMaskMultiple_92_23 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 92
|
||||
override lazy val memMaskGran = Some(23)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_IntegerMaskMultiple_117_13 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 117
|
||||
override lazy val memMaskGran = Some(13)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_IntegerMaskMultiple_160_20 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 160
|
||||
override lazy val memMaskGran = Some(20)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
class Masks_IntegerMaskMultiple_184_23 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 184
|
||||
override lazy val memMaskGran = Some(23)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
|
||||
// Width as an non-integer multiple of the mask, bit-masked lib
|
||||
|
||||
class Masks_NonIntegerMaskMultiple_32_3 extends MacroCompilerSpec with HasSRAMGenerator with HasSimpleDepthTestGenerator with MasksTestSettings {
|
||||
override lazy val width = 32
|
||||
override lazy val memMaskGran = Some(3)
|
||||
override lazy val libMaskGran = Some(1)
|
||||
|
||||
it should "be enabled when non-power of two masks are supported" is (pending)
|
||||
//~ compileExecuteAndTest(mem, lib, v, output)
|
||||
}
|
||||
Reference in New Issue
Block a user