<?xml version="1.0" standalone="no"?>

<!DOCTYPE stylesheet [
	<!ENTITY UPPERCASE "ABCDEFGHIJKLMNOPQRSTUVWXYZ">
	<!ENTITY LOWERCASE "abcdefghijklmnopqrstuvwxyz">
	
	<!ENTITY UPPER2LOWER " '&UPPERCASE;' , '&LOWERCASE;' ">
	<!ENTITY LOWER2UPPER " '&LOWERCASE;' , '&UPPERCASE;' ">
	
	<!ENTITY ALPHALOWER "ABCDEFxX0123456789">
	<!ENTITY HEXUPPER "ABCDEFxX0123456789">
	<!ENTITY HEXLOWER "abcdefxX0123456789">
	<!ENTITY HEXU2L " '&HEXLOWER;' , '&HEXUPPER;' ">
]>	        

<xsl:stylesheet version="1.0"
	   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       xmlns:exsl="http://exslt.org/common"
       xmlns:dyn="http://exslt.org/dynamic"
       xmlns:math="http://exslt.org/math"
       xmlns:xlink="http://www.w3.org/1999/xlink"
       extension-element-prefixes="math dyn exsl xlink">
           
<!--	
	================================================================================
							Generate XTeller for PORTS
	================================================================================ 
-->	
<xsl:param name="SHOW_IOIF"    select="'TRUE'"/>
<xsl:param name="SHOW_BUSIF"   select="'TRUE'"/>

<xsl:template name="WRITE_VIEW_PORT_TREE">

    <xsl:variable name="num_of_ext_ports_" select="count($G_SYS_EXPS/PORT)"/>
    
	<xsl:if test="$G_DEBUG='TRUE'">
		<xsl:message>WRITING PORT in MODE :<xsl:value-of select="@MODE"/></xsl:message>
		<!-- 
			<xsl:message>EXTERNAL PORT <xsl:value-of select="$num_of_ext_ports_"/></xsl:message>
		 -->
	</xsl:if>	
	
    
	<xsl:if test="$num_of_ext_ports_ &gt; 0">
		<xsl:call-template name="WRITE_VIEW_EXTP_TREE_SET"/>
	</xsl:if>

	<xsl:for-each select="$G_SYS_MODS/MODULE">
		<xsl:sort data-type="number"    select="@ROW_INDEX" order="ascending"/>
		<xsl:variable name= "instName_" select="@INSTANCE"/>
		<xsl:variable name="moduleRef_" select="self::node()"/>
	
		<xsl:call-template name="WRITE_VIEW_PORT_TREE_SET">
			<xsl:with-param name="iModRef" select="$moduleRef_"/>
		</xsl:call-template>
		
	</xsl:for-each>	<!--  End of MODULES loop -->
</xsl:template>

<xsl:template name="WRITE_VIEW_EXTP_TREE_SET">
	
	<xsl:element name="SET">
		<xsl:attribute name="ID">ExternalPorts</xsl:attribute>
		<xsl:attribute name="CLASS">MODULE</xsl:attribute>
		
		<xsl:for-each select="$G_SYS_EXPS">
			
            <xsl:element name="VARIABLE">
				<xsl:attribute name="NAME">Name</xsl:attribute>
				<xsl:attribute name="VALUE">External Ports</xsl:attribute>
				<xsl:attribute name="VIEWDISP">Name</xsl:attribute>
				<xsl:attribute name="VIEWTYPE">STATIC</xsl:attribute>
			</xsl:element>				
			
			<xsl:for-each select="PORT">
				<xsl:sort select="@NAME" order="ascending"/>
				<!--
				<xsl:sort data-type="number" select="@MHS_INDEX" order="ascending"/>
				  -->
			
				<xsl:element name="SET">
					<xsl:attribute name="ID"><xsl:value-of select="@NAME"/></xsl:attribute>
					<xsl:attribute name="CLASS">PORT</xsl:attribute>
					<xsl:attribute name="ROW_INDEX"><xsl:value-of select="(position() - 1)"/></xsl:attribute>
			
					<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"       NAME="SIGNAME" VALUE="{@SIGNAME}" IS_EDITABLE="TRUE"/>
					<VARIABLE VIEWTYPE="TEXTBOX"   VIEWDISP="Name"      NAME="NAME"    VALUE="{@NAME}"/>
					<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Direction" NAME="DIR"     VALUE="{@DIR}"/>
				            
					<xsl:if test="(@SIGIS)">
						<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Class"     NAME="SIGIS"   VALUE="{@SIGIS}"/>
					</xsl:if>
					<xsl:if test="not(@SIGIS)">
						<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Class"     NAME="SIGIS"   VALUE="NONE"/>
					</xsl:if>
				            
				    <xsl:choose>
						<xsl:when test="@LEFT and @RIGHT">
							<xsl:variable name="vecformula_txt_">[<xsl:value-of select="@LEFT"/>:<xsl:value-of select="@RIGHT"/>]</xsl:variable>
							<VARIABLE VIEWTYPE="TEXTBOX"    VIEWDISP="Range" NAME="VECFORMULA" VALUE="{$vecformula_txt_}"/>
						</xsl:when>
						<xsl:when test="@MSB and @LSB">
							<xsl:variable name="vecformula_txt_">[<xsl:value-of select="@MSB"/>:<xsl:value-of select="@LSB"/>]</xsl:variable>
							<VARIABLE VIEWTYPE="TEXTBOX"    VIEWDISP="Range" NAME="VECFORMULA" VALUE="{$vecformula_txt_}"/>
						</xsl:when>
				    	<xsl:when test="(not(@MSB) and not(@LSB) and not(@SIGIS = 'CLK') and not(@SIGIS = 'CLOCK') and not(@SIGIS = 'DCMCLK') and not(@SIGIS = 'RST') and not(@SIGIS = 'RESET'))">
				    		<VARIABLE VIEWTYPE="TEXTBOX"    VIEWDISP="Range" NAME="VECFORMULA" VALUE=""/>
				    	</xsl:when>
				    </xsl:choose>        
				                 
				    <xsl:if test="((@SIGIS = 'CLK') or (@SIGIS = 'CLOCK') or (@SIGIS = 'DCMCLK'))">
				    	<VARIABLE VIEWTYPE="TEXTBOX"  VIEWDISP="Frequency(Hz)" NAME="CLKFREQUENCY" VALUE="{@CLKFREQUENCY}"/>
				    </xsl:if>
				    
				   	<xsl:if test="(@SIGIS = 'RST' or @SIGIS = 'RESET')">
				   		<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Reset Polarity" NAME="RSTPOLARITY" VALUE="{@RSTPOLARITY}"/>
					</xsl:if>
					
		            <xsl:if test="(@SIGIS = 'INTERRUPT')">
	            		<VARIABLE VIEWTYPE="DROPDOWN"    VIEWDISP="Sensitivity" NAME="SENSITIVITY" VALUE="{@SENSITIVITY}"/>
	        		</xsl:if>
	        	</xsl:element>
			</xsl:for-each> <!--  End of EXTERNAL PORTS loop -->
		</xsl:for-each> <!-- End of EXTERNAL PORTS loop  -->
	</xsl:element>	<!-- End of EXTERNAL PORTS SET  -->
</xsl:template>

<xsl:template name="WRITE_VIEW_PORT_TREE_SET">
	<xsl:param name="iModRef" select="'__NONE__'"/>
	
	<xsl:variable name="m_inst_"      select="$iModRef/@INSTANCE"/>
	<xsl:variable name="m_class_"     select="$iModRef/@MODCLASS"/>
	<xsl:variable name="m_type_"      select="$iModRef/@MODTYPE"/>
	<xsl:variable name="m_type_lc_"   select="translate($m_type_,&UPPER2LOWER;)"/> 
	<xsl:variable name="m_version_"   select="$iModRef/@HWVERSION"/>
	<xsl:variable name="m_licinfo_"   select="$iModRef/LICENSEINFO"/>	
	<xsl:variable name="m_ports_"     select="$iModRef/PORTS"/>	
	
	<xsl:variable name="is_axi_interconnect_">
        <xsl:choose>
            <xsl:when test="$m_type_    = 'axi_interconnect'">TRUE</xsl:when>
            <xsl:when test="$m_type_lc_ = 'axi_interconnect'">TRUE</xsl:when>
            <xsl:otherwise>FALSE</xsl:otherwise>
        </xsl:choose>
	</xsl:variable>		

	<xsl:for-each select="$G_SYS_MODS"> <!--  To put things in the right scope for the keys below -->
	
		<xsl:variable name="m_iofs_all_"  select="key('G_MAP_ALL_IOFS', $m_inst_)"/>	
		<xsl:variable name="m_bifs_all_"  select="key('G_MAP_ALL_BIFS', $m_inst_)"/>	
		
		<xsl:variable name="m_ports_def_" select="key('G_MAP_DEF_PORTS',$m_inst_)"/>	
		<xsl:variable name="m_ports_ndf_" select="key('G_MAP_NDF_PORTS',$m_inst_)"/>	
<!-- 
		<xsl:if test="$G_DEBUG = 'TRUE'">
			<xsl:message><xsl:value-of select="$m_inst_"/> has <xsl:value-of select="count($m_bifs_all_)"/> valid bifs </xsl:message>         
			<xsl:message><xsl:value-of select="$m_inst_"/> has <xsl:value-of select="count($m_iofs_all_)"/> valid iofs </xsl:message>         
			<xsl:message><xsl:value-of select="$m_inst_"/> has <xsl:value-of select="count($m_ports_def_)"/> default ports </xsl:message>         
			<xsl:message><xsl:value-of select="$m_inst_"/> has <xsl:value-of select="count($m_ports_ndf_)"/> non default ports </xsl:message>         
			<xsl:message></xsl:message>
		</xsl:if>
-->		
	
		<SET ID="{$m_inst_}" CLASS="MODULE">
			<!-- CR452579
		     			Can only modify INSTANCE name in Hierarchal view.
			--> 
			<VARIABLE VIEWTYPE="TEXTBOX" VIEWDISP="Name"       NAME="INSTANCE"  VALUE="{$m_inst_}"/>
			<VARIABLE VIEWTYPE="STATIC"  VIEWDISP="IP Type"    NAME="MODTYPE"   VALUE="{$m_type_}" VIEWICON="{$m_licinfo_/@ICON_NAME}"/>
			<VARIABLE VIEWTYPE="STATIC"  VIEWDISP="IP Version" NAME="HWVERSION" VALUE="{$m_version_}"/>
			
			<!-- 
			CR582477, 
				(among others) special case of axi_interconnect_aclk which is a member of
				a bus interface, but should be treated as a non interface port, (i.e. appear even
				if the bus interfaces its a member of is invalid.
			-->
		 	<xsl:if test="($is_axi_interconnect_ = 'TRUE')">
		 		<!--  do it this way so we also catch the lower-upper case mismatches -->
				<xsl:for-each select="key('G_MAP_ALL_PORTS',$m_inst_)[contains(@SIGIS,'CLK')]">
					<xsl:variable name="uc_portName_" select="translate(@NAME,&LOWER2UPPER;)"/> 
		 	    	<xsl:if test="($uc_portName_= 'INTERCONNECT_ACLK')">
		 	    		<!-- 
							<xsl:message><xsl:value-of select="$m_inst_"/>.<xsl:value-of select="@NAME"/> =  <xsl:value-of select="@SIGIS"/></xsl:message>
		 	    		 -->
						<xsl:variable name="portName_" select="@NAME"/> 
						<xsl:variable name="portDir_"  select="@DIR"/> 
						<xsl:variable name="portSig_"  select="@SIGNAME"/> 
				
						<xsl:variable name="portSigIs_">
							<xsl:choose>
								<xsl:when test="not(@SIGIS)">__NONE__</xsl:when>
				    			<xsl:otherwise><xsl:value-of select="@SIGIS"/></xsl:otherwise>
							</xsl:choose>	
						</xsl:variable>
				
						<xsl:variable name="portSensi_">
							<xsl:choose>
								<xsl:when test="(@SENSITIVITY)"><xsl:value-of select="@SENSITIVIITY"/></xsl:when>
				  	  			<xsl:otherwise>__NONE__</xsl:otherwise>
							</xsl:choose>
						</xsl:variable>
							
						<xsl:variable name="portVecFormula_">
				    		<xsl:choose>
								<xsl:when test="@VECFORMULA"><xsl:value-of select="@VECFORMULA"/></xsl:when>
				    			<xsl:otherwise>__NONE__</xsl:otherwise>
							</xsl:choose>
						</xsl:variable>    
				
						<xsl:call-template name="WRITE_PORT_SET">
							<xsl:with-param name="iName"        select="$portName_"/>
							<xsl:with-param name="iDir"  	    select="$portDir_"/>
							<xsl:with-param name="iSigName"     select="$portSig_"/>
							<xsl:with-param name="iSigIs"       select="$portSigIs_"/>
							<xsl:with-param name="iSensitivity" select="$portSensi_"/>
							<xsl:with-param name="iVecFormula"  select="$portVecFormula_"/>
						</xsl:call-template>
			    	</xsl:if>
				</xsl:for-each>
		 	</xsl:if>
			
			<!--  PORTS not part of an INTERFACE -->
		 	<xsl:for-each select="$m_ports_ndf_">
		 	
				<xsl:sort data-type="number" select="@MPD_INDEX" order="ascending"/>
				<xsl:variable name="uc_portName_" select="translate(@NAME,&LOWER2UPPER;)"/> 
				
				<!-- 
		 	    <xsl:if test="((not(@BUS) and not(@IOS)) or (($is_axi_interconnect_ = 'TRUE') and ($uc_portName_= 'INTERCONNECT_ACLK')))">
			    </xsl:if>
				 -->
			    
		 	    
				<xsl:variable name="portName_" select="@NAME"/> 
				<xsl:variable name="portDir_"  select="@DIR"/> 
				<xsl:variable name="portSig_"  select="@SIGNAME"/> 
		
				<xsl:variable name="portSigIs_">
					<xsl:choose>
						<xsl:when test="not(@SIGIS)">__NONE__</xsl:when>
		    			<xsl:otherwise><xsl:value-of select="@SIGIS"/></xsl:otherwise>
					</xsl:choose>	
				</xsl:variable>
		
				<xsl:variable name="portSensi_">
					<xsl:choose>
						<xsl:when test="(@SENSITIVITY)"><xsl:value-of select="@SENSITIVITY"/></xsl:when>
		  	  			<xsl:otherwise>__NONE__</xsl:otherwise>
					</xsl:choose>
				</xsl:variable>
					
				<xsl:variable name="portVecFormula_">
		    		<xsl:choose>
						<xsl:when test="@VECFORMULA"><xsl:value-of select="@VECFORMULA"/></xsl:when>
		    			<xsl:otherwise>__NONE__</xsl:otherwise>
					</xsl:choose>
				</xsl:variable>    
		
		     
				<xsl:call-template name="WRITE_PORT_SET">
					<xsl:with-param name="iName"        select="$portName_"/>
					<xsl:with-param name="iDir"  	    select="$portDir_"/>
					<xsl:with-param name="iSigName"     select="$portSig_"/>
					<xsl:with-param name="iSigIs"       select="$portSigIs_"/>
					<xsl:with-param name="iSensitivity" select="$portSensi_"/>
					<xsl:with-param name="iVecFormula"  select="$portVecFormula_"/>
				</xsl:call-template>
		   	</xsl:for-each>	<!--  END of PORTS NOT OF INTERFACE -->
		   	
			<!--  PORTS part of a BUSINTERFACE -->
			<xsl:if test="$SHOW_BUSIF = 'TRUE'">
				<xsl:for-each select="$m_bifs_all_">
				    <xsl:sort data-type="number" select="@MPD_INDEX" order="ascending"/>
				    
					<xsl:variable name="bifName_"      select="@NAME"/>
			        <xsl:variable name="bifRef_"       select="self::node()"/>
			        <xsl:variable name="portmapsRef_"  select="$bifRef_/PORTMAPS"/>
					
					<!-- 
			        	<xsl:variable name="bpmsCnt_"  select="count($bpmsRef_/PORTMAP)"/>
					 	<xsl:message><xsl:value-of select="$instName_"/>.<xsl:value-of select="$bifName_"/>.<xsl:value-of select="$bpmsCnt_"/></xsl:message>
					 -->
					 
		   			<xsl:variable name="is_external_">
		  				<xsl:call-template name="F_IS_Interface_External">
		  			   		<xsl:with-param name="iInstRef" select="$iModRef"/>
		  			   		<xsl:with-param name="iIntfRef" select="$bifRef_"/>
		  			   	</xsl:call-template>	
				   	</xsl:variable>
		 			   		
		    		<xsl:variable name="bif_connection_">
			    		<xsl:choose>
							<xsl:when test="not(@BUSNAME = '__NOC__')">Connected to BUS <xsl:value-of select="@BUSNAME"/></xsl:when>
							<xsl:when test="($is_external_ = 'TRUE')">Connected to External Ports</xsl:when>
			    			<xsl:otherwise>Not connected to BUS or External Ports</xsl:otherwise>
						</xsl:choose>
					</xsl:variable>
										
		           <!--  <SET ID="{@NAME}" CLASS="BUSINTERFACE.PORTS"/> --> 
			        <xsl:element name="SET">
		            
		                <xsl:attribute name="ID"><xsl:value-of select="@NAME"/></xsl:attribute>
		                <xsl:attribute name="CLASS">BUSINTERFACE.PORTS</xsl:attribute>
		                
		                <xsl:if test="$is_external_ = 'TRUE'">
		                	<xsl:attribute name="IS_EXTERNAL">TRUE</xsl:attribute>
		                </xsl:if>
		                
		            	<VARIABLE VIEWTYPE="STATIC"   VIEWDISP="NAME" NAME="NAME" VALUE="(BUS_IF) {@NAME}"/>
		              	<VARIABLE VIEWTYPE="DROPDOWN" VIEWDISP="Net"  NAME="BUSINTERFACE.CONNECTION" VALUE="{$bif_connection_}"/>
		              		
						<xsl:for-each select="$portmapsRef_/PORTMAP">
			        		
						    <xsl:variable name="portDir_"  select="@DIR"/> 
					    	<xsl:variable name="portName_" select="@PHYSICAL"/> 
			        		
					    	<xsl:if test="$m_ports_def_[(@NAME = $portName_)]"><!--  Only in map if port is valid -->
					    	
							    <!-- 
					    	       <xsl:if test="(not($portRef_/@IS_VALID) or ($portRef_/@IS_VALID = 'TRUE'))"/>
						    		<xsl:sort select="@MPD_INDEX" order="ascending"/>
							    	<xsl:sort data-type="number" select="@MPD_INDEX" order="ascending"/>
							     -->
			        		    <xsl:variable name="portRef_"  select="$m_ports_def_[(@NAME = $portName_)]"/>
						    	<xsl:variable name="portSig_"  select="$portRef_/@SIGNAME"/>
				
						    	<xsl:variable name="portSigIs_">
							    	<xsl:choose>
										<xsl:when test="not($portRef_/@SIGIS)">__NONE__</xsl:when>
							    		<xsl:otherwise><xsl:value-of select="$portRef_/@SIGIS"/></xsl:otherwise>
									</xsl:choose>	
								</xsl:variable>
							
					    		<xsl:variable name="portSensi_">
								    <xsl:choose>
										<xsl:when test="($portRef_/@SENSITIVITY)"><xsl:value-of select="$portRef_/@SENSITIVITY"/></xsl:when>
								    	<xsl:otherwise>__NONE__</xsl:otherwise>
									</xsl:choose>
								</xsl:variable>
											
							    <xsl:variable name="portVecFormula_">
								    <xsl:choose>
										<xsl:when test="$portRef_/@VECFORMULA"><xsl:value-of select="$portRef_/@VECFORMULA"/></xsl:when>
								    	<xsl:otherwise>__NONE__</xsl:otherwise>
									</xsl:choose>
								</xsl:variable>
							    
				   			   	<xsl:call-template name="WRITE_PORT_SET">
									<xsl:with-param name="iName"        select="$portName_"/>
									<xsl:with-param name="iDir"  	    select="$portDir_"/>
									<xsl:with-param name="iSigName"     select="$portSig_"/>
									<xsl:with-param name="iSigIs"       select="$portSigIs_"/>
									<xsl:with-param name="iSensitivity" select="$portSensi_"/>
									<xsl:with-param name="iVecFormula"  select="$portVecFormula_"/>
							  	</xsl:call-template>
					    	</xsl:if>
						</xsl:for-each> <!--  END BIF PORTMAPS LOOP -->	               		
		             	</xsl:element>
				</xsl:for-each> <!-- END BIFS LOOP -->
			</xsl:if> <!--  END IF SHOW_BUSIFS --> 
			
			
			<!--  PORTS part of a IOINTERFACE -->
			<xsl:if test="$SHOW_IOIF = 'TRUE'">
			
				<xsl:for-each select="$m_iofs_all_[PORTMAPS/PORTMAP]">
				    <xsl:sort data-type="number" select="@MPD_INDEX" order="ascending"/>
				    
					<xsl:variable name="iifName_" select="@NAME"/>
			        <xsl:variable name="iifRef_"  select="self::node()"/>
			        <xsl:variable name="portmapsRef_" select="$iifRef_/PORTMAPS"/>
					
					<xsl:variable name="is_external_">
		   			   	<xsl:call-template name="F_IS_Interface_External">
		   			   		<xsl:with-param name="iInstRef" select="$iModRef"/>
		   			   		<xsl:with-param name="iIntfRef" select="$iifRef_"/>
		   			   	</xsl:call-template>	
		  			   	</xsl:variable>
		  			   	
			   		<xsl:variable name="iif_connection_">
				   		<xsl:choose>
							<xsl:when test="($is_external_ ='TRUE')">Connected to External Ports</xsl:when>
							<xsl:otherwise>Not connected to External Ports</xsl:otherwise>
						</xsl:choose>
					</xsl:variable>
					
		        	<xsl:element name="SET">
		           
		               	<xsl:attribute name="ID"><xsl:value-of select="@NAME"/></xsl:attribute>
		               	<xsl:attribute name="CLASS">IOINTERFACE.PORTS</xsl:attribute>
		               
		               	<xsl:if test="$is_external_ = 'TRUE'">
		               		<xsl:attribute name="IS_EXTERNAL">TRUE</xsl:attribute>
		               	</xsl:if>
		               
			            <VARIABLE VIEWTYPE="STATIC"    VIEWDISP="NAME" NAME="NAME" VALUE="(IO_IF) {@NAME}"/>
		                <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="IOINTERFACE.CONNECTION" VALUE="{$iif_connection_}"/>
						
						<xsl:for-each select="$portmapsRef_/PORTMAP">
			        		
					    	<xsl:variable name="portName_" select="@PHYSICAL"/>
					    	<xsl:variable name="portDir_"  select="@DIR"/>
			        		
					        <!--
					        <xsl:variable name="port_is_valid_">
					        	<xsl:choose>
					        		<xsl:when test="$portRef_/@IS_VALID = 'FALSE'">FALSE</xsl:when>
					        		<xsl:otherwise>TRUE</xsl:otherwise>
					        	</xsl:choose>
					        </xsl:variable>						    	
						   <xsl:message><xsl:value-of select="$portName_"/> : <xsl:value-of select="$port_is_valid_"/> : <xsl:value-of select="$portRef_/@IS_VALID"/></xsl:message>    
					         -->
						   
					        <xsl:if test="$m_ports_def_[(@NAME = $portName_)]"> <!--  Only in map if port is valid -->
					           <!-- 
						  	   <xsl:message><xsl:value-of select="$portName_"/> </xsl:message>
					            -->
					        
			        			<xsl:variable name="portRef_"  select="$m_ports_def_[(@NAME = $portName_)]"/>
					    		<xsl:variable name="portSig_"  select="$portRef_/@SIGNAME"/>
				
						    	<xsl:variable name="portSigIs_">
							    	<xsl:choose>
										<xsl:when test="not($portRef_/@SIGIS)">__NONE__</xsl:when>
							    		<xsl:otherwise><xsl:value-of select="$portRef_/@SIGIS"/></xsl:otherwise>
									</xsl:choose>	
								</xsl:variable>
							
					    		<xsl:variable name="portSensi_">
								    <xsl:choose>
										<xsl:when test="($portRef_/@SENSITIVITY)"><xsl:value-of select="$portRef_/@SENSITIVITY"/></xsl:when>
								    	<xsl:otherwise>__NONE__</xsl:otherwise>
									</xsl:choose>
								</xsl:variable>
											
							    <xsl:variable name="portVecFormula_">
								    <xsl:choose>
										<xsl:when test="$portRef_/@VECFORMULA"><xsl:value-of select="$portRef_/@VECFORMULA"/></xsl:when>
								    	<xsl:otherwise>__NONE__</xsl:otherwise>
									</xsl:choose>
								</xsl:variable>
							    
				   			   	<xsl:call-template name="WRITE_PORT_SET">
									<xsl:with-param name="iName"        select="$portName_"/>
									<xsl:with-param name="iDir"  	    select="$portDir_"/>
									<xsl:with-param name="iSigName"     select="$portSig_"/>
									<xsl:with-param name="iSigIs"       select="$portSigIs_"/>
									<xsl:with-param name="iSensitivity" select="$portSensi_"/>
									<xsl:with-param name="iVecFormula"  select="$portVecFormula_"/>
							  	</xsl:call-template>
					        </xsl:if> <!-- End of port is valid check -->
						</xsl:for-each> <!--  END IO INTERFACE PORTMAPS LOOP -->	 
					</xsl:element>
				</xsl:for-each> <!-- END IIFS LOOP -->
			</xsl:if> <!--  END IF SHOW_IOIFS -->				
		</SET>	
	
	</xsl:for-each> <!-- End of the scoping for key functions-->
</xsl:template>

<xsl:template name="WRITE_VIEW_PORT_FLAT">
	
	<xsl:if test="$G_DEBUG='TRUE'">
		<xsl:message>WRITING PORT MODE <xsl:value-of select="@MODE"/></xsl:message>
	</xsl:if>	
	
    <xsl:variable name="num_of_ext_ports_" select="count($G_SYS_EXPS/PORT)"/>
	<xsl:if test="$num_of_ext_ports_ &gt; 0">
		<xsl:call-template name="WRITE_VIEW_EXTP_FLAT_SET"/>
	</xsl:if>
	
	
    <xsl:for-each select="$G_SYS_MODS/MODULE">
  		<xsl:sort data-type="number" select="@ROW_INDEX" order="ascending"/>
		<xsl:variable name="instName_" select="@INSTANCE"/>
		<xsl:variable name="moduleRef_" select="self::node()"/>
	
		<xsl:call-template name="WRITE_VIEW_PORT_FLAT_SET">
			<xsl:with-param name="iModRef" select="$moduleRef_"/>
		</xsl:call-template>
	   		
    </xsl:for-each> <!-- End of Modules Loop -->
</xsl:template>	

<xsl:template name="WRITE_VIEW_EXTP_FLAT_SET">

	<xsl:for-each select="$G_SYS_EXPS">
  		<xsl:for-each select="PORT[(not(@IS_VALID) or (@IS_VALID = 'TRUE'))]">
			<xsl:sort data-type="number" select="@MHS_INDEX" order="ascending"/> 
		    <xsl:variable name="ext_is_interrupt_">
			   <xsl:if test="@SIGIS = 'INTERRUPT'">TRUE</xsl:if>
			   <xsl:if test="not(@SIGIS = 'INTERRUPT')">FALSE</xsl:if>
		    </xsl:variable>
			  
 			<SET ID="{@NAME}" CLASS="PORT">
			 
				<VARIABLE VIEWTYPE="STATIC"  VIEWDISP="Instance" NAME="INSTANCE" VALUE="External Ports"/>
      			<VARIABLE VIEWTYPE="TEXTBOX" VIEWDISP="Port Name" NAME="NAME" VALUE="{@NAME}"/>
      			
				 <xsl:choose>
					<xsl:when test="@LEFT and @RIGHT">
						<xsl:variable name="vecformula_txt_">[<xsl:value-of select="@LEFT"/>:<xsl:value-of select="@RIGHT"/>]</xsl:variable>
						<VARIABLE VIEWTYPE="TEXTBOX"    VIEWDISP="Range" NAME="VECFORMULA" VALUE="{$vecformula_txt_}"/>
					</xsl:when>
					<xsl:when test="@MSB and @LSB">
						<xsl:variable name="vecformula_txt_">[<xsl:value-of select="@MSB"/>:<xsl:value-of select="@LSB"/>]</xsl:variable>
						<VARIABLE VIEWTYPE="TEXTBOX"    VIEWDISP="Range" NAME="VECFORMULA" VALUE="{$vecformula_txt_}"/>
					</xsl:when>
			    	<xsl:when test="(not(@MSB) and not(@LSB) and not(@SIGIS = 'CLK') and not(@SIGIS = 'CLOCK') and not(@SIGIS = 'DCMCLK') and not(@SIGIS = 'RST') and not(@SIGIS = 'RESET'))">
			    		<VARIABLE VIEWTYPE="TEXTBOX"    VIEWDISP="Range" NAME="VECFORMULA" VALUE=""/>
			    	</xsl:when>
			    </xsl:choose>
			    
	       		<VARIABLE VIEWTYPE="DROPDOWN" VIEWDISP="Net" NAME="SIGNAME" VALUE="{@SIGNAME}" IS_EDITABLE="TRUE"/>
	       		<VARIABLE VIEWTYPE="DROPDOWN" VIEWDISP="Direction" NAME="DIR" VALUE="{@DIR}"/>
	       		
   				<xsl:if test="(@SIGIS)">
					<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Class"     NAME="SIGIS"   VALUE="{@SIGIS}"/>
		        </xsl:if>
				<xsl:if test="not(@SIGIS)">
					<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Class"     NAME="SIGIS"   VALUE="NONE"/>
				</xsl:if>
				
				<xsl:if test="(@SIGIS = 'RST' or @SIGIS = 'RESET')">
	       			<VARIABLE VIEWTYPE="DROPDOWN" VIEWDISP="Reset Polarity" NAME="RSTPOLARITY" VALUE="{@RSTPOLARITY}"/>
				</xsl:if>
				<xsl:if test="((@SIGIS = 'CLK') or (@SIGIS = 'CLOCK') or (@SIGIS = 'DCMCLK'))">
	       			<VARIABLE VIEWTYPE="TEXTBOX" VIEWDISP="Frequency(Hz)" NAME="CLKFREQUENCY" VALUE="{@CLKFREQUENCY}"/>
				</xsl:if>
				
				<!-- SENSITIVITY Settings on Interrupt ports -->
				<xsl:choose>
					<xsl:when test="((@SIGNAME = '__NOC__') and ($ext_is_interrupt_ = 'TRUE') and not(@SENSITIVITY))">
		        		<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Sensitivity"  NAME="SENSITIVITY" VALUE=""/> 
					</xsl:when>
					<xsl:when test="((@SIGNAME = '__NOC__') and ($ext_is_interrupt_ = 'TRUE') and (@SENSITIVITY))">
		        		<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Sensitivity"  NAME="SENSITIVITY" VALUE="{@SENSITIVITY}"/>
					</xsl:when>
					
					<xsl:when test="((@SIGNAME = '__DEF__') and ($ext_is_interrupt_ = 'TRUE') and not(@SENSITIVITY))">
		        		<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Sensitivity"  NAME="SENSITIVITY" VALUE=""/>
					</xsl:when>
					<xsl:when test="((@SIGNAME = '__DEF__') and ($ext_is_interrupt_ = 'TRUE') and (@SENSITIVITY))">
		        		<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Sensitivity"  NAME="SENSITIVITY" VALUE="{@SENSITIVITY}"/>
					</xsl:when>
					
					<xsl:when test="(not(@SIGNAME = '__DEF__') and not(@SIGNAME = '__NOC__') and ($ext_is_interrupt_ = 'TRUE') and not(@SENSITIVITY))">
		        		<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Sensitivity"  NAME="SENSITIVITY" VALUE=""/> 
					</xsl:when>
					
					<xsl:when test="(not(@SIGNAME = '__DEF__') and not(@SIGNAME = '__NOC__') and ($ext_is_interrupt_ = 'TRUE') and (@SENSITIVITY))">
		        		<VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Sensitivity"  NAME="SENSITIVITY" VALUE="{@SENSITIVITY}"/> 
					</xsl:when>
				</xsl:choose>
			</SET>				
   	    </xsl:for-each>
	</xsl:for-each>
</xsl:template>

<xsl:template name="WRITE_VIEW_PORT_FLAT_SET">

	<xsl:param name="iModRef" 		  select="'__NONE__'"/>
	
	<xsl:variable name="m_inst_"      select="$iModRef/@INSTANCE"/>
	<xsl:variable name="m_class_"     select="$iModRef/@MODCLASS"/>
	<xsl:variable name="m_type_"      select="$iModRef/@MODTYPE"/>
	<xsl:variable name="m_type_lc_"   select="translate($m_type_,&UPPER2LOWER;)"/> 
	<xsl:variable name="m_version_"   select="$iModRef/@HWVERSION"/>
	<xsl:variable name="m_licinfo_"   select="$iModRef/LICENSEINFO"/>	
	
	<xsl:variable name="is_axi_interconnect_">
        <xsl:choose>
            <xsl:when test="$m_type_    = 'axi_interconnect'">TRUE</xsl:when>
            <xsl:when test="$m_type_lc_ = 'axi_interconnect'">TRUE</xsl:when>
            <xsl:otherwise>FALSE</xsl:otherwise>
        </xsl:choose>
	</xsl:variable>
	
	<xsl:for-each select="$G_SYS_MODS"> <!--  To put things in the right scope for the keys below -->
	
		<xsl:variable name="m_bifs_all_"  select="key('G_MAP_ALL_BIFS', $m_inst_)"/>
		<xsl:variable name="m_ports_all_" select="key('G_MAP_ALL_PORTS',$m_inst_)"/>	
		
		<xsl:if test="$G_DEBUG = 'TRUE'">
			<xsl:message><xsl:value-of select="$m_inst_"/> has <xsl:value-of select="count($m_ports_all_)"/> valid ports </xsl:message>         
		</xsl:if>
		
		<xsl:for-each select="$m_ports_all_">
			<xsl:sort data-type="number" select="@MPD_INDEX" order="ascending"/>
	        <!-- <xsl:message>PORTNM : <xsl:value-of select="@NAME"/></xsl:message> -->
	        
			<xsl:variable name="p_nm_uc_"  select="translate(@NAME,&LOWER2UPPER;)"/> 
			<xsl:variable name="p_bif_"    select="@BUS"/>	        
			
	        <xsl:variable name="port_is_valid_">
	        	<xsl:choose>
	        		<xsl:when test="@IS_VALID = 'FALSE'">FALSE</xsl:when>
	        		<xsl:when test="(($is_axi_interconnect_ = 'TRUE') and ($p_nm_uc_= 'INTERCONNECT_ACLK'))">TRUE</xsl:when>
	        		<xsl:when test="not(@BUS) or (@BUS and key('G_MAP_ALL_BIFS', $m_inst_)[(@NAME = $p_bif_)])">TRUE</xsl:when>
	        		<xsl:otherwise>FALSE</xsl:otherwise>
	        	</xsl:choose>
	        </xsl:variable>
	        
		    <xsl:if test="$port_is_valid_ = 'TRUE'">
		    <!-- 
    		  	<xsl:message>PORT <xsl:value-of select="@BUS"/>.<xsl:value-of select="@NAME"/></xsl:message> 
		     -->
				<SET ID="{@NAME}" CLASS="PORT">
				<!--        
				CR452579
				Can only modify INSTANCE name in Hierarchal view.
				--> 
				    <VARIABLE VIEWTYPE="STATIC" VIEWDISP="Instance"   NAME="INSTANCE"  VALUE="{$m_inst_}"/>
				    <VARIABLE VIEWTYPE="STATIC" VIEWDISP="IP Type"    NAME="MODTYPE"   VALUE="{$m_type_}" VIEWICON="{$m_licinfo_/@ICON_NAME}"/>
				    <VARIABLE VIEWTYPE="STATIC" VIEWDISP="IP Version" NAME="HWVERSION" VALUE="{$m_version_}"/>
				       
				    <VARIABLE VIEWTYPE="STATIC" VIEWDISP="Port Name"  NAME="NAME" VALUE="{@NAME}"/>
				    <VARIABLE VIEWTYPE="STATIC" VIEWDISP="Direction"  NAME="DIR"  VALUE="{@DIR}"/>
				    
				    <xsl:if test="@SIGIS">
				        <VARIABLE VIEWTYPE="STATIC"  VIEWDISP="Class" NAME="SIGIS" VALUE="{@SIGIS}"/>
				    </xsl:if>
				    
				    <xsl:if test="@VECFORMULA">
				        <VARIABLE VIEWTYPE="STATIC"  VIEWDISP="Range" NAME="VECFORMULA" VALUE="{@VECFORMULA}"/>
				    </xsl:if>
				    
				    <xsl:if test="@SENSITIVITY">
				        <VARIABLE VIEWTYPE="STATIC"  VIEWDISP="Sensitivity" NAME="SENSITIVITY" VALUE="{@SENSITIVITY}"/>
				    </xsl:if>
				    
				    <xsl:variable name="is_interrupt">
				       <xsl:if test="@SIGIS = 'INTERRUPT'">TRUE</xsl:if>
				       <xsl:if test="not(@SIGIS = 'INTERRUPT')">FALSE</xsl:if>
				    </xsl:variable>
				    
				   <xsl:variable name="is_input">
					    <xsl:choose> 
					        <xsl:when test="(@DIR= 'I')">TRUE</xsl:when>
					        <xsl:when test="(@DIR= 'IN')">TRUE</xsl:when>
					        <xsl:when test="(@DIR= 'INPUT')">TRUE</xsl:when>
					        <xsl:otherwise>FALSE</xsl:otherwise>
					    </xsl:choose>
				    </xsl:variable>
				    
				    <!-- VECFORMULA Settings if Interrupt settings -->
				    <xsl:choose>
				        
				        <xsl:when test="((@SIGNAME = '__NOC__') and ($is_interrupt = 'TRUE') and ($is_input = 'TRUE') and not(@VECFORMULA))">
				            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="No Connection" IS_INTERRUPT="{$is_interrupt}"/>
				        </xsl:when>
				        
				        <xsl:when test="((@SIGNAME = '__NOC__') and ($is_interrupt = 'TRUE') and ($is_input = 'TRUE') and (@VECFORMULA))">
				            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="No Connection" IS_INTERRUPT="{$is_interrupt}" IS_RANGE="TRUE"/>
				        </xsl:when>
				        
				        <xsl:when test="@SIGNAME = '__NOC__'">
				            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="No Connection" IS_EDITABLE="TRUE"/>
				        </xsl:when>
				        
				        <xsl:when test="((@SIGNAME = '__DEF__') and ($is_interrupt = 'TRUE') and ($is_input = 'TRUE') and not(@VECFORMULA))">
				            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="Default Connection" IS_INTERRUPT="{$is_interrupt}"/>
				        </xsl:when>
				        <xsl:when test="((@SIGNAME = '__DEF__') and ($is_interrupt = 'TRUE') and ($is_input = 'TRUE') and (@VECFORMULA))">
				            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="Default Connection" IS_INTERRUPT="{$is_interrupt}" IS_RANGE="TRUE"/>
				        </xsl:when>
				        <xsl:when test="@SIGNAME = '__DEF__'">
				            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="Default Connection"/>
				        </xsl:when>
				        
				        <xsl:when test="(not(@SIGNAME = '__DEF__') and not(@SIGNAME = '__NOC__') and ($is_input = 'TRUE') and ($is_interrupt = 'TRUE') and (@VECFORMULA))">
				            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="{@SIGNAME}" IS_INTERRUPT="{$is_interrupt}" IS_RANGE="TRUE"/>
				        </xsl:when>
				        <xsl:when test="(not(@SIGNAME = '__DEF__') and not(@SIGNAME = '__NOC__') and ($is_input = 'TRUE') and ($is_interrupt = 'TRUE'))">
				            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="{@SIGNAME}" IS_INTERRUPT="{$is_interrupt}"/>
				        </xsl:when>
				            
				        <xsl:otherwise>     
				            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="{@SIGNAME}" IS_EDITABLE="TRUE"/>
				        </xsl:otherwise>
				    </xsl:choose>
				  </SET>
			</xsl:if>  <!--  End of port validity check -->
		</xsl:for-each>  <!-- End of Ports Loop -->
	</xsl:for-each>
</xsl:template>

<xsl:template name="WRITE_PORT_SET">

<xsl:param name="iName"	        select="'__NONE__'"/>
<xsl:param name="iDir"          select="'__NONE__'"/>
<xsl:param name="iSigName"      select="'__NONE__'"/>
<xsl:param name="iSigIs"        select="'__NONE__'"/>
<xsl:param name="iVecFormula"   select="'__NONE__'"/>
<xsl:param name="iSensitivity"  select="'__NONE__'"/>

<SET ID="{$iName}" CLASS="PORT">
 
   <VARIABLE VIEWTYPE="STATIC"  VIEWDISP="NAME" NAME="NAME" VALUE="{$iName}"/>
    
   <xsl:variable name="is_interrupt">
       <xsl:if test="$iSigIs = 'INTERRUPT'">TRUE</xsl:if>
       <xsl:if test="not($iSigIs = 'INTERRUPT')">FALSE</xsl:if>
   </xsl:variable>
    
   <xsl:variable name="is_input">
        <xsl:choose> 
            <xsl:when test="($iDir = 'I')">TRUE</xsl:when>
            <xsl:when test="($iDir = 'IN')">TRUE</xsl:when>
            <xsl:when test="($iDir = 'INPUT')">TRUE</xsl:when>
            <xsl:otherwise>FALSE</xsl:otherwise>
        </xsl:choose>
   </xsl:variable>
   
   <xsl:choose>
   
        <xsl:when test="(($iSigName = '__NOC__') and ($is_input = 'TRUE') and ($is_interrupt = 'TRUE') and ($iVecFormula = '__NONE__'))">
            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="No Connection" IS_INTERRUPT="{$is_interrupt}"/>
        </xsl:when>
        <xsl:when test="(($iSigName = '__NOC__') and ($is_input ='TRUE') and ($is_interrupt = 'TRUE') and not($iVecFormula = '__NONE__'))">
            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="No Connection" IS_INTERRUPT="{$is_interrupt}" IS_RANGE="TRUE"/>
        </xsl:when>
        <xsl:when test="$iSigName = '__NOC__'">
            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="No Connection" IS_EDITABLE="TRUE"/>
        </xsl:when>
       
        <xsl:when test="(($iSigName = '__DEF__') and ($is_input = 'TRUE') and ($is_interrupt = 'TRUE') and ($iVecFormula = '__NONE__'))">
            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="Default Connection" IS_INTERRUPT="{$is_interrupt}"/>
        </xsl:when>
        <xsl:when test="(($iSigName = '__DEF__') and ($is_input = 'TRUE') and ($is_interrupt = 'TRUE') and not($iVecFormula = '__NONE__'))">
            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="Default Connection" IS_INTERRUPT="{$is_interrupt}" IS_RANGE="TRUE"/>
        </xsl:when>
        
        <xsl:when test="($iSigName = '__DEF__')">
            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="Default Connection"/>
        </xsl:when>
        
        <xsl:when test="(not($iSigName = '__DEF__') and not($iSigName = '__NOC__') and ($is_input ='TRUE') and ($is_interrupt = 'TRUE') and not($iVecFormula = '__NONE__'))">
            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="{$iSigName}" IS_INTERRUPT="{$is_interrupt}" IS_RANGE="TRUE"/>
        </xsl:when>
        
        <xsl:when test="(not($iSigName = '__DEF__') and not($iSigName = '__NOC__') and ($is_input ='TRUE') and ($is_interrupt = 'TRUE'))">
            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="{$iSigName}" IS_INTERRUPT="{$is_interrupt}"/>
        </xsl:when>
            
        <xsl:otherwise>     
            <VARIABLE VIEWTYPE="DROPDOWN"  VIEWDISP="Net"  NAME="SIGNAME" VALUE="{$iSigName}" IS_EDITABLE="TRUE"/>
        </xsl:otherwise>
    </xsl:choose>
    
    <VARIABLE VIEWTYPE="STATIC"    VIEWDISP="Direction" NAME="DIR" VALUE="{$iDir}"/>
    
    <xsl:if test="not($iSigIs = '__NONE__')">
        <VARIABLE VIEWTYPE="STATIC" VIEWDISP="Class" NAME="SIGIS" VALUE="{$iSigIs}"/>
    </xsl:if>
        
    <xsl:if test="not($iVecFormula = '__NONE__')">
        <VARIABLE VIEWTYPE="STATIC" VIEWDISP="Range" NAME="VECFORMULA" VALUE="{$iVecFormula}"/>
    </xsl:if>
    
    <xsl:if test="not($iSensitivity = '__NONE__')">
        <VARIABLE VIEWTYPE="STATIC" VIEWDISP="Sensitivity" NAME="SENSITIVITY" VALUE="{$iSensitivity}"/>
    </xsl:if>
</SET>
</xsl:template>

	
</xsl:stylesheet>

						    	
