<?xml version="1.0" encoding="UTF-8"?>
<!--
File: POWER/power.xsd
Author: The Accellera IP-XACT Extensions Working Group

Copyright (c) 2013 Accellera Systems Initiative Inc. 
1370 Trancas Street #163, Napa, CA 94558, USA

Licensed under the Apache License, Version 2.0 (the 'License'); 
you may not use this file except in compliance with the License.  
You may obtain a copy of the License at                                            
                                                             
	http://www.apache.org/licenses/LICENSE-2.0            
                                                             
Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an 'AS IS' BASIS, 
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied. See the License for the specific language 
governing permissions and limitations under the License.

Suggestions for improvements to the Recommend Extensions to 
IEEE 1685-2009 are welcome. They should be sent to the group's 
email Reflector:

	ip-xact@lists.accellera.org

The current IP-XACT Technical Committee web page is:

	www.accellera.org/activities/committees/ip-xact
-->
<xs:schema xmlns:accellera-power="http://www.accellera.org/XMLSchema/SPIRIT/1685-2009-VE/POWER-1.0" xmlns:accellera="http://www.accellera.org/XMLSchema/SPIRIT/1685-2009-VE" xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.accellera.org/XMLSchema/SPIRIT/1685-2009-VE/POWER-1.0" elementFormDefault="qualified" attributeFormDefault="qualified">
	<xs:import namespace="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" schemaLocation="../../1685-2009/index.xsd"/>
	<xs:import namespace="http://www.accellera.org/XMLSchema/SPIRIT/1685-2009-VE" schemaLocation="../index.xsd"/>
	<xs:element name="componentInstancePowerDef">
		<xs:annotation>
			<xs:documentation>Component instance power definition.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="accellera-power:domain" minOccurs="0"/>
				<xs:element ref="accellera-power:isolation" minOccurs="0"/>
				<xs:element ref="accellera-power:retentionMode" minOccurs="0"/>
				<xs:element ref="accellera-power:alwaysPowered" minOccurs="0"/>
				<xs:element ref="accellera-power:idle" minOccurs="0"/>
				<xs:element ref="accellera-power:reset" minOccurs="0"/>
				<xs:element ref="accellera-power:hasIsolation" minOccurs="0"/>
				<xs:element ref="accellera-power:hasLevelShifter" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="wireInstancePowerDef">
		<xs:annotation>
			<xs:documentation>Component instance wire port power definition.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="accellera:nameRef"/>
				<xs:element ref="accellera-power:domain" minOccurs="0"/>
				<xs:element ref="accellera-power:isolation" minOccurs="0"/>
				<xs:element ref="accellera-power:idle" minOccurs="0"/>
				<xs:element ref="accellera-power:reset" minOccurs="0"/>
				<xs:element ref="accellera-power:hasIsolation" minOccurs="0"/>
				<xs:element ref="accellera-power:hasLevelShifter" minOccurs="0"/>
				<xs:element ref="spirit:vector" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="wireInstancePowerDefs">
		<xs:annotation>
			<xs:documentation>Component instance wire port power definitions.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="accellera-power:wireInstancePowerDef" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>Single wire port power definition.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="componentPowerDef">
		<xs:annotation>
			<xs:documentation>Power definition of a component.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="accellera-power:domain" minOccurs="0"/>
				<xs:element ref="accellera-power:isolation" minOccurs="0"/>
				<xs:element ref="accellera-power:retentionMode" minOccurs="0"/>
				<xs:element ref="accellera-power:alwaysPowered" minOccurs="0"/>
				<xs:element ref="accellera-power:idle" minOccurs="0"/>
				<xs:element ref="accellera-power:reset" minOccurs="0"/>
				<xs:element ref="accellera-power:hasIsolation" minOccurs="0"/>
				<xs:element ref="accellera-power:hasLevelShifter" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="wirePowerDef">
		<xs:annotation>
			<xs:documentation>Wire port power definition.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="accellera-power:domain" minOccurs="0"/>
				<xs:element ref="accellera-power:isolation" minOccurs="0"/>
				<xs:element ref="accellera-power:idle" minOccurs="0"/>
				<xs:element ref="accellera-power:reset" minOccurs="0"/>
				<xs:element ref="accellera-power:hasIsolation" minOccurs="0"/>
				<xs:element ref="accellera-power:hasLevelShifter" minOccurs="0"/>
				<xs:element ref="spirit:vector" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="wirePowerDefs">
		<xs:annotation>
			<xs:documentation>Wire port power definitions.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="accellera-power:wirePowerDef" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>Single wire port power definition.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="logicalWirePowerDef">
		<xs:annotation>
			<xs:documentation>Logical wire port power definition.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="accellera-power:domain" minOccurs="0"/>
				<xs:element ref="accellera-power:isolation" minOccurs="0"/>
				<xs:element ref="accellera-power:idle" minOccurs="0"/>
				<xs:element ref="accellera-power:reset" minOccurs="0"/>
				<xs:element ref="spirit:vector" minOccurs="0"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="logicalWirePowerDefs">
		<xs:annotation>
			<xs:documentation>Logical wire port power definitions.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="accellera-power:logicalWirePowerDef" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>Single logical wire port power definition.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="domain">
		<xs:annotation>
			<xs:documentation>Power domain. It is the user’s responsibility to ensure it match an existing power domain in UPF/CPF file.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attributeGroup ref="spirit:string.prompt.att"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="isolation">
		<xs:annotation>
			<xs:documentation>Isolation value. Common values are 0, 1, L (latched), Z (high impedance), N (no isolation needed - default value), and X (isolation needed - no value specified).</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attributeGroup ref="spirit:string.prompt.att"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="retentionMode">
		<xs:annotation>
			<xs:documentation>Boolean value. If set to true, then the IP needs retention for all internal registers. Applies only at component level, no meaning for port or abstraction.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:boolean">
					<xs:attributeGroup ref="spirit:bool.prompt.att"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="alwaysPowered">
		<xs:annotation>
			<xs:documentation>Boolean value. If set to true, then the IP/port is always powered, whatever its power domain. Only applies for output ports.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:boolean">
					<xs:attributeGroup ref="spirit:bool.prompt.att"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="idle">
		<xs:annotation>
			<xs:documentation>String value. The output value for each bit of the IP/port in idle mode. Only applies for output ports.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attributeGroup ref="spirit:string.prompt.att"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="reset">
		<xs:annotation>
			<xs:documentation>String value. The output value for each bit of the IP/port in reset mode. Only applies for output ports.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:string">
					<xs:attributeGroup ref="spirit:string.prompt.att"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="hasIsolation">
		<xs:annotation>
			<xs:documentation>Boolean value. If set to true, then the IP/port already has an isolation feature embedded.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:boolean">
					<xs:attributeGroup ref="spirit:bool.prompt.att"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
	<xs:element name="hasLevelShifter">
		<xs:annotation>
			<xs:documentation>Boolean value. If set to true, then the IP/port already has a level shifter embedded.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:simpleContent>
				<xs:extension base="xs:boolean">
					<xs:attributeGroup ref="spirit:bool.prompt.att"/>
				</xs:extension>
			</xs:simpleContent>
		</xs:complexType>
	</xs:element>
</xs:schema>
