-
Notifications
You must be signed in to change notification settings - Fork 65
Expand file tree
/
Copy pathGPIOOverlay.scala
More file actions
35 lines (26 loc) · 1.19 KB
/
GPIOOverlay.scala
File metadata and controls
35 lines (26 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// See LICENSE for license details.
package sifive.fpgashells.shell
import chisel3._
import chisel3.experimental.Analog
import freechips.rocketchip.config._
import freechips.rocketchip.diplomacy._
import freechips.rocketchip.tilelink.TLBusWrapper
import freechips.rocketchip.interrupts.IntInwardNode
import sifive.blocks.devices.gpio._
case class GPIOShellInput()
case class GPIODesignInput(gpioParams: GPIOParams, node: BundleBridgeSource[GPIOPortIO])(implicit val p: Parameters)
case class GPIOOverlayOutput()
case object GPIOOverlayKey extends Field[Seq[DesignPlacer[GPIODesignInput, GPIOShellInput, GPIOOverlayOutput]]](Nil)
trait GPIOShellPlacer[Shell] extends ShellPlacer[GPIODesignInput, GPIOShellInput, GPIOOverlayOutput]
class ShellGPIOPortIO(val numGPIOs: Int = 4) extends Bundle {
val gpio = Vec(numGPIOs, Analog(1.W))
}
abstract class GPIOPlacedOverlay(
val name: String, val di: GPIODesignInput, si: GPIOShellInput)
extends IOPlacedOverlay[ShellGPIOPortIO, GPIODesignInput, GPIOShellInput, GPIOOverlayOutput]
{
implicit val p = di.p
def ioFactory = new ShellGPIOPortIO(di.gpioParams.width)
val tlgpioSink = sinkScope { di.node.makeSink }
def overlayOutput = GPIOOverlayOutput()
}