﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="thpdoc.xsl"?>
<page id="signal" suffix=" Keyword">
  <subsection>Declares a signal.<code>signal TypeName SigName;
signal TypeName SigName = InitialVal;</code></subsection>
  The <kw>signal</kw> keyword declares a signal in an entity. The syntax of signal declarations is very similar to port declarations. See <kw>port</kw> page for more details.
  <section name="Remarks">
	<p>If you wish to combine signal declaration with an implicit process that assigns it, use the <kw>link</kw> keyword. </p>
	<p>Like ports, THDL++ signals can be declared in an arbitrary order and can be grouped together. E.g.:</p>
<code>entity MyEntity
{
	port {...};
	signal
	{
		logic s1, s2;
		logic[8] s3;
	}
	
	...
	
	signal logic[4] s4;
}</code>
  </section>
  <examples>
	<example name="Simple declaration">
<code>entity SubtractAndSquare
{
	port in logic[8] X, Y;
	port out logic[8] Result;
	
	signal typeof(X) tmp;
	
	tmp = X - Y;
	Result = tmp * tmp;
}</code>
	</example>
	<example name="Default values"><code>
entity Testbench
{
	signal logic[8] Counter = 0;
	
	process test()
	{
		Counter++;
	}
}</code>
	</example>
  </examples>
  <seealso id="entity"/>
  <seealso id="port"/>
  <seealso id="link"/>
</page>