// even though it looks like something that more directly talks to
// a pin. It also makes it possible to change the exact
// type of pad this connects to.
-class GPIOPins[T <: Pin] (pingen: ()=> T, c: GPIOParams) extends Bundle {
-
+class GPIOSignals[T <: Data] (pingen: ()=> T, c: GPIOParams) extends Bundle {
val pins = Vec(c.width, pingen())
+}
+
+class GPIOPins[T <: Pin] (pingen: ()=> T, c: GPIOParams) extends GPIOSignals[T](pingen, c)
- override def cloneType: this.type =
- this.getClass.getConstructors.head.newInstance(pingen, c).asInstanceOf[this.type]
+object GPIOPinsFromPort {
- def fromGPIOPort(port: GPIOPortIO){
+ def apply[T <: Pin](pins: GPIOSignals[T], port: GPIOPortIO){
// This will just match up the components of the Bundle that
// exist in both.
- (pins zip port.pins) foreach {case (pin, port) =>
+ (pins.pins zip port.pins) foreach {case (pin, port) =>
pin <> port
}
}