Sé cómo dividir números en VHDL (o usar uno de los generadores de núcleo IP de Xilinx) pero no sé cómo hacerlo en el caso de que los números sean complejos.
En mi caso, he definido un número complejo como este:
type complex12 is record
re : std_logic_vector (11 downto 0);
im : std_logic_vector (11 downto 0);
end record;
Por lo tanto, mi número complejo es solo dos vectores de 12 bits, uno para la parte real y otro para la parte imaginaria.
Digamos que ahora tengo los números complejos a y b :
signal A : complex12 := (re => (others=>'0'), im => (others=>'0'));
signal B : complex12 := (re => (others=>'0'), im => (others=>'0'));
Sé que la teoría para dividir en números complejos nos dice dos enfoques para hacer una división:
$$ c = \ frac {a_r + j \ cdot a_i} {b_r + j \ cdot b_i} = \ frac {(a_r + j \ cdot a_i) \ cdot (b_r - j \ cdot b_i)} {b_r ^ 2 + b_i ^ 2} $$
Alternativamente: $$ c = \ frac {| a |} {| b |} \ cdot e ^ {j (\ angle a - \ angle b)} $$
Pero ambos enfoques parecen ser muy difíciles de implementar en VHDL. ¿Cuál sería el enfoque preferido? ¿Hay una manera fácil de dividir números complejos? ¿Hay algún bloque de Xilinx que pueda salvar el día? Estoy un poco perdido sobre cómo abordar esto.