spi: put a request buffer infront of SPI
This will prevent SPI from blocking other pbus requests.
This commit is contained in:
		@@ -4,8 +4,8 @@ package sifive.blocks.devices.spi
 | 
			
		||||
import Chisel._
 | 
			
		||||
import freechips.rocketchip.config.Field
 | 
			
		||||
import freechips.rocketchip.coreplex.{HasPeripheryBus, HasInterruptBus}
 | 
			
		||||
import freechips.rocketchip.diplomacy.{LazyModule,LazyMultiIOModuleImp}
 | 
			
		||||
import freechips.rocketchip.tilelink.{TLFragmenter}
 | 
			
		||||
import freechips.rocketchip.diplomacy.{LazyModule,LazyMultiIOModuleImp,BufferParams}
 | 
			
		||||
import freechips.rocketchip.tilelink.{TLFragmenter,TLBuffer}
 | 
			
		||||
import freechips.rocketchip.util.HeterogeneousBag
 | 
			
		||||
 | 
			
		||||
case object PeripherySPIKey extends Field[Seq[SPIParams]]
 | 
			
		||||
@@ -41,7 +41,10 @@ trait HasPeripherySPIFlash extends HasPeripheryBus with HasInterruptBus {
 | 
			
		||||
  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)
 | 
			
		||||
    qspi.fnode :=
 | 
			
		||||
      TLFragmenter(1, pbus.blockBytes)(
 | 
			
		||||
      TLBuffer(BufferParams(8), BufferParams.none)(
 | 
			
		||||
      pbus.toFixedWidthSlaves))
 | 
			
		||||
    ibus.fromSync := qspi.intnode
 | 
			
		||||
    qspi
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user