Skip to content
This repository has been archived by the owner on Jun 24, 2021. It is now read-only.

Latest commit

 

History

History
55 lines (45 loc) · 3.1 KB

Xbar.md

File metadata and controls

55 lines (45 loc) · 3.1 KB

Generic Tilelink crossbar.


class TLXbar

class TLXbar(policy: TLArbiter.Policy = TLArbiter.roundRobin)(implicit p: Parameters) extends LazyModule
  • policy TLArbiter.Policy (param) the arbitration algorithm used in arbiters.
  • node TLNexusNode the diplomacy object to record port connections for module generation.
  • module LazyModuleImp
    • io Bundle module I/O ports:
      in HeterogeneousBag[TLBundle] input ports.
      out HeterogeneousBag[TLBundle] output ports.
    • inputIdRanges Seq[IdRange] ranges of input (client) ports. Resolved at module generation time.
    • outputIdRanges Seq[IdRange] ranges of output (manager) ports. Pre-assigned.
    • outputPorts Seq[(addr: UInt) => Bool] address route functions.
    • wide_bundle TLBundleParameters
      A Bundle parameter wide enough to represent all input and output ports. Resolved at module generation time.
    • addressA, addressC Seq[UInt] target addresses of channel A and C.
    • requestAIO, requestCIO Seq[Bool] client to manager (I to O) one-hot route result for channel A and C.
    • requestBOI, requestDOI Seq[Bool] manager to client (O to I) one-hot route result for channel B and D.
    • requestEIO Seq[Bool] client to manager (I to O) one-hot route result for channel E.
    • beatsAI, beatsBO, beatsCI, beatsDO, beatsEI Seq[UInt] number of beats in the busrt (AXI style, N-1).
    • portsAOI, portsBIO, portsCOI, portsDIO, portsEOI, Seq[Seq[TLBundleX]]
      Demulplexed connections from input to outputs.

The data-width of all ports must be equal. The sourceId and fifoId are reordered to reduce their range. This range shrink is defined in the case variables of node: clientFn and managerFn.

object TLXbar

  • mapInputIds (Seq[TLClientPortParameters]) => Seq[IdRange]
    Resolve id range of input ports at binding time. All input port should have a non-zero range, otherwise exception!
  • mapOutputIds (Seq[TLClientPortParameters]) => Seq[IdRange]
    Get the assigned output id range of all managers.
  • assignRanges (Seq[Int] => Seq[IdRange]) Internal function used by mapInputIds() and mapOutputIds().
  • relabeler (Int) => Int shrink the range of fifoId. Internal function used by TLXbar.node.managerFn().
  • fanout (DecoupledIO[T], Seq[Bool]) => Vec[DecoupledIO[T]] demultiplexing input port for output connection.




Last updated: 18/07/2017
CC BY-NC-SA 4.0, © (2017) Wei Song
Apache 2.0, © (2016-2017) SiFive, Inc
BSD, © (2012-2014, 2016) The Regents of the University of California (Regents)