Design
GreenBus Design Decisions
3 layers of code
We split the "bus fabric" into 3 layer
- Interoperability Layer
- Convenience Layer
- 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
- What it a transaction, attribute, phase, etc
- What are Masters, Slaves, Initiators and Targets
- What are timed, untimed, ''PV'', ''PVT'', ''BA'', ''AV'', ''VV'', etc
Important conclusions
- life span of PV and "T" are different!
- The return values of a PVT transaction should not be returned before the Master finishes sending the transactions
Interoperability Layer Design Decisions
- Separate interface for "Timed" and "Untimed"
- "port-to-port" binding
- Transport "transaction container" and "timing container" as shared memory - container held and owned by the port.
- Use boost shared pointers to pass transaction containers
- Untimed IF uses blocking Method in target port, and use of TransactionBase class
- HISTORY Timed IF uses "method" in port for Initiator to Target
- Timed IF uses "sc_event_queues" with payload for both directions
- Timing and Phase encoding - possible event reuse - passing phase by value
- Phase updates happen in the Master and Slave
- Pre-defined set of "attributes"
- choice of attribute and their types in the main governed by OCP prescribed types
- uint64 address attribute type
- unsigned char array data attribute type
- uint64 byte lane enable attribute type
- Details of the payload event mechanism
- Keep a single port, rather than 2 ports for PV/PVT
- Use dynamic_cast instead of other form of polymorphism implementation. Experiment using static_cast and valid bits
Rules which must be followed
- If a transactions and/or their data MUST be copied if they are to be kept
- To ensure data is copied if kept
Convenience Layer Design Decisions for GreenBus
1. Data memory owned by the masterUser Layer Design Decisions (for GreenBus Router)
Experiments
Posted January 8th, 2008 by WolfgangKlingauf