mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-23 21:39:10 -04:00
elastic buffer lutram refactoring
This commit is contained in:
parent
1fb0691bc7
commit
6f3add273d
7 changed files with 49 additions and 37 deletions
|
@ -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)
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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]),
|
||||
|
|
|
@ -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),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue