Spaces:
Sleeping
Sleeping
| // Reference implementation: ReLU-Clip activation unit | |
| // Fully combinational; correct for any OUT_W <= IN_W. | |
| module relu_clip #( | |
| parameter IN_W = 8, | |
| parameter OUT_W = 4 | |
| ) ( | |
| input wire signed [IN_W-1:0] in_val, | |
| output wire [OUT_W-1:0] out_val, | |
| output wire saturated | |
| ); | |
| localparam integer MAX_OUT = (1 << OUT_W) - 1; | |
| // ReLU: negative values → 0 | |
| wire neg = in_val[IN_W-1]; // sign bit | |
| wire [IN_W-1:0] relu_out = neg ? {IN_W{1'b0}} : in_val; | |
| // Saturating cast to OUT_W bits | |
| wire pos_clip = (relu_out > MAX_OUT[IN_W-1:0]); | |
| assign out_val = pos_clip ? MAX_OUT[OUT_W-1:0] : relu_out[OUT_W-1:0]; | |
| assign saturated = neg | pos_clip; | |
| endmodule | |