import Chisel._
import config.Field
-import diplomacy.LazyModule
-import rocketchip.{
- HasTopLevelNetworks,
- HasTopLevelNetworksBundle,
- HasTopLevelNetworksModule
-}
+import diplomacy.{LazyModule,LazyMultiIOModuleImp}
+import rocketchip.HasSystemNetworks
import uncore.tilelink2.TLFragmenter
import util.HeterogeneousBag
case object PeripheryGPIOKey extends Field[Seq[GPIOParams]]
-trait HasPeripheryGPIO extends HasTopLevelNetworks {
+trait HasPeripheryGPIO extends HasSystemNetworks {
val gpioParams = p(PeripheryGPIOKey)
val gpio = gpioParams map {params =>
val gpio = LazyModule(new TLGPIO(peripheryBusBytes, params))
}
}
-trait HasPeripheryGPIOBundle extends HasTopLevelNetworksBundle {
- val outer: HasPeripheryGPIO
- val gpio = HeterogeneousBag(outer.gpioParams.map(new GPIOPortIO(_)))
+trait HasPeripheryGPIOBundle {
+ val gpio: HeterogeneousBag[GPIOPortIO]
}
-trait HasPeripheryGPIOModule extends HasTopLevelNetworksModule {
+trait HasPeripheryGPIOModuleImp extends LazyMultiIOModuleImp with HasPeripheryGPIOBundle {
val outer: HasPeripheryGPIO
- val io: HasPeripheryGPIOBundle
- (io.gpio zip outer.gpio) foreach { case (io, device) =>
+ val gpio = IO(HeterogeneousBag(outer.gpioParams.map(new GPIOPortIO(_))))
+
+ (gpio zip outer.gpio) foreach { case (io, device) =>
io <> device.module.io.port
}
}
import Chisel._
import config.Field
-import diplomacy.LazyModule
-import rocketchip.{HasTopLevelNetworks,HasTopLevelNetworksBundle,HasTopLevelNetworksModule}
+import diplomacy.{LazyModule,LazyMultiIOModuleImp}
+import rocketchip.{HasSystemNetworks}
import uncore.tilelink2.TLFragmenter
case object PeripheryI2CKey extends Field[Seq[I2CParams]]
-trait HasPeripheryI2C extends HasTopLevelNetworks {
+trait HasPeripheryI2C extends HasSystemNetworks {
val i2cParams = p(PeripheryI2CKey)
val i2c = i2cParams map { params =>
val i2c = LazyModule(new TLI2C(peripheryBusBytes, params))
}
}
-trait HasPeripheryI2CBundle extends HasTopLevelNetworksBundle{
- val outer: HasPeripheryI2C
- val i2cs = Vec(outer.i2cParams.size, new I2CPort)
+trait HasPeripheryI2CBundle {
+ val i2cs: Vec[I2CPort]
+
+ def toGPIOPins(dummy: Int = 1): Seq[I2CGPIOPort] = i2cs.map { i =>
+ val pin = Module(new I2CGPIOPort)
+ pin.io.i2c <> i
+ pin
+ }
}
-trait HasPeripheryI2CModule extends HasTopLevelNetworksModule {
+trait HasPeripheryI2CModuleImp extends LazyMultiIOModuleImp with HasPeripheryI2CBundle {
val outer: HasPeripheryI2C
- val io: HasPeripheryI2CBundle
- (io.i2cs zip outer.i2c).foreach { case (io, device) =>
+ val i2cs = IO(Vec(outer.i2cParams.size, new I2CPort))
+
+ (i2cs zip outer.i2c).foreach { case (io, device) =>
io <> device.module.io.port
}
}
import Chisel._
import config.Field
-import coreplex.CoreplexRISCVPlatform
-import diplomacy.LazyModule
-import rocketchip.{
- HasTopLevelNetworks,
- HasTopLevelNetworksBundle,
- HasTopLevelNetworksModule
-}
+import diplomacy.{LazyModule, LazyMultiIOModuleImp}
+import rocketchip.{HasSystemNetworks, HasCoreplexRISCVPlatform}
import uncore.tilelink2.{IntXing, TLAsyncCrossingSource, TLFragmenter}
+import util.ResetCatchAndSync
case object PeripheryMockAONKey extends Field[MockAONParams]
-trait HasPeripheryMockAON extends HasTopLevelNetworks {
- val coreplex: CoreplexRISCVPlatform
-
+trait HasPeripheryMockAON extends HasSystemNetworks with HasCoreplexRISCVPlatform {
// We override the clock & Reset here so that all synchronizers, etc
// are in the proper clock domain.
val mockAONParams= p(PeripheryMockAONKey)
intBus.intnode := aon_int.intnode
}
-trait HasPeripheryMockAONBundle extends HasTopLevelNetworksBundle {
- val aon = new MockAONWrapperBundle()
+trait HasPeripheryMockAONBundle {
+ val aon: MockAONWrapperBundle
+ def coreResetCatchAndSync(core_clock: Clock) = {
+ ResetCatchAndSync(core_clock, aon.rsts.corerst, 20)
+ }
}
-trait HasPeripheryMockAONModule extends HasTopLevelNetworksModule {
+trait HasPeripheryMockAONModuleImp extends LazyMultiIOModuleImp with HasPeripheryMockAONBundle {
val outer: HasPeripheryMockAON
- val io: HasPeripheryMockAONBundle
+ val aon = IO(new MockAONWrapperBundle)
- io.aon <> outer.aon.module.io
+ aon <> outer.aon.module.io
// Explicit clock & reset are unused in MockAONWrapper.
// Tie to check this assumption.
import Chisel._
import config.Field
-import diplomacy.LazyModule
-import rocketchip.{
- HasTopLevelNetworks,
- HasTopLevelNetworksBundle,
- HasTopLevelNetworksModule
-}
+import diplomacy.{LazyModule,LazyMultiIOModuleImp}
+import rocketchip.HasSystemNetworks
import uncore.tilelink2.TLFragmenter
import util.HeterogeneousBag
import sifive.blocks.devices.gpio._
-class PWMPortIO(c: PWMParams) extends Bundle {
+class PWMPortIO(val c: PWMParams) extends Bundle {
val port = Vec(c.ncmp, Bool()).asOutput
override def cloneType: this.type = new PWMPortIO(c).asInstanceOf[this.type]
}
-class PWMPinsIO(c: PWMParams) extends Bundle {
+class PWMPinsIO(val c: PWMParams) extends Bundle {
val pwm = Vec(c.ncmp, new GPIOPin)
}
-class PWMGPIOPort(c: PWMParams) extends Module {
+class PWMGPIOPort(val c: PWMParams) extends Module {
val io = new Bundle {
val pwm = new PWMPortIO(c).flip()
val pins = new PWMPinsIO(c)
case object PeripheryPWMKey extends Field[Seq[PWMParams]]
-trait HasPeripheryPWM extends HasTopLevelNetworks {
+trait HasPeripheryPWM extends HasSystemNetworks {
val pwmParams = p(PeripheryPWMKey)
val pwms = pwmParams map { params =>
val pwm = LazyModule(new TLPWM(peripheryBusBytes, params))
}
}
-trait HasPeripheryPWMBundle extends HasTopLevelNetworksBundle {
- val outer: HasPeripheryPWM
- val pwms = HeterogeneousBag(outer.pwmParams.map(new PWMPortIO(_)))
+trait HasPeripheryPWMBundle {
+ val pwms: HeterogeneousBag[PWMPortIO]
+
+ def PWMtoGPIOPins(dummy: Int = 1): Seq[PWMGPIOPort] = pwms.map { p =>
+ val pin = Module(new PWMGPIOPort(p.c))
+ pin.io.pwm <> p
+ pin
+ }
}
-trait HasPeripheryPWMModule extends HasTopLevelNetworksModule {
+trait HasPeripheryPWMModuleImp extends LazyMultiIOModuleImp with HasPeripheryPWMBundle {
val outer: HasPeripheryPWM
- val io: HasPeripheryPWMBundle
+ val pwms = IO(HeterogeneousBag(outer.pwmParams.map(new PWMPortIO(_))))
- (io.pwms zip outer.pwms) foreach { case (io, device) =>
+ (pwms zip outer.pwms) foreach { case (io, device) =>
io.port := device.module.io.gpio
}
}
import Chisel._
import config.Field
-import diplomacy.LazyModule
-import rocketchip.{
- HasTopLevelNetworks,
- HasTopLevelNetworksBundle,
- HasTopLevelNetworksModule
-}
-import uncore.tilelink2.{TLFragmenter, TLWidthWidget}
+import diplomacy.{LazyModule,LazyMultiIOModuleImp}
+import rocketchip.HasSystemNetworks
+import uncore.tilelink2.{TLFragmenter,TLWidthWidget}
import util.HeterogeneousBag
case object PeripherySPIKey extends Field[Seq[SPIParams]]
-trait HasPeripherySPI extends HasTopLevelNetworks {
+trait HasPeripherySPI extends HasSystemNetworks {
val spiParams = p(PeripherySPIKey)
val spis = spiParams map { params =>
val spi = LazyModule(new TLSPI(peripheryBusBytes, params))
}
}
-trait HasPeripherySPIBundle extends HasTopLevelNetworksBundle {
- val outer: HasPeripherySPI
- val spis = HeterogeneousBag(outer.spiParams.map(new SPIPortIO(_)))
+trait HasPeripherySPIBundle {
+ val spis: HeterogeneousBag[SPIPortIO]
+
+ def SPItoGPIOPins(dummy: Int = 1): Seq[SPIGPIOPort] = spis.map { s =>
+ val pin = Module(new SPIGPIOPort(s.c))
+ pin.io.spi <> s
+ pin
+ }
}
-trait HasPeripherySPIModule extends HasTopLevelNetworksModule {
+trait HasPeripherySPIModuleImp extends LazyMultiIOModuleImp with HasPeripherySPIBundle {
val outer: HasPeripherySPI
- val io: HasPeripherySPIBundle
- (io.spis zip outer.spis).foreach { case (io, device) =>
+ val spis = IO(HeterogeneousBag(outer.spiParams.map(new SPIPortIO(_))))
+
+ (spis zip outer.spis).foreach { case (io, device) =>
io <> device.module.io.port
}
}
case object PeripherySPIFlashKey extends Field[Seq[SPIFlashParams]]
-trait HasPeripherySPIFlash extends HasTopLevelNetworks {
+trait HasPeripherySPIFlash extends HasSystemNetworks {
val spiFlashParams = p(PeripherySPIFlashKey)
val qspi = spiFlashParams map { params =>
val qspi = LazyModule(new TLSPIFlash(peripheryBusBytes, params))
}
}
-trait HasPeripherySPIFlashBundle extends HasTopLevelNetworksBundle {
- val outer: HasPeripherySPIFlash
- val qspi = HeterogeneousBag(outer.spiFlashParams.map(new SPIPortIO(_)))
+trait HasPeripherySPIFlashBundle {
+ val qspi: HeterogeneousBag[SPIPortIO]
}
-trait HasPeripherySPIFlashModule extends HasTopLevelNetworksModule {
+trait HasPeripherySPIFlashModuleImp extends LazyMultiIOModuleImp with HasPeripherySPIFlashBundle {
val outer: HasPeripherySPIFlash
- val io: HasPeripherySPIFlashBundle
+ val qspi = IO(HeterogeneousBag(outer.spiFlashParams.map(new SPIPortIO(_))))
- (io.qspi zip outer.qspi) foreach { case (io, device) =>
+ (qspi zip outer.qspi) foreach { case (io, device) =>
io <> device.module.io.port
}
}
import Chisel._
import config.Field
-import diplomacy.LazyModule
-import rocketchip.{
- HasTopLevelNetworks,
- HasTopLevelNetworksBundle,
- HasTopLevelNetworksModule
-}
-import uncore.tilelink2._
+import diplomacy.{LazyModule, LazyMultiIOModuleImp}
+import rocketchip.HasSystemNetworks
+import uncore.tilelink2.TLFragmenter
import sifive.blocks.devices.gpio.{GPIOPin, GPIOOutputPinCtrl, GPIOInputPinCtrl}
import sifive.blocks.util.ShiftRegisterInit
case object PeripheryUARTKey extends Field[Seq[UARTParams]]
-trait HasPeripheryUART extends HasTopLevelNetworks {
+trait HasPeripheryUART extends HasSystemNetworks {
val uartParams = p(PeripheryUARTKey)
val uarts = uartParams map { params =>
val uart = LazyModule(new TLUART(peripheryBusBytes, params))
}
}
-trait HasPeripheryUARTBundle extends HasTopLevelNetworksBundle {
- val outer: HasPeripheryUART
- val uarts = Vec(outer.uartParams.size, new UARTPortIO)
+trait HasPeripheryUARTBundle {
+ val uarts: Vec[UARTPortIO]
+
+ def tieoffUARTs(dummy: Int = 1) {
+ uarts.foreach { _.rxd := UInt(1) }
+ }
+
+ def UARTtoGPIOPins(dummy: Int = 1): Seq[UARTGPIOPort] = uarts.map { u =>
+ val pin = Module(new UARTGPIOPort)
+ pin.io.uart <> u
+ pin
+ }
}
-trait HasPeripheryUARTModule extends HasTopLevelNetworksModule {
+trait HasPeripheryUARTModuleImp extends LazyMultiIOModuleImp with HasPeripheryUARTBundle {
val outer: HasPeripheryUART
- val io: HasPeripheryUARTBundle
- (io.uarts zip outer.uarts).foreach { case (io, device) =>
+ val uarts = IO(Vec(outer.uartParams.size, new UARTPortIO))
+
+ (uarts zip outer.uarts).foreach { case (io, device) =>
io <> device.module.io.port
}
}
package sifive.blocks.devices.xilinxvc707mig
import Chisel._
-import diplomacy._
-import rocketchip.{
- HasTopLevelNetworks,
- HasTopLevelNetworksModule,
- HasTopLevelNetworksBundle
-}
-import coreplex.BankedL2Config
+import diplomacy.{LazyModule, LazyMultiIOModuleImp}
+import rocketchip.HasSystemNetworks
-trait HasPeripheryXilinxVC707MIG extends HasTopLevelNetworks {
- val module: HasPeripheryXilinxVC707MIGModule
+trait HasPeripheryXilinxVC707MIG extends HasSystemNetworks {
+ val module: HasPeripheryXilinxVC707MIGModuleImp
val xilinxvc707mig = LazyModule(new XilinxVC707MIG)
- require(p(BankedL2Config).nMemoryChannels == 1, "Coreplex must have 1 master memory port")
+ require(nMemoryChannels == 1, "Coreplex must have 1 master memory port")
xilinxvc707mig.node := mem(0).node
}
-trait HasPeripheryXilinxVC707MIGBundle extends HasTopLevelNetworksBundle {
- val xilinxvc707mig = new XilinxVC707MIGIO
+trait HasPeripheryXilinxVC707MIGBundle {
+ val xilinxvc707mig: XilinxVC707MIGIO
+ def connectXilinxVC707MIGToPads(pads: XilinxVC707MIGPads) {
+ pads <> xilinxvc707mig
+ }
}
-trait HasPeripheryXilinxVC707MIGModule extends HasTopLevelNetworksModule {
+trait HasPeripheryXilinxVC707MIGModuleImp extends LazyMultiIOModuleImp
+ with HasPeripheryXilinxVC707MIGBundle {
val outer: HasPeripheryXilinxVC707MIG
- val io: HasPeripheryXilinxVC707MIGBundle
+ val xilinxvc707mig = IO(new XilinxVC707MIGIO)
- io.xilinxvc707mig <> outer.xilinxvc707mig.module.io.port
+ xilinxvc707mig <> outer.xilinxvc707mig.module.io.port
}
package sifive.blocks.devices.xilinxvc707pciex1
import Chisel._
-import diplomacy.LazyModule
-import rocketchip.{
- HasTopLevelNetworks,
- HasTopLevelNetworksModule,
- HasTopLevelNetworksBundle
-}
+import diplomacy.{LazyModule, LazyMultiIOModuleImp}
+import rocketchip.HasSystemNetworks
import uncore.tilelink2._
-trait HasPeripheryXilinxVC707PCIeX1 extends HasTopLevelNetworks {
-
+trait HasPeripheryXilinxVC707PCIeX1 extends HasSystemNetworks {
val xilinxvc707pcie = LazyModule(new XilinxVC707PCIeX1)
private val intXing = LazyModule(new IntXing)
intXing.intnode := xilinxvc707pcie.intnode
}
-trait HasPeripheryXilinxVC707PCIeX1Bundle extends HasTopLevelNetworksBundle {
- val xilinxvc707pcie = new XilinxVC707PCIeX1IO
+trait HasPeripheryXilinxVC707PCIeX1Bundle {
+ val xilinxvc707pcie: XilinxVC707PCIeX1IO
+ def connectXilinxVC707PCIeX1ToPads(pads: XilinxVC707PCIeX1Pads) {
+ pads <> xilinxvc707pcie
+ }
}
-trait HasPeripheryXilinxVC707PCIeX1Module extends HasTopLevelNetworksModule {
+trait HasPeripheryXilinxVC707PCIeX1ModuleImp extends LazyMultiIOModuleImp
+ with HasPeripheryXilinxVC707PCIeX1Bundle {
val outer: HasPeripheryXilinxVC707PCIeX1
- val io: HasPeripheryXilinxVC707PCIeX1Bundle
+ val xilinxvc707pcie = IO(new XilinxVC707PCIeX1IO)
- io.xilinxvc707pcie <> outer.xilinxvc707pcie.module.io.port
+ xilinxvc707pcie <> outer.xilinxvc707pcie.module.io.port
outer.xilinxvc707pcie.module.clock := outer.xilinxvc707pcie.module.io.port.axi_aclk_out
- outer.xilinxvc707pcie.module.reset := ~io.xilinxvc707pcie.axi_aresetn
+ outer.xilinxvc707pcie.module.reset := ~xilinxvc707pcie.axi_aresetn
}