Design

GreenBus Design Decisions

3 layers of code

We split the "bus fabric" into 3 layer

  1. Interoperability Layer
  2. Convenience Layer
  3. User Layer

(The Interoperability Layer and Convenience Layer together have been referred to as the Transport layer - or at least, that's my understanding)

Each layer has a specific role

 Interoperability Layer:: Guarantee models can be exchanged. '''Primary focus: SPEED.'''
 Convenience Layer:: Ensure the users can focus on the model, not the communication. This layer defines the Protocol (and is protocol dependent) '''Primary focus: SAFETY.'''
 User Layer:: User model code. '''Primary focus: FUNCTION'''
Why: Only the Interoperability layer needs to be standardised. There are many competing solutions for the convenience layer, which may trade off speed and safety. It is therefore vital that the Interoperability layer does not limit the speed or safety that can be achieved.

Notes on taxonomy

  1. What it a transaction, attribute, phase, etc
  2. What are Masters, Slaves, Initiators and Targets
  3. What are timed, untimed, ''PV'', ''PVT'', ''BA'', ''AV'', ''VV'', etc

Important conclusions

  1. life span of PV and "T" are different!
  2. The return values of a PVT transaction should not be returned before the Master finishes sending the transactions

Interoperability Layer Design Decisions

  1. Separate interface for "Timed" and "Untimed"
  2. "port-to-port" binding
  3. Transport "transaction container" and "timing container" as shared memory - container held and owned by the port.
  4. Use boost shared pointers to pass transaction containers
  5. Untimed IF uses blocking Method in target port, and use of TransactionBase class
  6. HISTORY Timed IF uses "method" in port for Initiator to Target
  7. Timed IF uses "sc_event_queues" with payload for both directions
  8. Timing and Phase encoding - possible event reuse - passing phase by value
  9. Phase updates happen in the Master and Slave
  10. Pre-defined set of "attributes"
  11. choice of attribute and their types in the main governed by OCP prescribed types
  12. uint64 address attribute type
  13. unsigned char array data attribute type
  14. uint64 byte lane enable attribute type
  15. Details of the payload event mechanism
  16. Keep a single port, rather than 2 ports for PV/PVT
  17. Use dynamic_cast instead of other form of polymorphism implementation. Experiment using static_cast and valid bits

Rules which must be followed

  1. If a transactions and/or their data MUST be copied if they are to be kept
  2. To ensure data is copied if kept

Convenience Layer Design Decisions for GreenBus

1. Data memory owned by the master

User Layer Design Decisions (for GreenBus Router)

  1. Router templated on protocol class for arbitration

Experiments

  1. Difference between REQ/RSP and a System Level Transaction at PV
  2. Feasibility of Polymorphic Transactions