X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmain%2Fscala%2Fdevices%2Fspi%2FSPIPeriphery.scala;fp=src%2Fmain%2Fscala%2Fdevices%2Fspi%2FSPIPeriphery.scala;h=80978946103eec972449e71d82227beceb2b3e86;hb=86010395adffd9ee4a42f5240b08bb0f243972ff;hp=37151bd06cda84a0e8a5f6b9178824418c024e64;hpb=5e51e1e93172b5c5b6c436196f8dad68678eb93d;p=sifive-blocks.git diff --git a/src/main/scala/devices/spi/SPIPeriphery.scala b/src/main/scala/devices/spi/SPIPeriphery.scala index 37151bd..8097894 100644 --- a/src/main/scala/devices/spi/SPIPeriphery.scala +++ b/src/main/scala/devices/spi/SPIPeriphery.scala @@ -21,20 +21,15 @@ trait HasPeripherySPI extends HasPeripheryBus with HasInterruptBus { } trait HasPeripherySPIBundle { - val spis: HeterogeneousBag[SPIPortIO] + val spi: HeterogeneousBag[SPIPortIO] - def SPItoGPIOPins(syncStages: Int = 0): Seq[SPIPinsIO] = spis.map { s => - val pins = Module(new SPIGPIOPort(s.c, syncStages)) - pins.io.spi <> s - pins.io.pins - } } trait HasPeripherySPIModuleImp extends LazyMultiIOModuleImp with HasPeripherySPIBundle { val outer: HasPeripherySPI - val spis = IO(HeterogeneousBag(outer.spiParams.map(new SPIPortIO(_)))) + val spi = IO(HeterogeneousBag(outer.spiParams.map(new SPIPortIO(_)))) - (spis zip outer.spis).foreach { case (io, device) => + (spi zip outer.spis).foreach { case (io, device) => io <> device.module.io.port } } @@ -43,7 +38,7 @@ case object PeripherySPIFlashKey extends Field[Seq[SPIFlashParams]] trait HasPeripherySPIFlash extends HasPeripheryBus with HasInterruptBus { val spiFlashParams = p(PeripherySPIFlashKey) - val qspi = spiFlashParams map { params => + val qspis = spiFlashParams map { params => val qspi = LazyModule(new TLSPIFlash(pbus.beatBytes, params)) qspi.rnode := pbus.toVariableWidthSlaves qspi.fnode := TLFragmenter(1, pbus.blockBytes)(pbus.toFixedWidthSlaves) @@ -55,21 +50,13 @@ trait HasPeripherySPIFlash extends HasPeripheryBus with HasInterruptBus { trait HasPeripherySPIFlashBundle { val qspi: HeterogeneousBag[SPIPortIO] - // It is important for SPIFlash that the syncStages is agreed upon, because - // internally it needs to realign the input data to the output SCK. - // Therefore, we rely on the syncStages parameter. - def SPIFlashtoGPIOPins(syncStages: Int = 0): Seq[SPIPinsIO] = qspi.map { s => - val pins = Module(new SPIGPIOPort(s.c, syncStages)) - pins.io.spi <> s - pins.io.pins - } } trait HasPeripherySPIFlashModuleImp extends LazyMultiIOModuleImp with HasPeripherySPIFlashBundle { val outer: HasPeripherySPIFlash val qspi = IO(HeterogeneousBag(outer.spiFlashParams.map(new SPIPortIO(_)))) - (qspi zip outer.qspi) foreach { case (io, device) => + (qspi zip outer.qspis) foreach { case (io, device) => io <> device.module.io.port } }