elastic buffer lutram refactoring

This commit is contained in:
Blaise Tine 2024-08-11 20:28:39 -07:00
parent 1fb0691bc7
commit 6f3add273d
7 changed files with 49 additions and 37 deletions

View file

@ -239,10 +239,16 @@
`RESET_RELAY_EX (dst, src, 1, 0)
// size(x): 0 -> 0, 1 -> 1, 2 -> 2, 3 -> 2, 4-> 2, 5 -> 2
`define TO_OUT_BUF_SIZE(s) `MIN(s, 2)
`define TO_OUT_BUF_SIZE(s) `MIN(s & 7, 2)
// reg(x): 0 -> 0, 1 -> 1, 2 -> 0, 3 -> 1, 4 -> 2, 5 > 3
`define TO_OUT_BUF_REG(s) ((s < 2) ? s : (s - 2))
`define TO_OUT_BUF_REG(s) (((s & 7) < 2) ? (s & 7) : ((s & 7) - 2))
// lut(x): (x & 8) != 0
`define TO_OUT_BUF_LUTRAM(s) ((s & 8) != 0)
// rbuf(x): (x <= 2) ? 3 : x
`define TO_OUT_RBUF(s) ((s & 8) | `MAX(s & 7, 3))
`define REPEAT(n,f,s) `_REPEAT_``n(f,s)
`define _REPEAT_0(f,s)

View file

@ -60,7 +60,7 @@ module VX_dispatch import VX_gpu_pkg::*; #(
VX_elastic_buffer #(
.DATAW (DATAW),
.SIZE (2),
.OUT_REG (2), // 2-cycle EB for area reduction
.OUT_REG (2), // 2-cycle LUT EB for area reduction
.LUTRAM (1)
) buffer (
.clk (clk),

View file

@ -23,7 +23,7 @@
module VX_operands import VX_gpu_pkg::*; #(
parameter `STRING INSTANCE_ID = "",
parameter NUM_BANKS = 4,
parameter OUT_BUF = 4 // using 2-cycle EB for area reduction
parameter OUT_BUF = 8+4 // using 2-cycle LUT EB for area reduction
) (
input wire clk,
input wire reset,
@ -204,8 +204,7 @@ module VX_operands import VX_gpu_pkg::*; #(
VX_elastic_buffer #(
.DATAW (DATAW),
.SIZE (`TO_OUT_BUF_SIZE(OUT_BUF)),
.OUT_REG (`TO_OUT_BUF_REG(OUT_BUF)),
.LUTRAM (1)
.OUT_REG (`TO_OUT_BUF_REG(OUT_BUF))
) out_buf (
.clk (clk),
.reset (reset),

View file

@ -290,8 +290,7 @@ module VX_scoreboard import VX_gpu_pkg::*; #(
.NUM_INPUTS (PER_ISSUE_WARPS),
.DATAW (DATAW),
.ARBITER ("F"),
.LUTRAM (1),
.OUT_BUF (4) // using 2-cycle EB for area reduction
.OUT_BUF (8+4) // using 2-cycle LUT EB for area reduction
) out_arb (
.clk (clk),
.reset (arb_reset),

View file

@ -43,7 +43,8 @@ module VX_elastic_buffer #(
end else if (SIZE == 1) begin
VX_pipe_buffer #(
.DATAW (DATAW)
.DATAW (DATAW),
.DEPTH (`MAX(OUT_REG, 1))
) pipe_buffer (
.clk (clk),
.reset (reset),
@ -57,16 +58,33 @@ module VX_elastic_buffer #(
end else if (SIZE == 2 && LUTRAM == 0) begin
VX_skid_buffer #(
wire valid_out_t;
wire [DATAW-1:0] data_out_t;
wire ready_out_t;
VX_stream_buffer #(
.DATAW (DATAW),
.HALF_BW (OUT_REG == 2),
.OUT_REG (OUT_REG)
) skid_buffer (
.OUT_REG (OUT_REG == 1)
) stream_buffer (
.clk (clk),
.reset (reset),
.valid_in (valid_in),
.data_in (data_in),
.ready_in (ready_in),
.valid_out (valid_out_t),
.data_out (data_out_t),
.ready_out (ready_out_t)
);
VX_pipe_buffer #(
.DATAW (DATAW),
.DEPTH ((OUT_REG > 1) ? (OUT_REG-1) : 0)
) out_buf (
.clk (clk),
.reset (reset),
.valid_in (valid_out_t),
.data_in (data_out_t),
.ready_in (ready_out_t),
.valid_out (valid_out),
.data_out (data_out),
.ready_out (ready_out)
@ -105,7 +123,7 @@ module VX_elastic_buffer #(
VX_pipe_buffer #(
.DATAW (DATAW),
.DEPTH ((OUT_REG > 0) ? (OUT_REG-1) : 0)
.DEPTH ((OUT_REG > 1) ? (OUT_REG-1) : 0)
) out_buf (
.clk (clk),
.reset (reset),

View file

@ -21,7 +21,6 @@ module VX_stream_arb #(
parameter `STRING ARBITER = "R",
parameter MAX_FANOUT = `MAX_FANOUT,
parameter OUT_BUF = 0,
parameter LUTRAM = 0,
parameter NUM_REQS = `CDIV(NUM_INPUTS, NUM_OUTPUTS),
parameter LOG_NUM_REQS = `CLOG2(NUM_REQS),
parameter NUM_REQS_W = `UP(LOG_NUM_REQS)
@ -58,8 +57,7 @@ module VX_stream_arb #(
.DATAW (DATAW),
.ARBITER (ARBITER),
.MAX_FANOUT (MAX_FANOUT),
.OUT_BUF (OUT_BUF),
.LUTRAM (LUTRAM)
.OUT_BUF (OUT_BUF)
) arb_slice (
.clk (clk),
.reset (slice_reset),
@ -103,8 +101,7 @@ module VX_stream_arb #(
.DATAW (DATAW),
.ARBITER (ARBITER),
.MAX_FANOUT (MAX_FANOUT),
.OUT_BUF (3), // registered output
.LUTRAM (LUTRAM)
.OUT_BUF (`TO_OUT_RBUF(OUT_BUF)) // to registered output
) fanout_slice_arb (
.clk (clk),
.reset (slice_reset),
@ -130,8 +127,7 @@ module VX_stream_arb #(
.DATAW (DATAW + LOG_NUM_REQS2),
.ARBITER (ARBITER),
.MAX_FANOUT (MAX_FANOUT),
.OUT_BUF (OUT_BUF),
.LUTRAM (LUTRAM)
.OUT_BUF (OUT_BUF)
) fanout_join_arb (
.clk (clk),
.reset (reset),
@ -185,7 +181,7 @@ module VX_stream_arb #(
.DATAW (LOG_NUM_REQS + DATAW),
.SIZE (`TO_OUT_BUF_SIZE(OUT_BUF)),
.OUT_REG (`TO_OUT_BUF_REG(OUT_BUF)),
.LUTRAM (LUTRAM)
.LUTRAM (`TO_OUT_BUF_LUTRAM(OUT_BUF))
) out_buf (
.clk (clk),
.reset (reset),
@ -218,8 +214,7 @@ module VX_stream_arb #(
.DATAW (DATAW),
.ARBITER (ARBITER),
.MAX_FANOUT (MAX_FANOUT),
.OUT_BUF (OUT_BUF),
.LUTRAM (LUTRAM)
.OUT_BUF (OUT_BUF)
) arb_slice (
.clk (clk),
.reset (slice_reset),
@ -253,8 +248,7 @@ module VX_stream_arb #(
.DATAW (DATAW),
.ARBITER (ARBITER),
.MAX_FANOUT (MAX_FANOUT),
.OUT_BUF (3), // registered output
.LUTRAM (LUTRAM)
.OUT_BUF (`TO_OUT_RBUF(OUT_BUF)) // to registered output
) fanout_fork_arb (
.clk (clk),
.reset (reset),
@ -281,8 +275,7 @@ module VX_stream_arb #(
.DATAW (DATAW),
.ARBITER (ARBITER),
.MAX_FANOUT (MAX_FANOUT),
.OUT_BUF (OUT_BUF),
.LUTRAM (LUTRAM)
.OUT_BUF (OUT_BUF)
) fanout_slice_arb (
.clk (clk),
.reset (slice_reset),
@ -329,7 +322,7 @@ module VX_stream_arb #(
.DATAW (DATAW),
.SIZE (`TO_OUT_BUF_SIZE(OUT_BUF)),
.OUT_REG (`TO_OUT_BUF_REG(OUT_BUF)),
.LUTRAM (LUTRAM)
.LUTRAM (`TO_OUT_BUF_LUTRAM(OUT_BUF))
) out_buf (
.clk (clk),
.reset (reset),
@ -357,7 +350,7 @@ module VX_stream_arb #(
.DATAW (DATAW),
.SIZE (`TO_OUT_BUF_SIZE(OUT_BUF)),
.OUT_REG (`TO_OUT_BUF_REG(OUT_BUF)),
.LUTRAM (LUTRAM)
.LUTRAM (`TO_OUT_BUF_LUTRAM(OUT_BUF))
) out_buf (
.clk (clk),
.reset (out_buf_reset[i]),

View file

@ -22,7 +22,6 @@ module VX_stream_xbar #(
parameter OUT_WIDTH = `LOG2UP(NUM_OUTPUTS),
parameter ARBITER = "R",
parameter OUT_BUF = 0,
parameter LUTRAM = 0,
parameter MAX_FANOUT = `MAX_FANOUT,
parameter PERF_CTR_BITS = `CLOG2(NUM_INPUTS+1)
) (
@ -67,8 +66,7 @@ module VX_stream_xbar #(
.DATAW (DATAW),
.ARBITER (ARBITER),
.MAX_FANOUT (MAX_FANOUT),
.OUT_BUF (OUT_BUF),
.LUTRAM (LUTRAM)
.OUT_BUF (OUT_BUF)
) xbar_arb (
.clk (clk),
.reset (slice_reset),
@ -96,8 +94,7 @@ module VX_stream_xbar #(
.DATAW (DATAW),
.ARBITER (ARBITER),
.MAX_FANOUT (MAX_FANOUT),
.OUT_BUF (OUT_BUF),
.LUTRAM (LUTRAM)
.OUT_BUF (OUT_BUF)
) xbar_arb (
.clk (clk),
.reset (reset),
@ -133,7 +130,7 @@ module VX_stream_xbar #(
.DATAW (DATAW),
.SIZE (`TO_OUT_BUF_SIZE(OUT_BUF)),
.OUT_REG (`TO_OUT_BUF_REG(OUT_BUF)),
.LUTRAM (LUTRAM)
.LUTRAM (`TO_OUT_BUF_LUTRAM(OUT_BUF))
) out_buf (
.clk (clk),
.reset (out_buf_reset[i]),
@ -156,7 +153,7 @@ module VX_stream_xbar #(
.DATAW (DATAW),
.SIZE (`TO_OUT_BUF_SIZE(OUT_BUF)),
.OUT_REG (`TO_OUT_BUF_REG(OUT_BUF)),
.LUTRAM (LUTRAM)
.LUTRAM (`TO_OUT_BUF_LUTRAM(OUT_BUF))
) out_buf (
.clk (clk),
.reset (reset),