Merge pull request #10 from sifive/axi-mmio
axi4: switch to new pipelined converters
This commit is contained in:
		@@ -28,16 +28,21 @@ class XilinxVC707MIG(implicit p: Parameters) extends LazyModule with HasXilinxVC
 | 
				
			|||||||
      regionType    = RegionType.UNCACHED,
 | 
					      regionType    = RegionType.UNCACHED,
 | 
				
			||||||
      executable    = true,
 | 
					      executable    = true,
 | 
				
			||||||
      supportsWrite = TransferSizes(1, 256*8),
 | 
					      supportsWrite = TransferSizes(1, 256*8),
 | 
				
			||||||
      supportsRead  = TransferSizes(1, 256*8),
 | 
					      supportsRead  = TransferSizes(1, 256*8))),
 | 
				
			||||||
      interleavedId = Some(0))),
 | 
					 | 
				
			||||||
    beatBytes = 8)))
 | 
					    beatBytes = 8)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val xing    = LazyModule(new TLAsyncCrossing)
 | 
					  val xing    = LazyModule(new TLAsyncCrossing)
 | 
				
			||||||
  val toaxi4 = LazyModule(new TLToAXI4(idBits = 4))
 | 
					  val toaxi4  = LazyModule(new TLToAXI4(beatBytes = 8))
 | 
				
			||||||
 | 
					  val indexer = LazyModule(new AXI4IdIndexer(idBits = 4))
 | 
				
			||||||
 | 
					  val deint   = LazyModule(new AXI4Deinterleaver(p(coreplex.CacheBlockBytes)))
 | 
				
			||||||
 | 
					  val yank    = LazyModule(new AXI4UserYanker)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  xing.node := node
 | 
					  xing.node := node
 | 
				
			||||||
  val monitor = (toaxi4.node := xing.node)
 | 
					  val monitor = (toaxi4.node := xing.node)
 | 
				
			||||||
  axi4 := toaxi4.node
 | 
					  axi4 := yank.node
 | 
				
			||||||
 | 
					  yank.node := deint.node
 | 
				
			||||||
 | 
					  deint.node := indexer.node
 | 
				
			||||||
 | 
					  indexer.node := toaxi4.node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  lazy val module = new LazyModuleImp(this) {
 | 
					  lazy val module = new LazyModuleImp(this) {
 | 
				
			||||||
    val io = new Bundle {
 | 
					    val io = new Bundle {
 | 
				
			||||||
@@ -80,9 +85,7 @@ class XilinxVC707MIG(implicit p: Parameters) extends LazyModule with HasXilinxVC
 | 
				
			|||||||
    xing.module.io.in_reset := reset
 | 
					    xing.module.io.in_reset := reset
 | 
				
			||||||
    xing.module.io.out_clock := blackbox.io.ui_clk
 | 
					    xing.module.io.out_clock := blackbox.io.ui_clk
 | 
				
			||||||
    xing.module.io.out_reset := blackbox.io.ui_clk_sync_rst
 | 
					    xing.module.io.out_reset := blackbox.io.ui_clk_sync_rst
 | 
				
			||||||
    toaxi4.module.clock := blackbox.io.ui_clk
 | 
					    (Seq(toaxi4, indexer, deint, yank) ++ monitor) foreach { lm =>
 | 
				
			||||||
    toaxi4.module.reset := blackbox.io.ui_clk_sync_rst
 | 
					 | 
				
			||||||
    monitor.foreach { lm =>
 | 
					 | 
				
			||||||
      lm.module.clock := blackbox.io.ui_clk
 | 
					      lm.module.clock := blackbox.io.ui_clk
 | 
				
			||||||
      lm.module.reset := blackbox.io.ui_clk_sync_rst
 | 
					      lm.module.reset := blackbox.io.ui_clk_sync_rst
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,9 +26,31 @@ class XilinxVC707PCIeX1(implicit p: Parameters) extends LazyModule {
 | 
				
			|||||||
  val intnode = IntOutputNode()
 | 
					  val intnode = IntOutputNode()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val axi_to_pcie_x1 = LazyModule(new VC707AXIToPCIeX1)
 | 
					  val axi_to_pcie_x1 = LazyModule(new VC707AXIToPCIeX1)
 | 
				
			||||||
  axi_to_pcie_x1.slave   := AXI4Buffer()(TLToAXI4(idBits=4)(slave))
 | 
					
 | 
				
			||||||
  axi_to_pcie_x1.control := AXI4Buffer()(AXI4Fragmenter(lite=true, maxInFlight=4)(TLToAXI4(idBits=0)(control)))
 | 
					  axi_to_pcie_x1.slave :=
 | 
				
			||||||
  master := TLWidthWidget(8)(AXI4ToTL()(AXI4Fragmenter()(axi_to_pcie_x1.master)))
 | 
					    AXI4Buffer()(
 | 
				
			||||||
 | 
					    AXI4UserYanker()(
 | 
				
			||||||
 | 
					    AXI4Deinterleaver(p(coreplex.CacheBlockBytes))(
 | 
				
			||||||
 | 
					    AXI4IdIndexer(idBits=4)(
 | 
				
			||||||
 | 
					    TLToAXI4(beatBytes=8)(
 | 
				
			||||||
 | 
					    slave)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  axi_to_pcie_x1.control :=
 | 
				
			||||||
 | 
					    AXI4Buffer()(
 | 
				
			||||||
 | 
					    AXI4UserYanker()(
 | 
				
			||||||
 | 
					    AXI4Fragmenter()(
 | 
				
			||||||
 | 
					    AXI4IdIndexer(idBits=0)(
 | 
				
			||||||
 | 
					    TLToAXI4(beatBytes=4)(
 | 
				
			||||||
 | 
					    control)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  master :=
 | 
				
			||||||
 | 
					    TLWidthWidget(8)(
 | 
				
			||||||
 | 
					    AXI4ToTL()(
 | 
				
			||||||
 | 
					    AXI4UserYanker(capMaxFlight=Some(8))(
 | 
				
			||||||
 | 
					    AXI4Fragmenter()(
 | 
				
			||||||
 | 
					    AXI4IdIndexer(idBits=0)(
 | 
				
			||||||
 | 
					    axi_to_pcie_x1.master)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  intnode := axi_to_pcie_x1.intnode
 | 
					  intnode := axi_to_pcie_x1.intnode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  lazy val module = new LazyModuleImp(this) {
 | 
					  lazy val module = new LazyModuleImp(this) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -197,8 +197,7 @@ class VC707AXIToPCIeX1(implicit p:Parameters) extends LazyModule
 | 
				
			|||||||
      resources     = Seq(Resource(device, "ranges")),
 | 
					      resources     = Seq(Resource(device, "ranges")),
 | 
				
			||||||
      executable    = true,
 | 
					      executable    = true,
 | 
				
			||||||
      supportsWrite = TransferSizes(1, 256),
 | 
					      supportsWrite = TransferSizes(1, 256),
 | 
				
			||||||
      supportsRead  = TransferSizes(1, 256),
 | 
					      supportsRead  = TransferSizes(1, 256))),
 | 
				
			||||||
      interleavedId = Some(0))), // the Xilinx IP is friendly
 | 
					 | 
				
			||||||
    beatBytes = 8)))
 | 
					    beatBytes = 8)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val control = AXI4SlaveNode(Seq(AXI4SlavePortParameters(
 | 
					  val control = AXI4SlaveNode(Seq(AXI4SlavePortParameters(
 | 
				
			||||||
@@ -206,8 +205,7 @@ class VC707AXIToPCIeX1(implicit p:Parameters) extends LazyModule
 | 
				
			|||||||
      address       = List(AddressSet(0x50000000L, 0x03ffffffL)),
 | 
					      address       = List(AddressSet(0x50000000L, 0x03ffffffL)),
 | 
				
			||||||
      resources     = device.reg,
 | 
					      resources     = device.reg,
 | 
				
			||||||
      supportsWrite = TransferSizes(1, 4),
 | 
					      supportsWrite = TransferSizes(1, 4),
 | 
				
			||||||
      supportsRead  = TransferSizes(1, 4),
 | 
					      supportsRead  = TransferSizes(1, 4))),
 | 
				
			||||||
      interleavedId = Some(0))), // no read interleaving b/c AXI-lite
 | 
					 | 
				
			||||||
    beatBytes = 4)))
 | 
					    beatBytes = 4)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val master = AXI4MasterNode(Seq(AXI4MasterPortParameters(
 | 
					  val master = AXI4MasterNode(Seq(AXI4MasterPortParameters(
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user