@@ -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
0 commit comments