Written by Sebastián Baquero
 
 
Files solution for this procedure:
 
Objetivos
  • Conocer acerca del funcionamiento del NCO.
  • Aplicacion del NCO con IP cores
  • Utilizar la plataforma de ModelSim para verificar el funciomaiento del NCO.
 
NCO
 

 
Un oscilador numéricamente controlado o NCO es un generador de señales digital el cual crea una sincronía, tiempo discreto, representacion de valores discretos en una forma de onda, generalmente sinusoidales. Los NCOs son alguna veces usados en conjunto con un convertidor digital a analógico (DAC) en la salida para crear un sintetizador digital directo (DDS).
 
Estos ofrecen varias ventajas sobre otros tipos de osciladores en terminos de agilidad, precisión, estabilidad y fiabilidad. 
 
Los NCOs son usados en muchos sistemas de comunicación como generadores de portadora de cuadratura en mezcaldores I-Q, en el que la informacion de banda base es modulada en portadoras ortogonales en una variedad de formas. Además son usados en inalámbrico 3G y 'softwares' de sistemas de radio, PLLs digitales, sistemas de radar, 'drivers' para transmiciones opticas o acústicas, y multiniveles de moduladores y demoduladores FSK/PSK.
 
Acontinuación se muestra un modulador simple en el cual se requiere el uso de un oscilador numéricamente controlado (NCO).
 
Figura 1. Modulados simple con NCO.
 
Los NCOs se pueden utilizan en todos los bucles enganchadores de fase (PLLs) para sincronización de portadora en receptores de comunicaciones o como moduladores independientes de manipulacion de cambio de frecuencia (FSK) o manipulación de cambio de fase (PSK). En estas apliaciones, la fase y la frecuencia de la forma de onda de salida varía directamente de acuerdo al flujo de datos de entrada.
 
Funcionamiento 
Un NCO generalmente consta de dos partes:
 
    a) Un acumulador de fase (PA):
 
El cual suma el valor obtenido su salida un valor de control de frecuencia a cada muestra de reloj.
 
    b) Un convertidor de fase a amplitud (PAC):
 
El cual usa una palabra de salida de acumulador de fase usualmente como una entrade entre una forma de onda de tabla de busqueda (LUT) para otorgar una correspondiente mustra de amplitud.
 
 
 
Figura 2. Digrama de bloques de un NCO basico                              
 
 
Figura 3. Diagrama de Bloques de un NCO con modificaciones opcionales
 
 
Cuando es registrado, el acumulador de fase crea un modulo de forma de de onda de diente de sierra de 2
el cual es entonces convertido por un covertidor de fase a amplitud para un sinusoidal muestreada, donde N es el numero de bits portados en el acumulador de fase. N establece la resolucion de frecuencia del NCO y es normalmente muy largo que el numero de bits definidos en el espacion de memoria del la tabla de busqueda del PAC. 
 
 
Acumulador de pase(PA)
 
Un acumulador de fase binario consiste un sumador binario N-bit y un registro configurado. Cada ciclo de reloj produce una nueva salida N-bit consistente de una salida previa  obtenida de un registro sumado con la palabra de control de frecuencia (FCW) la cual es constante para una frecuencia de salida dada. La forma de onda de salida resultante es una escalera con un tamado de paso de 'delta f', el valor entero de la FCW. En algunas configuraciones, las salida de fase es tomada para la saluda de un registro el cual introduce a un ciclo de reloj de latencia pero muestra el sumador para operar a una mayor velocidad de reloj.
 
 
 
Figura 4. Acumulador de fase
 
El sumador es diseñado para desboradarse cuando la suma del valor absoluto de estos operandos exceda esta capacidad (2N -1). El bit de desborde es descartado entoces el ancho de palabra de salida es siempe igual para esas ancho de palabras de entrada. 
 
La resolución de la frecuencia, definida como el mas pequeño cambio de incremento posible en frecuencia, es ta dado por 
 
Figura 5. Ecuación frecuencia de salida.
 
Donde M es el acumulador de precisión, y Fclk es la frecuencia del reloj, y el otro factor que multiplica a Fclk es el residuo el cual es almacenado en un registro en un ciclo repititivo.
 
Convertido de fase a amplitud (PAC)
 
El convertidor de fase a amplitud crea la muestra de dominio de la forma de onda para la salida de palabra de fase truncada recivida por el PA. El PAC puede ser un sencilla memoria de solo lectura que contiene 2N  muestras contiguas del la forma de onda de salida deseada la cual tipicamente es un senosoidal. 
 
 
 
Características de NCO IP Core 
  • 32 bits de precision para angulo y magnitud
  • Interfaz de origen compatible con la "Avalon Interface Specification"
  • Multiples arquitecturas NCO:
    • Implementacion de un multiplicador basado en el uso de bloques DSP o elementos logicos (LEs), un sólo ciclo y múltiples ciclos.
    • Implementacion en paralelo o serie basado en "CORDIC".
    • Implementacion basada en "ROM" usando bloques de vectores embebidos (EABs), bloques de sistemas embebidos (ESBs) o ROM esterna.
  • Salidas simples o dobles (seno/coseno).
  • Modulacion de entrada de ancho de frecuencia variable
  • modulacion de entrada de ancho de fase variable.
  • Usuario definido de resolución de frecuencia, presición angular y precisión de magnitud. 
  • Salto de frecuencia
  • Capacidad de Multicanal
  • Archivos de simulacion y bancos de prueba de arquitetura específica para VHDL, Verilog HDL y MATLAB. (En nuestro caso Verilog HDL).
  • Oscilador dual de salida y un ejemplo de diseños de modulador por desplasamiento de frecuencia cuaternario(QFSK).
 
Procedimiento
 
 
Para crear nuestro NCO, primeramente se necesita crear un nuevo proyecto, en el cual necesitamos del System Builder.
 
 
 
Figura 6. Programa System Builder.
 
 
 
Abrimos la aplicacion y creamos un nuevo proyecto que se llame "NCO".
 
Figura 7. Viusalizacion System Builder.
 
 
Una vez le demos clik en "generate" no aparecerá la siguiente ventana en la cual guardaremos nuestro archiv .qpf igual al nombre del proyecto.
 
 
Figura 8. Ubiacion del proyecto a crear.
 
 
 
Le damos click en guardar y nos aparecá primero un recuadro en la figura 9, en donde nos muestra la dirección exacta en la cual fue creado el nuevo proyecto. Posteriormente otro recuadro de referente a la activacion del HPS.
 
 
 

Figura 9.
Aviso creación exitosa y dirección del archivo.                                            
 
Figura 10. Aviso HPS.
 
 
 
Después de realizar el procedimiento anterior, procedemos a abrir en Quartus II el proyecto creado ("NCO").
 
 
 
Figura 11. Plataforma Quartus II con la localización del catálogo IP.
 
 
 
Acontinuación vamos a utilizar un archivo de la libreria de Quartus II en el cual ya existe un NCO. Cuando nos aparezca la ventanda "New IP Variation" vamos a guardar como "mi_nco" (ver figura 12 paso 4) y le damos click en "OK".
 
 
 
Figura 12. Creación de un NCO utilizando "IP catalog".
 
 
 
Seguidamente nos va aparecer una ventana de parametros en la cual vamos a realizar unas modifiaciones para la implementación de nuestra NCO.
 
En la pestaña de "Architecture" vamos cambiar la opción que aparece en "Generation Algorithm" por la opción de "multiplier-Based" y aparecera un recuado chulo de aceptando el uso de multiplicadores dedicados, además el numero de canales, bandas y ciclos de reloj por salida es 1.
 
 
 
 
Figura 13. Paramatros de arquitectura.
 
 
 
En la siguiente figura vamos a modificar los siguientes parámetros:
  • "Phase Accumulator Precision" en 32 bits.
  • "Angular Resolution" en 16 bits.
  • "Magnitude Resolution" en 10 bits.
  • "Dither Level" en 5.
  • "Clock Rate" en 50 Mhz.
  • "Desired Output Frequency" 1 Mhz
  • "Phase Incremente Value" en 85899346.
  • "Real Output Frequency" 1 Mhz
 
 
Figura 14. Parametros de frecuencia.
 
 
Cuando ya terminemos de editar los parametros le damos click en "Generate HDL", y nos aparecerá la siguiente ventana, dejando en "Synthesis" y en "Simulation" el lenguaje Verilog y le damos click en "Generate".
 
Figura 15. Ventana para generar el archivo Verilog HDL.
 
 
 
Cuando se haya creado el archivo "mi_nco" exitosamente, le debe aparecer el siguiente recueadro en el cual el "Generate" fue completado exitosamente y procedemos a darle click en "close". Posteriormente, nos volvera a aparecer la ventana de parametros en la cual debemos darle click en "Finish" para asi completar la creación del mismo. 
 
 
 
Figura 15. Ventada "Generate Completed".
 
 
 
Luego a aparecerá un anuncio en el cual nos muestra la ubicación del archivo creado, de la misma manera que paso en el System Builder, y también le damos click en "Close".
 
Nota: Antes de abrir el archivo, primero descargar "dac_naco.v" que se encontrarán el fina de esta página y pegarlos en la carpeta donde está el proyecto.
 
Abrimos el proyecto NCO en Quartus II y abrimos un nuevo "File" el cual se llama "dac_nano.v" y "mi_nco_bb.v" (el cual se encuentra dentro de la carpeta "mi_nco").
 
 
 
Figura 16. Carpeta NCO con los archivos descargados.
 
 
 
Un vez abramos los archivos procedemos a crear la instanciacion de cada uno de ellos de la siguiente manera:
 
    1) Seleccionamos el archivo
    2) Click en "File">Create/Update>Create Intantiation Verilog        templates Files for current File.
    3) Copiar la instanciación y pegarla en el archivo principal "NCO.v"
 
 
 
Figura 17. Creación de la instanciación de los archivos descargados.
 
 
Cuando le de click en el tercer paso, aparecerá el siguiente anuncio de Quartus II al acepta guardar las modifiaciones realizadas.
 
 
Figura 18. Aceptación de las modificaciones
 
Después se abren las instanciaciones que se muestras en la figura 19 y 20.
 
Figura 19. Instanciación de la NCO que se creo en el "IP Catalog".
Figura 20. Instanciación de los archivos descargados.
 

Cuando hayamos abierto las tres instanciaciones, copiamos cada una de estas y las pegamos en archivo principal "NCO.v"
 
 
 
Figura 21. Codigo para la implementacion del NCO definiendo los argumentos de las instanciaciones.
 
 
Figura 22. RTL del proyectob (interior del dac_nano). 
 
Figura 23. RTL del "mi_nco" y del "dac_nano"
 
Figura24. Circuito interno del "dac_nanoo".
 
Una ve esté completado el archivo en Quartus II, procedemos a verificar su funcionamiendo por medio de una herramienta de simulación que en este caso vamos a hacer uso del programa "ModelSim".
 
Figura 25. Simulación modulo NCO.
 
 
Figura 26. Simulación NCO parte 2.
 
Cuando se llegue al quinto paso, se le da click en "Browse..." para buscar el destino del archivo "mi_nco.v" para simularlo. Depués habilita la opción de "Copt to project directory" y le da click en "OK". Luego se habrá creado el proyecto con un signo de interrogación, le damos click derecho "Compile>Compile Selected", si nuestro archivo está bien escrito y no tiene errores, aparecera un "chulo" de color verdad que significa que el archivo esta correcto para crear la simulación. En el menu principal escogemos la opcion "Simulate>StartSimulación", después aparecera un cuadro en el cual el primer archivo que aparece se llama "work", damos click en el signo "+" y aparecerá nuestro archivo "mi_nco", y le damos "OK".
 
En la siguiente figura vamos a ver la conexión para ver el resultado físicamente con ayuda de un osciloscopio.
 
 
Figura 27. Conexión de interna de la FPGA con un circuito externo para visualizar la señal creada.
 
 
Seguidamente puede observar el funcionamiento del NCO.