import byucc.jhdl.base.*;
import byucc.jhdl.Logic.*;

public class NBitAdder extends Logic {
  public static CellInterface[] cell_interface = {
    in("a", "WIDTH"),
    in("b", "WIDTH"),
    out("sum", "WIDTH"),
    param("WIDTH", INTEGER)
  };
  
  public NBitAdder(Node parent, Wire a, Wire b, Wire sum) {
    super(parent);
    int width = a.getWidth();
    bind("WIDTH", width);
    connect("a", a);
    connect("b", b);
    connect("sum", sum);
    
    Wire carries = wire(width);  // Here are the intermediate carry wires.

    for (int i=0; i < width; i++) {
      if (i==0)
	new FullAdder(this, a.gw(i), b.gw(i), gnd(), 
		      sum.gw(i), carries.gw(0));
      else
	new FullAdder(this, a.gw(i), b.gw(i), carries.gw(i-1), 
		      sum.gw(i), carries.gw(i));
    }
  }
}


