Fix PassThroughClockGenerator to handle multiclock properly
This commit is contained in:
@@ -103,20 +103,20 @@ class WithPassthroughClockGenerator extends OverrideLazyIOBinder({
|
|||||||
// This aggregate node should do nothing
|
// This aggregate node should do nothing
|
||||||
val clockGroupAggNode = ClockGroupAggregateNode("fake")
|
val clockGroupAggNode = ClockGroupAggregateNode("fake")
|
||||||
val clockGroupsSourceNode = ClockGroupSourceNode(Seq(ClockGroupSourceParameters()))
|
val clockGroupsSourceNode = ClockGroupSourceNode(Seq(ClockGroupSourceParameters()))
|
||||||
system.allClockGroupsNode :*= clockGroupAggNode := clockGroupsSourceNode
|
system.allClockGroupsNode := clockGroupAggNode := clockGroupsSourceNode
|
||||||
|
|
||||||
InModuleBody {
|
InModuleBody {
|
||||||
val reset_io = IO(Input(AsyncReset()))
|
val reset_io = IO(Input(AsyncReset()))
|
||||||
val clock_ios = clockGroupAggNode.out.map { case (bundle, edge) =>
|
require(clockGroupAggNode.out.size == 1)
|
||||||
val freqs = edge.sink.members.map(_.take.map(_.freqMHz)).flatten
|
val (bundle, edge) = clockGroupAggNode.out(0)
|
||||||
require(freqs.distinct.size == 1)
|
|
||||||
val clock_io = IO(Input(new ClockWithFreq(freqs.head))).suggestName(s"clock_${edge.sink.name}")
|
val clock_ios = (bundle.member.data zip edge.sink.members).map { case (b, m) =>
|
||||||
bundle.member.data.foreach { b =>
|
val freq = m.take.get.freqMHz
|
||||||
b.clock := clock_io.clock
|
val clock_io = IO(Input(new ClockWithFreq(freq))).suggestName(s"clock_${m.name.get}")
|
||||||
b.reset := reset_io
|
b.clock := clock_io.clock
|
||||||
}
|
b.reset := reset_io
|
||||||
clock_io
|
clock_io
|
||||||
}
|
}.toSeq
|
||||||
((clock_ios :+ reset_io), Nil)
|
((clock_ios :+ reset_io), Nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user