architecture BEH of Acum_Fase is
signal mod_reg: unsigned(N-1 downto 0) := (others => '0'); signal rem_nc: unsigned(N-1 downto 0) := (others => '0'); signal term_add: unsigned(N-1 downto 0) := (others => '0');
begin
rem_nc <= to_unsigned(Q,N) – mod_reg; term_add <= to_unsigned(P,N);
Modular_Addition: process(clk) is begin if rising_edge(clk) then if (rem_nc<=to_unsigned(P,N)) then mod_reg <= to_unsigned(P,N) – rem_nc; else mod_reg <= mod_reg + term_add; end if; end if; end process Modular_Addition;
acum_reg <= std_logic_vector(mod_reg);
end architecture BEH; Ejemplo de implementación en VHDL y simulación Sistemas Digitales – UBA
Fue descripto por primera vez en 1959 por Jack E. Volder
Desarrollado en el departamento de aeroelectrónica de Convair
Más tarde John Stephen Walther, en Hewlett-Packard, generalizó el algoritmo
Originalmente fue implementado usando el sistema binario. En los 70’s su variante decimal se empezó a usar fuertemente en calculadoras de mano
Introducción CORDIC
Es utilizado sobre todo en dispositivos en los que no hay disponibilidad de multiplicadores, por ejemplo en microcontroladores y FPGA's pequeñas
Sólo utiliza las operaciones de suma, resta y desplazamiento
Se lo utiliza para la rotación de vectores, el cálculo de funciones trigonométricas (sen, cos, tan, etc), la transformación de coordenadas, etc
Introducción
1 2 Ecuaciones
Desarrollando el coseno y el seno de la ecuación 2: 3 Ecuaciones
Sacando cos(b) como factor común en la ecuación 3: 4 Ecuaciones
4 Sustituyendo la ecuación 1 en 4: x1 Ecuaciones
4 Sustituyendo la ecuación 1 en 4: y1 Ecuaciones
Sustituyendo la ecuación 1 en 4: (Gp:)
Givens
Ecuaciones
Hasta este momento no hemos llegado a nada interesante. Ahora, pensemos por un momento qué pasaría si los ángulos en los que puede rotar el vector se restringen de tal manera que: (Gp:) ¿Se lograría algún beneficio con esto?
(Gp:) i (Gp:) tg (Gp:) – (Gp:) ± (Gp:) = (Gp:) 2 (Gp:) ) (Gp:) ( (Gp:) b
(Gp:) ¡La multiplicación en el término que incluye la tangente se reduce a una simple operación de desplazamiento!
Ecuaciones
Por lo dicho:
(Gp:) )] (Gp:) . (Gp:) d (Gp:) .( (Gp:) x (Gp:) y (Gp:) .[ (Gp:) y (Gp:) )] (Gp:) . (Gp:) d (Gp:) .( (Gp:) y (Gp:) x (Gp:) .[ (Gp:) x (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) K (Gp:) K (Gp:) – (Gp:) + (Gp:) – (Gp:) + (Gp:) + (Gp:) = (Gp:) – (Gp:) = (Gp:) 2 (Gp:) 2 (Gp:) 1 (Gp:) 1
Ecuaciones Luego, reemplazando en las ecuaciones de Givens: El producto de los Ki’s se puede tratar como una ganancia del sistema. La ganancia exacta depende de la cantidad de iteraciones y es aproximadamente igual a 1,647:
Por lo dicho: Ecuaciones Luego, reemplazando en las ecuaciones de Givens:
El valor de di será ±1 (Gp:) )] (Gp:) . (Gp:) d (Gp:) .( (Gp:) x (Gp:) y (Gp:) .[ (Gp:) y (Gp:) )] (Gp:) . (Gp:) d (Gp:) .( (Gp:) y (Gp:) x (Gp:) .[ (Gp:) x (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) i (Gp:) K (Gp:) K (Gp:) – (Gp:) + (Gp:) – (Gp:) + (Gp:) + (Gp:) = (Gp:) – (Gp:) = (Gp:) 2 (Gp:) 2 (Gp:) 1 (Gp:) 1
El algoritmo incluye una tercera ecuación que describe el acumulador angular:
Ecuaciones
El algoritmo puede operar en dos modos diferentes: Modo rotación – Rota un vector en un ángulo especificado – El acumulador angular se inicializa con el ángulo a rotar – La decisión de rotación en cada iteración se lleva a cabo de tal manera de disminuir el ángulo residual en el acumulador angular (se utiliza su signo)
Modo vector – Rota un vector hacia el eje de coordenadas x, guardando los ángulos requeridos para lograrlo – Busca minimizar la componente y del vector residual – La dirección de rotación se decide por el signo de la componente y residual
Modos de operación
Modo rotación
Modos de operación Donde: di = -1 si zi < 0, en otro caso +1 Finalmente se tiene:
Modo vector
Modos de operación Donde: di = +1 si yi < 0, en otro caso -1 Finalmente se tiene:
Ángulo a rotar: 20º Ángulo inicial: 33º Ejemplo
Iteración 1 Ejemplo atan = 45º ang acum = 20 – 45 = -25
Iteración 2 Ejemplo atan = 26,56º ang acum = -25 + 26,56 = 1,56
Iteración 3 Ejemplo atan = 14,03º ang acum = 1,56 – 14,03 = -12,47
Iteración 4 Ejemplo atan = 7,12º ang acum = -12,47 + 7,12 = -5,35
Iteración 5 Ejemplo atan = 3,57º ang acum = -5,35 + 3,57 = -1,78
Iteración 6 atan = 1,78º ang acum = -1,78 + 1,78 = 0 Ejemplo
Iterativa Unrolled Pipeline unrolled Arquitecturas
Página anterior | Volver al principio del trabajo | Página siguiente |