FLIX-V: FPGA, Linux y Risc-V

161 views
Skip to first unread message

Obijuan

unread,
May 11, 2023, 2:14:06 PM5/11/23
to FPGAwars: explorando el lado libre
Hola,  hace tiempo que sigo los increibles trabajos de KianV en twitter[1]. Ha creado un RISC-V desde 0, en verilog, que incorpora el modo privilegiado y que es capaz de correr LINUX!! (Bueno, en realidad micro-Linux, porque no incluye MMU)

Todo el trabajo está publicado en su repo [2]

Con la idea de hacer tutoriales e ir poco a poco estudiando la información, estoy recopilando lo esencial en este repositorio de FPGAwars:


Así que, si alguno de vosotros tiene ansia viva (SAV) y quiero probar el linux en la FPGA, estos son los pasos

De momento sólo lo he puesto para la placa ULX3S-12F de Radiona, que es en la que lo estoy probando:

1. Instala apio
2. Clona el repositorio de Flix-V
3. Entra en el directorio Demo
4. Ejecuta estos comandos

apio raw "fujprog -l 4 -j FLASH -f $((1024*1024*1))  Linux/boot.bin"

apio raw "fujprog -l 10 -j FLASH -f $((1024*1024*2)) kernel.bin"

apio raw "fujprog -l 4 -j FLASH -f $((1024*1024*7)) kianv32mb.dtb"

Estos comandos graban en la memoria flash los diferentes binarios necesarios para Linux
Luego hay que cargar el RiscV en la FPGA:

apio raw "fujprog -l 4 -j FLASH Soc-Kianv-ULX3S-12F.bit"

Ahora ya empezará a arrancar LInux. Para verlo hay que arrancar un terminal seria a la velocidad de 3000000 baudios (velocidad no estandar)

Un terminal muy útil es tio. Si lo tienes instalado ejecuta este comando:

tio -m INLCRNL /dev/ttyUSB0 -b 3000000

La información la he dejado en Inglés aquí:


Os seguiré informando de los progresos

Correr linux (sistema operativo libre) en un procesador RISC-V, que es abierto, en una placa open Hardware, usando exclusivamente herramientas libres para la síntesis, me parece alucinante...

El ecosistema de las FPGAs libres está avanzando cada vez más rápido...

Saludos, Obijuan



charli va

unread,
May 11, 2023, 3:21:18 PM5/11/23
to fpga-wars-explora...@googlegroups.com
Un proyecto fantástico Obijuan! el trabajo de KianV están siendo titánicos, llevo tiempo siguiéndole y es un crack. Hace unas semanas lo probé siguiendo un tutorial de KianV y se me paró el corazón al ver el linux arrancando en la ULX3 XD. tengo pendiente probarlo en la alhambra II , tengo pedido un módulo de memoria para poder hacerlo.

Una vez más muchas gracias por recopilar toda la info y hacerlo aún mucho más fácil!

Un gran abrazo!

--
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/11adb38c-4e59-4eee-86b0-a4264039e929n%40googlegroups.com.

Juan Gonzalez Gomez

unread,
May 11, 2023, 3:51:19 PM5/11/23
to FPGA-WARS: explorando el lado libre
Yo el módulo de memoria ya lo tengo (lo recibí la semana pasada), pero todavía no lo he puesto en marcha

Con ese módulo se podrá correr Linux en la Alhambra, aunque no irá muy rápido. Pero es una pasada... Kian es un crack! 😀

Jo mo

unread,
May 15, 2023, 11:17:03 AM5/15/23
to FPGAwars: explorando el lado libre
Hello guys,

I hope you are fine!
Thanks Juan for this great Risc V processor addition, i may use it some day !

Here i have not had a lot of time for playing with my fpgas these days ;-)

Big hug and have a nice evening!

charli va

unread,
May 15, 2023, 11:32:22 AM5/15/23
to fpga-wars-explora...@googlegroups.com
Hello Joaquim!!! I'm so glad to read you!! I hope you're well!!

Juan Gonzalez Gomez

unread,
May 16, 2023, 4:06:57 AM5/16/23
to fpga-wars-explora...@googlegroups.com


Ya tengo una primera versión del Kianv Linux-soc integrado en Icestudio. En este primer nivel (nivel 0) he creado un bloque verilog que instancia el soc a partir de sus ficheros verilog y se realizan las conexiones con los pines

Toda la lógica de los pines de entrada/salida (inout en verilog) la he sacado fuera y está controlada mediante los correspondientes bloques IO. Lo he hecho así para poder migrarlo a otras placas, que tiene bloques io diferentes

kianv-linux-soc.png


Tenerlo directamente en Icestudio permite sintetizarlo y cargarlo en la placa con un solo click, de manera muy fácil. Yo lo utilizaré para dar talleres y hacer demostraciones rápidas a los estudiantes
Una vez cargado en la FPGA, veremos nuestra flamante consola de linux aparecer en un terminal serie configurado a 3M baudios:

kianv-linux-soc-2.png

Me sigue pareciendo muy emocionante verlo...

También se puede ver con el terminal integrado de Icestudio. Pero es importante configurarlo a velocidad custom de 3000000 baudios:

kianv-linux-soc-4.png

Y también hay que desactivar las opciones de "local echo", "flush on enter" e indicarle que al pulsar enter sólo se envíe LF:

kianv-linux-soc-3.png

En esta animación se ve en funcionamiento:

kianv-linux-soc-5.gif

Ahora me centraré en simplificarlo e ir poco a poco conviertiendo el verilog en módulos icestudio.
De esta forma no sólo se podrán modificar sin saber verilog, sino que de un golpe de vista te haces una idea de los elementos que componen tu mini-ordenador. Queda mucho trabajo por hacer, pero es tan apasionante...😀

Os seguiré informando

Saludos, Obijuan


El jue, 11 may 2023 a las 20:14, Obijuan (<obijua...@gmail.com>) escribió:

charli va

unread,
May 16, 2023, 4:26:03 AM5/16/23
to fpga-wars-explora...@googlegroups.com
Brutal!! Que tiempos tan emocionantes!!!

Juan Gonzalez Gomez

unread,
May 17, 2023, 1:39:44 AM5/17/23
to fpga-wars-explora...@googlegroups.com
Ya tengo el nivel 0 terminado.  Todas las puertas IO de acceso a la flash y la sdram están agrupadas en bloques nuevos. Este es el circuito:

kianv-linux-soc-5.png

La ventaja de este diseño es que se carga fácilmente en la FPGA (con un único click). Todos los cambios y modificaciones hay que hacerlos directamente en los ficheros originales verilog usando un editor externo. Vamos, que 
es como el diseño tradicional HDL pero teniendo un top-level gráfico

La desventaja es que a este nivel no se ve todavía gráficamente las diferentes partes que componen el soc (se tiene que estudiar el fichero top-soc.v). Por eso, en el siguiente nivel voy a integrar el fichero top-soc.v directamente en Icestudio, 
separando en bloques funcionales el código verilog y mostrando las conexiones entre ellos

La idea es que en el nivel 0 se tiene TODO el verilog original, y en los sucesivos niveles cada vez hay menos verilog y más bloques. Lo hago así para que cada uno se quede en el nivel que prefiera

Jo mo

unread,
May 17, 2023, 3:16:50 AM5/17/23
to FPGAwars: explorando el lado libre
yes, all fine here Carlos,thanks !

Thanks Juan for this level 0 block!

I see in your little video, that the colors in the serial monitor (that i modified) are not perfect for this use case!
ideally, there should be no white everything should be green ( no local echo set,  and it is the Linux os  which send everything (keyboard activity+ OS activity) back to the serial monitor).
And here, it is even OS activity which appears in white (not keyboard activity)
Probably a timing issue! i will try to have a look at it when i have some time!

Thanks again for this incredible work!

big hug!

Juan Gonzalez Gomez

unread,
May 18, 2023, 10:30:55 AM5/18/23
to fpga-wars-explora...@googlegroups.com
Estoy avanzando en el  nivel 1. En este nivel los componentes del top-level (soc-top.v) se están distribuyendo en diferentes bloques de verilog. Cada bloque de verilog instancia su propio fichero. Lo interesante es que ya se empiezan a ver 
las diferentes partes y las conexiones entre ellas

Ya tengo separados el controlador de la memoria flash-spi, el controlador de la SDRAM, el circuito de reset y reloj, el transmisor serie, el receptor serie y la memoria BRAM. En la parte central están en verilog el resto de cosas:
controlador de interrupciones, cpu y lógica de selección. Es lo siguiente que separaré

kianv-linux-soc-6.png

Cuando ya esté todo separado es cuando se podrán hacer bloques específicos, con su icono, para entender mejor las conexiones entre ellos

charli va

unread,
May 18, 2023, 11:25:56 AM5/18/23
to fpga-wars-explora...@googlegroups.com
Tiene muy buena pinta!

--
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.

Juan Gonzalez Gomez

unread,
May 19, 2023, 7:19:10 AM5/19/23
to fpga-wars-explora...@googlegroups.com
Ya tengo el nivel 1 listo: El fichero verilog que contenía el diseño principal (soc-top.v) está descompuesto en diferentes bloques de código verilog. El resto del diseño está contenido en sus respectivos ficheros verilog que hay que editar externamente a Icestudio

kianv-linux-soc-7.png

En el siguiente nivel (nivel 2) iré bloque por bloque añadiendo iconos y documentación, para entender qué es cada parte. Este nivel 2 todavía dependerá de ficheros verilog externos, pero su top-level será totalmente gráfico

Saludos, Obijuan




--
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.

charli va

unread,
May 19, 2023, 12:13:32 PM5/19/23
to fpga-wars-explora...@googlegroups.com
Vaya pinta va tomando esto! En cuanto pueda lo probaré para darte feedback.


Gracias maestro!

Reply all
Reply to author
Forward
0 new messages