Description
Address segments, or bd_addr_seg objects, describe the location and size of a range of memory. They have a range (size) and an optional starting offset.
For various memory mapped master and slave interfaces, IP integrator follows the industry standard IP-XACT data format for capturing memory requirements and capabilities of endpoint masters and slaves.
Addressable slave interfaces reference an address segment container, called a
memory map. These memory maps are usually named after the slave interface pins, for
example, S_AXI
, though that is not required.
The memory map contains slave address segments. These address segments correspond to the address decode window for the slave interface referencing the memory map. When specified in the memory map, slave segments must have a range and can optionally have a hard offset, (indicating that the slave can only be mapped into master address spaces at that offset or apertures of it).
A typical AXI4-Lite slave interface for instance references a memory map with only one address segment, representing a range of memory. However, some slaves, like a bridge, will have multiple address segments; or a range of addresses for each address decode window.
Slave address segments are assigned into master address spaces using
the assign_bd_address
or create_bd_addr_seg
command.
Addressing master interfaces reference an address segment container
called an Address Space, or bd_addr_space
. The
address space is referenced by interface pins, bd_intf_pin
, on the cell. In the case of external AXI masters, the
address space is referenced by the external interface port, bd_intf_port
. Several interfaces of varying protocols can reference
the same master address space. The
MicroBlaze™
processor Data address space, for instance, is referenced by its DLMB, M_AXI_DP and
M_AXI_DC interfaces.
The Address space contains master address segments. These master address segments reference slave address segments that have been assigned into the master address space, and the offset and range at which the master accesses it.
Related Objects
The bd_addr_seg object refers to both master and slave address segments. The bd_addr_space object refers to both memory maps and master address spaces.
You can query the relationship between all related address spaces and address segments. For example:
# Get the slave address segments of a memory map space.
get_bd_addr_segs -of_objects [get_bd_addr_spaces /mdm_1/S_AXI]
# Get the master address segments of amaster address space.
get_bd_addr_segs -of_objects [get_bd_addr_spaces /Microblaze_0/Data]
# Get the slave adress segment from its referenced master address segment, or the
# master address segment from its referencing slave address segment.
get_bd_addr_segs -of_objects [get_bd_addr_segs <slave or master>_segment]
# Get the addr_segs referencing/referenced by interfaces.
# Get all Master or slave interfaces.
set vMB [get_bd_intf_pins -of_objects [get_bd_cells *] -filter {Mode == "Master"}]
set vSB [get_bd_intf_pins -of_objects [get_bd_cells *] -filter {Mode == "Slave"}]
# Get master segments
set vMS [get_bd_addr_segs -of_objects $vMB]
# Get slave segments
set vSS [get_bd_addr_segs -of_objects $vSB]
Properties
The properties on a block design address segment object, bd_addr_seg, include the following, with example values:
Property Type Read-only Visible Value
ACCESS string false true read-write
CLASS string true true bd_addr_seg
EXEIMG string false true
MEMTYPE string false true data
NAME string false true SEG_axi_gpio_0_Reg
OFFSET string false true 0x40000000
PATH string true true /microblaze_0/Data/SEG_axi_gpio_0_Reg
RANGE string false true 0x00010000
SECURE bool false true 0
USAGE string false true register
To report the properties for a bd_addr_seg object, you can copy and paste the following command into the AMD Vivado™ Design Suite Tcl shell or Tcl Console:
report_property -all [lindex [get_bd_addr_segs ] 0]