Programación CNC VHDL
El flujo de trabajo específico es el siguiente:
Siempre que llega el pulso de reloj fc, el sumador de N bits agrega la palabra de control de frecuencia k a los datos de fase acumulados emitidos por el registro de acumulación. y agrega el El resultado de la suma se envía a la entrada de datos del registro de acumulación. El acumulador de fase se compone de un sumador de N bits y un registro de acumulación de N bits. El registro de acumulación retroalimenta los nuevos datos de fase generados por el sumador después del último pulso de reloj al extremo de entrada del sumador, para que el sumador pueda. continúa trabajando con el siguiente pulso de reloj. Se agrega la palabra de control de frecuencia K. De esta manera, el acumulador de fase acumula continuamente la fase lineal de la palabra de control de frecuencia K bajo la acción del reloj. Se puede ver que el acumulador de fase acumula la palabra de control de frecuencia k cada vez que se ingresa un pulso de reloj. Los datos emitidos por el acumulador de fase son la fase de la señal sintetizada. La frecuencia de desbordamiento del acumulador de fase es la frecuencia de señal emitida por. el DDS. Los datos emitidos por el acumulador de fase se utilizan como dirección de muestreo de fase de la memoria ROM de forma de onda. El valor de muestreo de forma de onda (código binario) almacenado en la memoria de forma de onda se puede encontrar a través de la tabla de búsqueda para completar la conversión de fase a amplitud. La salida de la memoria de forma de onda se envía al convertidor D/A. El convertidor D/A convierte la amplitud de la forma de onda digital en una señal analógica de la frecuencia sintética requerida. Después de que el filtro de paso bajo filtra el desorden y los armónicos, se envía la salida. La frecuencia es de onda sinusoidal. La relación entre la frecuencia de salida fo y la frecuencia de reloj fc satisface la siguiente fórmula: fo = k× fc/2 n.
Entre ellos, fo es la frecuencia de salida, fc es el pulso del reloj y k es la palabra de control de frecuencia. n es el número de bits (longitud de palabra) del acumulador.
El lenguaje VHDL simula y describe la salida del programa de onda sinusoidal por DDS en el software MAX PLUSⅱ. ...
En este diseño, el ancho de datos n del acumulador de fase es de 32 bits.
Diseño de biblioteca IEEE-DDS de primer nivel
Usando IEEE. STD_LOGIC_1164. Todos;
Utiliza IEEE.
STD_LOGIC_UNSIGNED ALL;
ENTIDAD DDS_VHDL ES
PUERTO (CLK: EN STD_LOGIC;
FWORD: EN STD_LOGIC_VECTOR(7 hasta 0); -Palabra de control de frecuencia
PWORD: IN STD _ LOGIC _ VECTOR(7 hasta 0); -Palabra de control de fase
FOUT: OUT STD _ LOGIC _ VECTOR(9 hasta 0) ));
END DDS_VHDL
Una de las estructuras de DDS_VHDL es
Registro de componentes 32B
Puerto (LOAD: IN STD _ LOGIC; p>
DIN: EN STD_LOGIC_VECTOR(31 hasta 0)
DOUT: OUT STD_LOGIC_VECTOR(31 hasta 0));
Componente final;
Componente REG10B
Puerto (CARGA: EN STD _ LOGIC;
DIN: EN STD _ LOGIC _ VECTOR( 9 hasta 0);
DOUT: OUT STD _ LOGIC _ VECTOR(9 hasta 0));
Componente final;
Componente sumador 32B
PUERTO(A: EN STD_LOGIC_VECTOR(31 hasta 0);
b: EN STD_LOGIC_VECTOR(31 hasta 0);
s :OUT STD _ LOGIC _ VECTOR(31 hasta 0);
Componente final;
Dirección del componente 10B
PORT(A:IN STD _ LOGIC _ VECTOR(9 hasta 0);
b: En STD_LOGIC_VECTOR (9 hasta 0));
s: OUT STD_LOGIC_VECTOR (9 hasta 0));
Fin del componente; p>
Componente SIN_ROM
Puerto (dirección: en STD_LOGIC_VECTOR (9 DOWNTO 0));
inclock: en STD_LOGIC
q: OUT STD; _ LOGIC _ VECTOR (9 hasta 0));
Componente final;
Señal F32B, D32B, din 32b: STD_LOGIC_VECTOR (31 hasta 0); /p>
Señal P10B, LIN10B, sin 10B: STD _ LOGIC _ VECTOR (9 hasta 0);
Inicio
F32B(27 hasta 20) lt; = FWORDF32B (31 hasta 28) lt;="0000";
P10B(1 hasta 0) lt;="00";
F32B(19 hasta 0) lt;="00000000000000000000" P10B(9 hasta 2) lt;=PWORD
u1: Asignación de puertos ADDER32B (A = gtF32B, B = gtD32B, S = gtdin 3
2b);
u2: mapeo de puerto REG32B (DOUT = gtD32B, DIN = gtDIN32B, LOAD= >CLK);
u3: mapeo de puerto SIN_ROM (dirección = gtSIN10B, q= > FOUT, inclock = gtCLK);
u4: mapeo de puertos ADDER10B (A = gtP10B, B = >D32B (31 hasta 22), S = gtLin 10B
u5 : Mapeo de puerto REG10B (DOUT = gtSIN10B, DIN = >LIN10B, LOAD = gtCLK);
Final uno
Descripción VHDL del acumulador
Acumulador Consta de; un sumador de N bits y un registro de acumulación de N bits, donde N es 32 bits.
Módulo sumador de biblioteca IEEE de 32 bits
Utiliza IEEE. STD_LOGIC_1164. Todos;
Utiliza IEEE. STD_LOGIC_UNSIGNED ALL;
La entidad ADDER32B es
PORT (A, B: IN STD _ LOGIC _ VECTOR (31 hasta 0);
s: OUT STD _ LOGIC _ VECTOR(31 hasta 0);
END ADDER32B
El comportamiento arquitectónico de ADDER32B es
START
S lt = A B;
Comportamiento final;
Módulo de registro de biblioteca IEEE de 32 bits
Utiliza IEEE STD_LOGIC_1164;
Entidad REG32B.
Puerto (Carga: IN STD_LOGIC;
DIN: IN STD_LOGIC_VECTOR (31 hasta 0);
DOUT: OUT STD_ LOGIC _ VECTOR(31 hasta 0));
Fin de REG32B
El comportamiento arquitectónico de REG32B es
Iniciar
Proceso ( Load, DIN)
Iniciar
IF (Load'EVENT AND Load='1') luego
DOUT lt= DIN
End IF;
Finalizar proceso;
Finalizar comportamiento;
El ancho de datos del sumador de cambio de fase es de 10 bits, es decir, la precisión del la salida D/A es de 10 bits
Módulo sumador de biblioteca IEEE de 10 bits
Usa IEEE STD_LOGIC_UNSIGNED
La dirección de entidad 10B es
PUERTO. (A, B: IN STD_LOGIC_VECTOR (9 hasta 0);
s: OUT STD_LOGIC_VECTOR (9 hasta 0));
END sumador 10B;
El comportamiento arquitectónico de la dirección 10B es
Inicio
S lt= A B
Comportamiento final;
Módulo de registro de biblioteca IEEE de 10 bits
Utiliza IEEE STD_LOGIC_1164.
Todo;
La entidad REG10B es
Puerto(Carga: EN STD_LOGIC;
DIN: EN STD_LOGIC_VECTOR(9 hasta 0);
DOUT: OUT STD _ LOGIC _ VECTOR(9 hasta 0));
END reg 10B
El comportamiento arquitectónico de REG10B es
Inicio
Proceso (Carga, DIN)
Iniciar
SI (Cargar'EVENT AND Load='1') luego
DOUT lt= DIN
Finalizar IF;
Finalizar proceso;
Finalizar comportamiento;
Archivo de datos de inicialización LPM_ROM personalizado
Rom_data.mif El archivo de datos de onda sinusoidal de 10 bits se puede generar utilizando MATLAB/DSP Builder.
Ancho = 10;
Profundidad = 1024;
DIRECCIÓN _ RADIX = DEC
DATOS _ RADIX = DEC
El contenido comienza
0:512;1:515;2:518;3:521;4:524;5:527;6:530;7:533;
8: 537; 9: 540; 10: 543; 11: 546; 13: 552; ... (algunos datos omitidos) 496;1020:499;1021:502;1022:505;1023:508;
End;
ROM de datos de forma de onda para creación de instancias
Archivo ROM de datos de forma de onda para creación de instancias
Biblioteca ROM de datos IEEE
Utiliza IEEE. STD_LOGIC_1164. Todos;
La entidad sin_rom es
puerto (dirección: en STD_LOGIC_VECTOR(9 DOWNTO 0));
inclock: en STD_LOGIC;
q: OUT STD_LOGIC_VECTOR (9 hasta 0));
END sin_rom
La arquitectura SYN de sin_rom es
SEÑAL sub_wire 0: STD_LOGIC_VECTOR(9 hasta 0);
Componente LPM_ROM: llama al módulo LPM ROM.
GENERIC(LPM_width:NATURAL;
lpm_widthad:NATURAL;
LPM_address_control: STRING;
LPM_out data: STRING; p>
LPM _ file: STRING);
Puerto (dirección: en STD_LOGIC_VECTOR (9 DOWNTO 0));
inclock: en STD_LOGIC; >q: OUT STD _ LOGIC _ VECTOR (9 hasta 0));
Fin del componente
Inicio
q lt=sub_wire0(9 hasta; 0);
lpm_rom_component: mapeo universal lpm_rom (
ancho LPM = gt10,
ancho LPM = gt10,
CONTROL DE DIRECCIÓN LPM =>"Registrado",
LPM_OUTDATA=>"UNREGISTERED",
LPM FILE=>"ROM_DATA" .MIF")-Archivo de datos ROM y su ruta.
portmap(address = gt dirección, inclock = gtinclock, q = gtsub_wire 0);
END SYN
Esto va demasiado lejos. Hay muchos libros sobre los principios básicos de DDS y también están disponibles en línea. Generalmente, el código VHDL de DDS se incluye en los libros técnicos de EDA.