Skip to content

Commit cc423a8

Browse files
committed
tcu fixes
1 parent a06608c commit cc423a8

2 files changed

Lines changed: 44 additions & 25 deletions

File tree

‎hw/rtl/tcu/drl/VX_tcu_drl_lane_mask.sv‎

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,49 +5,61 @@ module VX_tcu_drl_lane_mask import VX_tcu_pkg::*; #(
55
parameter TCK = 2 * N
66
) (
77
input wire [TCU_MAX_INPUTS-1:0] vld_mask,
8-
input wire [2:0] fmt,
8+
input wire [3:0] fmt_s,
99
output logic [TCK-1:0] lane_mask
1010
);
1111
`UNUSED_VAR (vld_mask)
12-
wire [TCK-1:0] mask_tf32;
13-
wire [TCK-1:0] mask_fp16;
14-
wire [TCK-1:0] mask_bf16;
12+
wire [TCK-1:0] mask_32;
13+
wire [TCK-1:0] mask_16;
14+
wire [TCK-1:0] mask_8;
15+
wire [TCK-1:0] mask_4;
1516

1617
// ----------------------------------------------------------------------
17-
// 1. TF32 Mask Generation
18+
// 1. 32-bit Mask Generation
1819
// ----------------------------------------------------------------------
19-
// TF32 consumes a full 32-bit register (2 physical lanes).
20-
// We map it to even physical lanes (0, 2..). Odd lanes are forced to 0.
21-
for (genvar i = 0; i < TCK; ++i) begin : g_mask_tf32
20+
for (genvar i = 0; i < TCK; ++i) begin : g_mask_32
2221
if ((i % 2) == 0) begin
23-
assign mask_tf32[i] = vld_mask[i * 4];
22+
assign mask_32[i] = vld_mask[i * 4];
2423
end else begin
25-
assign mask_tf32[i] = 1'b0;
24+
assign mask_32[i] = 1'b0;
2625
end
2726
end
2827

2928
// ----------------------------------------------------------------------
30-
// 2. FP16 Mask Generation
29+
// 2. 16-bit Mask Generation
3130
// ----------------------------------------------------------------------
32-
for (genvar i = 0; i < TCK; ++i) begin : g_mask_fp16
33-
assign mask_fp16[i] = vld_mask[i * 4];
31+
for (genvar i = 0; i < TCK; ++i) begin : g_mask_16
32+
assign mask_16[i] = vld_mask[i * 4];
3433
end
3534

3635
// ----------------------------------------------------------------------
37-
// 3. BF16 Mask Generation
36+
// 3. 8-bit Mask Generation
3837
// ----------------------------------------------------------------------
39-
for (genvar i = 0; i < TCK; ++i) begin : g_mask_bf16
40-
assign mask_bf16[i] = vld_mask[i * 4];
38+
for (genvar i = 0; i < TCK; ++i) begin : g_mask_8
39+
assign mask_8[i] = vld_mask[i * 2];
40+
end
41+
42+
// ----------------------------------------------------------------------
43+
// 3. 4-bit Mask Generation
44+
// ----------------------------------------------------------------------
45+
for (genvar i = 0; i < TCK; ++i) begin : g_mask_4
46+
assign mask_4[i] = vld_mask[i];
4147
end
4248

4349
// ----------------------------------------------------------------------
4450
// 4. Final Format Selection
4551
// ----------------------------------------------------------------------
4652
always_comb begin
47-
case (fmt)
48-
TCU_FP32_ID: lane_mask = mask_tf32;
49-
TCU_FP16_ID: lane_mask = mask_fp16;
50-
TCU_BF16_ID: lane_mask = mask_bf16;
53+
case (fmt_s)
54+
TCU_FP32_ID: lane_mask = mask_32;
55+
TCU_FP16_ID: lane_mask = mask_16;
56+
TCU_BF16_ID: lane_mask = mask_16;
57+
TCU_FP8_ID: lane_mask = mask_8;
58+
TCU_BF8_ID: lane_mask = mask_8;
59+
TCU_I8_ID: lane_mask = mask_8;
60+
TCU_U8_ID: lane_mask = mask_8;
61+
TCU_I4_ID: lane_mask = mask_4;
62+
TCU_U4_ID: lane_mask = mask_4;
5163
default: lane_mask = '0;
5264
endcase
5365
end

‎hw/rtl/tcu/drl/VX_tcu_drl_mul_exp.sv‎

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ module VX_tcu_drl_mul_exp import VX_tcu_pkg::*; #(
6161
wire [TCK:0][9:0] raw_exps;
6262

6363
VX_tcu_drl_shared_mul #(
64-
.N(N), .TCK(TCK), .W(W)
64+
.N (N),
65+
.TCK (TCK),
66+
.W (W)
6567
) shared_mul_inst (
6668
.vld_mask (vld_mask),
6769
.fmt_s (fmt_s),
@@ -84,7 +86,10 @@ module VX_tcu_drl_mul_exp import VX_tcu_pkg::*; #(
8486
// ----------------------------------------------------------------------
8587

8688
VX_tcu_drl_exp_bias #(
87-
.N(N), .TCK(TCK), .W(W), .EXP_W(EXP_W)
89+
.N (N),
90+
.TCK (TCK),
91+
.W (W),
92+
.EXP_W(EXP_W)
8893
) exp_bias_inst (
8994
.vld_mask (vld_mask),
9095
.fmt_s (fmt_s[2:0]),
@@ -120,7 +125,8 @@ module VX_tcu_drl_mul_exp import VX_tcu_pkg::*; #(
120125
// ----------------------------------------------------------------------
121126

122127
VX_tcu_drl_exceptions #(
123-
.N(N), .TCK(TCK)
128+
.N (N),
129+
.TCK (TCK)
124130
) exceptions_inst (
125131
.vld_mask (vld_mask),
126132
.fmtf (fmt_s[2:0]),
@@ -135,10 +141,11 @@ module VX_tcu_drl_mul_exp import VX_tcu_pkg::*; #(
135141
// 6. Lane Mask
136142
// ----------------------------------------------------------------------
137143
VX_tcu_drl_lane_mask #(
138-
.N(N), .TCK(TCK)
144+
.N (N),
145+
.TCK (TCK)
139146
) lane_mask_inst (
140147
.vld_mask (vld_mask),
141-
.fmt (fmt_s[2:0]),
148+
.fmt_s (fmt_s),
142149
.lane_mask(lane_mask)
143150
);
144151

0 commit comments

Comments
 (0)