cv.slew already outputs a linear ramp. you don’t have to worry about the rate. i assume you just to turn the ramp into a half-cycle sine scaled to [0, 1].
call the linear ramp output x, you want (cos((x+1) * pi) + 1) / 2
y = fix16_cos(fix16_mul(fix16_add(x, fix16_one), fix16_pi)
and then scale back to [0, 1]
y = fix16_add(y, fix16_one) >> 1
(untested!)
note that there are different options for libfixmath sine approximation that can be selected in the preprocessor. to use the LUT define FIXMATH_SIN_LUT somewhere. otherwise there is a less accurate parabola appoximation and a more accurate higher order polynomial