summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_shader_front.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-05-16 01:08:04 -0600
committerAlejandro Soto <alejandro@34project.org>2024-05-24 05:58:19 -0600
commitb21c321a059e11edeece1c90d97776bb0716d7a0 (patch)
treecb7c3e6c2a5f6fd153c3b01d61040a2c901e0ba8 /rtl/gfx/gfx_shader_front.sv
parenta6c23ba92d0c2cad9862de1cb11c19b4e06fc0e6 (diff)
rtl: fix quartus errors: parser, synthesis, fitter
Diffstat (limited to 'rtl/gfx/gfx_shader_front.sv')
-rw-r--r--rtl/gfx/gfx_shader_front.sv59
1 files changed, 30 insertions, 29 deletions
diff --git a/rtl/gfx/gfx_shader_front.sv b/rtl/gfx/gfx_shader_front.sv
index 3398e52..acdde78 100644
--- a/rtl/gfx/gfx_shader_front.sv
+++ b/rtl/gfx/gfx_shader_front.sv
@@ -1,9 +1,9 @@
typedef struct
{
- logic valid,
- retry;
- gfx::group_id group;
- gfx_isa::insn_word insn;
+ logic valid,
+ retry;
+ gfx::group_id group;
+ gfx_isa::insn_any insn;
} front_wave;
typedef struct
@@ -124,7 +124,7 @@ import gfx::*;
assign mem.arid = '0;
assign mem.arlen = ($bits(mem.arlen))'($bits(oword) / $bits(word) - 1);
- assign mem.arsize = 3'b101; // 32 bits/beat
+ assign mem.arsize = 3'b010; // 4 bytes/beat
assign mem.araddr = {araddr, ($clog2($bits(oword)) - $clog2($bits(word)) + SUBWORD_BITS)'('0)};
assign mem.arburst = 2'b01; // Incremental mode
@@ -424,17 +424,16 @@ import gfx::*;
insn_valid <= valid_5;
if (fetch_ready & fetch_valid) begin
- fetch_shift[0] <= fetch_data;
- for (int i = 1; i < $size(fetch_shift); ++i)
- fetch_shift[i] <= fetch_shift[i - 1];
+ fetch_shift[$size(fetch_shift) - 1] <= fetch_data;
+ for (int i = 0; i < $size(fetch_shift) - 1; ++i)
+ fetch_shift[i] <= fetch_shift[i + 1];
end
end
endmodule
module gfx_shader_read_regs
-import gfx::*;
-import gfx_isa::*;
+import gfx::*, gfx_isa::*;
(
input logic clk,
rst_n,
@@ -470,7 +469,7 @@ import gfx_isa::*;
for (int i = 1; i < $size(out_hold); ++i)
out_hold[i] <= out_hold[i - 1];
- passthru_hold[0].dest <= in.insn.dst_src.rr.rd;
+ passthru_hold[0].dest <= in.insn.dst_src.rd;
unique case (in.insn.reg_mode)
REGS_SVS, REGS_SSS:
passthru_hold[0].dest_scalar <= 1;
@@ -484,13 +483,13 @@ import gfx_isa::*;
read.op.group <= in.group;
- read.op.b_imm <= in.insn.dst_src.rr.b.imm;
- read.op.a_sgpr <= in.insn.dst_src.rr.ra.sgpr;
- read.op.b_sgpr <= in.insn.dst_src.rr.b.read.r.sgpr;
- read.op.a_vgpr <= in.insn.dst_src.rr.ra.vgpr.num;
- read.op.b_vgpr <= in.insn.dst_src.rr.b.read.r.vgpr.num;
- read.op.b_is_imm <= in.insn.dst_src.rr.b_is_imm;
- read.op.b_is_const <= in.insn.dst_src.rr.b.read.from_consts;
+ read.op.b_imm <= in.insn.dst_src.b;
+ read.op.a_sgpr <= in.insn.dst_src.ra;
+ read.op.b_sgpr <= in.insn.dst_src.b.r;
+ read.op.a_vgpr <= in.insn.dst_src.ra.vgpr;
+ read.op.b_vgpr <= in.insn.dst_src.b.r.vgpr;
+ read.op.b_is_imm <= in.insn.dst_src.b_is_imm;
+ read.op.b_is_const <= in.insn.dst_src.b.from_consts;
read.op.scalar_rev <= reg_rev;
unique case (in.insn.reg_mode)
@@ -525,8 +524,7 @@ import gfx_isa::*;
endmodule
module gfx_shader_decode_class
-import gfx::*;
-import gfx_isa::*;
+import gfx::*, gfx_isa::*;
(
input logic clk,
rst_n,
@@ -573,7 +571,7 @@ import gfx_isa::*;
retry <= wave.retry;
hold_valid <= wave.valid;
- unique case (wave.insn.insn_class)
+ unique case (wave.insn.op_class)
INSN_FPINT: ; // p0 no tiene ready
INSN_MEM: is_mem <= 1;
INSN_SFU: is_fsu <= 1;
@@ -599,19 +597,22 @@ import gfx_isa::*;
endmodule
module gfx_shader_decode_fpint
-import gfx::*;
-import gfx_isa::*;
+import gfx::*, gfx_isa::*;
(
- input logic clk,
+ input logic clk,
- input insn_word insn,
- input logic writeback,
+ input insn_any insn,
+ input logic writeback,
- output fpint_op op
+ output fpint_op op
);
+ insn_fpint as_fpint;
+
+ assign as_fpint = insn;
+
always_ff @(posedge clk) begin
- unique case (insn.by_class.fpint.op)
+ unique case (as_fpint.op)
INSN_FPINT_MOV: begin
op.setup_mul_float <= 0;
op.setup_unit_b <= 1;
@@ -709,7 +710,7 @@ import gfx_isa::*;
op.mnorm_zero_flags <= 0;
op.mnorm_zero_b <= 0;
op.minmax_abs <= 0;
- op.minmax_swap <= insn.by_class.fpint.op == INSN_FPINT_FMIN;
+ op.minmax_swap <= as_fpint.op == INSN_FPINT_FMIN;
op.minmax_zero_min <= 1;
op.minmax_copy_flags <= 1;
op.shiftr_int_signed <= 0;