You are on page 1of 10

Frecuencmetro Digital con Autoescalamiento Realizado con VHDL y Lgica Programable

Jaime Escalante Olarte Universidad Nacional de San Agustn de Arequipa Escuela Profesional de Ingeniera Electrnica Arturo Miguel-de-Priego <amiguel@pucp.edu.pe> Pontificia Universidad Catlica del Per Av. Universitaria Cdra. 18 Lima 32 PERU

Se presenta el diseo de un frecuencmetro digital descrito con VHDL y smbolos grficos a medida. El diseo fue probado en dos tecnologas de CPLDs: MAX y FLEX, ambas de Altera Corp. El software empleado fue el MAX+plusII 9.23, versin estudiantil. El frecuencmetro implementado en un dispositivo EPM7128SLC84-15 tiene las siguientes caractersticas: rango de la frecuencia de entrada: 1Hz 10MHz; resolucin hasta con tres dgitos significativos; ajuste automtico de la escala de rangos; indicadores de sufijos en Hz, KHz, MHz; resolucin de Hz en el rango de Hz; punto decimal flotante en los rangos de KHz y MHz; indicadores de frecuencia alta (> 10MHz) y baja (< 1Hz). El frecuencmetro implementado en un chip EPF10K10LC84-4 contiene, adems, un generador de 16 frecuencias predefinidas que se seleccionan con un teclado. Durante el desarrollo del diseo se emple un par de tarjetas experimentales para prototipos que facilit y contribuy a reducir el tiempo de trabajo, principalmente el tiempo de simulacin.

Motivacin
Este trabajo se realiz como producto de una pasanta de investigacin del Bachiller Jaime Olarte, de la Escuela Profesional de Ingeniera Electrnica de la Universidad Nacional de San Agustn de Arequipa (UNSAA), que tuvo lugar en las instalaciones del Laboratorio de Microelectrnica de la Pontificia Universidad Catlica del Per (PUCP). El objetivo de esta pasanta fue revisar un diseo inicial basado en lgica TTL, para transferirlo a lgica programable, usando descripciones VHDL y smbolos a medida parametrizables (con MegaWizard de MAX+plus II), y acabar la implementacin en un chip EPM7128SLC84-15 (basado en EEPROM, 100 reprogramaciones garantizadas), por su bajo costo comparado con otros chips al alcance en esos momentos. Se eligi utilizar un chip EPF10K10LC84-4 (basado en SRAM, configuraciones ilimitadas pero voltiles) para el desarrollo del prototipo.

Descripcin General
La figura 1 muestra un esquema de la apariencia del frecuencmetro como producto final. Su caracterstica principal de auto rango, permite colocar la seal y observar el valor de su frecuencia, sin ninguna otra intervencin por parte del usuario. Las caractersticas del frecuencmetro son: 1. Rango de frecuencias en Hz, KHz y MHz: el valor aparece en enteros en el rango de Hz (desde 1Hz hasta 999Hz). El rango de KHz abarca desde 1.00 KHz hasta 999KHz. El rango de MHz est comprendido entre 1.00 MHz y Figura 1. Bosquejo del Frecuencmetro como producto final. 10.0MHz. La frecuencia se establece automticamente en un rango auto ajustable: el circuito determina la frecuencia de la seal en el rango actual. Si la frecuencia es ms alta que el mximo valor del rango actual, el rango se incrementa (de baja frecuencia a Hz, de Hz a KHz, de KHz a MHz, de MHz a alta frecuencia), en cambio si en el rango actual se obtiene una lectura de 0, el rango se reduce (de alta frecuencia a MHz, de MHz a KHz, de KHz a Hz, de Hz a baja frecuencia). Visualizacin con tres dgitos significativos: el valor de la frecuencia puede observarse con tres dgitos significativos en los rangos de KHz y MHz (enteros ms decimales), pero en el rango de Hz se observan solo enteros. Punto decimal flotante para los rangos en KHz y MHz: el punto decimal se ajusta automticamente en los visualizadores de siete segmentos. Precisin de Hz en el rango de Hz: El circuito ha sido diseado para generar ventanas de tiempo, y la ventana de tiempo ms grande es de 1s. Si la seal de entrada tiene una frecuencia inferior a 1Hz, el panel mostrar el dato 0 y el indicador de Baja Frecuencia se activar. Indicadores de rango y fuera de rango: Unos leds indican el rango actual o fuera de rango de la seal. Generador de prueba: Un teclado permite ingresar seales predefinidas para verificar el estado del frecuencmetro. Esta opcin est disponible solo en la versin con FLEX.

2.

3.

4. 5.

6. 7.

Para usar el dispositivo, la seal de entrada debe estar en el rango de 0V a 5V. Primero se debe encender el dispositivo, antes de conectar la seal de entrada. La frecuencia de la seal se apreciar en el panel de visualizacin y los indicadores informarn los rangos. Esto es vlido tanto para el EMP7128SLC84 como para el EPF10K10LC84. En este ltimo se puede usar adems un teclado para generar 16 frecuencias de prueba diferentes Esto fue muy til para la etapa de desarrollo y refinamiento del diseo. Para usar este modo, la compilacin debe hacerse solo para el modo test, conectando la salida del generador como la seal externa. Ello permite un mayor desempeo que si se agregara un bloque multiplexor.

Diagrama de Bloques
La figura 2 muestra el diagrama de bloques para el diseo del frecuencmetro. El circuito debe: 1. Contar la cantidad de ciclos de la seal de entrada: Este es el procedimiento elegido para determinar la frecuencia de la seal de entrada. Otro procedimiento consiste en contar el tiempo entre pulsos consecutivos de la seal de entrada y con un algoritmo de divisin calcular la frecuencia de ese perodo. Indicar cuenta cero y desborde: Se realiza a partir del contador anterior, con lgica combinacional. Determinar los rangos, habilitar un perodo de cuenta, cambiar los rangos si hay cuenta cero o desborde: estas tareas se realizan con una mquina de estados (en el bloque Controlador). Almacenar el valor actual. Se realiza en un registro de 3x4 bits (Registro). Mostrar el valor actual. Se emplea un panel de 3 visualizadores de 7 segmentos. La visualizacin es por multiplexacin en el tiempo, a una frecuencia de refresco de 1KHz. Generar frecuencias de test y frecuencias auxiliares. Se necesita crear: Frecuencias auxiliares: 1KHz para el sondeo del teclado y el refresco de la visualizacin, y 5Hz para la frecuencia de actualizacin de la lectura de la frecuencia de la seal de entrada. Frecuencias de test: Solo para el caso del EPF10K10LC84. Genera 16 frecuencias diferentes de acuerdo a la tecla presionada. Leer un teclado para test: Se implementa en la Lectora de Teclado. Entrega al generador de frecuencias de test un cdigo de seleccin de frecuencia de prueba.

2. 3. 4. 5. 6.

7.

Figura 2. Diagrama de Bloques del Frecuencmetro

Contador de Dcadas
A este bloque llega la seal cuya frecuencia se mide, frec_entr. Las seales habCnt y rst_asinc provienen del mdulo Controlador. Las salidas de este bloque son las unidades, decenas y centenas de un contador en cascada (000-999). Las seales RangoDn y RangoUp indican al Controlador analizar un cambio de rango. RanguUp es el acarreo del contador de centenas; un flip flop se emplea para mantener el valor hasta que sea reinicializado. Si RangoUp se activa significa que el contador alcanz la cuenta 1000 antes de cumplirse el tiempo de Figura 3. Diagrama Esquemtico del Contador de Dcadas Asncrono

habilitacin para la cuenta. RangoDn se activa si el valor del contador es cero. La seal MSDesCero sirve para ajustar el punto decimal en el rango de KHz y MHz.

Registro
Sirve para mantener el valor que ser visualizado. El registro se actualiza cinco veces por segundo, independientemente del rango de la seal cuya frecuencia se mide. La seal de entrada ldCuenta proviene del Controlador. Las seales U, D y C provienen del contador de dcadas, mientras que las salidas Uni, Dec y Cen van al visualizador. Figura 4. Diagrama Esquemtico del Registro de Visualizacin

Visualizador
La figura 5 muestra el diagrama esquemtico del visualizador. Las entradas son reloj_base (de 8MHz), hab1KHz, los tres dgitos del registro anterior y las seales del punto decimal. Las salidas son los datos para el visualizador de 7 segmentos (dato7seg) y los habilitadores (hab7seg). El bloque DEC7SEGL est descrito en VHDL, para implementar un decodificador de 7 segmentos, con salidas activas en baja. Las seales hV1 y hV2 sirven para ocultar la visualizacin de los ceros en el rango de 1Hz a 99Hz.

Figura 5. Diagrama Esquemtico del Visualizador

Generador de Frecuencias
Este bloque genera las frecuencias auxiliares (caso MAX, con el EPM7128SLC84-15) y las frecuencias de prueba (caso FLEX, con el EPF10K10LC84-4). La figura 6 muestra el generador en el caso MAX, donde solo se producen las frecuencias de refresco para el visualizador (1KHz) y de actualizacin del registro de visualizacin (5Hz). Figura 6. Diagrama Esquemtico del Generador de Frecuencias Auxiliares

La figura 7 ilustra la formacin del generador de frecuencias. Las seales se generan con el acarreo de salida de los contadores de mdulo predefinido. Por ejemplo una frecuencia de 999Hz se obtiene con una cuenta de 8008.

Figura 7. Esquemtico Parcial del Generador de Frecuencias de Test

Lectora de Teclado
Este controlador solo se usa en el caso FLEX, para seleccionar la frecuencia de prueba. Posee una salida registrada. El bloque genpulso prev los antirrebotes y arroja un pulso de salida sncrono de un perodo de reloj de duracin para cargar el valor de la tecla presionada (0 - 16), indicada por el contador, en el registro de 4 bits. La salida del registro se conecta al selector de frecuencia del generador descrito en el prrafo anterior. Figura 8. Diagrama Esquemtico del Controlador de Teclado

El Controlador
El controlador del sistema se cre con una descripcin VHDL. El diagrama de estados se muestra en la figura 9. El cdigo VHDL documentado con comentarios se muestra a continuacin.

Figura 9. Diagrama de Estados del Controlador

------------------------------------------------------------------- AutoRngM.vhd : autoajuste del rango y generador de ventanas de tiempo ------------------------------------------------------------------- Arturo Miguel de Priego amiguel@pucp.edu.pe Diciembre 11, 2000 Pontificia Universidad Catlica del Per -------------------------------------------------------------------------------------------ENTITY AutoRngM IS PORT( Frec5Hz : IN BIT; -- Frecuencia para temporizar la visualizacin reloj : IN BIT; -- Frecuencia base para temporizar las medidas ( 8MHz ) rangoUp : IN BIT; -- Indica cuenta completa de 1000 pulsos de la seal de entrada. Ocurre cuando los -- contadores de dcadas alcanzan la cuenta de 1000. rangoDn : IN BIT; -- Indica ninguna cuenta de pulsos de la seal de entrada. -- Ocurre cuando todos los contadores tienen valor cero. CeroMSD : IN BIT; -- indica estado de la centena (MSD, dgito ms significativo) ldCnta, -- Carga la cuenta en los registros habCnta, -- Activa la cuenta del medidor rstCnta : OUT BIT; -- Reinicia la cuenta del medidor ptoDec : OUT BIT_VECTOR(1 DOWNTO 0); -- punto decimal flotante altaFrec, -- frecuencia muy alta RangoMHz, -- rango en MHz RangoKHz, -- rango en KHz RangoHz, -- rango en Hz bajaFrec: OUT BIT); -- frecuencia muy baja END AutoRngM; ARCHITECTURE a OF AutoRngM IS CONSTANT RANGO_MINIMO : INTEGER := 0; CONSTANT RANGO_MAXIMO : INTEGER := 7; -- este valor puede ser 5 o 6, segn el dispositivo CONSTANT CUENTA_RANGO1 : INTEGER := 7999999; CONSTANT CUENTA_RANGO2a : INTEGER := 799999; CONSTANT CUENTA_RANGO2b : INTEGER := 79999; CONSTANT CUENTA_RANGO2c : INTEGER := 7999; CONSTANT CUENTA_RANGO3a : INTEGER := 799; CONSTANT CUENTA_RANGO3b : INTEGER := 79; CONSTANT CUENTA_RANGO3c : INTEGER := 7; SIGNAL rango : INTEGER RANGE 0 TO 7; -- 0: Baja frecuencia -- 1: 1 Hz - 999Hz -- 2: 1.00 KHz - 9.99KHz -- 3: 10.0 KHz - 99.9KHz -- 4: 100 KHz - 999KHz -- 5: 1.00 MHz - 9.99MHz -- 6: 10.0 MHz - 99.9MHz -- 7: Alta frecuencia -- como la frecuencia base es de 8MHz (T = 125ns), una ventana de 1us se obtiene con una cuenta de 8 . Para una precisin mayor se -- necesita un oscilador externo de mayor frecuencia. -------------------------------------------------------------------------------------------TYPE ESTADOS_AUTORANGO IS ( INICIO, REINICIO, HABILITACION, RECARGA, ALTA_FRECUENCIA, BAJA_FRECUENCIA, RANGO_UP, RANGO_DN); SIGNAL estado : ESTADOS_AUTORANGO; SIGNAL cnt : INTEGER RANGE 0 TO 7999999; SIGNAL cuentaMaxima : INTEGER RANGE 0 TO CUENTA_RANGO1; SIGNAL tmp, tldCnta : BIT; -------------------------------------------------------------------------------------------BEGIN -------------------------------------------------------------------------------------------PROCESS (reloj) -- proceso para controlar la actualizacin del registro 5 veces por segundo BEGIN IF reloj'EVENT AND reloj = '1' THEN IF Frec5Hz = '1' THEN tmp <= '1'; ELSIF tldCnta = '1' THEN tmp <= '0'; END IF; END IF; END PROCESS; ldCnta <= tmp AND tldCnta; -------------------------------------------------------------------------------------------PROCESS (reloj) -- maquina de estados BEGIN IF reloj'EVENT AND reloj = '1' THEN CASE estado IS WHEN INICIO => -- sirve para iniciar el estado y el rango rango <= RANGO_MINIMO + 1; estado <= REINICIO; WHEN REINICIO => -- reinicializa el contador de cnt <= 0; -- tiempo de habilitacin estado <= HABILITACION;

WHEN HABILITACION => IF rangoUp = '1' THEN -- si ocurre un desborde del contador de pulsos estado <= RANGO_UP; -- de entrada, se reduce el tiempo de -- habilitacin, lo cual equivale a incrementar -- el rango de frecuencia ELSIF cnt = cuentaMaxima THEN -- si se alcanzo el lmite de tiempo IF rango = RANGO_MAXIMO AND rangoDn = '1' THEN estado <= RANGO_DN; -- verifica la cuenta para reducir -- el rango si se haba alcanzado -- ALTA_FRECUENCIA ELSE estado <= RECARGA; -- se recarga el contador END IF; ELSE cnt <= cnt + 1; END IF; WHEN RECARGA => IF rangoDn = '1' OR ( CeroMSD = '1' AND rango /= 1 AND rango /= 0 ) THEN estado <= RANGO_DN; -- verifica la cuenta, si es cero decrementa el rango -- si el dgito ms significativo es cero y el rango > 1 entonces -- baja el rango (tres dgitos significativos en KHz y MHz). ELSIF rango = 0 AND rangoDn = '0' THEN -- para subir el rango cuando se -- habia alcanzado BAJA_FRECUENCIA estado <= RANGO_UP; ELSE estado <= REINICIO; END IF; WHEN RANGO_UP => IF rango = RANGO_MAXIMO THEN estado <= ALTA_FRECUENCIA; ELSE rango <= rango + 1; estado <= REINICIO; END IF; WHEN ALTA_FRECUENCIA => estado <= REINICIO; WHEN RANGO_DN => IF rango = RANGO_MINIMO THEN estado <= BAJA_FRECUENCIA; ELSE rango <= rango - 1; estado <= REINICIO; END IF; WHEN BAJA_FRECUENCIA => estado <= REINICIO; WHEN OTHERS => estado <= INICIO; END CASE; END IF; END PROCESS; --------------------------------------------------------------------------------------------- asignaciones de las salidas RangoHz <= '1' WHEN rango = 1 ELSE '0'; RangoKHz <= '1' WHEN rango = 2 OR rango = 3 OR rango = 4 ELSE RangoMHz <= '1' WHEN rango = 5 OR rango = 6 ELSE '0'; ptoDec(1) <= '1' WHEN rango = 2 OR rango = 5 ELSE '0'; ptoDec(0) <= '1' WHEN rango = 3 OR rango = 6 ELSE '0'; -- selector de cuenta, para el tiempo de habilitacin cuentaMaxima <= CUENTA_RANGO1 WHEN rango = 1 ELSE CUENTA_RANGO2a WHEN rango = 2 ELSE CUENTA_RANGO2b WHEN rango = 3 ELSE CUENTA_RANGO2c WHEN rango = 4 ELSE CUENTA_RANGO3a WHEN rango = 5 ELSE CUENTA_RANGO3b WHEN rango = 6 ELSE CUENTA_RANGO1; WITH estado SELECT rstCnta <= '1' WHEN REINICIO, '0' WHEN OTHERS; WITH estado SELECT tldCnta <='1' WHEN RECARGA, '0' WHEN OTHERS; WITH estado SELECT habCnta <= '0' WHEN RECARGA, '1' WHEN OTHERS; altaFrec <= '1' WHEN rango = RANGO_MAXIMO ELSE bajaFrec <= '1' WHEN rango = RANGO_MINIMO ELSE

'0'; -- 2 decimales -- 1 decimal

-- 1 Hz - 999 Hz -- 1.00 KHz - 9.99 KHz -- 10.0 KHz - 99.9 KHz -- 100 KHz - 999 KHz -- 1.00 MHz - 9.99 MHz -- 10.0 MHz - 99.9 MHz

'0'; '0';

END;

Sntesis
Para la versin EPM se configuraron los pines del chip para el uso en una tarjeta de pruebas, tal como se muestra a continuacin: @54 @55 @65 @67 @68 @69 @70 @73 AltaFrecuencia BajaFrecuencia dato7seg0 dato7seg1 dato7seg2 dato7seg3 dato7seg4 dato7seg5 @74 @64 @63 @61 @60 @58 @57 @56 dato7seg6 dato7seg7 hab7seg0 hab7seg1 hab7seg2 Hz KHz MHz ** AUTO SIGNALS ** GLOBAL

INFO: Signal 'reloj' chosen for auto global Clock (pin 83) INFO: Signal 'test' chosen for auto global Clock (pin 2)

La sntesis se realiz en el estilo NORMAL, modo MULTINIVEL, con la opcin de Turbo Bit activada. La mquina de estados del compilador result:
|AUTORNGM:100|estado: MACHINE OF BITS ( |AUTORNGM:100|estado~3, |AUTORNGM:100|estado~2, |AUTORNGM:100|estado~1 ) WITH STATES ( INICIO = B"000", REINICIO = HABILITACION = RECARGA = ALTA_FRECUENCIA = BAJA_FRECUENCIA = RANGO_UP = RANGO_DN = B"001", B"010", B"011", B"100", B"110", B"101", B"111" );

La sntesis arroj un consumo de 113 macroceldas, que constituye el 88% de recursos lgicos del chip La matriz de retardos y el desempeo registrado se indican a continuacin:

Figura 10. Matriz de Retardos para el Frecuencmetro implementado en un EPM7128SLC84-15

Figura 11. Desempeo registrado para el frecuencmetro implementado en un EPM7128SLC84-15

El siguiente mensaje aparece durante el anlisis temporal, relacionado con las seales reloj (de frecuencia base 8MHz) y test (cuya frecuencia se desea medir):

Las simulaciones que se indican en la ayuda no se han realizado todava. El circuito fue probado en hardware con un Generador de Frecuencias de 2MHz y respondi correctamente en todo el rango de 1Hz a 2MHz, actualizando el valor medido automticamente. Para frecuencias inferiores a 1Hz la seal de baja frecuencia se encenda. La mxima frecuencia se ha estimado en 10MHz, pero el valor real se determinar en un trabajo futuro. Para la versin con FLEX, la compilacin del mismo circuito que para la versin con MAX, es decir, sin incluir el generador de frecuencias y el controlador de teclado, arroj los siguientes datos (pines elegidos por el compilador): Sntesis NORMAL FAST LCs 227 (39 %) 292 (50 %) reloj 18.62 MHz, 53,7ns 24.5 MHz, 40,8 ns test 50.76 MHz, 19.7ns 43.85 MHz, 22.8ns

En ambos casos la asignacin automtica de los estados fue la misma


|AUTORNGM:100|estado: MACHINE OF BITS ( |AUTORNGF:100|estado~8, |AUTORNGF:100|estado~7, |AUTORNGF:100|estado~6, |AUTORNGF:100|estado~5, |AUTORNGF:100|estado~4, |AUTORNGF:100|estado~3, |AUTORNGF:100|estado~2, |AUTORNGF:100|estado~1 ) WITH STATES ( INICIO = REINICIO = HABILITACION = RECARGA = ALTA_FRECUENCIA = BAJA_FRECUENCIA = RANGO_UP = RANGO_DN = B"00000000", B"11000000", B"10100000", B"10010000", B"10001000", B"10000100", B"10000010", B"10000001" );

El circuito se prob luego sobre el sistema DGMF10K10, constituido por una tarjeta basada en el EPF10K10 y por una tarjeta que contiene cuatro visualizadores y un teclado, tal como se muestra en la figura 12. En este sistema se prob igualmente el generador de frecuencias de test, leyndose correctamente las frecuencias de 2.66MHz y 4MHz, las frecuencias ms altas disponibles para verificar hasta ese momento en el laboratorio. Figura 12. Sistema DGM-F10K10 utilizado para probar el frecuencmetro en la etapa del desarrollo del diseo.

Conclusiones

Se mostr el diseo de un frecuencmetro digital de alto desempeo, el cual fue realizado en un relativo pequeo nmero de horas usando VHDL en combinacin con smbolos parametrizados del MegaWizard de MAX+plusII 9.23, versin estudiantil.

Se indic paso a paso el diseo del frecuencmetro, desde la concepcin de la idea, hasta la implementacin en chips de lgica programable.

La combinacin de tarjetas a medida y de aplicacin especfica permite resolver rpidamente varios problemas que toman a veces mucho tiempo encontrar en la simulacin. Otras tarjetas de este tipo se estn desarrollando en la PUCP para ayudar a conseguir prototipos funcionales y con alto desempeo empleando menos tiempo en actividades manuales.

Referencias
[1] Altera Corporation, http://www.altera.com [2] ByteBlaster Parallel Port Download Cable Data Sheet Febrero 1998, ver 2.01 [3] Altera Data Book, 1998, Altera Corporation [4] Altera CD Data Library, 2000, Altera Corporation

You might also like