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

-  ``root.hasPorts()``
-  ``root.getPorts()``: returns a list of all the ports (see port API below)
-  ``root.hasGenerics()``
-  ``root.getGenerics()``: returns a list of all the generics (see port API below)

Port API
~~~~~~~~

-  ``port.getDirection()``
-  ``port.getType()``
-  ``port.hasRange()``
-  ``port.hasRangeConstraint()``
-  ``port.getRange()``
-  ``port.hasInitialValue()``
-  ``port.getInitialValue()``

Generic API
~~~~~~~~~~~

-  ``generic.hasType()``
-  ``generic.getType()``
-  ``generic.hasRange()``
-  ``generic.hasRangeConstraint()``
-  ``generic.getRange()``
-  ``generic.hasInitialValue()``
-  ``generic.getInitialValue()``

Example
~~~~~~~

.. code-block::

	<#assign entity = root>
	<#assign max_port_name_chr = 0>
	<#assign max_port_type_chr = 5>
	<#--Determine the max length for ports -->
	<#if entity.hasPorts()>
		<#list entity.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.getType())?length>
			<#if max_port_type_chr < port_type_chr>
				<#assign max_port_type_chr = port_type_chr>
			</#if>
		</#list>
	</#if>
	<#--print ports -->
	<#if entity.hasPorts()>
		<#list entity.getPorts() as port>
			<#assign port_name = r"${" + port.getName() + "}">
			<#assign pad = max_port_name_chr + 3>
			<#assign type = port.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>
