Address Map Elaboration¶
Address maps can be attached to any module that performs some form of aggregation or distribution of the address space between multiple peripherals. Two different tags, !Initiator and !Target, are used to describe the points of ingress and egress from the distributor or aggregator.
An address map can only describe the relationships between boundary ports of the block, it cannot describe the relationship between a boundary port and a port on a child block. This is because address distribution requires an implementation, and BLADE only supports implementation on leaf nodes.
The elaboration function has to be provided with a fully elaborated DFBlock instance, so that it can resolve references to boundary IO. It also needs to be given the list of !Initiator and !Target tags.
The stages the elaborator goes through are:
Each port referenced by an
!Initiatoror!Targetare resolved, with the signal index checked for validity. A check is also made that any ports referenced within the constraints section can be identified.Every target and initiator is converted to a
DFAddressMapTargetorDFAddressMapInitiatorand attached to an instance ofDFAddressMap.Constraints specified in the original description are translated and resolved into the
DFAddressMap- linkingDFAddressMapInitiatorsandDFAddressMapTargets.
API¶
-
blade.elaborate.address_map.elaborate_map(map, block, scope)¶ Elaborate the address map from !Initiator and !Target tags, it also requires a fully elaborated block to work from as it needs to associate with boundary ports on the block.
- Parameters
map – The collection of !Initiator and !Target tags
block – A DFBlock instance to associate with
scope – The YAML document scope used for resolving constants