(1) Bus components can be made accessible to other components. Components can declare that they require access to externally declared buses. Components may provide access to their buses. Bus access is used to model connectivity of execution platform components through buses.
(2) Figure 13 illustrates the use of a shared bus. Bus1 provides the connection between Processor1, Memory1, and Device1. In addition, the bus is being made accessible outside System1.
Figure 13 Shared Bus Access
Syntax
-- The requires and provides bus access subclause
bus_access_spec ::=
defining_bus_access_identifier :
( provides | requires ) bus access
[ bus_unique_component_classifier_reference
| prototype_identifier ]
bus_access_refinement ::=
defining_bus_access_identifier : refined to
( provides | requires ) bus access
[ bus_unique_component_classifier_reference
| prototype_identifier ]
Naming Rules
(N1) The defining identifier of a provides or requires bus access declaration must be unique within the namespace of the component type where the bus access is declared.
(N2) The defining identifier of a provides or requires bus refinement must exist as a defining identifier of a requires or provides bus access or of an abstract feature in the namespace of the component type being extended.
(N3) The component type identifier or component implementation name of a bus access classifier reference must exist in the package namespace.
(N4) The prototype identifier, if present, must exist in the namespace of the classifier that contains the bus access declaration.
Legality Rules
(L1) If a bus access refers to a component classifier or a component prototype, then the category of the classifier or prototype must be of category bus.
(L2) A bus access declaration may be refined by refining the bus classifier, by adding a property association, or by doing both. If the refinement only adds a property association the bus classifier reference is optional.
(L3) A provides bus access cannot be refined to a requires bus access and a requires bus access cannot be refined to a provides bus access.
(L4) An abstract feature can be refined into a bus access. In this case, the abstract feature must not have a direction specified.
Consistency Rules
(C1)A bus access declaration that does not specify a bus classifier reference is incomplete. Such a reference can be added in a bus access refinement declaration.
(C2)If a bus access feature is a refinement of an abstract feature, then the direction of the abstract feature, if specified, imposes a restriction on the access right, i.e., in implies read-only, and out implies write-only.
Standard Properties
Access_Right : Access_Rights => read_write
Semantics
(3) A required bus component access declaration in the component type indicates that a component requires access to a component declared external to the component. Required bus accesses are resolved to actual bus subcomponents through access connection declarations.
(4) A provides bus access declaration in the component type indicates that a subcomponent provides access to a bus contained in the component. Provided bus accesses can be used to resolve required bus access. For bus components different forms of provided access, such as read-only access, are specified by a Access_Right property or by directional access connections.
(5) A bus that is accessed by more than one component is shared. The shared bus is a common resource through which processor, memory, and device components communicate.
Examples
package Example2
public
with Buses;
system simple
end simple;
system implementation simple.impl
subcomponents
A: processor PPC;
B: device DigCamera;
connections
bus access A.USB1 <-> B.USB2;
end simple.impl;
processor PPC
features
USB1: provides bus access Buses::USB;
end PPC;
device DigCamera
features
USB2: requires bus access Buses::USB;
end DigCamera;
end Example2;