// See LICENSE for license details. package chipyard.fpga.nexysvideo import chisel3._ import freechips.rocketchip.subsystem.{PeripheryBusKey} import freechips.rocketchip.tilelink.{TLBundle} import freechips.rocketchip.util.{HeterogeneousBag} import freechips.rocketchip.diplomacy.{LazyRawModuleImp} import sifive.blocks.devices.uart.{UARTParams} import chipyard._ import chipyard.harness._ import chipyard.iobinders._ class WithNexysVideoUARTTSI(uartBaudRate: BigInt = 115200) extends HarnessBinder({ case (th: HasHarnessInstantiators, port: UARTTSIPort, chipId: Int) => { val nexysvideoth = th.asInstanceOf[LazyRawModuleImp].wrapper.asInstanceOf[NexysVideoHarness] nexysvideoth.io_uart_bb.bundle <> port.io.uart nexysvideoth.other_leds(1) := port.io.dropped nexysvideoth.other_leds(2) := port.io.tsi2tl_state(0) nexysvideoth.other_leds(3) := port.io.tsi2tl_state(1) nexysvideoth.other_leds(4) := port.io.tsi2tl_state(2) nexysvideoth.other_leds(5) := port.io.tsi2tl_state(3) } }) class WithNexysVideoDDRTL extends HarnessBinder({ case (th: HasHarnessInstantiators, port: TLMemPort, chipId: Int) => { val nexysTh = th.asInstanceOf[LazyRawModuleImp].wrapper.asInstanceOf[NexysVideoHarness] val bundles = nexysTh.ddrClient.get.out.map(_._1) val ddrClientBundle = Wire(new HeterogeneousBag(bundles.map(_.cloneType))) bundles.zip(ddrClientBundle).foreach { case (bundle, io) => bundle <> io } ddrClientBundle <> port.io } })