Práctico con la nueva placa Arduino FPGA: MKR Vidor 4000

La-Tecnologia le dio un primer vistazo al Arduino MKR Vidor 4000 cuando se anunció. Arduino publicó uno de los primeros foros, ¡así que ahora finalmente tenemos una mano! Es temprano y la documentación todavía es un poco escasa, pero lo hemos encendido para examinar el tablero a través de algunos ejercicios de saludo. Este artículo echará un vistazo a lo que hemos podido averiguar sobre el sistema FPGA hasta ahora para ayudarlo a comenzar con el nuevo hardware.

Solo para refrescar su memoria, esto es lo que hay en el tablero de Vidor:

  • 8 MB de SRAM
  • Chip flash QSPI de 2 MB – 1 MB asignado para aplicaciones de usuario
  • Conector micro HDMI
  • Conector de cámara MIPI
  • Wifi y BLE con tecnología de dispositivo de la serie U-BLOX NINA W10
  • Interfaz MKR en la que todos los pines están alimentados por SAMD21 (CPU ARM de 32 bits) y FPGA
  • Conector mini PCI Express con hasta 25 pines programables usados
  • La FPGA (Intel / Altera Cyclone 10CL016) contiene elementos lógicos de 16K, 504 KB de RAM incorporada y 56 multiplicadores HW de 18 × 18 bits
  • Suena bien. Puede obtener más detalles técnicos sangrientos en Arduino e incluso hay un esquema (.zip).

    Documentación

    La documentación es, hasta ahora, muy difícil, pero el equipo está trabajando para cambiar eso a diario. Estos son los recursos que hemos utilizado hasta ahora (además del esquema):

    • Guía inicial
    • Un sitio de GitHub con tres repositorios: un ejemplo de E / S general en la FPGA, un ejemplo de video y un ejemplo simplificado que carga un flujo de bits desconocido (posiblemente predeterminado)
    • Un documento muy sin marcar sobre la codificación FPGA
    • El foro del MKR 4000
    • Además, Arduino lanzó recientemente un proyecto de FPGA de ejemplo para Quartus. Explicaré un poco lo que eso significa.

      Ponte en marcha con el IDE de escritorio de Arduino

      A pesar de la guía inicial, no parece que el IDE de la nube pueda utilizar las bibliotecas, por lo que seguimos las instrucciones para cargar el soporte de la placa beta para el MKR 4000 en nuestro IDE de escritorio. Tenga en cuenta que las instrucciones muestran el paquete de placa SAMD “normal”, pero en realidad desea la versión beta que dice que es para el MKR 4000. Si busca SAMD en el cuadro de diálogo Administrador de placas, lo encontrará (consulte la segunda entrada en la imagen de abajo).

      Capturamos las bibliotecas como archivos ZIP de GitHub y usamos la biblioteca de instalación de archivos ZIP sin problemas.

      ¿Qué aspecto tiene el Código?

      La parte más interesante de esta placa, por supuesto, es la inclusión de la FPGA, que nos dejó preguntándonos cómo se verá el código para el dispositivo. Al revisar el código, nos sentimos un poco consternados por la falta de comentarios en todos menos en el código JTAG. Decidimos centrarnos primero en el repositorio de VidorPeripherals y profundizamos en el archivo de encabezado para obtener algunas indicaciones de cómo funciona todo.

      Mirando VidorPeripherals.h, puede ver que hay algunos dispositivos de E / S interesantes que incluyen SPI, I2C, UART, lectura de codificador de cuadratura y NeoPixel. También hay algunos encabezados que no existen (y presumiblemente no obtendrán la definición para activarlos), así que no se entusiasme demasiado con algunos de los nombres de los archivos de encabezado hasta que se asegure de que realmente están allí.

      Entonces decidimos probar el código de prueba de muestra. La biblioteca proporciona un objeto FPGA global que necesita configurar:

// Let's start by initializing the FPGA
if (!FPGA.begin()) {
    Serial.println("Initialization failed!");
    while (1) {}
}

// Let's discover which version we are running
int version = FPGA.version();
Serial.print("Vidor bitstream version: ");
Serial.println(version, HEX);

// Let's also ask which IPs are included in this bitstream
FPGA.printConfig();

La salida de este código se ve así:

Vidor bitstream version: 1020107
number of devices 9
1 01000000 MB_DEV_SF
1 02000000 MB_DEV_GPIO
4 04000000 MB_DEV_I2C
6 05000000 MB_DEV_SPI
8 06000000 MB_DEV_UART
1 08000000 MB_DEV_SDRAM
4 09000000 MB_DEV_NP
11 0A000000 MB_DEV_ENC
0 0B000000 MB_DEV_REG

En muchos casos, los dispositivos proporcionados por la FPGA son bastante transparentes. Por ejemplo, aquí hay otro extracto del código de muestra:

// Ok, so we know now that the FPGA contains the extended GPIO IP
// The GPIO pins controlled by the FPGA start from 100
// Please refer to the online documentation for the actual pin assignment
// Let's configure pin A0 to be an output, controlled by the FPGA
FPGA.pinMode(33, OUTPUT);
FPGA.digitalWrite(33, HIGH);

// The same pin can be read by the SAMD processor 🙂
pinMode(A0, INPUT);
Serial.print("Pin A0 is ");
Serial.println(digitalRead(A0) == LOW ? "LOW" : "HIGH");

FPGA.digitalWrite(33, LOW);
Serial.print("Pin A0 is ");
Serial.println(digitalRead(A0) == LOW ? "LOW" : "HIGH");

Eso es bastante fácil y es bueno que los pines puedan ser utilizados por la CPU y la FPGA. No pudimos encontrar la documentación mapeando los pines, pero asumimos que vendrá.

También es fácil usar, por ejemplo, una interfaz serial adicional:

SerialFPGA1.begin(115200);
while (!SerialFPGA1);
SerialFPGA1.println("test");

Bitstream

Entonces, ¿dónde está el código FPGA? Que usted sepa, este es solo un nuevo Arduino con muchos dispositivos adicionales que se conectan con este misterioso objeto FPGA. El truco es que el código FPGA está en la biblioteca. Para ver cómo funciona, hablemos un poco sobre cómo funciona FPGA.

Cuando escribes un programa en C, la computadora realmente no lo mira, ¿verdad? El compilador lo convierte en muchos números que le dicen a la CPU que haga cosas. Los FPGA son iguales y diferentes a eso. Usted escribe su programa, generalmente en un lenguaje de proyecto de hardware como Verilog o VHDL. Lo compila en números, pero esos números no funcionan como CPU.

La mejor analogía que se me ocurre es que FPGA parece una de esas viejas herramientas electrónicas 100 en 1 de Radio Shack. Hay un conjunto de piezas en una placa y alguna forma de conectarlas con cables. Pon los cables en una dirección y tienes una radio. Dígalos de otra manera y tendrá un ladrón. Vuelve a arreglarlo y tendrás un detector de metales. Los números corresponden a cables. Realizan conexiones y configuran opciones en el circuito FPGA. A menos que haya construido una CPU, nada examina y actúa de acuerdo con los números como lo haría con una CPU.

Los números que salen de una herramienta FPGA generalmente se denominan bitstream. Alguien tiene que enviar ese flujo de bits a un FPGA como el Cyclone en el Arduino cada vez que se ejecuta. Ese alguien suele ser un dispositivo de memoria en la placa, aunque la CPU también puede hacerlo.

Entonces eso lleva a dos preguntas: ¿Dónde está el flujo de bits? ¿Cómo llega la FPGA?

La respuesta a la primera pregunta es sencilla. Si observa Github, verá en la biblioteca un archivo llamado VidorBase.cpp. Tiene las siguientes líneas:

__attribute__ ((used, section(".fpga_bitstream")))
const unsigned char bitstream[] = {
    #include "app.ttf"
};

Lo que esto significa es que si hay una matriz llamada bitstream, el enlace la colocará en una sección de memoria especialmente marcada. Esta matriz comienza con app.ttf, que es solo un archivo ASCII lleno de números. A pesar del nombre, no es una fuente TrueType. que significan los números? Es difícil de decir, aunque teóricamente podría revertirlo del mismo modo que podría desensamblar el código binario de una CPU. Sin embargo, es la configuración necesaria para realizar todas las llamadas a la biblioteca de las que acabamos de hablar.

La segunda pregunta de cómo llega a la configuración FPGA es un poco misteriosa. Hasta donde sabemos, el cargador de arranque comprende que los datos de esa sección deben copiarse en la memoria de configuración de la FPGA y realiza la copia por usted. No está claro si hay una copia en el flash principal y una copia en el flash de configuración, pero parece funcionar de forma transparente de todos modos.

Hay una suma de comprobación definida en el código, pero la cambiamos y todo siguió funcionando. Supuestamente, algún día, el IDE o el cargador de arranque se quejarán si tiene la suma de comprobación incorrecta, pero ese no parece ser el caso ahora.

Además, según el foro de Arduino, en realidad hay dos flujos de bits. Uno que lleva un poder que rara vez (si es que alguna vez) cambiarías. Luego hay otro incluido con la biblioteca. Puede hacer doble clic en el botón de reinicio para ingresar al modo de inicio y sospechamos que esto deja a la FPGA iniciada con el primer flujo de bits, pero no lo sabemos con certeza. En el modo de carga, el LED rojo a bordo tiene un efecto transpirable, por lo que puede saber que el doble clic funciona.

¿Qué pasa con mi código FPGA?

Esta no es una gran noticia si espera una forma fácil, similar a Arduino, de hacer su propio desarrollo FPGA en Verilog o VHDL. Intel le dará una copia de Quartus Prime que generará bitstream durante todo el día. Creemos, pero no estamos seguros, que el formato ASCII es solo una conversión en bruto de archivos binarios de los archivos de flujo de bits.

Muy recientemente, Arduino proporcionó un proyecto Quartus que crearía un flujo de bits. Esto proporciona algunas piezas clave del rompecabezas, como el archivo de límites, que permite al compilador FPGA encontrar las diferentes partes en el tablero.

Sin embargo, incluso con este proyecto, todavía tiene algo de ingeniería inversa factible si desea comenzar. ¿Por qué? Esto es lo que dice Arduino sobre la carga de su propio código FPGA (hemos agregado el énfasis):

Quartus producirá un conjunto de archivos en la carpeta output_files en la carpeta del proyecto. Para incrustar la FPGA en el código Arduino, necesita crear una biblioteca y preprocesar el archivo ttf generado por Quartus para que contenga los títulos apropiados requeridos por la infraestructura del software. Los detalles de este proceso se revelarán tan pronto como el flujo sea estable..

La programación de la FPGA se puede realizar de varias formas:

  • Destellando la imagen junto con el código Arduino creando una biblioteca que contiene el archivo ttf
  • Programe la imagen en RAM con un USB Blaster (para esto necesita montar el encabezado FPGA JTAG). esto se puede hacer de forma segura solo cuando SAM D21 está en modo de lanzamiento como en otras condiciones, puede acceder a JTAG y causar disputas
  • Programando la imagen en RAM con el USB Blaster de imitación con SAM D21 (este artículo está a la espera de ser lanzado)
  • Además, el propio repositorio dice que faltan algunas piezas clave hasta que puedan resolver los permisos o limpiar el código. Entonces, esto nos acerca, pero aún necesitaría invertir el encabezado de los ejemplos y / o descubrir cómo forzar el procesador de bus JTAG. La buena noticia es que parece que esta información está llegando, pero aún no está aquí.

    Por supuesto, necesitará comprender mucho más para hacer algo significativo. Sabemos que la FPGA está configurada en el modo de configuración AS. También le preguntamos a Arduino sobre la arquitectura del reloj de la placa y nos dijeron:

    [The CPU] tiene su propio reloj, que se utiliza para generar un reloj de referencia de 48 MHz, que se entrega a la FPGA (y que se puede quitar en cualquier momento para “congelar” el fpga). Además de este reloj de referencia, [the] FPGA tiene un oscilador RC interno que no se puede utilizar como [a] una referencia de tiempo precisa para problemas de tolerancia, pero utilizable si no desea [the CPU] producir el reloj de referencia.

    Por supuesto, la FPGA tiene varios PLL a bordo que pueden tomar cualquier reloj válido y producir otras frecuencias. Por ejemplo, en la aplicación de visión, demostró Arduino, el reloj de 48 MHz se convierte en relojes de 24 MHz, 60 MHz, 100 MHz y 120 MHz mediante PLL.

    ¿Mezclar y combinar?

    Una cosa decepcionante es que, al menos por ahora, no podrá mezclar y combinar diferentes bibliotecas FPGA. Solo hay un flujo de bits y no puedes unirte a ellos. Aunque los FPGA a menudo se pueden configurar parcialmente, esta es una técnica difícil. Pero nos sorprendió un poco que el IDE no entendiera cómo compilar bibliotecas con, por ejemplo, archivos de proyecto EDIF para IP que se compilarían todos. De esa manera, podría elegir el Arduino UART y mezclarlo con el módulo de salida La-Tecnologia PWM junto con mi propio Verilog o VHDL.

    Como las cosas están estructuradas ahora, tendrá un flujo de bits precompilado por otra herramienta (probablemente Quartus en el futuro previsible). Coincidirá con una biblioteca C ++ separada. Y aquí está. No importa cuánto FPGA quede o cuánto use realmente, usará todo para una biblioteca.

    Por supuesto, puede cargar otra biblioteca, pero reemplazará la primera. Por lo tanto, solo obtiene un conjunto de funciones a la vez y otra persona decide qué hay en ese conjunto. Si va a enrollar el suyo, tendrá que enrollar el suyo hasta el final.

    ¿Qué sigue?

    Todavía es temprano para Arduino Vidor. Esperamos obtener las herramientas y los procedimientos necesarios para eliminar nuestra propia configuración de FPGA. También sería genial si las bibliotecas de valores estuvieran disponibles en un formato de origen que incluyera Verilog HDL. El lanzamiento reciente de GitHub muestra lo suficiente, aunque no todos son ejemplos, probablemente sea suficiente si obtenemos el resto de la información.

    En cuanto a una interfaz más intuitiva, no sabemos si eso está en las cartas o no. No vemos muchas pruebas de esto, aunque las publicaciones en el foro de Arduino indican que eventualmente proporcionarán un “Ensamblador de IP” que le permitirá ensamblar diferentes módulos en un flujo de bits. No sabemos si eso solo funcionará con módulos “oficiales” o no. Sin embargo, sabemos que la comunidad de Arduino es muy ingeniosa, por lo que si no obtenemos un buen ecosistema, no nos sorprenderá que alguien más se dé cuenta. Multa.

    Por ahora continuaremos jugando con los flujos de bits existentes disponibles. También hay algunas buenas características nuevas en la CPU. Por ejemplo, puede mapear dos de los módulos seriales no utilizados. Existe una capacidad multitarea cooperativa habilitada por hardware. Si bien aparecerán más detalles sobre la FPGA, se lo haremos saber y si se entera de algo, asegúrese de dejar una palabra en los comentarios para que todos puedan beneficiarse.

    • Ostraco dice:

      Bien, ahora solo necesito encontrar un enrutador con un conector mini-PCI Express.

      • andarb dice:

        Hay muchas tarjetas de enrutamiento OpenWRT “DIY” disponibles con MPCIE. Les lanzamos algunas tarjetas wifi, en su mayor parte. Algunos tienen un PoE de lujo también disponible. Conozco algunas opciones de Compex, y probablemente algunas de motores de computadora, además del Chineseium general disponible en AliExpress.

    • rolfluc dice:

      Desafortunadamente, esta línea de Cyclone 10 no es compatible con PCIe. Además de ser un jefe para todos los que querían un software FPGA PCIe barato.
      Fuente: https://www.intel.com/content/www/us/en/products/programmable/fpga/cyclone-10.html

      • Austin S. dice:

        ¿Tiene lugares más específicos para la información a la que se refiere? Aunque puede que no haya un conjunto de pines dedicados para PCIe, debería poder usar un bloque de IP o intentar escribir uno. No creo que sea un conector M2 para facilitar (como el Electric Imp y el módulo RPI Computer con sus conectores).

        • HaxGrrl dice:

          No hay transmisores en la familia 10LP. Sin ellos, ni siquiera puede copiar una conexión PCIe.

      • Austin S. dice:

        ¿Tiene una fuente más específica para esto? Aunque puede que no haya un conjunto de pines PCIe dedicados, la belleza de los FPGA es que son la forma en que los planifica (tolerancias de voltaje y factores de forma). Debería poder descargar / comprar / escribir un bloque de IP que le permita crear una interfaz PCIe en la FPGA.

        No creo que este sea el caso de los “conectores prácticos”, como hemos visto con los módulos Electric Imp y Scratch Compute.

        • Mate dice:

          Consulte la hoja de datos de la familia 10LP. PCIe funciona a 2,5 Gbps o más, sin embargo, el estándar de E / S más rápido admitido por el dispositivo es de alrededor de 800 Mbps. Lo único para lo que puede utilizar este conector PCIe es una tarjeta SIM, comunicación por bus USB o SM.

        • Guerra dice:

          PCIe 1.0 transmite datos a una velocidad de 2,5 gigabits por carril por segundo. Con PCIe 3.0, ese número se disparó hasta 8 gigabits por carril por segundo.

          A menos que de alguna manera acelere mágicamente su FPGA a 2.5 Ghz u 8Ghz, tendrá que confiar en radios multitarea especiales que le devolverán un mínimo de $ 300 por FPGA.

          • invitado dice:

            Sí, pero creo que puedes conseguir algunas radios por menos de $ 300. Por ejemplo, una serie Spartan 6 LXT a partir de $ 58 en digikey. No hice ningún trabajo en PCIe FPGA, pero solo recordé que estaban disponibles en un proyecto en el que estaba trabajando que usaba una serie Spartan 6.

            • Mate dice:

              Artix 7 parece un poco más barato. Creo que con los fabricantes de PCB y FPGA baratos de hoy disponibles con importantes descuentos en Aliexpress, debería ser posible armar un proyecto de juguetes PCIe por menos de $ 100.

        • Jay Carlson dice:

          Austin, aunque lo que está diciendo es cierto sobre buses digitales simples de baja velocidad, los FPGA requieren radios analógicos (y a menudo bloques de IP rígidos) para interactuar básicamente con cualquier interfaz serial rápida, incluyendo PCI Express, video SDI, Ethernet, Fibre Channel, USB y muchos otros. En lugar de gastar en la belleza de los FPGA con una confianza molesta, tal vez debería sentarse y realmente desarrollar un proyecto práctico en uno primero.

    • Clovis Fritzen dice:

      Cosas hermosas !. Como el Arduino Zero en el momento del lanzamiento (no tenía información disponible y contaba con poco apoyo de la comunidad); Mejorará con el tiempo a medida que personas como Sparkfun y Adafruit comiencen a escribir ejemplos para él. Esperando (a menos que quieras enviarme este foro, en cuyo caso podría ayudar a hacer algún código jajaja)

      • Perro espacial dice:

        Adafruit y sparkfun ahora tienen más probabilidades de diseñar y publicar sus propios tableros que la base de un nuevo producto arduine. Arduino 101 no estaba documentado y no era compatible con las bibliotecas básicas en el momento del lanzamiento, por lo que falló. Espero que estas ferias sean mejores, pero arduino necesita invertir en sembrar la comunidad con bibliotecas, documentos, videos y ejemplos.

        • Vadear dice:

          Arduino 101 funcionó porque Intel medio atacó todos sus productos y luego los mató cuando fallaron en lugar de invertir el esfuerzo para solucionar las quejas obvias que tenía la gente.

          • Perro espacial dice:

            No creo que fuera posible obtener un cable de abril para que i2c funcione de manera confiable en la arquitectura 101. al menos en ese momento estaba tratando de integrar mi proyecto de escudo para respaldarlo. Arduino saltó a la cama con información y permitió que su marca se asociara con la mitad de un esfuerzo. Con suerte, ambos aprendieron de la experiencia y que el MKR 4000 evita estos problemas.

            Arduino original era el único juego en la ciudad cuando apareció la placa original. pero hay muchas placas FPGA de conteo de puertas baratas por ahí.

        • bufferscotch dice:

          Como ocurre con la mayoría de la familia Arduino jejeje.
          Me gusta arder.

      • METRO dice:

        Me resisto por la inevitable (y mucho mejor) tabla basada en Icestorm.

        ¿Puedo cargar solo una de un conjunto de imágenes fabricadas para la FPGA? Eso simplemente no volará. Con algo basado en Icestorm, puedo cargar cualquier diseño que quiera. Estoy convencido de que dado un tablero FPGA que es capaz de entretener con videos (pero limitado a un conjunto de diseños de cookies) y un tablero que me permite dominar una FPGA menos capaz, aquella en la que puedo jugar. gana manos después de que la exaltación desaparece.

        Simplemente pegue ICE40 con Atmega y pídale al gestor de arranque que cargue el flujo de bits desde la FPGA o desde un flash interno (si hay suficiente espacio en el micro seleccionado) o desde un flash espía. Habrá algunos problemas divertidos para la experiencia del usuario, pero todo es perfectamente factible. (https://store.steampowered.com/app/576030/MHRD/ existe, finalmente (¡con soporte para Linux!))

        Ahora estoy tentado a simplemente salir y crear un módulo de plataforma o algo que pueda compilar código C para Atmega y verilog para FPGA, luego vincularlo y cargarlo. Irónicamente, las herramientas para tormentas de hielo en sí mismas son las que probablemente estén un poco más maduras. La única parte con la que podría tener problemas es proyectar una tabla alrededor del ICE40, que obedece las reglas de diseño y no será una caseta para perros completa a velocidades más altas. (porque de alguien querrá empujar el límite) Incluso eso probablemente podría tropezar y volverme medio decente.

        Incluso puedo solucionarlo si creo algo similar a mi software HX8K existente …..

        • Max dice:

          Se cumplió su deseo, por los mismos $ 50 que incluso el Vidor: aquí está la nueva placa “Copper” de Alchitry, basada en ICE40 con el apoyo de IceStorm: https://www.kickstarter.com/projects/alchitry/alchitry-digital- project -simplificado

        • HaxGrrl dice:

          ¿Por qué IceStorm es un requisito para ti? Quartus está disponible de forma gratuita, se ejecuta en Linux y puede crear absolutamente cualquier imagen FPGA que desee.

          • METRO dice:

            La barra de herramientas de IceStorm tiene varias ventajas:
            1) código abierto, que permite la portabilidad a varias plataformas
            2) un entorno de desarrollo liviano, que requiere solo un puñado de herramientas de línea de comandos (¿cuántas dependencias crees que tiene la GUI de quartus? ¿Cuánto quieres apostar a que eventualmente tendrá una dependencia difícil en systemd?)
            3) código abierto, que permite una mejor integración de las herramientas en el flujo de trabajo o elimina funciones innecesarias.

            Necesito practicar algunos estándares porque ahora me pregunto qué tan ligeras son las herramientas.

            Una vez intenté armar una imagen ESP8266 con una copia de un micrófono y un punto de acceso / servidor de sitio web que alojaba un terminal de página web para desarrollarlo. (¡y tal vez incluso algo de documentación!). Esto significaría que podría darles una a los estudiantes y no necesitarían nada más para comenzar a jugar con ellos.

            Si las herramientas Icestorm son lo suficientemente ligeras, entonces podría ser posible / costoso integrar la FPGA con el coraje de un enrutador barato que puede proporcionar un entorno de desarrollo minimalista.

    • perfumista dice:

      ¿Cómo se alinea la propiedad intelectual, especialmente la P de propiedad, con el código abierto?
      El mundo FPGA IP no es tan conocido por su apertura … y ni siquiera he usado la palabra “cadena de herramientas” todavía.

      • HaxGrrl dice:

        Al igual que con los programas. Hay muchos núcleos IP de código abierto y muchos cerrados.

      • Vadear dice:

        Hay muchos núcleos IP de código abierto (opencores.org), pero generalmente no se obtiene el código correspondiente para aquellos que vienen con el desarrollo de FPGA o productos comerciales.

    • párpados párpados dice:

      ¿Ni una palabra sobre el barco ESP32? ¿Qué pasó con este blog? 🙂

      Como se anunció aquí (en los comentarios, no en TFA) por los Arduinos en mayo pasado, los diagramas confirman que cada pad del módulo inalámbrico NINA-W102 está conectado a la FPGA, excepto 6 de ellos, que aún son accesibles a través del PCIe. . conector (bus de gestión 4 ADC / GPIO + RMII).

      Sería posible tomar su propio firmware, compilado con Arduino IDE o ESP-IDF, para su ESP32, por lo que un esquema completo del módulo sin duda sería útil para eso, una vez publicado.

      • Al Williams dice:

        Bueno, el módulo inalámbrico se menciona en la primera lista de viñetas, pero el problema de esta publicación fue cómo obtenemos la FPGA, no cómo programar el WiFi incorporado.

        • párpados párpados dice:

          A, gracias por esta práctica (las publicaciones de tu blog son totalmente respetadas y apreciadas en general), eso fue un poco broma, y ​​sinceramente Fuera de línea, solo se encuentra alguna información adicional en los esquemas de esta placa para las partes interesadas, o simplemente desconocen un módulo inalámbrico “ESP32-inside”. ¡Hola!

          • Al Williams dice:

            Bueno, es cierto que el módulo es efectivamente ESP32, así que me alegra que lo hayas señalado. Mi objetivo es poner mi propio Verilog en la FPGA;)

            • párpados párpados dice:

              Sí, esto fue muy claro en su artículo, y estamos todos con usted 🙂 Nos alegra que haya compartido su investigación sobre la situación real con lo que se ha lanzado hasta ahora, le preguntó a Arduino cómo debería funcionar, claramente faltan algunas piezas , pero felicito su comunicación honesta sobre el tema hasta ahora.

              Probablemente para atraer a un público más amplio, la idea inicial parece bitrivers listos para usar (“escudos virtuales”), de los cuales puede ser un usuario que los selecciona o un desarrollador que los comparte (como las bibliotecas de Arduino) y muchos HaD Los lectores han ganado No estar tan contentos con una FPGA de cadena de herramientas “basada en una fuente cerrada con interfaz gráfica de usuario en la nube” que debe proponerse para ella …
              Como recordatorio, aquí está lo que está a cargo de los ingenieros responsables y responder preguntas sobre el foro dedicado de Arduino (el “Darius” el “Brian” entrevistado en Maker Fair) nos dijo en comentarios anteriores aquí, después del anuncio / presentación de mayo en La-Tecnologia:

              “Como he escrito en otra parte, la ingeniería inversa de una herramienta de compilación fpga no es fácil y solo funciona para dispositivos pequeños y simples. Quartus es una muy buena herramienta, pero nuevamente no pediremos a los usuarios que la instalen. La compilación se llevará a cabo en la nube, por lo que podrá producir la imagen fpga incluso con una Chromebook o posiblemente un teléfono móvil.
              La GUI bloqueada que publicamos es mucho más simple que las del software de los proveedores de fpga, ya que intentamos facilitar el ensamblaje de sistemas, ocupándonos de la complejidad que hay detrás. “

    • Bill Sussman dice:

      ¿Se puede simplemente programar el flujo de bits en la memoria flash de configuración? Mirando el diagrama, pensé que sí, pero luego leer esto me hace pensar de manera diferente.

    • Okbitsvasta dice:

      OT: ¿Dónde compro esa regla?

      • Al Williams dice:

        El mío es un regalo de Mouser. Pero se parece a https://www.adafruit.com/product/1554 excepto por el marcado anterior. Y para dar el mismo tiempo, tengo un bonito rojo más grande de DigiKey. https://www.digikey.com/product-detail/en/digi-key-electronics/PCB-RULER-12INCH/PCB-RULER-ND/5767550

        • Electrónica de Jotrin dice:

          tal vez también puedas encontrar las piezas en este
          https://www.jotrin.com/product/

    • ESTOLA dice:

      Cita: “La FPGA (Intel / Altera Cyclone 10CL016) contiene elementos lógicos de 16K, 504 KB de RAM incorporada …”

      No hay “KB”

      Los multiplicadores son:
      “K” minúscula: k = 10 ^ 3 o 1000 y es un estándar SI decimal.
      “K” mayúscula y “i” minúscula: Ki = 2 ^ 10 o 1024 y es una unidad binaria que no es un estándar SI.

      Las unidades son:
      “Bit” minúscula: bits, la “b” minúscula se utiliza a menudo para los bits, pero no es en absoluto estándar
      “B” mayúscula: bytes (8 bits y ninguna otra longitud de palabra)

      Entonces las expresiones correctas son:
      kB – 1000 bytes
      KiB – 1024 bytes
      kbit – 1000 bits
      Kibit – 1024 bits

      La FPGA es un 504 Kibit (bit de quilla binario) de RAM de bloque RAM embebida (BRAM) organizada como 56 bloques de 1024 x 9 bits.

      Libere incluso los malentendidos de la hoja de datos expresando esto como “Kb” en lugar de Kibit.

      • ESTOLA dice:

        La FPGA es 504 Kibit (bits de kilogramos binarios) de RAM incorporada Bloque RAM (BRAM) organizados como 56 bloques de 1024 x 9 bits.

        Libere incluso los malentendidos de la hoja de datos expresando esto como “Kb” en lugar de Kibit.

        • Max dice:

          Si bien este sombrero “repugnante y pedante” funciona: pagar algún tipo de transporte tendría que estar involucrado …

      • Al Williams dice:

        Tienes razón, son piezas. Debo admitir que comencé con una copia / pegado de la página del catálogo de Arduino (https://store.arduino.cc/usa/arduino-vidor-4000 segundo párrafo bajo Descripción general) porque no quería cometer un error. Notarás que ellos también lo tienen. Y en mi cabeza lo leo a pedazos 😉

    • ESTOLA dice:

      No llego a donde se supone que debe encajar esto en el mercado.

      Usan FPGA, que es lo suficientemente grande para tareas bastante complejas que procesan mucha información y, sin embargo, no hay entradas de datos realmente altas que no sean una cámara ni una velocidad de datos alta que no sea HDMI.

      Cuando se trata de educación, debería promover el aprendizaje HDL, pero la inclusión de SDRAM en lugar de SRAM se trata más de conectar módulos HDL en lugar de escribir HDL. Para la educación, habría mucha más variación de dispositivos de entrada y salida y, sin embargo, esto no tiene nada, ni DAC, ni ADC, ni otro IO que no sea una cámara IO digital y HDMI.

      Sería genial para el procesamiento de imágenes, pero eso no es un problema para principiantes y Arduino lo era para principiantes.

      El sistema de escape no es lo suficientemente flexible para usar varios módulos juntos, por lo que cualquier escudo tendría un propósito particular.

      Podría tener algunos usos como navegación y prevención de colisiones para un quadcopter o algo similar, pero el silicio es demasiado pequeño para algunas redes neuronales serias, por lo que te quedan algoritmos que serían mejores domos con un microcontrolador más rápido, más barato y menos utilizado. . poder.

      Tal vez la entrada de gestos, pero estas no son cosas para “principiantes”.

      • Jon H dice:

        La CPU ARM en la placa tiene 7 entradas ADC y 1 salida DAC, y la comunicación entre la CPU y la FPGA es presumiblemente “fluida”, por lo que presumiblemente el ARM funcionaría como intermediario. ¿Sería lo suficientemente rápido para algunas aplicaciones FPGA? Probablemente no. Pero probablemente sería lo suficientemente rápido para algunas aplicaciones.

    • halherta dice:

      Todavía tengo que ver cómo este negocio de FPGA es más que otro hardware engañoso que será olvidado por completo dentro de un año.

      • Bill Sussman dice:

        jajaja

      • ESTOLA dice:

        FPGA y sus predecesores, Gate Array Logic GAL, Programmable Array Logic PAL, CPLD de dispositivo lógico programable complejo, han evolucionado durante mucho tiempo.

        La FPGA moderna ahora puede incluso cargar bloques definidos de RAM serial sobre la marcha. El próximo desarrollo será la capacidad de la FPGA para diseñar otros bloques durante el vuelo sin que estén predefinidos. Esto abrirá un nuevo camino para las redes neuronales.

        Sin duda, tienen algunas habilidades únicas, especialmente para el procesamiento en paralelo.

        Ciertamente, también tienen algunas desventajas como el costo y el alto consumo de energía.

        Por lo tanto, ciertamente no son una tecnología milagrosa, pero hay muchas tareas en las que FPGA es la solución obvia y única real.

        Los fabricantes de FPGA han visto el éxito de otras plataformas como Arduino.

        No hay nada espectacular en la serie ATmega de 8 bits. El éxito de Arduino ha sido el IDE simple y la comunidad de contribuciones de código fuente abierto.

        Las transiciones FPGA eran costosas IDE de jardín amurallado e IP de código cerrado.

        Ahora los fabricantes de FPGA están tratando de obtener el apoyo de la comunidad detrás de sus productos.

        Así que FPGA existirá durante mucho tiempo, sin embargo, a esta placa Arduino / FPGA en particular realmente le falta el signo de lo que mi necesidad y necesidad es un nivel principiante y una comunidad de código abierto.

        Tal vez veamos otro tablero mejor orientado en el futuro.

        • halherta dice:

          Los FPGA son sin duda una tecnología asombrosa. Simplemente no veo cómo la multitud de arduine puede programarlos / usarlos; típicamente artistas y aquellos que tienen poco o ningún conocimiento de Electrónica y programación (incluso menos hardware de programación).

          Dudo que vaya mucho más allá de usar código arduino para descargar mapas de bits prefabricados en la FPGA que facilitan proyectos predeterminados como dispositivos periféricos, vista de computadora, etc. También dudo que Arduino se esfuerce seriamente por desarrollar cualquier lenguaje HDL simple que sea utilizado por los novatos en el diseño de hardware.

    • Clemens dice:

      Dudo que se pueda acceder fácilmente a los FPGA y sus lenguajes de “programación”, así como a los microcontroladores a través de la plataforma Arduino. Para mí, un jugador bastante avanzado con mucha experiencia pero sin conocimientos de ingeniería, tratar de entrar en el tema todavía se siente muy difícil, incluso con las explicaciones en el sitio web de Arduino … casi se siente como si estuviera tratando de “obtener ”Computadoras cuánticas, o algo así. … sin embargo, es bueno que lo estén intentando. Tal vez lo descubra cuando haya ejemplos simples que pueda simplemente encender el problema e intentar “aprender haciendo”.

      • Al Williams dice:

        Tal vez intente esto: https://la-tecnologia.io/list/160076-fpga-tutorials

        Siempre le digo a la gente que es como andar en bicicleta o atarse una corbata. Parece muy difícil hasta que puedes hacerlo y luego no parece tan difícil. Ahora, algunas cosas que quieres hacer con FPGA son difíciles, al igual que saltar una bicicleta sobre 3 cuerpos de autobús escolar con 6 anillos de llamas es difícil incluso si sabes andar en bicicleta.

      • Christophe Cattelain dice:

        En febrero, en FOSDEM, comenzamos a hablar sobre “FPGA para niños”: https://fosdem.org/2018/schedule/event/cad_os_fpga/

    • Luke Weston dice:

      Simplemente no entiendo para qué sirve. ¿Cuál se supone que es el nicho?

      No es una herramienta para aprender habilidades reales de desarrollo de FPGA a menos que pueda escribir su propio VHDL / Verilog y sintetizarlo en el FPGA.

      • Al Williams dice:

        Supongo que no están muy interesados ​​en que USTED escriba VHDL / Verilog. Quieren proporcionarle módulos que le permitan personalizar su placa. Esta es una forma común en que muchos usuarios comerciales usan FPGA. Compre un montón de bloques de IP y coordínelos y cree un chip personalizado, especialmente una CPU, con la combinación perfecta de E / S para sus aplicaciones. Esto es más común de lo que podría pensar, donde un “usuario de FPGA” realmente solo junta piezas y las herramientas de “diseño mixto” de los proveedores reflejan esto.

        Entonces puedo ver alguna herramienta de Internet futura en la que diga “Hmmm, me gustaría 3 salidas PWM en estos pines y 2 puertos seriales adicionales en estos pines y un temporizador con un reloj de 4 MHz en esta interrupción”. Y descarga un flujo de bits y una biblioteca que agrega a su proyecto IDE y eso es todo.

        Pero estoy seguro de que algunos de nosotros atacaremos la FPGA y ofreceremos alternativas.

        Todo esto es solo mi predicción, por supuesto.

        • párpados párpados dice:

          Como Al y otros, espero que eventualmente seamos “dueños” de toda la cadena para esto, pero la herramienta de Internet no es una predicción, fue anunciada por su ingeniero (ver mi comentario anterior). Cuando habla de la “GUI bloqueada”, fácilmente podemos pensar que seremos capaces de seleccionar bloques funcionales (como dijiste PWM, HDMI, etc …) y vincularlos gráficamente, con una herramienta probablemente cercana a un PSoC simplificado. Diseñador. .

          Ahora bien, si nos fijamos en los orígenes de Arduino, el ecosistema fue concebido por “artistas” (estudiantes de enseñanza / profesores) como una solución para la electrónica simple relacionada con trabajos “creativos”, un poco como un DMX personalizable sin la necesidad de un costoso teatro especializado. cajas y un escritorio: soporte para relés controlados por software, iluminación e interacción (interruptores, sensores …), de hecho una extensión del “mundo real” para su herramienta favorita, Processing (de la cual Arduino heredó su GUI hasta ahora, los botones “Reproducir” y “Pausa”).

          Primero, fue una buena oportunidad para deshacerse de los PIC protegidos contra copia (probablemente viejos y gruñones) del programa friki y tragarse la mitad del presupuesto para su magia negra 🙂 Y resultó ser un buen punto de partida y luego los ingresos para el negocio de Arduino. En este dominio de gran financiación pública, es más fácil justificar el gasto en hardware de alto margen cuando tiene una marca y es reconocible como una herramienta educativa. Estas personas generalmente son expertas en gastar dinero en otros con una responsabilidad mínima o preocupaciones de costo real, así como evangelistas del mercado de la educación (con la habitual autojustificación de “tómalo de los técnicos abarrotados y tráelo a las masas”)) por lo que probablemente sigan siendo uno de los principales objetivos aquí.

          Este nicho no ha cambiado realmente, ahora muchos “artistas electrónicos” son solo algunos VJs institucionales gloriosos que aman el movimiento, la realidad aumentada, los efectos en tiempo real y las interacciones de video, por lo que hemos tenido proyectos basados ​​en OpenCV en todo el ( artístico) durante años, no siempre se ve tan bien con bibliotecas mal compuestas y no optimizadas en Rapsberry Pi …
          Pero ahora están fantaseando con la nueva “magia negra” de moda: FPGA, y creo que el software para esta placa tratará de proporcionarles procesamiento de video / audio / sensor en tiempo real sin la necesidad de jugar con el (sucio y confuso)) cosas de bajo nivel, como están acostumbradas en las bibliotecas.

          • Max dice:

            Espera, ¿puede Arduino hacer un flash controlado por programa? ¡Mierda, tengo que pensar en esto ahora …!

            • macona dice:

              Si. Una vez y solo una vez.

        • párpados párpados dice:

          Recientemente noté otro comentario explicativo publicado aquí hace unas semanas, todavía por Dario Pennisi y confirmando esta vista (RTL significa “Nivel de transferencia de registro”, que se refiere a lenguajes de descripción de dispositivos como VHDL y Verilog):

          “… la placa está dirigida principalmente a usuarios existentes de Arduino. Nuestra idea es eliminar la necesidad de codificación RTL proporcionando múltiples bloques. La idea que ofrecemos le permite beber y colocar bloques en su sistema en un chip sin la necesidad de tener conocimientos de RTL. Básicamente el concepto es que esta placa te permite adaptarla a cualquier aplicación, eliminando las limitaciones de los periféricos que tienes en el microcontrolador.

          Por supuesto, estaremos encantados de ver a la gente contribuir y escribir bloques de IP RTL y estoy seguro de que llegará, pero de nuevo estoy seguro de que la mayoría de la gente usará bloques como hoy con las bibliotecas de software. “

          De manera más similar, en el primer informe de La-Tecnologia, en un comunicado de prensa:
          El MKR Vidor se lanzará con integración al ecosistema Arduino Create, que incluye un editor visual para trabajar con la IP precompilada para la FPGA. Eso no significa que no pueda simplemente conectar su propio VHDL a esta placa y ejecutarlo; eso todavía es posible. Pero a Arduino le gustaría crear un sistema donde cualquiera pueda mover bloques de IP con una herramienta fácil para principiantes. “

    • Regiscruzbr dice:

      Me alegra ver lo que la gente hará en el mundo impreso en 3D con él.

    • Electrónica de Jotrin dice:

      eres tan grandioso, honro tu conocimiento profesional

    • ddd dice:

      volcán funciona?
      corriente de tensión u otra biblioteca NN funcionando?
      raytracing (cómo funciona povray)?

    • Glenn Jones (@ a2retro) dice:

      SRAM debe cambiarse a SDRAM al principio del artículo.

    • hámster dice:

      Todavía no he mirado el foro, pero ¿alguien sabe si hay un “escudo” o “sombrero” estándar de mpcie similar a este? Aunque no se pueden usar calles de computadora, tienen pares LVDS conectados al conector, por lo que es posible un adaptador mpcie a sata …

    • wazhar dice:

      ¿Cómo lo opera? Acabo de recibir el dispositivo, sin cable incluido. La especificación dice que el voltaje de funcionamiento es de 3.3V ¿El enchufe USB podría dañar el dispositivo?

    • Dario Pennisi dice:

      Hola a todos,
      Perdón por la llegada tardía … Solo quería agregar mis 2 centavos:
      1) Estamos un poco atrasados ​​en la documentación, pero todo se publicará. Lleva algo de tiempo pulirlo y estamos muy contentos de ver que tanta gente está interesada en el desarrollo de fpga, pero como dije en la primera entrevista, primero queremos brindarles a los usuarios de Arduino una experiencia perfecta con una placa que permita extender el conjunto periférico del microcontrolador. Aunque los FPGA son geniales, sabemos que pueden ser muy difíciles de manejar y no animamos, al menos por ahora, a la gente a desarrollar RTL.
      2) ya hemos lanzado la mayoría de los códigos fuente de bloques de IP para cualquiera que quiera verlos y es un poco compatible con alguien que ya conoce fpga. Quartus crea un archivo web directamente, pero necesita un procesamiento posterior y en el foro di algunas pistas al respecto. De todos modos, sugiero que espere un poco ya que se lanzará el flujo completo de fpga junto con todas las herramientas necesarias.
      3) Modificamos un cargador Arduino para poder distribuir código entre Sam y el flash externo fpga. El archivo ttf contiene una imagen fpga junto con datos adicionales como el código central del programa y otros datos (por ejemplo, mapas de bits, sonidos, etc.). El encabezado permite verificar la integridad del código e identifica en qué lugar de la memoria flash se cargará la sección. Pronto se lanzará una herramienta que le permite combinar fpga y recursos adicionales con el flujo de fpga
      4) hemos creado un mecanismo de llamada procedimental remota que permite utilizar bloques fpga-ip como aceleradores. Todo sucede a través de un puente JTAG que le permite a Sam acceder al bus interno y con especificaciones API en Sam y un kernel suave, por lo que llama a una función en Sam y se ejecuta en fpga
      5) se acerca la herramienta en línea. Te permitirá ensamblar y parametrizar bloques de ip para que puedas decidir qué necesitas para tu aplicación. Esto significa que probablemente ya no necesitará elegir la placa con el mejor compromiso para su aplicación, ya que puede ensamblar su sistema en un chip exactamente como lo necesita. Los bloques de IP los proporcionaremos nosotros, pero, por supuesto, le daremos a cualquiera la opción de agregar más bloques a las bibliotecas y apoyar eso, tanto como creemos firmemente en la apertura y la colaboración.
      6) para aquellos que se dirigen a mini PCIe, como dije en todas partes, el estándar permite múltiples pines y, aunque no admitimos PCIe, tenemos USB allí y muchos pines fpga utilizables para aplicaciones no estándar. La conclusión es que puede conectar la placa a sbc o simplemente crear una placa rota o expansión que lleve muchos más pines fpga y en un formato más pequeño que los conectores mkr.
      Entre los mini PCIe se encuentran los conectores de alta densidad más baratos …
      6) para aquellos cuya “religión” prohíbe el uso de un programa cerrado, lamento
      Elegimos Intel porque quartz tiene probablemente el mejor rendimiento sintético (compatible con todos los gustos de systemverilog con una cobertura casi completa de primitivas de lenguaje) y proporciona herramientas adicionales como síntesis avanzada (cy opencl) y un conjunto de herramientas robusto y confiable. Sí, puede optar por utilizar una fuente gratuita y sí, puede procesarlo incluso mucho después de que un producto se haya vuelto obsoleto, pero una vez que lo obtiene de forma gratuita, es confiable, se mantiene y se actualiza constantemente, bueno, no veo el punto, pero seguro que soy demasiado ciego para ver cómo ice40 con un compilador realizado a la inversa que admite solo unos pocos dispositivos se puede comparar con Intel FPGA y quartz. Ah, no puede ejecutar un cuarto con un enrutador barato, pero probablemente su teléfono inteligente tendrá la capacidad de ejecutarlo fácilmente (en términos de CPU y memoria) y ciertamente no podrá ejecutar una icestorm en Commodore 64 o a una calculadora … Solo para decir …

      Por cierto, gracias por el excelente artículo y todo el interés de los lectores. Si necesita más información, simplemente pregunte, no es necesario realizar ingeniería inversa … Estamos orgullosos de ser de código abierto y un poco avergonzados de quedarnos con la documentación, pero asegúrese de que estamos en ello.

      Dario Pennisi

    • Wael dice:

      ¿Alguien sabe qué pines están en arduino MKR 4000 “LVDS”?

América Aguilar
América Aguilar

Deja una respuesta

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