xilinx pcie: bytes, not bits
authorWesley W. Terpstra <wesley@sifive.com>
Wed, 7 Dec 2016 00:13:12 +0000 (16:13 -0800)
committerWesley W. Terpstra <wesley@sifive.com>
Wed, 7 Dec 2016 00:13:12 +0000 (16:13 -0800)
This bug amazingly compiled correctly and ran correctly!

It was saved by the AXIFragmenter which turned the "narrow burst" into
individual beats that then got converted to 64b in TileLink land via
inspection of the mask bits.

The consequence is that AXI bus mastering proceeded at one word per
DDR round-trip. Now it is one cache line per DDR round-trip. When we
get L2 back in the design, it should really fly!

src/main/scala/devices/xilinxvc707pciex1/XilinxVC707PCIeX1.scala

index a795bf0cba72314ffb71fece79f01cea9d223998..bd3b1ef9fd8c818a87b940cda88e0cd3c67274c7 100644 (file)
@@ -28,7 +28,7 @@ class XilinxVC707PCIeX1(implicit p: Parameters) extends LazyModule {
   val axi_to_pcie_x1 = LazyModule(new VC707AXIToPCIeX1)
   axi_to_pcie_x1.slave   := TLToAXI4(idBits=4)(slave)
   axi_to_pcie_x1.control := AXI4Fragmenter(lite=true, maxInFlight=4)(TLToAXI4(idBits=0)(control))
-  master := TLWidthWidget(64)(AXI4ToTL()(AXI4Fragmenter()(axi_to_pcie_x1.master)))
+  master := TLWidthWidget(8)(AXI4ToTL()(AXI4Fragmenter()(axi_to_pcie_x1.master)))
 
   lazy val module = new LazyModuleImp(this) {
     val io = new Bundle {