1-parameter-classifier / rtl /popcount_folded.v
CharlesCNorton
Image-level person classification on EUPE-ViT-B features with a single free parameter
f5498f9
Raw
History Blame Contribute Delete
2.34 kB
// Popcount-reformulated 1-parameter person classifier, thresholds baked in.
// Generated by rtl_gen.py; do not edit by hand.
//
// Inputs are the 40 Stage 0 classifier dims as signed INT8, post-LayerNorm and
// post-max-pool. Output is one bit. Combinational, no multipliers, no memory.
//
// Per-dim thresholds are the calibrated float values scaled by 8 and rounded.
module person_classifier_popcount_folded (
input signed [7:0] f00, f01, f02, f03, f04, f05, f06, f07, f08, f09,
input signed [7:0] f10, f11, f12, f13, f14, f15, f16, f17, f18, f19,
input signed [7:0] f20, f21, f22, f23, f24, f25, f26, f27, f28, f29,
input signed [7:0] f30, f31, f32, f33, f34, f35, f36, f37, f38, f39,
output person_present
);
localparam signed [7:0] T00 = 53, T01 = 56, T02 = 26, T03 = 60, T04 = 17,
T05 = 12, T06 = 16, T07 = 1, T08 = 5, T09 = 11,
T10 = 4, T11 = 4, T12 = 6, T13 = 9, T14 = 8,
T15 = 16, T16 = 6, T17 = 6, T18 = 7, T19 = 8,
T20 = 36, T21 = 45, T22 = 19, T23 = 14, T24 = 14,
T25 = 63, T26 = 18, T27 = 49, T28 = 17, T29 = 17,
T30 = 17, T31 = 21, T32 = 11, T33 = 18, T34 = 19,
T35 = 14, T36 = 18, T37 = 16, T38 = 21, T39 = 14;
localparam signed [5:0] FINAL_T = 13;
wire [5:0] count_pos =
(f00 > T00) + (f01 > T01) + (f02 > T02) +
(f03 > T03) + (f04 > T04) + (f05 > T05) +
(f06 > T06) + (f07 > T07) + (f08 > T08) +
(f09 > T09) + (f10 > T10) + (f11 > T11) +
(f12 > T12) + (f13 > T13) + (f14 > T14) +
(f15 > T15) + (f16 > T16) + (f17 > T17) +
(f18 > T18) + (f19 > T19);
wire [5:0] count_neg =
(f20 > T20) + (f21 > T21) + (f22 > T22) +
(f23 > T23) + (f24 > T24) + (f25 > T25) +
(f26 > T26) + (f27 > T27) + (f28 > T28) +
(f29 > T29) + (f30 > T30) + (f31 > T31) +
(f32 > T32) + (f33 > T33) + (f34 > T34) +
(f35 > T35) + (f36 > T36) + (f37 > T37) +
(f38 > T38) + (f39 > T39);
wire signed [6:0] diff = {1'b0, count_pos} - {1'b0, count_neg};
assign person_present = diff > FINAL_T;
endmodule