Switch to PeripheryUARTTSI
This commit is contained in:
@@ -13,6 +13,7 @@ import freechips.rocketchip.devices.tilelink._
|
|||||||
|
|
||||||
// DOC include start: DigitalTop
|
// DOC include start: DigitalTop
|
||||||
class DigitalTop(implicit p: Parameters) extends ChipyardSystem
|
class DigitalTop(implicit p: Parameters) extends ChipyardSystem
|
||||||
|
with testchipip.CanHavePeripheryUARTTSI // Enables optional UART-based TSI transport
|
||||||
with testchipip.CanHavePeripheryCustomBootPin // Enables optional custom boot pin
|
with testchipip.CanHavePeripheryCustomBootPin // Enables optional custom boot pin
|
||||||
with testchipip.CanHavePeripheryBootAddrReg // Use programmable boot address register
|
with testchipip.CanHavePeripheryBootAddrReg // Use programmable boot address register
|
||||||
with testchipip.CanHaveTraceIO // Enables optionally adding trace IO
|
with testchipip.CanHaveTraceIO // Enables optionally adding trace IO
|
||||||
|
|||||||
@@ -411,6 +411,15 @@ class WithCustomBootPin extends OverrideIOBinder({
|
|||||||
}).getOrElse((Nil, Nil))
|
}).getOrElse((Nil, Nil))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
class WithUARTTSIPunchthrough extends OverrideIOBinder({
|
||||||
|
(system: CanHavePeripheryUARTTSI) => system.uart_tsi.map({ p =>
|
||||||
|
val sys = system.asInstanceOf[BaseSubsystem]
|
||||||
|
val port = IO(new UARTPortIO(p.c))
|
||||||
|
port <> p
|
||||||
|
(Seq(port), Nil)
|
||||||
|
}).getOrElse((Nil, Nil))
|
||||||
|
})
|
||||||
|
|
||||||
class WithTLMemPunchthrough extends OverrideIOBinder({
|
class WithTLMemPunchthrough extends OverrideIOBinder({
|
||||||
(system: CanHaveMasterTLMemPort) => {
|
(system: CanHaveMasterTLMemPort) => {
|
||||||
val io_tl_mem_pins_temp = IO(DataMirror.internal.chiselTypeClone[HeterogeneousBag[TLBundle]](system.mem_tl)).suggestName("tl_slave")
|
val io_tl_mem_pins_temp = IO(DataMirror.internal.chiselTypeClone[HeterogeneousBag[TLBundle]](system.mem_tl)).suggestName("tl_slave")
|
||||||
|
|||||||
@@ -22,25 +22,29 @@ class AbstractConfig extends Config(
|
|||||||
new chipyard.harness.WithTieOffInterrupts ++ // tie-off interrupt ports, if present
|
new chipyard.harness.WithTieOffInterrupts ++ // tie-off interrupt ports, if present
|
||||||
new chipyard.harness.WithTieOffL2FBusAXI ++ // tie-off external AXI4 master, if present
|
new chipyard.harness.WithTieOffL2FBusAXI ++ // tie-off external AXI4 master, if present
|
||||||
new chipyard.harness.WithCustomBootPinPlusArg ++ // drive custom-boot pin with a plusarg, if custom-boot-pin is present
|
new chipyard.harness.WithCustomBootPinPlusArg ++ // drive custom-boot pin with a plusarg, if custom-boot-pin is present
|
||||||
|
new chipyard.harness.WithSimUARTToUARTTSI ++ // connect a SimUART to the UART-TSI port
|
||||||
new chipyard.harness.WithClockAndResetFromHarness ++ // all Clock/Reset I/O in ChipTop should be driven by harnessClockInstantiator
|
new chipyard.harness.WithClockAndResetFromHarness ++ // all Clock/Reset I/O in ChipTop should be driven by harnessClockInstantiator
|
||||||
new chipyard.harness.WithAbsoluteFreqHarnessClockInstantiator ++ // generate clocks in harness with unsynthesizable ClockSourceAtFreqMHz
|
new chipyard.harness.WithAbsoluteFreqHarnessClockInstantiator ++ // generate clocks in harness with unsynthesizable ClockSourceAtFreqMHz
|
||||||
|
|
||||||
// The IOBinders instantiate ChipTop IOs to match desired digital IOs
|
// The IOBinders instantiate ChipTop IOs to match desired digital IOs
|
||||||
// IOCells are generated for "Chip-like" IOs, while simulation-only IOs are directly punched through
|
// IOCells are generated for "Chip-like" IOs
|
||||||
|
new chipyard.iobinders.WithSerialTLIOCells ++
|
||||||
|
new chipyard.iobinders.WithDebugIOCells ++
|
||||||
|
new chipyard.iobinders.WithUARTIOCells ++
|
||||||
|
new chipyard.iobinders.WithGPIOCells ++
|
||||||
|
new chipyard.iobinders.WithSPIIOCells ++
|
||||||
|
new chipyard.iobinders.WithExtInterruptIOCells ++
|
||||||
|
new chipyard.iobinders.WithCustomBootPin ++
|
||||||
|
// The "punchtrough" IOBInders below don't generate IOCells, as these interfaces shouldn't really be mapped to ASIC IO
|
||||||
|
// Instead, they directly pass through the DigitalTop ports to ports in the ChipTop
|
||||||
new chipyard.iobinders.WithAXI4MemPunchthrough ++
|
new chipyard.iobinders.WithAXI4MemPunchthrough ++
|
||||||
new chipyard.iobinders.WithAXI4MMIOPunchthrough ++
|
new chipyard.iobinders.WithAXI4MMIOPunchthrough ++
|
||||||
new chipyard.iobinders.WithTLMemPunchthrough ++
|
new chipyard.iobinders.WithTLMemPunchthrough ++
|
||||||
new chipyard.iobinders.WithL2FBusAXI4Punchthrough ++
|
new chipyard.iobinders.WithL2FBusAXI4Punchthrough ++
|
||||||
new chipyard.iobinders.WithBlockDeviceIOPunchthrough ++
|
new chipyard.iobinders.WithBlockDeviceIOPunchthrough ++
|
||||||
new chipyard.iobinders.WithNICIOPunchthrough ++
|
new chipyard.iobinders.WithNICIOPunchthrough ++
|
||||||
new chipyard.iobinders.WithSerialTLIOCells ++
|
|
||||||
new chipyard.iobinders.WithDebugIOCells ++
|
|
||||||
new chipyard.iobinders.WithUARTIOCells ++
|
|
||||||
new chipyard.iobinders.WithGPIOCells ++
|
|
||||||
new chipyard.iobinders.WithSPIIOCells ++
|
|
||||||
new chipyard.iobinders.WithTraceIOPunchthrough ++
|
new chipyard.iobinders.WithTraceIOPunchthrough ++
|
||||||
new chipyard.iobinders.WithExtInterruptIOCells ++
|
new chipyard.iobinders.WithUARTTSIPunchthrough ++
|
||||||
new chipyard.iobinders.WithCustomBootPin ++
|
|
||||||
|
|
||||||
// By default, punch out IOs to the Harness
|
// By default, punch out IOs to the Harness
|
||||||
new chipyard.clocking.WithPassthroughClockGenerator ++
|
new chipyard.clocking.WithPassthroughClockGenerator ++
|
||||||
|
|||||||
@@ -80,3 +80,13 @@ class QuadChannelRocketConfig extends Config(
|
|||||||
new freechips.rocketchip.subsystem.WithNMemoryChannels(4) ++ // 4 AXI4 channels
|
new freechips.rocketchip.subsystem.WithNMemoryChannels(4) ++ // 4 AXI4 channels
|
||||||
new freechips.rocketchip.subsystem.WithNBigCores(1) ++
|
new freechips.rocketchip.subsystem.WithNBigCores(1) ++
|
||||||
new chipyard.config.AbstractConfig)
|
new chipyard.config.AbstractConfig)
|
||||||
|
|
||||||
|
class UARTTSIRocketConfig extends Config(
|
||||||
|
new chipyard.harness.WithSerialTLTiedOff ++
|
||||||
|
new testchipip.WithUARTTSIClient ++
|
||||||
|
new chipyard.config.WithMemoryBusFrequency(10) ++
|
||||||
|
new chipyard.config.WithFrontBusFrequency(10) ++
|
||||||
|
new chipyard.config.WithPeripheryBusFrequency(10) ++
|
||||||
|
new freechips.rocketchip.subsystem.WithNBigCores(1) ++ // single rocket-core
|
||||||
|
new chipyard.config.AbstractConfig)
|
||||||
|
|
||||||
|
|||||||
@@ -19,14 +19,6 @@ class TinyRocketConfig extends Config(
|
|||||||
new freechips.rocketchip.subsystem.With1TinyCore ++ // single tiny rocket-core
|
new freechips.rocketchip.subsystem.With1TinyCore ++ // single tiny rocket-core
|
||||||
new chipyard.config.AbstractConfig)
|
new chipyard.config.AbstractConfig)
|
||||||
|
|
||||||
class UARTTSIRocketConfig extends Config(
|
|
||||||
new chipyard.harness.WithUARTSerial ++
|
|
||||||
new chipyard.config.WithNoUART ++
|
|
||||||
new chipyard.config.WithMemoryBusFrequency(10) ++
|
|
||||||
new chipyard.config.WithPeripheryBusFrequency(10) ++
|
|
||||||
new freechips.rocketchip.subsystem.WithNBigCores(1) ++ // single rocket-core
|
|
||||||
new chipyard.config.AbstractConfig)
|
|
||||||
|
|
||||||
class SimAXIRocketConfig extends Config(
|
class SimAXIRocketConfig extends Config(
|
||||||
new chipyard.harness.WithSimAXIMem ++ // drive the master AXI4 memory with a SimAXIMem, a 1-cycle magic memory, instead of default SimDRAM
|
new chipyard.harness.WithSimAXIMem ++ // drive the master AXI4 memory with a SimAXIMem, a 1-cycle magic memory, instead of default SimDRAM
|
||||||
new freechips.rocketchip.subsystem.WithNBigCores(1) ++
|
new freechips.rocketchip.subsystem.WithNBigCores(1) ++
|
||||||
|
|||||||
@@ -317,21 +317,14 @@ class WithSimTSIOverSerialTL extends OverrideHarnessBinder({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
class WithUARTSerial extends OverrideHarnessBinder({
|
class WithSimUARTToUARTTSI extends OverrideHarnessBinder({
|
||||||
(system: CanHavePeripheryTLSerial, th: HasHarnessInstantiators, ports: Seq[ClockedIO[SerialIO]]) => {
|
(system: CanHavePeripheryUARTTSI, th: HasHarnessInstantiators, ports: Seq[UARTPortIO]) => {
|
||||||
implicit val p = chipyard.iobinders.GetSystemParameters(system)
|
implicit val p = chipyard.iobinders.GetSystemParameters(system)
|
||||||
ports.map({ port =>
|
ports.map({ port =>
|
||||||
val freq = p(PeripheryBusKey).dtsFrequency.get
|
UARTAdapter.connect(Seq(port),
|
||||||
val bits = port.bits
|
baudrate=port.c.initBaudRate,
|
||||||
port.clock := th.harnessBinderClock
|
clockFrequency=th.getHarnessBinderClockFreqHz.toInt,
|
||||||
val ram = TSIHarness.connectRAM(system.serdesser.get, bits, th.harnessBinderReset)
|
forcePty=true)
|
||||||
val uart_to_serial = Module(new UARTToSerial(freq, UARTParams(0)))
|
|
||||||
val serial_width_adapter = Module(new SerialWidthAdapter(
|
|
||||||
8, TSI.WIDTH))
|
|
||||||
ram.module.io.tsi.flipConnect(serial_width_adapter.io.wide)
|
|
||||||
UARTAdapter.connect(Seq(uart_to_serial.io.uart), uart_to_serial.div)
|
|
||||||
serial_width_adapter.io.narrow.flipConnect(uart_to_serial.io.serial)
|
|
||||||
th.success := false.B
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user