blob: a66ededd9b4d15fad9c5152fcec4dc1d1d287f8c [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Zone Description Format</title>
<title>CMSIS-Zone (Preview): Zone Description Format</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="cmsis.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="printComponentTabs.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 46px;">
<td id="projectlogo"><img alt="Logo" src="CMSIS_Logo_Final.png"/></td>
<td style="padding-left: 0.5em;">
<div id="projectname">CMSIS-Zone (Preview)
&#160;<span id="projectnumber">Version 0.0.1</span>
</div>
<div id="projectbrief">System Resource Management</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<div id="CMSISnav" class="tabs1">
<ul class="tablist">
<script type="text/javascript">
<!--
writeComponentTabs.call(this);
//-->
</script>
</ul>
</div>
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li class="current"><a href="pages.html"><span>Usage&#160;and&#160;Description</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('XML_Format.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">Zone Description Format </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>The <b>Zone Description Format</b> uses standard XML annotations and is defined in the schema file <b>ZONE.xsd</b>. It is intended to provide a tool vendor agnostic storage format for</p>
<ul>
<li>describing embedded system resource capabilities<ul>
<li>specific <a class="el" href="format_device.html">device</a> and <a class="el" href="format_processor.html">processor</a> properties</li>
<li>available <a class="el" href="format_memory.html">memory</a> and <a class="el" href="format_peripheral.html">peripheral</a> resources</li>
</ul>
</li>
<li>specifying resource partitioning across<ul>
<li><a class="el" href="format_pzone.html">project zones</a>, e.g. for secure and non-secure firmware parts</li>
<li><a class="el" href="format_xzone.html">execution zones</a>, e.g. for functional segregation</li>
</ul>
</li>
</ul>
<h1><a class="anchor" id="XML_Format_Model"></a>
Storage Data Model</h1>
<p>In the following diagram the overall structure of the <b>Storage Data Model</b> is depicted. The <a class="el" href="XML_Format.html#XML_Format_Schema">storage format</a> is derived from the model.</p>
<div class="image">
<img src="storagemodel.png" alt="storagemodel.png"/>
<div class="caption">
Storage Data Model Class Diagram</div></div>
<p> The storage model is developed based on the domain and can be seen as the domain model as well. Its main purpose is to capture all information about presumable embedded systems and microcontroller devices.</p>
<h2><a class="anchor" id="XML_Format_Model_Decomp"></a>
Embedded Microcontroller System Decomposition</h2>
<p>Todays available system-on-modules (SoM) and system-on-chips (SoC) already physically outlines the overall composition. It seems to be viable to stick with todays system structures. It's not likely that this structure will change drastically.</p>
<p>A detailed view on the decomposition of an arbitrary SoM is given in the diagram below.</p>
<div class="image">
<img src="som-decomposition.png" alt="som-decomposition.png"/>
<div class="caption">
System-on-Module Decomposition</div></div>
<p> The SoM itself (System) can be seen as a composition of one or more SoCs (Device) combined with an arbitrary amount of board-level resources, i.e. off-chip memory (Memory) and peripheral (Peripheral). In turn each SoC is a composition of one or more processor elements (Processor, PE) with chip-level resources, i.e. on-chip memory and peripheral.</p>
<p>Private memory and peripheral resources local to a dedicated PE has been simplified. These can also be seen as chip-level resources.</p>
<p>The grouping (ResourceGroup) is intended to allow structural grouping of resources elements, i.e. by type or bus structure.</p>
<dl class="section note"><dt>Note</dt><dd>The names (i.e. <code>name</code> attributes) are typically used as references and hence must be unique per class. Duplicate names are allowed if object hierarchies do not overlap. I.e. resources contained on two separate SoCs may have the same name but the name of a SoM level resource must not be reused on SoC level.</dd></dl>
<h2><a class="anchor" id="XML_Format_Model_MemMap"></a>
Microcontroller Memory Map Specification</h2>
<p>Most of the Multi-Core-SoCs available today show uniform memory maps. But in principle the logical memory address used to address a certain resource may vary between multiple PEs on the same SoC. Taking this into account leads to memory map specification on both SoC and PE level, see diagram below.</p>
<div class="image">
<img src="soc-memorymap.png" alt="soc-memorymap.png"/>
<div class="caption">
System-on-Chip Memory Map Specification</div></div>
<p> The memory maps specified on SoC and PE level are additive, i.e. the PEs actual memory map is the combination of both. This split allow the specification of uniform memory maps without duplication. Only the non-uniform parts need to be specified on PE level.</p>
<p>Each resource can be mapped as often as needed, i.e. to reflect multiple memory aliases. By default the <code>name</code> attribute is used to identify the resource to be mapped. In order to map the same resource multiple times into a PEs memory space the <code>alias</code> attribute must be given to identify the resource instead. The mapping names must be unique per PE because they are used as references later.</p>
<p>The attributes of the mapping are merged with those of the resource mapped. This allows the mapping of an individual PE to enhance the basic attributes of a resource. For example a memory resource that is basically readable/writeable/executable might be mapped to a PE as readonly memory.</p>
<h2><a class="anchor" id="XML_Format_Model_Assign"></a>
Zone Resource Assignments</h2>
<p>A system can be split into an arbitrary amount of project zones (PZone). And each PZone can be further split into execution zones (XZone). Resources used by an individual zone are represented using assignments (Assignment). Refer to the diagram below.</p>
<div class="image">
<img src="zone-assignment.png" alt="zone-assignment.png"/>
<div class="caption">
Zone Resource Assignments</div></div>
<p> Each PZone is assigned to a dedicated PE which is selected to execute the resulting software part. The PE is referenced by the unique combination of <code>Dname</code> and <code>Pname</code> attributes. The XZones are contained in the PZone they belong to.</p>
<p>Both PZones and XZones can have arbitrary assignments to available resources visible to the assigned PE. Assignments to SoC level resources not part of the SoC the PE is located on are illegal. Such assignments cannot be represented because the unique reference is built from <code>PZone::Dname</code> and <code>Assignment::name</code>.</p>
<p>As a resource may be visible to the enclosing PE using multiple mappings the <code>as</code> attribute can be used to distinguish which alias is used for access. Selecting the correct alias is significant because of the effective access attributes resulting from merging <code>Resource.access</code>, <code>MemoryMapping.access</code>/<code>PeripheralMapping.access</code> and <code>Assignment.access</code>.</p>
<p>Whilst peripheral resources can be assigned directly memory resources need to be split into blocks (MemoryBlock). A block can be seen as an arbitrary part of the physical memory. Individual blocks can be defined using modified access attributes, e.g. for having dedicated executable or readonly regions in RAM.</p>
<h1><a class="anchor" id="XML_Format_Schema"></a>
Zone Schema</h1>
<p>The XML schema is defined hierarchically with the following top-level elements:</p>
<p><a class="el" href="format_system.html">/system element</a></p>
<ul>
<li><a class="el" href="format_device.html">/device element</a></li>
<li><a class="el" href="format_resources.html">/resources element</a></li>
<li><a class="el" href="format_zones.html">/zones element</a></li>
</ul>
<div class="fragment"><div class="line">&lt;system&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;device&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;processor&gt;</div>
<div class="line"> &lt;memory_map&gt;</div>
<div class="line"> &lt;memory/&gt;</div>
<div class="line"> &lt;peripheral/&gt;</div>
<div class="line"> &lt;/memory_map&gt;</div>
<div class="line"> &lt;/processor&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;memory_map&gt;</div>
<div class="line"> &lt;memory/&gt;</div>
<div class="line"> &lt;peripheral/&gt;</div>
<div class="line"> &lt;/memory_map&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;resources&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;memory&gt;</div>
<div class="line"> &lt;region&gt;</div>
<div class="line"> &lt;block/&gt;</div>
<div class="line"> &lt;/region&gt;</div>
<div class="line"> &lt;/memory&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;peripherals&gt;</div>
<div class="line"> &lt;peripheral/&gt;</div>
<div class="line"> &lt;/peripherals&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;/resources&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;/device&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;resources&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;memory&gt;</div>
<div class="line"> &lt;region&gt;</div>
<div class="line"> &lt;block/&gt;</div>
<div class="line"> &lt;/region&gt;</div>
<div class="line"> &lt;/memory&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;peripherals&gt;</div>
<div class="line"> &lt;peripheral/&gt;</div>
<div class="line"> &lt;/peripherals&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;/resources&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;zones&gt;</div>
<div class="line"> &lt;pzone&gt;</div>
<div class="line"> &lt;assign&gt;</div>
<div class="line"> &lt;capture/&gt;</div>
<div class="line"> &lt;/assign&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;xzone&gt;</div>
<div class="line"> &lt;assign/&gt;</div>
<div class="line"> &lt;/xzone&gt;</div>
<div class="line"> </div>
<div class="line"> &lt;/pzone&gt;</div>
<div class="line"> &lt;/zones&gt;</div>
<div class="line"> </div>
<div class="line">&lt;/system&gt;</div>
</div><!-- fragment --><h1><a class="anchor" id="Example"></a>
Example</h1>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Wed Aug 1 2018 17:12:47 for CMSIS-Zone (Preview) by Arm Ltd. All rights reserved.
<!--
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6
-->
</li>
</ul>
</div>
</body>
</html>