¿Cómo calcularías el conjunto de Mandelbrot en hardware? [cerrado]

Me gustaría construir un pequeño circuito novedoso que calcule el conjunto de Mandelbrot y lo muestre en una matriz de LED. La matemática mínima de punto flotante no necesariamente requeriría números complejos (solo calcule X y y por separado) y el número total de cálculos individuales de z norte + 1 = z norte 2 + C estaría por debajo de un millón, por lo que incluso algo tan lento como diez millones de FLOPS por hora estaría bien en este caso. En este nivel, parece que las matemáticas de 16 bits son casi suficientes con una programación inteligente, 32 bits son suficientes para que funcione. Los flotadores en lugar de los enteros harían la vida mucho más fácil, pero no son necesarios.

Creo que una Raspberry Pi sería una exageración al igual que un Arduino de gama alta, por lo que tal vez un Uno o un Basic Stamp II con su coprocesador FP .

Eso agota mi conocimiento de las posibilidades, pero debe haber otras opciones por ahí. ¿Cómo harías para diseñar un pequeño circuito para hacer esto? ¿Qué tipo de circuito usarías?

Pregunta de fondo y la primera imagen publicada del conjunto de Mandelbrot (1978):

ingrese la descripción de la imagen aquí

¿Está planeando ejecutar Python o recodificará en C? Si es Python, quédese con un RPI.
@DoxyLover no, en absoluto. Aprenderé lo que sea necesario para codificar en la plataforma recomendada. Python aquí fue solo para mostrar cómo se generó mi imagen calculada y para dar una impresión general de cómo podría ser un cálculo. No sé cómo escribir un pseudocódigo adecuado .
Votante cercano; Estoy buscando un conjunto de algunos chips pequeños que puedan hacer este cálculo para producir una matriz de valores binarios para impulsar una matriz de LED. El metro × norte El controlador LED debería ser bastante estándar, por lo que no he preguntado sobre esa parte. He agregado material adicional porque no siempre puedo estar en línea para responder a las solicitudes de información adicional, y sí, algo de eso es matemática, pero busco una recomendación para un conjunto de chips para implementar este circuito.
No has dicho qué tan rápido lo quieres. Básicamente, cualquier cosa funcionará si espera lo suficiente: aquí hay una Xerox Alto que lo hace con lógica TTL: righto.com/2017/06/one-hour-mandelbrot-creating-fractal-on.html
@ pjc50 seguro que lo hice! "... así que incluso algo tan lento como diez millones de FLOPS por hora estaría bien en este caso". Está bien, echaré un vistazo, pero es una computadora completa y estoy buscando solo unos pocos chips, suficientes para calcular esta matriz de LED de aproximadamente 35x75. Estoy buscando algo mínimo y pequeño (complejidad, no tamaño físico), así que lo antiguo definitivamente funciona, ¡gracias!
.. así que las opciones que consideraría para esto son PIC32 (sin punto flotante, pero DSP para hacer punto fijo en paralelo), o ARM Cortex M4 con FPU, por ejemplo, STM32F4. También sugeriría mirar la fuente de FRACTINT: nahee.com/spanky/www/fractint/getting.html
.. o Atmel incluso lo tienen como programa de ejemplo asf.atmel.com/docs/latest/uc3c/html/…
@ pjc50 eso es mejor que envolver con alambre un montón de cambiadores y registros TTL. Los revisaré, gracias. Por cierto, estoy pidiendo estrictamente las fichas aquí. Aprenderé cualquier programación requerida, no necesito recomendaciones de programación.
Solo señalo que cada chip AVR (hasta donde yo sé, es todo, gracias a una biblioteca) puede hacer divisiones y aritmética FP (punto flotante) (FPU), pero no hay un comando ensamblador para la división, y no hay FPU para tratar con la aritmética FP. Todo se hace en software, no hay una solución de hardware para la aritmética FP en Arduinos. Y estoy muy seguro de que puede incluir una biblioteca similar para picXX o cualquier otro microcontrolador. mira este enlace
@HarrySvensson Ya veo lo que quieres decir: ¿esto incluye el tinyAVR de seis pines ? De alguna manera, esa imagen realmente me atrae (¡no importa el soporte requerido para obtener y sacar información)! Esta tarea probablemente también se pueda realizar con precisión fija, según la prueba.
Hmmm, no estoy 100% seguro de si funcionará con todos los tinyAVR, algunos solo tienen flash 512B, puede ser difícil encajar todo en eso. Y perdón por hacer esta pregunta, pero ¿por qué no puede simplemente almacenar la imagen de mandelbrot en una tabla de búsqueda? ¿O vas a hacer una animación megalenta súper tonta haciendo zoom para siempre?
@HarrySvensson lo entendió. La forma del conjunto de Mandelbrot nunca se vio realmente hasta que se pudo calcular, y luego hasta que alguien realmente lo hizo. El circuito de novedad del que estoy hablando sería quizás una ilustración de cómo han cambiado las cosas en 40 años. Por lo tanto, me quedo con el mismo espacio de cuadrícula que se usó en la primera visualización y una matriz de LED de aproximadamente 35x75.
No necesita cambiar el espaciado de la cuadrícula si usa una tabla de búsqueda. Solo necesitarías 35x75 bits => 35x80 bits => 35x10 bytes => una lista de 350 bytes. Pero no importa ;) Asumo que obtuviste todas las respuestas que necesitas ;) Además, estoy muy seguro de que un tinyAVR que tiene flash de 2kB podría caber en la biblioteca FPU sin ningún problema + el tuyo código. Siempre y cuando use atmelstudio como su entorno de codificación... El IDE de Arduino inyecta tanta basura extraña en los controladores...
Creo que la única pregunta aquí es "¿Por qué?". ¿Por qué luchar para hacerlo con un "pequeño micro"? Tiene una gran variedad de LED, por lo que la energía que consume el micro no es un problema y también el espacio que ocupa. Así que relájate y hazlo con un micro potente con el que te sientas cómodo programando. También considere que seguramente agregará funciones tan pronto como lo haga funcionar. ¡Ve por la exageración!
@carloc No estoy de acuerdo con que esa sea la única pregunta, pero es una pregunta. Puede mirar nuevamente este comentario anterior, o nuevamente la parte de la pregunta donde dice "(un poco más de fondo )" y los comentarios allí.
1. Los comentarios son para aclaraciones, NO para responder a la pregunta. 2. Esta pregunta obviamente está pidiendo un componente, que está fuera de tema. Tratar de sortearlo al redactarlo como un "conjunto" de componentes no evita eso.
@pipe Comments son comentarios como su nombre lo indica. Si navega por este sitio encontrará solo una pequeña parte de ellos "solicitando aclaraciones"
Bueno, lo he vuelto a pasar. No he encontrado nada que requiera un pequeño micro para hacer tus parcelas. Pero debo admitir que pasé por alto una muy buena razón para tu punto: es un desafío que quiero hacerlo con lo menos posible. En esto sí estoy de acuerdo contigo.
@pipe, ¿puedes ayudarme aquí y señalar la regla específica de la que hablas? No entiendo su distinción entre "componente" y "componentes" y hasta ahora no veo nada que aborde ninguno de los dos en el centro de ayuda, pero si está allí, agradecería ayuda para encontrarlo. ¡Gracias!
electronics.stackexchange.com/help/on-topic
@W5VO gracias, pero he mirado allí varias veces y no veo de qué manera el usuario siente que hay un problema con esta pregunta basada en "pedir un componente". Probablemente hayas visto la metapregunta , si puedes elaborarla allí, ¡te lo agradeceríamos mucho!
@pipe ¡Gracias por la edición! Esto se ve mucho más limpio, más conciso y más estructurado que lo que publiqué originalmente.

Respuestas (2)

Creo que la solución obvia de Moset para sus requisitos es usar un FPGA y escribir código HDL que calcule z i + 1 = z i 2 + C .

Una búsqueda de "FPGA más pequeño" ciertamente arroja varios muy pequeños. Ni siquiera lo habría considerado, pero sí, ¡esto es francamente elegante!

Cualquier Cortex M4F puede hacer fácilmente matemáticas de punto flotante de precisión simple (es decir, flotante, no doble). Aquí hay un resumen de cuánto tiempo toma cada instrucción.

Ejemplo: Kinetis MK02FN128 funcionando a 100MHz teóricamente puede hacer 100 millones de multiplicaciones de punto flotante por segundo .

Escribiría código en C con flotantes como lo haría en una PC. Algunos consejos. Solo busque microcontroladores con núcleo Cortex M4 F o "con FPU".

Gracias por los enlaces!! ¿Cuál es la opción más pequeña aquí? La velocidad es increíble, pero estoy buscando "pequeño".
Hay una miríada de MCU ARM para elegir... algunas familias más conocidas para mirar: Kinetis, STM32, EFM32, Renesas Synergy, TM4C. Incluso puede obtener un sistema Bluetooth en el chip con FPU - nrf52 (en un módulo, por ejemplo, BL652).
¿Quiere decir "pequeño" como en el tamaño del paquete de chips, o alguna otra métrica? El Kinetis tiene un tamaño completo de 5 mm x 5 mm, y los paquetes realmente pequeños no se pueden ensamblar a mano.