// 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
);
}