calyx 0.7.1

Compiler Infrastructure for Hardware Accelerator Generation
// -p group2invoke -p dead-group-removal
import "primitives/core.futil";
import "primitives/memories/comb.futil";
component main() -> () {
  cells {
    r = std_reg(32);
    add = std_add(32);
    lt = std_lt(32);
  }
  wires {
    // simple transformation
    group write_r {
      r.in = 32'd1;
      r.write_en = 1'd1;
      write_r[done] = r.done;
    }
    // transform w/ comb group
    group add_write_r{
      r.in = add.out;
      r.write_en = 1'd1;
      add_write_r[done] = r.done;
      add.left = 32'd2;
      add.right = 32'd3;
    }
    // multiple guarded assignments to r.in
    group g{
      r.write_en = 1'd1;
      r.in = 1'd0 ? 32'd1;
      r.in = 1'd0 ? 32'd2;
      g[done] = r.done;
    }
    // need comb group that has multiple combinational cells
    group guard2{
      lt.left = 32'd2;
      lt.right = 32'd4;
      add.left = 32'd2;
      add.right = lt.out ? r.out;
      r.write_en = 1'd1;
      r.in = add.out;
      guard2[done] = r.done;
    }
    group read_write_same {
      r.write_en = 1'd1;
      r.in = r.out;
      read_write_same[done] = r.done;
    }
  }
  control {
    seq{
      write_r;
      g;
      @foo add_write_r;
      @bar guard2;
      read_write_same;
    }
  }
}