calyx 0.7.1

Compiler Infrastructure for Hardware Accelerator Generation
// Singe-ported memories with one-cycle read and one-cycle write latencies.
extern "seq.sv" {
  primitive seq_mem_d1[WIDTH, SIZE, IDX_SIZE](
    @clk clk: 1,
    @reset reset: 1,
    @write_together(1) @data addr0: IDX_SIZE,
    @write_together(1) @interval(1) @go(1) content_en: 1,
    // Write ports
    @write_together(2) write_en: 1,
    @write_together(2) @data write_data: WIDTH
  ) -> (
    @stable read_data: WIDTH,
    @done(1) done: 1
  );

  primitive seq_mem_d2[WIDTH, D0_SIZE, D1_SIZE, D0_IDX_SIZE, D1_IDX_SIZE](
    @clk clk: 1,
    @reset reset: 1,
    @write_together(1) @data addr0: D0_IDX_SIZE,
    @write_together(1) @data addr1: D1_IDX_SIZE,
    @write_together(1) @interval(1) @go(1) content_en: 1,
    // Write ports
    @write_together(2) write_en: 1,
    @write_together(2) @data write_data: WIDTH
  ) -> (
    @stable read_data: WIDTH,
    @done(1) done: 1
  );

  primitive seq_mem_d3[WIDTH, D0_SIZE, D1_SIZE, D2_SIZE, D0_IDX_SIZE, D1_IDX_SIZE, D2_IDX_SIZE](
    @clk clk: 1,
    @reset reset: 1,
    @write_together(1) @data addr0: D0_IDX_SIZE,
    @write_together(1) @data addr1: D1_IDX_SIZE,
    @write_together(1) @data addr2: D2_IDX_SIZE,
    @write_together(1) @interval(1) @go(1) content_en: 1,
    // Write ports
    @write_together(2) write_en: 1,
    @write_together(2) @data write_data: WIDTH
  ) -> (
    @stable read_data: WIDTH,
    @done(1) done: 1
  );

  primitive seq_mem_d4[WIDTH, D0_SIZE, D1_SIZE, D2_SIZE, D3_SIZE, D0_IDX_SIZE, D1_IDX_SIZE, D2_IDX_SIZE, D3_IDX_SIZE](
    @clk clk: 1,
    @reset reset: 1,
    @write_together(1) @data addr0: D0_IDX_SIZE,
    @write_together(1) @data addr1: D1_IDX_SIZE,
    @write_together(1) @data addr2: D2_IDX_SIZE,
    @write_together(1) @data addr3: D3_IDX_SIZE,
    @write_together(1) @interval(1) @go(1) content_en: 1,
    // Write ports
    @write_together(2) write_en: 1,
    @write_together(2) @data write_data: WIDTH
  ) -> (
    @stable read_data: WIDTH,
    @done(1) done: 1
  );
}