CharlesCNorton
Image-level person classification on EUPE-ViT-B features with a single free parameter
f5498f9 | // Popcount-reformulated 1-parameter person classifier, runtime thresholds. | |
| // 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. | |
| module person_classifier_popcount ( | |
| 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, | |
| input signed [7:0] t00, t01, t02, t03, t04, t05, t06, t07, t08, t09, | |
| input signed [7:0] t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, | |
| input signed [7:0] t20, t21, t22, t23, t24, t25, t26, t27, t28, t29, | |
| input signed [7:0] t30, t31, t32, t33, t34, t35, t36, t37, t38, t39, | |
| input signed [5:0] final_threshold, | |
| output person_present | |
| ); | |
| 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_threshold; | |
| endmodule | |