Referring to this reference...I'm trying to work out the details of an integer arithmetic implementation of the CORDIC iteration. The CORDIC pseudo-rotations can be summarized as$$\left(\begin{array}{l}x_{n+1} \\y_{n+1} \\z_{n+1}\end{array} \right) = \left(\begin{array}{l}x_n - d_n2^{-n} y_n \\x_n + d_n2^{-n} y_n \\z_n - d_n \omega_n\end{array}\right)$$Where$$\omega_n = \arctan \;2^{-n}$$and$$d_n = \left\{\begin{array}{rl}1 & z_n \geq 0 \\-1 & \text{otherwise}\end{array}\right.$$After $k$ iterations the result should be multiplied by the scale factor, name it $K$. However if we find a sequence $\left\{ \alpha_n \right\}_{n \in \mathbb{N}}$ such that$$\prod_{j=0}^{+\infty} (1 + \alpha_n2^{-n}) = K$$We can achieve the same result of the iteration above by performing$$\left(\begin{array}{l}x_{n+1} \\y_{n+1} \\z_{n+1}\end{array} \right) = \left(\begin{array}{l}(x_n - d_n2^{-n} y_n)(1+\alpha_n2^{-n}) \\(x_n + d_n2^{-n} y_n)(1+\alpha_n2^{-n}) \\z_n - d_n \omega_n\end{array}\right).$$However I was trying to work out the bitwidth per variable necessary, in order to do that I've tried to convert each computation into a fixed point one.$$\left(\begin{array}{l}x_{n+1} \\y_{n+1} \\z_{n+1}\end{array} \right) = \left(\begin{array}{l}(x_n - d_n2^{-n} y_n)(1+\alpha_n2^{-n}) \\(x_n + d_n2^{-n} y_n)(1+\alpha_n2^{-n}) \\z_n - d_n \omega_n\end{array}\right) \Rightarrow \left(\begin{array}{l}2^{2n}x_{n+1} \\2^{2n}y_{n+1} \\2^{2n}z_{n+1}\end{array} \right) = \left(\begin{array}{l}(2^n x_n - d_n y_n)(2^{n}+\alpha_n) \\(2^n x_n + d_n y_n)(2^{n}+\alpha_n) \\(2^{2n}z_n) - d_n (2^{2n} \omega_n)\end{array}\right)$$Given that a shift of $n$ positions should be repeated for $n = 0 \ldots k$ I would have a total size of$$\sum_{n=0}^{k}2n = k(k+1)$$So If I wanted to implement CORDIC to compute $k$ bits I would need variables with size of $\Theta(k^2)$ is this correct?
Implementing cordic in integer arithmetic
computer architecture;arithmetic