Namespace std

The std namespace contains a collection of standard definitions for channels, data types, and other components. This can be viewed as ACT's equivalent of the C++ standard template library.


Parameter-type functions

export function max(pint a, b) : pint;

Returns the larger of the two pints.

export function min(pint a, b) : pint;

Returns the smaller of the two pints.

export function ceil_log2 (pint a) : pint;

Computes the smallest power of two that is at least as large as a.

export function pow(pint n, m) : pint;

Computes the quantity n to the power of m. Note that pints use 64-bit representation.

Runtime Functions

export template<pint W; pint N; pint taps[N]> function fib_lfsr (int<W> state) : int<W>;

Given the current W-bit state of a Fibonacci-style linear feedback shift register (LFSR), compute the next state. The LFSR has N taps, and the ith tap is at location taps[i].


export template<pint ID, N,W>
defproc rom (chan?(int<std::ceil_log2(N)>) addr; chan!(int<W>) dout);

(This can be used after actsim is installed.)

export template<pint N, W>
defproc ram (chan?(int<2>) rd; chan?(int<std::ceil_log2(N)>) addr;  
             chan?(int<W>) din;  chan!(int<W>) dout);
export defcell buf_arbiter(bool? a, b; bool! u, v) ;
export defcell ideal_arbiter(bool? a, b; bool! u, v) ;
export template<pint N, M>
defproc arbiter(chan?(int<N>) A; chan?(int<M>) B; chan!(int<N>) Ap; chan!(int<M>) Bp);

Nested namespaces

The std namespace contains a number of nested namespaces:

  • data: Standard data types
  • channels: Standard channel definitions
  • gates: Commonly used gates
  • cells: A simple synchronous standard-cell library
  • io: Standard I/O primitives
  • bit: Bit-manipulation functions