module: ideal_nrz_dac
description: 
parameters:  double n_elements
inputs:  double clk, double in
outputs:  double dac_out
classes:  
static_variables:  
  int code_in
  int j
classes:
  EdgeDetect clk_edge()
  Vector dac_vec()
init:
  //establish mismatch currents
  dac_vec.set_length(n_elements);

  //fill in the DAC vector
  int i;

  for (i = 0; i < n_elements; i++)
  {
    dac_vec.set_elem(i,1/(n_elements));
  }

  dac_out = 0;

code:
if (clk_edge.inp(clk))
{
  dac_out = 0.0;
  code_in = (int) floor(in+0.5);

  for (j=0;j<n_elements;j++)
  {
	if(code_in > 0)
        {
	   dac_out += dac_vec.get_elem(j);
        }
	else
        {
	   dac_out -= dac_vec.get_elem(j);
        }
  code_in--;     
  }
}