Colorlight-5A-75B

91 views
Skip to first unread message

Alberto

unread,
Nov 16, 2020, 6:47:28 AM11/16/20
to FPGAwars: explorando el lado libre
Hola!

Hace unos días me topé con algunos artículos sobre la placa "Colorlight-5A-75B" que se vende como adaptador barato para grandes paneles LED (15€) y en realidad está implementado con una Lattice  ECP5-25 y puede llegar a programarse por JTAG y ejecutar RISC-V y lo que sea. Lo que pasa es que todo son pegas, no tiene USB ni UART, sólo se puede programar, en principio, por el JTAG. Es un precio extremadamente bajo para una  ECP5-25 , en mi opinión, y creo que tiene como 80 pines I/O y algo de SDRAM, creo que suma en placa 4MB pero en 2 chips de 1M*16 bits, aparte de la que tenga la propia FPGA. Aquí está toda la ingeniería inversa de la placa.

No tengo adaptador JTAG ni conozco nada sobre esa tecnología pero estoy viendo que la gente está utilizando placas de microcontrolador STM32F103, también llamadas "blue pill", flasheadas para convertirse en programador JTAG. Ese microcontrolador vale como 2$ y de hecho yo ya tenía uno en un cajón. Parece que hay dos opciones, o bien "DirtyJTAG with UrJTAG" o bien "Black Magic Probe". Este último es un hardware en sí mismo pero parece que también puede programarse en el STM32F103. Aquí alguien está justo usando un "blue pill" para programar exactamente esa placa y aquí se explica cómo convertir un "blue pill" en un "Black Magic Probe", que parece más potente que el DirtyJTAG. Tiene debugger incorporado en el chip y no se necesita ningún software adicional, sólo conectar por el puerto serie virtual y ya tienes GDB.

Me parece una buena oportunidad para aprender sobre JTAG y después poder hacer más cosas interesantes después, aprendiendo de paso más sobre verilog y tecnologías relacionadas. En 25k LUTs quizá quepan ya cómodamente softcores y tal vez sea relativamente sencillo conectar módulos existentes dar, por ejemplo, soporte USB a un softcore RISC-V. Hay por ahí un proyecto para esto, para conectar softcores ya existentes de forma sencilla, ahora no recuerdo el nombre, pero estoy todavía lejos de llegar a ese punto.

Creo que me voy a meter en este jardín. Deseadme suerte o desanimadme o lo que queráis. XD

Un saludo

charli va

unread,
Nov 16, 2020, 8:15:40 AM11/16/20
to fpga-wars-explora...@googlegroups.com
Hola alberto!! Miraré el tema de litex que es un ecosistema organizado ya para montar softcores riscv con Linux y usb con un bus wisbone

En cuanto tenga el ordena delante te paso referencias.

Es un jardín suuuper interesante!!! 😉

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/97644daa-0188-46e0-85c9-5f77815c17b6n%40googlegroups.com.

beni...@gmail.com

unread,
Nov 16, 2020, 5:42:13 PM11/16/20
to FPGAwars: explorando el lado libre
Hola Alberto

La placa Colorlight -5A-75B es una Lattice ECP5-25 .Es una OpenFPGA y por precio esta genial pero tiene dos inconvenientes
El gran problema que tiene la placa es este
  • All the pins of the HUB75 connectors are connected to outputs of level shifters. They need to be replaces by something that allows bidirectional data communication
  Es decir los pines son todos de salida y conectados a varios level shifters los cuales convierten todos los pines en salidas de 3.3 voltios a 5.5 voltios. No se permite pines de entrada con esos level shifters
  Echa un vistazo a esta web para que veas como lo han resuelto algunos  --> https://lucasteske.dev/2020/06/hacking-a-esp32-into-fpga-board
  Otra idea es substituirlos    aqui ponen    SN74CBT3245APW 8bit bidirectional FET switches  en su lugar  ---> https://twitter.com/Claude1079/status/1231194849350647808 
  La idea es en general, desoldar los level shifters y puentearlos o substituirlos por otros integrados  

  El otro inconveniente (aunque este es mucho mas facil de resolver) es que para los que no han usado una placa FPGA antes, esta placa tiene salidas JTAG, a las que has de conectar a un programador JTAG (bien puede ser un cable Xilinx , USB Blaster, una Blue pills como tu dices y otras mas)
  La progrmacion de la placa es similar a otras placas Xilinx y la puedes realizar mediante el OpenOCD. Si te interesa te puedo pasar un link con un tutorial que hice para placas Xilinx similares y usar OpenOCD en windows o Linux con un USB blaster en el cual puedes programar la FPGA o grabar la SPI Flash.

Espero toda la informacion que te he dado te haya ayudado en tu decision

Un Saludo 

Fernando

Christian Stone

unread,
Nov 17, 2020, 12:05:38 AM11/17/20
to fpga-wars-explora...@googlegroups.com
Hola,

Como indica Fernando, por el precio que tiene, está genial. La única razón para no comprar una es la falta de tiempo. Creo que si compraras los componentes sólo, te saldría más caro. Por 15€ tienes una FPGA mayor que la mayoría de la familia ICE40, 32 Mbits de flash, dos puertos ethernet y la SDRAM a 200MHz. Además de los level shifters, que puedes ignorarlos tranquilamente. En comparación, la BlackIce-MX cuesta 3-4 veces más, tiene una FPGA más pequeña, la mitad de SDRAM a 143MHz, y 4Mbit de flash. Lo que tiene la BlackIce-MX es un ARM en la propia placa. Pero, ¿necesitas un uC en la placa si ya sabes lo que es un STM32F103 o un Arduino Mini? No lo creo.

La referencia al Arduino Mini no es trivial. A efectos prácticos, la forma de utilizar los puertos ISP, ICSP, JTAG, etc. es la misma. No es idéntica porque cada fabricante/proyecto utiliza un protocolo diferente y normalmente propietario; y porque a veces estás programando un uC, otras una FPGA y otras un uC dentro de una FPGA. Pero, en todos ellos lo que necesitas es un uC (o FPGA) auxiliar, con una programación concreta para hacer de puente entre el USB y el dispositivo que vayas a programar. Echa un ojo a https://electronics.stackexchange.com/questions/412029/jtag-swd-edbg-icsp-isp-terms. Dependiendo del fabricante y las características que quieras, el cable auxiliar 'oficial' puede costar 50-100€, o puedes usar soluciones open source como las 'blue pill', openocd, st-link, etc. Por lo tanto, para usar la Colorlight-5A-75B, lo único que necesitas es conectar 4 cables (JTAG), y la alimentación.

Nota: no quiero decir que la BlackIce-MX no valga lo que cuesta. La he puesto como ejemplo porque tiene un público objetivo muy diferente. La BlackIce-MX ofrece una solución lista para usar, compacta, con conectores que coinciden con una serie de placas auxiliares. Si lo que quieres es conectar muchos periféricos externos sin complicarte, es más adecuada. Sin embargo, si lo que quieres es centrarte en el interior de la FPGA y en el diseño HDL, la Colorlight es una opción muy a tener en cuenta.

Observación: la comunicación serie a través de JTAG suele ser muy lenta. Puede ser interesante usar otros dos pines y conectarlos a un conversor USB-TTL. Estos también cuestan 1-2€, y son precisamente los que se usan para programar los Arduino Mini (a falta de otro Arduino que haga la tarea). Hay varios chips que se usan: FT232RL, PL2303, CH340... Cualquiera de ellos te sirve, ya que el componente a utilizar en la FPGA es una UART. Esto te permite conectar dos USB a la placa: uno para programación y otro para comunicación. Observarás que esto es un patrón común en muchas placas de desarrollo, especialmente de Digilent/AVNET/Xilinx; además de mencionarse en muchas referencias sobre la Colorlight.

Nota: si buscas 'ST-LINK' en Aliexpress, verás que la IceSugar es básicamente ST- LINK + Fomu, además de mucho trabajo en pensar el tema de los conectores/jumpers.

Ahora bien, para probar diseños SoC basados en RISC-V no necesitas una ECP5. Con la UP5K que tienes en la IceSugar debería bastarte. La Fomu (https://tomu.im/fomu.html) tiene una UP5K también, y el diseño de referencia es un SoC basado en RISC-V capaz de ejecutar Micropython. El SoC de la Fomu está escrito en SpinalHDL: https://github.com/SpinalHDL/VexRiscv. Se trata de una familia de diseños que obtuvo el primer premio en el concurso de SoftCPUs de RISC-V en 2018: https://riscv.org/announcements/2018/10/risc-v-contest/. Es cierto que en el diseño de la Fomu se utiliza también LiteX, pero eso es debido a las limitaciones de tamaño. Al ser una placa tan pequeña, el puerto USB está conectado directamente a la FPGA. Por lo tanto, el SoC debe tener el stack USB suficiente para hacer de bootloader: ser capaz de comunicarse con el PC y recibir los bitstream.

En tu caso, ya sea en la IceSugar o en la Colorlight, no necesitas el stack USB dentro de la FPGA. En la primera ya tienes un uC en la placa que cumple esa función (por eso está, principalmente, en reemplazo del FTDI). En la segunda, ya vas a usar la placa externa, sea para JTAG y/o UART. Por lo tanto, puedes utilizar VexRiscv directamente, sin necesidad de LiteX. Es lo que te recomiendo para empezar: genera el SoC que quieras (tal cual), exportalo a HDL y utilizalo como una caja negra con una UART sólo. SpinalHDL permite exportar los diseños a Verilog o a VHDL, por lo que puedes usar el lenguaje HDL que prefieras. Puedes encontrar múltiples referencias a SpinalHDL en este grupo.

Lo interesante de no incluir el USB en la FPGA es que seguro que te queda sitio para, por ejemplo utilizar el plugin icerok de icestudio y otras soluciones que sólo requieren la UART. No necesitas conectar nada más que el JTAG y la UART, y con eso ya puedes usar scripts en Bash/Python para interactuar con el sistema.

Si después de generar el SoC, añadir tus periféricos, etc. quieres seguir aprendiendo sobre arquitectura de sistemas, el siguiente paso sería https://github.com/litex-hub/linux-on-litex-vexriscv, que es la versión de VexRiscv capaz de ejecutar Linux. Pero para eso puede que sí necesites una placa del siguiente segmento (60-120€), con más RAM. Actualmente, el desarrollo de herramientas libres se están realizando principalmente sobre las Artix-7 de Xilinx. Puedes ver el proyecto SymbiFlow que se mencionó recientemente.

Un saludo, y ánimo (suerte no necesitas)

Christian Stone

unread,
Nov 17, 2020, 12:28:43 AM11/17/20
to fpga-wars-explora...@googlegroups.com
Puedes encontrar múltiples referencias a SpinalHDL en este grupo.

While searching for them, you might find that some conversations are mutilated. That's part of the idiosyncratic governance of this project, which we talked about recently. Luckily, the vast majority of the content is preserved regardless. That's part of the enriching trip to the moon.

Alberto

unread,
Nov 17, 2020, 3:04:13 AM11/17/20
to FPGAwars: explorando el lado libre
A ese me refería, que no me acordaba del nombre. ¡Gracias!

Alberto

unread,
Nov 17, 2020, 3:27:14 AM11/17/20
to FPGAwars: explorando el lado libre
¡Hola! Muchas gracias.

Lo de los level shifters lo mencionaba de pasada el análisis que enlacé pero no le presté mucha atención ya que di por hecho que serían bidireccionales y no :( En realidad lo son en cierto modo pero a efectos prácticos no. Para ponerlos al revés habría que mover un pin y además sacarían los 5V para adentro y ... bueno, que no.

Tener que modificar la placa es una pega importante porque si finalmente se me ocurriese una utilidad concreta que usase esos pines, modificados, el proyecto no sería fácilmente reproducible por terceros. Si me sale algo útil me gusta publicarlo.

Pero bueno, ya está comprada. Si necesito algún pin de entrada, que no lo sé, igual busco algún punto que se suelde más fácil. El botón tiene un conector al lado y creo que el pin de actuación del botón está en el conector. Lo que pasa es que el botón tendrá una resistencia pull-up. Pero es un pin de entrada.

Si lograse usar el ethernet con su pila TCP/IP correspondiente... :)

Bueno, al menos aprenderé cosas, eso seguro. Como JTAG. Ya tengo preparado el cable con la blue pill programada. Tenía el USB con los pines de datos soldados juntos, defecto de fábrica 😱 pero sólo con ponerle flux y calentarlo el estaño se ha puesto solo en su sitio, menos mal. El software UrJTAG lo detecta, sólo necesito un dispositivo con el que probarlo. Tengo que ver si tengo algún AVR compatible para probarlo, mientras me llega la placa Colorlight.

Gracias de nuevo.

Un saludo

Alberto

unread,
Nov 17, 2020, 4:42:00 AM11/17/20
to FPGAwars: explorando el lado libre
Gracias

Christian Stone

unread,
Nov 17, 2020, 9:26:25 AM11/17/20
to fpga-wars-explora...@googlegroups.com
Si lograse usar el ethernet con su pila TCP/IP correspondiente... :)

Una vez que consigas conectar el JTAG y programar la FPGA, eso debería ser plug and play: https://github.com/enjoy-digital/colorlite

Alberto

unread,
Nov 17, 2020, 12:27:10 PM11/17/20
to FPGAwars: explorando el lado libre
Gracias, bueno es saberlo :)
Reply all
Reply to author
Forward
0 new messages