Consulte este código de ejemplo:
Calcular pecado y cos. El vector se encuentra originalmente en el eje xy comienza con una longitud menor para compensar la escala. El ángulo tiene 3 bits más, las coordenadas tienen 2 bits más.
entidad cordic es
- Soy un desarrollador web que trabaja en el marco Python Django durante el año pasado. ¿Puedo aprender estructuras de datos y algoritmos si paso solo 2-3 horas diarias?
- Si el AM y el GM entre dos números están en la relación m: n, ¿cuál es la relación de los dos números?
- ¿Cuál es la mejor manera de aprender estructuras de datos y algoritmos para estudiantes que no son de CS / IT?
- Cómo conectar el modelo BPMN con la estructura de datos existente
- ¿Cuál es el enfoque algorítmico para encontrar el tamaño de la submatriz rectangular máxima que tiene todos los 1 de una matriz que contiene 0 y 1?
genérico (pasos: entero: = 9);
puerto (clk: en std_logic;
clr: en std_logic;
validi: en std_logic;
w: en std_logic_vector (6 downto 0); – 0 a 90 grados
valido: fuera std_logic;
sin: out std_logic_vector (7 downto 0); – 0 a 255
cos: fuera std_logic_vector (7 downto 0)); – 0 a 255
final cordic;
una arquitectura de cordic es
tipo angle_arr es una matriz (0 a 9) de rango entero 0 a 511;
ángulos constantes: angle_arr: = (360, 213, 112, 57, 29, 14, 7, 4, 2, 1);
constante x_ini: Entero: = 620;
El subtipo xy_type es Integer range -1024 to 1023;
El subtipo w_type es el rango entero -1024 a 1023;
tipo xy_arr es una matriz (0 a pasos) de xy_type;
tipo w_arr es una matriz (0 a pasos) de w_type;
ángulo de señal: w_arr;
señal x, y: xy_arr;
señal sin_i, cos_i: rango entero de 0 a 255;
señal válida: std_logic_vector (0 a pasos);
proceso (clk)
empezar
if rising_edge (clk) entonces
si clr = ‘1’ entonces
para i en 0 a pasos de bucle
x (i) <= 0; y (i) <= 0; ángulo (i) <= 0;
bucle final
x (0) <= x_ini;
válido ‘0’); valido <= '0';
más
ángulo (0) <= conv_integer ('0' & w) * 8; válido (0) <= válidoi;
para i en 1 a pasos bucle
válido (i) <= válido (i-1);
si ángulo (i-1)> 0 entonces
x (i) <= x (i-1) -y (i-1) / 2 ** (i-1);
y (i) <= y (i-1) + x (i-1) / 2 ** (i-1);
ángulo (i) <= ángulo (i-1) -angles (i-1);
más
x (i) <= x (i-1) + y (i-1) / 2 ** (i-1);
y (i) <= y (i-1) -x (i-1) / 2 ** (i-1);
ángulo (i) <= ángulo (i-1) + ángulos (i-1);
terminara si;
bucle final
valido <= válido (pasos);
si x (pasos) <0 entonces cos_i <= 0; sino cos_i <= x (pasos) / 4; terminara si;
si y (pasos) <0 entonces sen_i <= 0; sino sen_i <= y (pasos) / 4; terminara si;
terminara si;
terminara si;
proceso finalizado;
cos <= conv_std_logic_vector (cos_i, cos'length);
sin <= conv_std_logic_vector (sin_i, sin'length);
Puede visitar mi sitio web de FPGA para ver más proyectos: fpga4student.com
Proyectos de diseño digital FPGA utilizando Verilog / VHDL