Skip to content

Commit e277b8d

Browse files
opt back to single LZD
1 parent 874a053 commit e277b8d

File tree

2 files changed

+23
-26
lines changed

2 files changed

+23
-26
lines changed

src/PE.v

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ module PE (
2525
wire prod_sign = sign_a ^ sign_b;
2626
wire [7:0] mant_prod = mant_a * mant_b; // 4×4 = 8-bit product
2727

28-
localparam signed BIAS = -7;
2928
localparam FRAC_BITS = 8;
3029

3130
// Simplified exponent calculation (reuse adder)

src/normalize_fp.v

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,8 @@ module int18_to_bf16_lzd #(
1717
assign sign = acc[17];
1818
assign mag = sign ? -acc : acc;
1919

20-
// ===================== HIERARCHICAL LEADING ZERO DETECTOR =====================
21-
wire [2:0] lz_hi, lz_mid, lz_lo;
22-
wire nz_hi, nz_mid, nz_lo;
23-
24-
lzd6 lzd_hi (.x(mag[17:12]), .lz(lz_hi), .nz(nz_hi));
25-
lzd6 lzd_mid (.x(mag[11:6]), .lz(lz_mid), .nz(nz_mid));
26-
lzd6 lzd_lo (.x(mag[5:0]), .lz(lz_lo), .nz(nz_lo));
20+
lzd18 lzd_inst (.x(mag), .lz(lz));
2721

28-
assign lz = nz_hi ? {2'b00, lz_hi} :
29-
nz_mid ? 5'd6 + {2'b00, lz_mid} :
30-
nz_lo ? 5'd12 + {2'b00, lz_lo} :
31-
5'd18;
32-
3322
assign exp_unbiased = 9'(17) - 9'(lz) - 9'(FRAC_BITS);
3423

3524
assign normalized = mag << lz;
@@ -54,23 +43,32 @@ module int18_to_bf16_lzd #(
5443
end
5544
endmodule
5645

57-
// ===================== 6-BIT LEADING ZERO DETECTOR =====================
58-
module lzd6 (
59-
input wire [5:0] x,
60-
output reg [2:0] lz,
61-
output wire nz // Non-zero flag
46+
module lzd18 (
47+
input wire [17:0] x,
48+
output reg [4:0] lz // 5-bit output for 0 to 18
6249
);
63-
assign nz = |x;
6450

6551
always @(*) begin
6652
casez (x)
67-
6'b1?????: lz = 3'd0;
68-
6'b01????: lz = 3'd1;
69-
6'b001???: lz = 3'd2;
70-
6'b0001??: lz = 3'd3;
71-
6'b00001?: lz = 3'd4;
72-
6'b000001: lz = 3'd5;
73-
default: lz = 3'd6;
53+
18'b1?????????????????: lz = 5'd0;
54+
18'b01????????????????: lz = 5'd1;
55+
18'b001???????????????: lz = 5'd2;
56+
18'b0001??????????????: lz = 5'd3;
57+
18'b00001?????????????: lz = 5'd4;
58+
18'b000001????????????: lz = 5'd5;
59+
18'b0000001???????????: lz = 5'd6;
60+
18'b00000001??????????: lz = 5'd7;
61+
18'b000000001?????????: lz = 5'd8;
62+
18'b0000000001????????: lz = 5'd9;
63+
18'b00000000001???????: lz = 5'd10;
64+
18'b000000000001??????: lz = 5'd11;
65+
18'b0000000000001?????: lz = 5'd12;
66+
18'b00000000000001????: lz = 5'd13;
67+
18'b000000000000001???: lz = 5'd14;
68+
18'b0000000000000001??: lz = 5'd15;
69+
18'b00000000000000001?: lz = 5'd16;
70+
18'b000000000000000001: lz = 5'd17;
71+
default: lz = 5'd18; // All zeros
7472
endcase
7573
end
7674
endmodule

0 commit comments

Comments
 (0)