Files
chipyard/src/test/scala/mdf/macrolib/ConfReaderSpec.scala
2021-08-10 15:40:58 -07:00

102 lines
3.5 KiB
Scala

package mdf.macrolib
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
class ConfReaderSpec extends AnyFlatSpec with Matchers {
/** Generate a read port in accordance with RenameAnnotatedMemoryPorts. */
def generateReadPort(num: Int, width: Int, depth: Int): MacroPort = {
MacroPort(
address = PolarizedPort(s"R${num}_addr", ActiveHigh),
clock = Some(PolarizedPort(s"R${num}_clk", PositiveEdge)),
output = Some(PolarizedPort(s"R${num}_data", ActiveHigh)),
width = Some(width),
depth = Some(depth)
)
}
/** Generate a write port in accordance with RenameAnnotatedMemoryPorts. */
def generateWritePort(num: Int, width: Int, depth: Int, maskGran: Option[Int] = None): MacroPort = {
MacroPort(
address = PolarizedPort(s"W${num}_addr", ActiveHigh),
clock = Some(PolarizedPort(s"W${num}_clk", PositiveEdge)),
input = Some(PolarizedPort(s"W${num}_data", ActiveHigh)),
maskPort = if (maskGran.isDefined) Some(PolarizedPort(s"W${num}_mask", ActiveHigh)) else None,
maskGran = maskGran,
width = Some(184),
depth = Some(128)
)
}
"ConfReader" should "read a 1rw conf line" in {
val confStr = "name Foo_Bar_mem123_ext depth 128 width 184 ports mrw mask_gran 23"
ConfReader.readSingleLine(confStr) shouldBe SRAMMacro(
name = "Foo_Bar_mem123_ext",
width = 184,
depth = 128,
family = "1rw",
ports = List(
MacroPort(
address = PolarizedPort("RW0_addr", ActiveHigh),
clock = Some(PolarizedPort("RW0_clk", PositiveEdge)),
writeEnable = Some(PolarizedPort("RW0_wmode", ActiveHigh)),
output = Some(PolarizedPort("RW0_wdata", ActiveHigh)),
input = Some(PolarizedPort("RW0_rdata", ActiveHigh)),
maskPort = Some(PolarizedPort("RW0_wmask", ActiveHigh)),
maskGran = Some(23),
width = Some(184),
depth = Some(128)
)
),
extraPorts = List()
)
}
"ConfReader" should "read a 1r1w conf line" in {
val confStr = "name Foo_Bar_mem321_ext depth 128 width 184 ports read,mwrite mask_gran 23"
ConfReader.readSingleLine(confStr) shouldBe SRAMMacro(
name = "Foo_Bar_mem321_ext",
width = 184,
depth = 128,
family = "1r1w",
ports = List(
generateReadPort(0, 184, 128),
generateWritePort(0, 184, 128, Some(23))
),
extraPorts = List()
)
}
"ConfReader" should "read a mixed 1r2w conf line" in {
val confStr = "name Foo_Bar_mem321_ext depth 128 width 184 ports read,mwrite,write mask_gran 23"
ConfReader.readSingleLine(confStr) shouldBe SRAMMacro(
name = "Foo_Bar_mem321_ext",
width = 184,
depth = 128,
family = "1r2w",
ports = List(
generateReadPort(0, 184, 128),
generateWritePort(0, 184, 128, Some(23)),
generateWritePort(1, 184, 128)
),
extraPorts = List()
)
}
"ConfReader" should "read a 42r29w conf line" in {
val confStr =
"name Foo_Bar_mem321_ext depth 128 width 184 ports " + (Seq.fill(42)("read") ++ Seq.fill(29)("mwrite"))
.mkString(",") + " mask_gran 23"
ConfReader.readSingleLine(confStr) shouldBe SRAMMacro(
name = "Foo_Bar_mem321_ext",
width = 184,
depth = 128,
family = "42r29w",
ports = ((0 to 41).map((num: Int) => generateReadPort(num, 184, 128))) ++
((0 to 28).map((num: Int) => generateWritePort(num, 184, 128, Some(23)))),
extraPorts = List()
)
}
}