diplomacy: add reflection for parent modules to nodes
This commit is contained in:
		| @@ -17,6 +17,11 @@ abstract class LazyModule()(implicit val p: Parameters) | |||||||
|   protected[diplomacy] var info: SourceInfo = UnlocatableSourceInfo |   protected[diplomacy] var info: SourceInfo = UnlocatableSourceInfo | ||||||
|   protected[diplomacy] val parent = LazyModule.scope |   protected[diplomacy] val parent = LazyModule.scope | ||||||
|  |  | ||||||
|  |   def parents: Seq[LazyModule] = parent match { | ||||||
|  |     case None => Nil | ||||||
|  |     case Some(x) => x +: x.parents | ||||||
|  |   } | ||||||
|  |  | ||||||
|   LazyModule.scope = Some(this) |   LazyModule.scope = Some(this) | ||||||
|   parent.foreach(p => p.children = this :: p.children) |   parent.foreach(p => p.children = this :: p.children) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -98,6 +98,8 @@ abstract class BaseNode(implicit val valName: ValName) | |||||||
|   def omitGraphML = outputs.isEmpty && inputs.isEmpty |   def omitGraphML = outputs.isEmpty && inputs.isEmpty | ||||||
|   lazy val nodedebugstring: String = "" |   lazy val nodedebugstring: String = "" | ||||||
|  |  | ||||||
|  |   def parents: Seq[LazyModule] = lazyModule +: lazyModule.parents | ||||||
|  |  | ||||||
|   def wirePrefix = { |   def wirePrefix = { | ||||||
|     val camelCase = "([a-z])([A-Z])".r |     val camelCase = "([a-z])([A-Z])".r | ||||||
|     val decamel = camelCase.replaceAllIn(valName.name, _ match { case camelCase(l, h) => l + "_" + h }) |     val decamel = camelCase.replaceAllIn(valName.name, _ match { case camelCase(l, h) => l + "_" + h }) | ||||||
| @@ -129,6 +131,7 @@ case class NodeHandle[DI, UI, BI <: Data, DO, UO, BO <: Data] | |||||||
| trait InwardNodeHandle[DI, UI, BI <: Data] | trait InwardNodeHandle[DI, UI, BI <: Data] | ||||||
| { | { | ||||||
|   protected[diplomacy] val inward: InwardNode[DI, UI, BI] |   protected[diplomacy] val inward: InwardNode[DI, UI, BI] | ||||||
|  |   def parentsIn: Seq[LazyModule] = inward.parents | ||||||
|   def := (h: OutwardNodeHandle[DI, UI, BI])(implicit p: Parameters, sourceInfo: SourceInfo) { inward.:=(h)(p, sourceInfo) } |   def := (h: OutwardNodeHandle[DI, UI, BI])(implicit p: Parameters, sourceInfo: SourceInfo) { inward.:=(h)(p, sourceInfo) } | ||||||
|   def :*= (h: OutwardNodeHandle[DI, UI, BI])(implicit p: Parameters, sourceInfo: SourceInfo) { inward.:*=(h)(p, sourceInfo) } |   def :*= (h: OutwardNodeHandle[DI, UI, BI])(implicit p: Parameters, sourceInfo: SourceInfo) { inward.:*=(h)(p, sourceInfo) } | ||||||
|   def :=* (h: OutwardNodeHandle[DI, UI, BI])(implicit p: Parameters, sourceInfo: SourceInfo) { inward.:=*(h)(p, sourceInfo) } |   def :=* (h: OutwardNodeHandle[DI, UI, BI])(implicit p: Parameters, sourceInfo: SourceInfo) { inward.:=*(h)(p, sourceInfo) } | ||||||
| @@ -170,6 +173,7 @@ trait InwardNode[DI, UI, BI <: Data] extends BaseNode with InwardNodeHandle[DI, | |||||||
| trait OutwardNodeHandle[DO, UO, BO <: Data] | trait OutwardNodeHandle[DO, UO, BO <: Data] | ||||||
| { | { | ||||||
|   protected[diplomacy] val outward: OutwardNode[DO, UO, BO] |   protected[diplomacy] val outward: OutwardNode[DO, UO, BO] | ||||||
|  |   def parentsOut: Seq[LazyModule] = outward.parents | ||||||
| } | } | ||||||
|  |  | ||||||
| trait OutwardNode[DO, UO, BO <: Data] extends BaseNode with OutwardNodeHandle[DO, UO, BO] | trait OutwardNode[DO, UO, BO <: Data] extends BaseNode with OutwardNodeHandle[DO, UO, BO] | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user