Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
sim:start [2022/07/17 06:00]
rajit
sim:start [2023/04/16 11:31]
rajit [Exported processes]
Line 1: Line 1:
 ====== Namespace sim ====== ====== Namespace sim ======
  
-The ''sim'' namespace contains a collection of process definitions that can be used to create simple test environments for simulation purposes.+The ''sim'' namespace contains a collection of process definitions that can be used to create simple test environments for simulation purposes. Import this namespace using
  
 <code act> <code act>
-export template<pint W, V> defproc source (chan!(int<W>) O);+import sim; 
 +</code> 
 + 
 +===== Exported processes ===== 
 + 
 + 
 +<code act> 
 +template<pint W, V>  
 +defproc source (chan!(int<W>) O);
 </code> </code>
 This creates a data source that has bit-width ''W'', and that repeatedly sends the constant value ''V'' on the output port ''O''. This creates a data source that has bit-width ''W'', and that repeatedly sends the constant value ''V'' on the output port ''O''.
  
 <code act> <code act>
-export template<pbool LOG; pint W> defproc sink(chan?(int<W>) I);+template<pbool LOG; pint W>  
 +defproc sink(chan?(int<W>) I);
 </code> </code>
 This process acts as a data sink; it repeatedly receives ''W''-bit input on the input port ''I''. If the ''LOG'' parameter is set to true, then it also displays the value received using the ''log()'' command. This process acts as a data sink; it repeatedly receives ''W''-bit input on the input port ''I''. If the ''LOG'' parameter is set to true, then it also displays the value received using the ''log()'' command.
  
 <code act> <code act>
-export template<pint W; pbool REP; pint N; pint data[N]>+template<pint W; pbool REP; pint N; pint data[N]>
 defproc source_seq(chan!(int<W>) O); defproc source_seq(chan!(int<W>) O);
 </code> </code>
 +This process also provides a ''W''-bit source. Values generated by this source are specified in the ''N''-entry ''data[]'' array. The outputs produced are ''data[0]'', ''data[1]'', ..., ''data[N-1]''. If ''REP'' is set to true, then this sequence is repeated forever.
  
 +<code act>
 +template<pint ID; pbool LOOP; pint W>
 +defproc file_source(chan!(int<W>) O);
 +</code>
 +This process is also a ''W''-bit source, except the values produced are taken from a file. The identified ''ID'' is used to determine the file name, and the file is assumed to have at least one data value. By default, the file name is ''_infile_.{ID}''. The file format is a sequence of hexadecimal values, one per line. If ''LOOP'' is set to true, then the sequence of values specified in the file is repeated forever. The file name can be modified using [[tools:actsim#standard_sim_namespace_helper_functions|run-time configuration options]].
  
 +<code act>
 +template<pint ID; pbool LOOP; pint W>
 +defproc check_sink(chan?(int<W>) I);
 +</code>
 +This process is a ''W''-bit sink, except the values produced are compared to those specified in a file. The identified ''ID'' is used to determine the file name, and the file is assumed to have at least one data value. The file specified and the ''LOOP'' parameter is the same as in ''file_source''.
  
 +===== Namespace sim::rand =====
  
 +The ''sim::rand'' namespace contains support for random number generation, and includes the definition of a number of processes that use this random number generation functionality. The underlying random number generator used is a pseudo-random number generator, and hence the sequence of "random" numbers is deterministic. To ensure that these numbers remain unchanged on different platforms, we use a local mirror of the ''rand_r'' function from glibc.
 +
 +<code act>
 +template<pint W>
 +defproc source(chan!(int<W>) O);
 +</code>
 +This defines a source whose output is generated using the underlying library's pseudo-random number generator.
 +
 +<code act>
 +function init(int<8> width) : int<32>;
 +function init_range(int<8> width; int<32> minval, maxval) : int<32>;
 +</code>
 +These functions are used to initialize a (pseudo) random number generator. They return an identifier to be used in subsequent calls to the functions below to access the generator. The first one initializes a random number generator of the specified bit-width, while the second one specifies an interval over which the random number is supposed to be uniformly distributed.
 +
 +<code act>
 +function get(int<32> idx) : int<64>;
 +</code>
 +Returns the next random number from the generator specified by index ''idx''.
 +
 +<code act>
 +function seed(int<32> idx; int<32> val) : bool;
 +</code>
 +Set the seed for the random number generator ''idx'' to the value ''val''.