Relojes FPGA para desarrolladores (o cualquier persona)

Anteriormente, el diseño de hardware requería esquemas y el diseño de software requería código. Claro, mucha gente podía saltar de un lado a otro, pero claramente era otra disciplina. Hoy en día, gran parte del diseño digital se realiza mediante el lenguaje de descripción de dispositivos (HDL) como Verilog o VHDL. Parecen programas, pero como hemos señalado muchas veces, en realidad no es lo mismo. [Zipcpu] tiene una publicación de blog muy clara que explica en qué se diferencia y por qué.

[Zipcpu] nota algo que hemos visto con demasiada frecuencia en Internet. Algunos novatos escribirán código secuencial usando Verilog o VHDL como si fuera un lenguaje de programación convencional. Dicho código incluso puede simular. Sin embargo, el hardware resultante, en el mejor de los casos, será muy ineficiente y, en el peor, ni siquiera funcionará.

Discrepamos levemente con una declaración en la publicación: "... ningún proyecto de lógica digital puede funcionar sin un reloj". Sin emabargo, [Zipcpu] Elaboramos más y estamos de acuerdo con la elaboración. Sin embargo, es importante señalar que la lógica asincrónica y combinada no usa un reloj en el sentido convencional de la palabra. La lógica combinada, por ejemplo, un conjunto de puertas Y y O, solo puede manejar tareas simples y el diseño asincrónico completo es difícil y no es probable que sea algo que un nuevo programador de FPGA encontrará.

La realidad es que casi todos los diseños digitales importantes usan relojes porque hacen que el diseño sea manejable. Básicamente, el reloj le dice a todas las partes del circuito que comiencen a procesar y establece un límite de tiempo para completar las diversas partes de combinación. Sin el reloj, tendría que lidiar con el problema cuando, por ejemplo, un sumador presenta un resultado antes de que llegue la transferencia de otra etapa para cambiar esa respuesta. Con un reloj, siempre que la respuesta correcta esté lista en el borde del reloj, no le importa exactamente cuánto tiempo necesita.

Esto es especialmente importante porque Verilog y VHDL no funcionan línea por línea, como esperaría un programador. En cambio, los edificios HDL se convierten en circuitos y todos los circuitos funcionan al mismo tiempo. Este paralelismo es difícil de gestionar, pero hace que los FPGA sean ideales para cálculos rápidos y tiempos de respuesta rápidos.

La sección de la publicación sobre cuánta lógica poner entre relojes es lo que normalmente se llama "hacer un temporizador". Las herramientas FPGA tienen una cantidad aterradora de datos sobre cuánto tiempo tarda una señal en viajar de una parte de la FPGA a otra. Si la herramienta detecta que el tiempo de tránsito entre dos elementos sincronizados excede el período de reloj, lo marcará como un error. Puede aumentar la velocidad del reloj o acortar la ruta, ya sea física o lógicamente.

En general, esta es una excelente introducción a un tema difícil y contiene muchos consejos reales. Si desea leer nuestra portada, hemos creado un tutorial de Verilog de trabajo múltiple utilizando la placa Lattice iCEstick barata. También hay un ejemplo práctico utilizando la misma placa. El tutorial incluso tenía algunos videos, el primero de los cuales aparece a continuación.

  • Ostraco dice:

    “La sección del artículo sobre cuánta lógica poner entre relojes es lo que normalmente se llama“ cronometrar ”. "Las herramientas FPGA tienen una cantidad asombrosa de datos sobre cuánto tiempo tarda una señal en viajar de una parte de la FPGA a otra".

    Mejor un caballo pobre que ningún caballo.

  • MinorHavoc dice:

    Parafraseando a John Archibald Wheeler, los relojes son la forma lógica del diseñador de evitar que todo suceda al mismo tiempo.

  • Peter Burkimsher dice:

    Estudié Ingeniería de Sistemas Electrónicos en la universidad y disfruté mucho de las clases de diseño de circuitos FPGA. Desde que me gradué, nunca he usado esas habilidades, ni en el trabajo ni en proyectos personales. Tengo un Virtex-II que encontré en un contenedor de reciclaje, pero todavía no tengo un uso práctico para él.

    Mi impresión es que las únicas personas que diseñan circuitos actualmente trabajan para grandes empresas en los EE. UU. (Intel) o el Reino Unido (ARM, Broadcom). Los proyectos se envían a Taiwán para su fabricación, donde trabajo ahora. Pero mi trabajo se trata de programas de software gubernamentales para probar máquinas, en lugar de algunos proyectos locales. Todos los recursos están aquí para construir algo emocionante, pero no tengo ningún proyecto que lo requiera.

    Incluso para mi Virtex-II, ¿para qué debo usarlo? Parece que todo se puede hacer con programas, y las computadoras individuales de bolsillo pueden satisfacer las necesidades de todas mis ideas de proyectos personales.

    Me encantaría saber para qué usan otras personas sus FPGA, para poder inspirarme a construir algo único y útil.

    • mímica dice:

      Construya un dispositivo que tome la señal de video en paralelo Rigol DS1052E en el circuito base (ya hay un conector útil en el circuito base) y conviértalo a DVI o HDMI.
      Luego colócalo en Ebay y seré uno de tus primeros clientes.

      La gente de FPGA podría decir que es trivial, ¡pero no para principiantes!

      • Peter Burkimsher dice:

        RoGeorge lo hizo en software para el DS1000Z. Su solución utiliza comandos SCPI, que también funcionarían en el DS1052E.
        https://la-tecnologia.io/project/5807-driverless-rigol-ds1054z-screen-capture-over-lan

    • Floche dice:

      Todo lo relacionado con el procesamiento rápido de señales generalmente se realiza mediante FPGA (o ASIC).
      Trabajé durante algunos años en certificados NFC, y considerando el tiempo de respuesta requerido (escala µs) y los algoritmos involucrados, la única solución fue esa.

      Lo mismo ocurre con las comunicaciones de alta velocidad como Ethernet.

    • Sheldon dice:

      Aunque ARM es una de las pocas empresas grandes en el mundo de los proyectos sintetizados (es decir, código HDL que se puede "compilar" en diferentes lógicas digitales, ya sea FPGA o ASIC), hay cientos más que compran ese código (y por lo tanto tienen que escribir más para integrarlo en un sistema completo / terminado) o simplemente escriba el suyo propio para aplicaciones especializadas.
      Solo tiene que mirar las compañías que compran ARM-IP (cosas como los núcleos de la CPU) para ver qué otras compañías usan expertos en HDL; Broadcom es una de esas compañías. Fuera del mundo de las CPU, hay muchas otras empresas que utilizan FPGA como un medio para procesar grandes cantidades de datos en formas de aplicación específicas (piense en el procesamiento de video, redes, industrias de defensa, etc.).

      Y cuando se trata de proyectos para usar su placa Virtex II, olvídese de intentar implementar CPU en ellos, porque no vale la pena el esfuerzo, en su lugar, piense en problemas críticos difíciles en tiempo real (posibles en los programas, pero pueden requerir un cuidado obsesivo sobre cómo el código está compilado) y tareas masivamente paralelas (no tienen que ser complejas, solo las suficientes para que, a menos que tenga una GPU para iniciar el trabajo, esto resulte en un retraso cuando la tarea se serializa).

    • BobH dice:

      Trabajé en grandes casas de semiconductores (en los EE. UU.) E hice muchos proyectos digitales en proyectos mixtos analógicos / digitales.
      Muchos chips analógicos utilizan cantidades pequeñas o medianas de lógica digital para asuntos internos, como almacenar datos de calibración / configuración. Todo lo que tenga una interfaz I2C o SPI tendrá lógica digital. Sin embargo, no todo esto se hace en Verilog / VHDL. La gente del proyecto analógico tiende a crear la lógica digital manualmente, mientras que los proyectos con gente del proyecto digital y grandes cantidades de secciones de lógica digital se realizarán con Verilog / VHDL.

      También trabajé mucho en FPGA realizando interfaces digitales especializadas para probar nuevos chips. Puede ser un protocolo de interfaz digital estándar con temporización personalizable o posiblemente interfaces no estándar no publicadas.

      Personalmente, he realizado varios proyectos domésticos FPGA para crear periféricos para microprocesadores que no están disponibles comercialmente. Probablemente haga otro para adaptar los tipos de LCD para reparar equipos con pantallas defectuosas que no están disponibles ahora.

    • Daño por fuego dice:

      Actualmente estoy trabajando (algo lentamente) en un proyecto que usa FPGA para tomar información ADC rápida y enviarla (junto con información adicional del proyecto, por ejemplo, factor de escala) a una computadora donde planeo tener una interfaz que funcione como osciloscopio, analizador de espectro, analizador lógico, etc. utilizando la información recibida. Proyecto simple pero es un buen comienzo. Le obligará a crear una especie de protocolo de comunicación, que se ocupe de los flujos de datos constantes de los ADC, etc.

      Otro proyecto que podrías probar es porque te gusta dominar la ingeniería, crear varios reguladores en la FPGA y controlar varios dispositivos con él. Hice esto para mi maestría, haciendo una comparación entre 4 proyectos regulatorios avanzados diferentes y el viejo y simple VMC del regulador. Fue un hermoso proyecto que me enseñó mucho (fue mi primer proyecto real con FPGA).

      Espero que esto ayude con la inspiración ...

    • Vejestorio dice:

      Debe elegir un proyecto que sea adecuado para la implementación de FPGA. Su Virtex-II es bastante anticuado, por lo que muchas cosas para las que sería adecuado ahora se pueden hacer con una CPU o GPU, pero aprender esto no importa.

      Algunos ejemplos:
      - Implementación de PHY radio definida por software.
      - Todo lo relacionado con el procesamiento de videos.
      - Hacks de fuerza bruta, etc.
      - Conversión de protocolo

    • Sweeney dice:

      Las CPU se mueven en la dirección de la combinación con bloques de tejido FPGA para permitir funciones personalizadas de alta velocidad. Los últimos Intel Xeons son un ejemplo de esto.
      Mientras tanto, los FPGA tienen como objetivo tener una IP fija más compleja a bordo, que se puede emparejar con la estructura estándar para manejar tareas particularmente rápidas o complejas. Las computadoras de trance de alta velocidad (de varios gigabytes) o, en los últimos chips, los núcleos de CPU ARM completos son ejemplos.
      Tanto la CPU como la FPGA tienen sus puntos fuertes y débiles. Muchos proyectos que requieren la velocidad y / o la precisión de sincronización de los FPGA no tienen la salida requerida para convertirlos en ASIC completos. Tampoco existe la posibilidad de cambiar un proyecto ASIC (aparte de sacarlo y reemplazarlo), lo que puede ser un problema para algunas envidias.
      Para resumir una larga historia, es posible que aún no se haya encontrado con algo que desee hacer y que una CPU no pueda manejar, pero el mundo del proyecto puede ver la escritura en las tarjetas y apuntar a brindarles ambos juntos.

    • Robar dice:

      código abierto de minería de bitcoin

    • imanes dice:

      que auto estas conduciendo
      Los autos modernos (ciertamente japoneses) ahora están equipados con gvif para el video y se vuelve loco. Necesito poner un estéreo de repuesto en el mío, pero no quiero perder las cámaras de fábrica.
      necesitaría fpga o cpld para descifrar la interfaz de video Gigabit y convertirla en un CVBS antiguo (terrible)

  • Tien Gow dice:

    "Si la herramienta detecta que el tiempo de tránsito entre dos elementos en los que se hace clic excede el período del reloj, marcará esto como un error. Puede aumentar la velocidad del reloj o acortar la ruta, ya sea física o lógicamente. "
    ¿Significa eso DISMINUIR la velocidad del reloj, es decir, alargar el período del reloj?

    • Al Williams dice:

      Ho. Pensé "aumentar la clasificación de velocidad del dispositivo" y simplemente lo hice estallar. Algunas FPGA tienen grados rápidos que tienen tiempos de propagación más bajos que los dispositivos más lentos. Tiene razón, sin embargo, también puede decidir reducir la velocidad si esa es una opción (sin ofender al reverendo Jim).

  • Un dron dice:

    Bah ... registre su estructura lógica programable a 10 veces su requisito de E / S y espere lo mejor.

  • ROBÓ dice:

    Cita [ Al Williams]: "Algunos novatos escribirán código secuencial usando Verilog o VHDL como si fuera un lenguaje de programación convencional".

    Aunque el artículo vinculado se relaciona libremente con HDL, la información en el artículo se relaciona claramente con Verilog.

    Verilog contiene ambigüedad y sintaxis confusa. En Verilog, en realidad, puede escribir código que tiene un significado lógico ambiguo, y puede que se sintetice o no. System Verilog es la solución a este problema.

    Verilog también tiene el problema (confusión) de que parece un lenguaje de programación y algunas personas confunden las directivas de compilación con síntesis. Por ejemplo, For-Next, un codificador puede pensar que escribe un bucle que funcionará en el hardware, pero en lugar de eso, indica al compilador que cree x bloques del hardware contenido en el bucle,

    Estas cosas no son posibles con VHDL. No hay capacidad para escribir algo que tenga un significado lógico ambiguo porque el compilador no lo aceptará.

    Hermosa lectura de todos modos. Espero haber corregido estos puntos porque estoy codificando en VHDL y no en Verilog.

  • ZipCPU dice:

    "Siempre hay un reloj"

    Este fue quizás uno de los comentarios más incomprendidos del artículo que escribí. Una vez, mientras editaba el artículo, tuve un párrafo que solía tratar de explicar ese comentario, pero luego lo eliminé por cualquier motivo antes de publicar el artículo. Hasta ahora, aquellos que “no estuvieron de acuerdo” conmigo aún no se han puesto de acuerdo sobre el significado de la declaración.

    Un lector dio un ejemplo de un circuito de equidad (módulo VHDL) sin entrada de reloj al módulo. Este fue su contraejemplo para "probar" que se podían hacer circuitos sin relojes. Si se alejara de su módulo de igualdad al resto de su proyecto, encontraría el reloj dentro de su proyecto.

    El reloj no necesita estar en la FPGA, y no necesita ser administrado, pero estará presente. Por lo tanto, aunque el diseño asincrónico tiene un reloj "en el sentido convencional", no obstante, hay un reloj.

    Por ejemplo, una vez tuve la oportunidad de construir un policía de tráfico dentro de una FPGA que tuvo que arbitrar de varias fuentes que podían acceder y leer / escribir una tarjeta SD. La lógica FPGA era "asincrónica", por lo que se podría argumentar que no había reloj en el diseño. No estaría de acuerdo: cada una de las fuentes externas que querían acceder a la tarjeta SD tenía un reloj. Aunque es un diseño "asincrónico", seguía siendo un reloj.

    Puede que esto no haya sido un reloj "en el sentido convencional", pero de todos modos era un reloj.

    El único lugar donde el reclamo comienza a desmoronarse, que he visto hasta ahora, es en uso. La interacción con computadoras u otros circuitos electrónicos externos requerirá una lógica que coincida con el reloj de este circuito externo, pero los usuarios humanos difieren. Los usuarios pueden presionar botones y ver las salidas LED, y en tales casos probablemente no haya reloj. Sin embargo, en estos ejemplos todavía hay un momento en el que se validaron los datos y las condiciones iniciales, y otro tiempo después en el que se validaron los resultados. Entre esos dos tiempos, la salida lógica de la FPGA no está controlada y puede hacer cualquier cosa. En sí misma, esta situación crea funciones muy similares a un reloj, pero sin tener un intervalo de tiempo regular que defina cuándo las entradas son válidas y las salidas deben ser válidas.

    Entonces, a pesar de los argumentos que he leído en sentido contrario, seguiré manteniendo la declaración: "Siempre hay un reloj".

Isabella Ortiz
Isabella Ortiz

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *