X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmain%2Fscala%2Fdevices%2Fgpio%2FJTAG.scala;h=e10f19b5fd8871cad71796c1619a1acc6b090578;hb=4d74e8f67f871df93f7bb2dfb2fa8bffb641fc4a;hp=ba40bc663709e102d79d0a638185eedae2d4e8f7;hpb=3f6f10f4eddb8e3949193cf3d3695a6dc3e4b721;p=sifive-blocks.git diff --git a/src/main/scala/devices/gpio/JTAG.scala b/src/main/scala/devices/gpio/JTAG.scala index ba40bc6..e10f19b 100644 --- a/src/main/scala/devices/gpio/JTAG.scala +++ b/src/main/scala/devices/gpio/JTAG.scala @@ -10,32 +10,25 @@ import Chisel._ // to put them otherwise. // ------------------------------------------------------------ -import config._ -import jtag.{JTAGIO} - -class JTAGPinsIO(hasTRSTn: Boolean = true) extends Bundle { - - val TCK = new GPIOPin() - val TMS = new GPIOPin() - val TDI = new GPIOPin() - val TDO = new GPIOPin() - val TRSTn = if (hasTRSTn) Option(new GPIOPin()) else None - -} - -class JTAGGPIOPort(hasTRSTn: Boolean = true)(implicit p: Parameters) extends Module { - - val io = new Bundle { - // TODO: make this not hard-coded true. - val jtag = new JTAGIO(hasTRSTn) - val pins = new JTAGPinsIO(hasTRSTn) +import freechips.rocketchip.config._ +import freechips.rocketchip.jtag.{JTAGIO} +import sifive.blocks.devices.pinctrl.{Pin, PinCtrl} + +class JTAGPins[T <: Pin](pingen: () => T, hasTRSTn: Boolean = true) extends Bundle { + + val TCK = pingen() + val TMS = pingen() + val TDI = pingen() + val TDO = pingen() + val TRSTn = if (hasTRSTn) Option(pingen()) else None + + def fromJTAGPort(jtag: JTAGIO): Unit = { + jtag.TCK := TCK.inputPin (pue = Bool(true)).asClock + jtag.TMS := TMS.inputPin (pue = Bool(true)) + jtag.TDI := TDI.inputPin(pue = Bool(true)) + jtag.TRSTn.foreach{t => t := TRSTn.get.inputPin(pue = Bool(true))} + + TDO.outputPin(jtag.TDO.data) + TDO.o.oe := jtag.TDO.driven } - - io.jtag.TCK := GPIOInputPinCtrl(io.pins.TCK, pue = Bool(true)).asClock - io.jtag.TMS := GPIOInputPinCtrl(io.pins.TMS, pue = Bool(true)) - io.jtag.TDI := GPIOInputPinCtrl(io.pins.TDI, pue = Bool(true)) - io.jtag.TRSTn.foreach{t => t := GPIOInputPinCtrl(io.pins.TRSTn.get, pue = Bool(true))} - - GPIOOutputPinCtrl(io.pins.TDO, io.jtag.TDO.data) - io.pins.TDO.o.oe := io.jtag.TDO.driven }