@c "cmd/channel.texi"
@c extracted from "../../src/sim/prsim/Command-prsim.cc"
@c by "$(top_srcdir)/scripts/extract_texinfo.awk".

@deffn Command channel name type bundle rails
Registers a named channel (with constituents) in a separate namespace in
the simulator, typically used to drive or log the environment.
The @var{name} of the channel should match that of an instance 
(process or channel) in the source file.  
@itemize
@item @var{name} is the name of the new channel in the simulator's namespace
@item @var{type} is a regular expression of the form @t{[ae]?[nv]?:[01]?}, where
@itemize
	@item @t{a} means active-high acknowledge
	@item @t{e} means active-low acknowledge (a.k.a. enable)
	@item @t{n} means active-low validity (a.k.a. neutrality)
	@item @t{v} means active-high validity.
	These are also the names of the channel signals.
	@item @t{[01]} is the initial value of the acknowledge during reset, 
		which is only relevant to channel sinks.  
@end itemize
@item @var{bundle} is the name of the data bundle (rail group) of the channel
	in the form @t{[name]:size}, where @var{size} is the number of 
	rail bundles (M in Mx1ofN).
	If there are no bundles, then leave the name blank,
		i.e. just write @t{:0}
	If there is only one bundle (1x1ofN), use @var{size} 0 to 
		indicate that named bundle is not an array.
@item @var{rails} (@t{[~]rname:radix}) is the name and size of each bundle's 
	data rails, @var{rname} is the name of the data rail of the channel.
	@var{radix} is the number of data rails per bundle (N in Mx1ofN).
	Use @var{radix} 0 to indicate that rail is not an array (1of1).
	If @var{rails} is prefixed with a @t{~}, then the data rails
	will be interpreted as active low.  
@end itemize
For example, @t{channel e:0 :0 d:4} is a conventional e1of4 channel with
active-high data rails @t{d[0..3]}, 
and an active-low acknowledge (enable) reset to 0, no bundles.
@end deffn

