Ir al contenido principal

Entradas

Mostrando las entradas etiquetadas como FPGA

Máquinas de estado finito en VHDL

Las máquinas de estado finito, más conocidas por su acrónimo en inglés FSM (Finite State Machine), se utilizan ampliamente en el diseño de circuitos digitales (además de en otros ámbitos de la ingeniería, como la programación), para describir el comportamiento de un sistema según el valor de sus entradas y de cómo van cambiando en el tiempo. Ésta es una definición parcial pero que nos permite hacernos una primera idea intuitiva. Desde el punto de vista de las FSM, un sistema está compuesto de estados por los que va pasando el sistema, de señales de entrada que modifican esos estados y de señales de salida que pueden utilizarse para conocer el estado del sistema y actuar en consecuencia. Un ejemplo muy visual podría ser un semáforo, el cuál dispone de tres estados diferentes, uno para cada color. Las entradas del sistema las podría generar un temporizador que activa una señal cada cierto tiempo, indicando que hay que pasar al siguiente estado. Por último, las salidas del sist...

Relojes MMCM en FPGAs

Cuando se diseñan sistemas digitales síncronos, una de las reglas de oro es usar un sólo dominio de reloj para todo el circuito. Esto quiere decir que sólo usaremos una única señal de reloj conectada a todos los elementos síncronos del circuito. Por lo tanto debemos evitar una práctica bastante habitual que es usar la salida de un elemento del sistema, como por ejemplo un contador, para obtener la señal de reloj de otro elemento cualquiera. De hecho, aquí lo hicimos (mal) cuando diseñamos nuestro reloj digital (y usamos la salida del contador de 1Hz como señal de reloj para el contador de segundos). Aunque siempre en aras de la simplicidad y la pedagogía :-) Así que si queremos que nuestro diseño no tenga problemas de sincronización, el mismo reloj debe ser usado por todos y cada uno de los elementos síncronos. Sin embargo, si nuestro circuito es complejo y sobre todo, si ocupa una gran superficie de la FPGA, la señal de reloj puede sufrir pequeños retardos al distribuirse en...

Placa de prototipado FPGA Cyclone IV EP4CE6

Existen en el mercado multitud de placas de entrenamiento FPGA. Ya hemos visto algunas en este blog, pero os quiero hablar de una que me ha llamado la atención por su enfoque diferente. Elegir una placa de entrenamiento a veces se complica, ya que no sólo hay que buscar una con la familia de FPGA que nos interesa, también hay que evaluar qué elementos periféricos trae consigo. ¿Necesitamos un display de siete segmentos? ¿botones? ¿salida VGA o entrada para teclado? La aproximación de Waveshare me ha resultado interesante, ya que lejos de incluir una serie de elementos periféricos a la FPGA, ha optado por un sistema totalmente modular, lo que tiene ciertas ventajas (y desventajas, claro). La idea es ofrecer una placa FPGA básica, a la que llaman core, con la FPGA que necesitemos (ya sea de Altera o XILINX). Esta placa core puede acoplarse a una placa de expansión con una buena cantidad de conectores. En la fotografía anterior hay una FPGA de la familia Cyclone IV de Altera ...

Pulsador antirebote en VHDL (debouncing)

El uso de actuadores mecánicos como los pulsadores, tiene muchas ventajas, sobre todo económicas, ya que son muy baratos. Sin embargo, precisamente por su naturaleza mecánica, vienen acompañados de ciertos problemas que dependiendo del uso que hagamos de ellos, pueden llegar a ser un verdadero quebradero de cabeza. El mayor de estos inconvenientes es el rebote o bouncing . Al ser accionados, los pulsadores tardan cierto tiempo en alcanzar un estado estable, es decir, que durante muy poco tiempo (del orden de los milisengundos) pueden cambiar entre el estado pulsado y no pulsado hasta que la señal se estabiliza. A pesar de ser muy poco tiempo, es el suficiente para que un sistema digital lo detecte como varias pulsaciones. La siguiente imagen muestra una señal de rebote típica. Hay varias aproximaciones para solucionar este problema, tanto hardware como software (si estamos trabajando con microcontroladores). En este artículo vamos a ver cómo atajar este problema desde el punto...

Reloj digital en VHDL

Si ya hemos hablado de cómo generar un reloj de 1 Hz y también hemos visto cómo controlar un display de siete segmentos con VHDL, el siguiente paso lógico es construir un circuito para un reloj digital de 24 horas. Sólo es cuestión de unir lo ya aprendido en los dos anteriores artículos y añadir algo de lógica de control. Vamos a construir un circuito descrito con VHDL que tiene una sola entrada llamada clk50mhz , que es la señal de reloj (de 50 Mhz en este caso) que va a comandar todo el sistema. Como salida hay dos buses, uno llamado display , que obviamente se encarga de iluminar los leds correspondientes de cada display de siete segmentos, y otra salida llamada cur_display que selecciona qué display, de los cuatro posibles, se ilumina en cada momento. El código es el siguiente. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity digital_clock_top is port ( clk50mhz: in STD_LOGIC; display: out STD_LOGIC_VECTOR(7 downto 0); cur_displ...

Multiplexado de displays de siete segmentos con VHDL

Cuando un diseño utiliza más de un display de siete segmentos es interesante multiplexarlos para ahorrar en conexiones. Si no lo hacemos así, para controlar cuatro displays necesitaríamos 32 conexiones al microcontrolador si es que queremos manejar directamente los displays sin ningún integrado de por medio. Vamos ver cómo funciona este multiplexado y cómo se puede implementar en una FPGA usando VHDL. Existen dispositivos que empaquetan varios displays que son muy cómodos de usar. En este artículo, como ejemplo usaremos uno de cuatro displays. Sin embargo esta técnica puede usarse con varios displays sueltos. En el siguiente esquema se presenta la manera correcta de hacer las conexiones mediante transistores configurados en emisor común para funcionar como interruptores. Las entradas D0 a D3 permiten seleccionar qué display queremos activar en cada momento, mientras que las entradas A a G (y DP) permiten seleccionar qué leds se han de encender para mostrar e...

Divisor de frecuencia para reloj de 1Hz en VHDL

Los circuitos digitales, a no ser que sean asíncronos, van comandados por un reloj cuya frecuencia puede variar según el tipo de sistema digital del que se trate. Desde microprocesador 6502 que funcionaba con un reloj de 1Mhz hasta los actuales, que funcionan en el orden de los gigahercios, no han pasado ni cuatro décadas. En un sistema digital complejo es habitual que necesitemos obtener diferentes frecuencia de reloj para diferentes subsistemas. Un ejemplo muy claro puede ser el de un reloj digital que tiene que contar los segundos, por lo tanto, necesita un reloj de 1Hz (un pulso por segundo). En este artículo vamos a ver un ejemplo práctico de cómo obtener un reloj de 1Hz a partir de otro de 50Mhz en VHDL, y vamos a probarlo un una FPGA. La técnica usada para dividir la frecuencia de un reloj es usar biestables conectados en cascada. En la siguiente esquema se detalla el funcionamiento. Cada biestable divide la frecuencia a la mitad, así que la idea es ir acoplando biesta...

Placa de desarrollo Altera Cyclone II EP2C5T144 FPGA Mini

En un artículo anterior ya analizamos una placa de desarrollo FPGA con un precio muy interesante. Hoy os traigo otra, que aunque es de gama baja, es algo más potente (es una Cyclone II, concretamente una EP2C5T144C8N).  La placa de desarrollo Altera Cyclone II EP2C5T144 FPGA Mini puede encontrarse en Internet a unos 20 Euros o incluso menos. Esta FPGA tiene 4068 elementos lógicos, así que con ella podremos acometer proyectos de una envergadura media (no está nada mal para el precio). Algunas características reseñables son: Dispone de un regulador de tensión de 1,2V para el core de la FPGA y otro de 3,3V para los puertos de entrada/salida. La placa se alimenta con 5V. Oscilador a 50Mhz (la FPGA soporta hasta 300Mhz). Dispone de dos PLLs. Varios bloques de RAM de 4Ks (total: 119.898 bits). Una EEPROM EPCS4 de 4Mbit (sólo programable a través del puerto AS). Todos los pines de E/S están conectados a las cabeceras y están bien identificados en el PCB. En ...

Placa de desarrollo FPGA EP1C3T144 (III)

Para finalizar la serie de tres artículos sobre esta placa de desarrollo vamos a ver como está conectada la cabecera de pines de entrada y salida, sin la que la FPGA no podría comunicarse con el mundo exterior. Para ello vamos a aprovechar el mismo circuito semisumador que ya hicimos en la primera parte y, en vez de usar los botones y los leds de la placa, vamos a montarlos en una protoboard.  La asignación de pines entre la FPGA y la cabecera de E/S es la siguiente. PIN FPGA Conector E/S PIN FPGA PIN 7 - 01 02 - PIN 6 PIN 5 - 03 04 - PIN 4 PIN 3 - 05 06 - PIN 2 PIN 1 - 07 08 - PIN 144 PIN 143 - 09 10 - PIN 142 PIN 141 - 11 12 - PIN 140 PIN 139 - 13 14 - PIN 134 PIN 133 - 15 16 - PIN 132 PIN 131 - 17 18 - PIN 130 PIN 129 - 19 20 - PIN 128 PIN 127 - 21 22 - PIN 126 PIN 125 - 23 24 - PIN 124 PIN 123 - 25 26 - PIN 122 PIN 121 - 27 28 - PIN 120 Vamos a conectar los LEDs a los pines 27 (PIN 121 de la FPGA) y...

Placa de desarrollo FPGA EP1C3T144 (II)

Seguimos indagando en las posibilidades de esta placa de desarrollo, y en esta ocasión vamos a ver cómo están conectados el cuádruple display de siete segmentos (bueno, 8 segmentos con el punto decimal) y los dos bancos de switches. El display es un 3461B (de ánodo común). Al igual que un 7 segmentos normal, este display tiene las 8 entradas para cada uno de los leds, y además, otras cuatro para seleccionar el led a iluminar en cada momento (refrescando los displays consecutivamente pueden usarse los cuatro a la vez). Estos son los pines de la FPGA asociados a cada pin del display. Pin display Pin FPGA Segmento A (pin 14) PIN 74 Segmento B (pin 16) PIN 77 Segmento C (pin 13) PIN 78 Segmento D (pin 3) PIN 79 Segmento E (pin 5) PIN 75 Segmento F (pin 11) PIN 82 Segmento G (pin 15) PIN 73 Punto decimal (pin 7) PIN 76 Dígito 1 (pin 1) PIN 83 Dígito 2 (pin 2) PIN 84 Dígito 3 (pin 6) PIN 85 Dígito 4 (pin 8) PIN 91 Las cuatro señale...