I recently developed a PRNG from scratch with a little inspiration from the initialization function used in the HC stream cipher. The state ($S$) of the basic version is an array of 5 bytes and uses this function in its update procedure: $F(x)=((x \mathbin{<\!\!<\!\!<} 1) \oplus x \oplus (x \mathbin{>\!\!>\!\!>} 1)) \boxplus x$ (three chevrons means rotation). The updated state is calculated all at once (in parallel) like so:
$S[0]=F(S[3]) \boxplus S[4] \boxplus S[1] \boxplus F(S[2])$
$S[1]=F(S[4]) \boxplus S[0] \boxplus S[2] \boxplus F(S[3])$
$S[2]=F(S[0]) \boxplus S[1] \boxplus S[3] \boxplus F(S[4])$
$S[3]=F(S[1]) \boxplus S[2] \boxplus S[4] \boxplus F(S[0])$
$S[4]=F(S[2]) \boxplus S[3] \boxplus S[0] \boxplus F(S[1])$
If $S=[0, 1, 2, 3, 4]$, then after the update $S=[149, 155, 22, 138, 144]$. The output of any particular state is $S[0] \boxplus S[1] \boxplus S[2] \boxplus S[3] \boxplus S[4]$. What can I do to improve upon this design? How much better would clocking them be or using an accumulator be? (I know I shouldn't "roll my own", but I'm not planning on using this for secure purposes and I don't really care either.)