Design API
~~~~~~~~~~

-  ``root.hasPorts()``
-  ``root.getPorts()``: returns a list of all the ports (see port API below)
-  ``root.hasParameters()``
-  ``root.getParameters()``: returns a list of all the parameters (see parameter API below)

Port API
~~~~~~~~

-  ``port.getDirection()``
-  ``port.getData()``: returns the port data (see port data API below)
-  ``port.isInterfacePort()``
-  ``port.isGenericInterfacePort()``
-  ``port.getInterface()``: returns the interface for interface ports

Port Data API
~~~~~~~~~~~~~

-  ``portData.getType()``
-  ``portData.getNetType()``
-  ``portData.hasPackedDimension()``
-  ``portData.getPackedDimension()``
-  ``portData.hasUnpackedDimension()``
-  ``portData.getUnpackedDimension()``
-  ``portData.hasSign()``
-  ``portData.getSign()``

Parameter API
~~~~~~~~~~~~~

-  ``parameter.getInitialValue()``
-  ``parameter.hasInitialValue()``
-  ``parameter.isLocal()``

Example
~~~~~~~

.. code-block::

	<#assign module = root>
	<#assign max_port_name_chr = 0>
	<#assign max_port_type_chr = 5>
	<#--Determine the max length for ports -->
	<#if module.hasPorts()>
		<#list module.getPorts() as port>
			<#assign port_name_chr = (port.getName())?length>
			<#if max_port_name_chr < port_name_chr>
				<#assign max_port_name_chr = port_name_chr>
			</#if>
			<#assign port_type_chr = (port.getData().getType())?length>
			<#if max_port_type_chr < port_type_chr>
				<#assign max_port_type_chr = port_type_chr>
			</#if>
		</#list>
	</#if>
	<#--print ports -->
	<#if module.hasPorts()>
		<#list module.getPorts() as port>
			<#assign port_name = r"${" + port.getName() + "}">
			<#assign pad = max_port_name_chr + 3>
			<#assign data = port.getData()>
			<#assign type = data.getType()?lower_case>
			<#if !(type?has_content)>
				<#assign type = "logic">
			</#if>
			${type?right_pad(max_port_type_chr) + " " + port_name?right_pad(pad) + ";"}
		</#list>
	</#if>
