Make SRAM per port clocks optional
Connects to whatever clock ports are available
This commit is contained in:
committed by
Colin Schmidt
parent
a10a6cca35
commit
45278a6de0
@@ -302,7 +302,7 @@ class MacroCompilerPass(mems: Option[Seq[Macro]],
|
|||||||
case (None, None) => one
|
case (None, None) => one
|
||||||
}
|
}
|
||||||
selectRegs(ref.name) = WRef(regName, tpe)
|
selectRegs(ref.name) = WRef(regName, tpe)
|
||||||
stmts += DefRegister(NoInfo, regName, tpe, WRef(port.clock.name), zero, WRef(regName))
|
stmts += DefRegister(NoInfo, regName, tpe, WRef(port.clock.get.name), zero, WRef(regName))
|
||||||
stmts += Connect(NoInfo, WRef(regName), Mux(enable, WRef(nodeName), WRef(regName), tpe))
|
stmts += Connect(NoInfo, WRef(regName), Mux(enable, WRef(nodeName), WRef(regName), tpe))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -348,9 +348,11 @@ class MacroCompilerPass(mems: Option[Seq[Macro]],
|
|||||||
|
|
||||||
// Clock port mapping
|
// Clock port mapping
|
||||||
/* Palmer: FIXME: I don't handle memories with read/write clocks yet. */
|
/* Palmer: FIXME: I don't handle memories with read/write clocks yet. */
|
||||||
stmts += connectPorts(WRef(memPort.src.clock.name),
|
/* Colin not all libPorts have clocks but all memPorts do*/
|
||||||
libPort.src.clock.name,
|
libPort.src.clock.foreach { cPort =>
|
||||||
libPort.src.clock.polarity)
|
stmts += connectPorts(WRef(memPort.src.clock.get.name),
|
||||||
|
cPort.name,
|
||||||
|
cPort.polarity) }
|
||||||
|
|
||||||
// Adress port mapping
|
// Adress port mapping
|
||||||
/* Palmer: The address port to a memory is just the low-order bits of
|
/* Palmer: The address port to a memory is just the low-order bits of
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class SynFlopsPass(synflops: Boolean, libs: Seq[Macro]) extends firrtl.passes.Pa
|
|||||||
)
|
)
|
||||||
|
|
||||||
val readConnects = lib.readers.zipWithIndex flatMap { case (r, i) =>
|
val readConnects = lib.readers.zipWithIndex flatMap { case (r, i) =>
|
||||||
val clock = portToExpression(r.src.clock)
|
val clock = portToExpression(r.src.clock.get)
|
||||||
val address = portToExpression(r.src.address)
|
val address = portToExpression(r.src.address)
|
||||||
val enable = (r.src chipEnable, r.src readEnable) match {
|
val enable = (r.src chipEnable, r.src readEnable) match {
|
||||||
case (Some(en_port), Some(re_port)) =>
|
case (Some(en_port), Some(re_port)) =>
|
||||||
@@ -63,7 +63,7 @@ class SynFlopsPass(synflops: Boolean, libs: Seq[Macro]) extends firrtl.passes.Pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
val writeConnects = lib.writers.zipWithIndex flatMap { case (w, i) =>
|
val writeConnects = lib.writers.zipWithIndex flatMap { case (w, i) =>
|
||||||
val clock = portToExpression(w.src.clock)
|
val clock = portToExpression(w.src.clock.get)
|
||||||
val address = portToExpression(w.src.address)
|
val address = portToExpression(w.src.address)
|
||||||
val enable = (w.src.chipEnable, w.src.writeEnable) match {
|
val enable = (w.src.chipEnable, w.src.writeEnable) match {
|
||||||
case (Some(en), Some(we)) =>
|
case (Some(en), Some(we)) =>
|
||||||
@@ -95,7 +95,7 @@ class SynFlopsPass(synflops: Boolean, libs: Seq[Macro]) extends firrtl.passes.Pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
val readwriteConnects = lib.readwriters.zipWithIndex flatMap { case (rw, i) =>
|
val readwriteConnects = lib.readwriters.zipWithIndex flatMap { case (rw, i) =>
|
||||||
val clock = portToExpression(rw.src.clock)
|
val clock = portToExpression(rw.src.clock.get)
|
||||||
val address = portToExpression(rw.src.address)
|
val address = portToExpression(rw.src.address)
|
||||||
val wmode = rw.src.writeEnable match {
|
val wmode = rw.src.writeEnable match {
|
||||||
case Some(we) => portToExpression(we)
|
case Some(we) => portToExpression(we)
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ class FirrtlMacroPort(port: MacroPort) {
|
|||||||
|
|
||||||
// Bundle representing this macro port.
|
// Bundle representing this macro port.
|
||||||
val tpe = BundleType(Seq(
|
val tpe = BundleType(Seq(
|
||||||
Field(port.clock.name, Flip, ClockType),
|
|
||||||
Field(port.address.name, Flip, addrType)) ++
|
Field(port.address.name, Flip, addrType)) ++
|
||||||
|
(port.clock map (p => Field(p.name, Flip, ClockType))) ++
|
||||||
(port.input map (p => Field(p.name, Flip, dataType))) ++
|
(port.input map (p => Field(p.name, Flip, dataType))) ++
|
||||||
(port.output map (p => Field(p.name, Default, dataType))) ++
|
(port.output map (p => Field(p.name, Default, dataType))) ++
|
||||||
(port.chipEnable map (p => Field(p.name, Flip, BoolType))) ++
|
(port.chipEnable map (p => Field(p.name, Flip, BoolType))) ++
|
||||||
@@ -93,7 +93,7 @@ object Utils {
|
|||||||
MacroPort(
|
MacroPort(
|
||||||
width=Some(width), depth=Some(depth),
|
width=Some(width), depth=Some(depth),
|
||||||
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
||||||
clock=PolarizedPort(s"${portName}_clk", PositiveEdge),
|
clock=Some(PolarizedPort(s"${portName}_clk", PositiveEdge)),
|
||||||
chipEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
chipEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
||||||
output=Some(PolarizedPort(s"${portName}_data", ActiveHigh))
|
output=Some(PolarizedPort(s"${portName}_data", ActiveHigh))
|
||||||
) }
|
) }
|
||||||
@@ -103,7 +103,7 @@ object Utils {
|
|||||||
MacroPort(
|
MacroPort(
|
||||||
width=Some(width), depth=Some(depth),
|
width=Some(width), depth=Some(depth),
|
||||||
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
||||||
clock=PolarizedPort(s"${portName}_clk", PositiveEdge),
|
clock=Some(PolarizedPort(s"${portName}_clk", PositiveEdge)),
|
||||||
writeEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
writeEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
||||||
input=Some(PolarizedPort(s"${portName}_data", ActiveHigh))
|
input=Some(PolarizedPort(s"${portName}_data", ActiveHigh))
|
||||||
) }
|
) }
|
||||||
@@ -113,7 +113,7 @@ object Utils {
|
|||||||
MacroPort(
|
MacroPort(
|
||||||
width=Some(width), depth=Some(depth),
|
width=Some(width), depth=Some(depth),
|
||||||
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
||||||
clock=PolarizedPort(s"${portName}_clk", PositiveEdge),
|
clock=Some(PolarizedPort(s"${portName}_clk", PositiveEdge)),
|
||||||
writeEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
writeEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
||||||
maskPort=Some(PolarizedPort(s"${portName}_mask", ActiveHigh)),
|
maskPort=Some(PolarizedPort(s"${portName}_mask", ActiveHigh)),
|
||||||
maskGran=maskGran,
|
maskGran=maskGran,
|
||||||
@@ -125,7 +125,7 @@ object Utils {
|
|||||||
MacroPort(
|
MacroPort(
|
||||||
width=Some(width), depth=Some(depth),
|
width=Some(width), depth=Some(depth),
|
||||||
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
||||||
clock=PolarizedPort(s"${portName}_clk", PositiveEdge),
|
clock=Some(PolarizedPort(s"${portName}_clk", PositiveEdge)),
|
||||||
chipEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
chipEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
||||||
writeEnable=Some(PolarizedPort(s"${portName}_wmode", ActiveHigh)),
|
writeEnable=Some(PolarizedPort(s"${portName}_wmode", ActiveHigh)),
|
||||||
input=Some(PolarizedPort(s"${portName}_wdata", ActiveHigh)),
|
input=Some(PolarizedPort(s"${portName}_wdata", ActiveHigh)),
|
||||||
@@ -137,7 +137,7 @@ object Utils {
|
|||||||
MacroPort(
|
MacroPort(
|
||||||
width=Some(width), depth=Some(depth),
|
width=Some(width), depth=Some(depth),
|
||||||
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
address=PolarizedPort(s"${portName}_addr", ActiveHigh),
|
||||||
clock=PolarizedPort(s"${portName}_clk", PositiveEdge),
|
clock=Some(PolarizedPort(s"${portName}_clk", PositiveEdge)),
|
||||||
chipEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
chipEnable=Some(PolarizedPort(s"${portName}_en", ActiveHigh)),
|
||||||
writeEnable=Some(PolarizedPort(s"${portName}_wmode", ActiveHigh)),
|
writeEnable=Some(PolarizedPort(s"${portName}_wmode", ActiveHigh)),
|
||||||
maskPort=Some(PolarizedPort(s"${portName}_wmask", ActiveHigh)),
|
maskPort=Some(PolarizedPort(s"${portName}_wmask", ActiveHigh)),
|
||||||
|
|||||||
2
mdf
2
mdf
Submodule mdf updated: c13e31656e...88478cd2ad
Reference in New Issue
Block a user