[URJC][RISC-V][Curso 2019-2020] Laboratorio de Arquitectura de Ordenadores

818 views
Skip to first unread message

Obijuan

unread,
Sep 11, 2019, 4:26:46 AM9/11/19
to FPGAwars: explorando el lado libre
¡Hola!

  Ya hemos empezado con las prácticas del RISC-v del curso 2019-2029, en la Escuela de Teleco de la URJC

Aquí está la documentación de la sesión 1: Puesta en marcha del simulador RARs:


¡Vamos!!

Saludos, Obijuan

Goyo Serrano

unread,
Sep 11, 2019, 4:51:09 PM9/11/19
to FPGAwars: explorando el lado libre
super didactico, muy buen trabajo. Gracias por compartir

Diego Harosteguy

unread,
Sep 12, 2019, 10:16:19 AM9/12/19
to FPGAwars: explorando el lado libre
Que bueno!!, me encanta!!!

Gracias por compartir!!..

Saludos. Diego

Obijuan

unread,
Sep 18, 2019, 8:14:28 AM9/18/19
to FPGAwars: explorando el lado libre
Ya está lista la sesión 2:


--> Objetivos de esta sesión:

* Aprender cómo funciona el procesador, a nivel general
* Entender la idea de código máquina
* Comprender cómo se almacenan los programas en la memoria
* Aprender a simular programas usando puntos de ruptura
* Aprender nuevas instrucciones: add y sub
* Saber cómo programar expresiones con sumas y restas en ensamblador

Saludos, Obijuan


El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Juan Gonzalez Gomez

unread,
Sep 25, 2019, 11:53:37 AM9/25/19
to FPGA-WARS: explorando el lado libre
Lista la sesión 3: variables

https://github.com/myTeachingURJC/2019-20-LAB-AO/wiki/L3:-Practica-1

Objetivos :

  • Aprender a manejar variables
  • Entender el segmento de datos
  • Entender las pseudoinstrucciones
  • Saber cómo leer palabras de la memoria, y almacenarlas
  • Instrucciones lw, sw
  • Pseudoinstrucciones li, mv, la
Saludos, Obijuan

juan benitez

unread,
Sep 25, 2019, 6:40:57 PM9/25/19
to fpga-wars-explora...@googlegroups.com
buenas noches tengo un problema con mi alhambra II, si tomo cualquier bloque de los que estan en ejemplo de cualquier coleccion y los cargo no pasa nada, por ejemplo si tengo un bloque que sea para encender un led, digamos el hola mundo para encender el led  7 y lo cargo no pasa nada, tengo que entrar en el bloque de salida y cambiar el numero del 7 al 6 por ejemplo y luego seleccionar el led 7 nuevamente y le doy a cargar y solo de esta manera si se enciend el led. le ha pasado esto a alguien mas, como lo puedo corregir. gracias. 

--
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/CABqu7xpiexAFF%2Bxv9aNH90%3DhymJxn43c%3DYX-r2%2Bm2uMJ_-F4EQ%40mail.gmail.com.

Obijuan

unread,
Sep 29, 2019, 12:31:20 PM9/29/19
to FPGAwars: explorando el lado libre
Aquí está el primer vídeo con la primera parte de la sesión 1 del Laboratorio de Arquitectura de Computadores:

Simulando nuestro primer programa para el RISC-V con el simulador RARs


Según vaya robando tiempo de aquí y allá, iré haciendo más vídeos :-)

Saludos, Obijuan


El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Sep 29, 2019, 1:49:07 PM9/29/19
to FPGAwars: explorando el lado libre
Aquí está el vídeo 2:

Hacemos nuestro primero programa desde cero y aprendemos la instrucción addi


Saludos, Obijuan

El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Sep 29, 2019, 2:04:59 PM9/29/19
to FPGAwars: explorando el lado libre
Hola Juan,


Aunque te voy a responder en este hilo, porfavor, crea uno nuevo porque es un tema diferente. (Este hilo es sobre el RISC-V en la asignatura de Arquitectura de Ordenadores)

Sin datos concretos es muy difícil saber qué está pasando ¿Es un bug en icestudio? ¿Qué sistema operativo usas? ¿Qué versión de icestudio? Exactamente, ¿qué ejemplo te falla?

En esta wiki encontrarás información específica sobre la Alhambra II (su puesta en marcha)


Te voy a proponer pruebas y me cuentas detalladamente qué te sucede

1. Bájate este ejemplo Hola mundo específico para la Alhambra-II


2. Ábrelo con icestudio (¿Qué versión estás usando? ¿En que Sistema Operativo?

3. Sin modificar nada, cárgalo (Herramientas/cargar)

Se te debería poner el led7 parpadeando, como se muestra en este gif animado:


Ejecutando exactamente esos pasos, y nada más. ¿Te funciona?.  Con la versión estable de icestudio 0.4.0 te debería funciona tal cual

Pruébalo y nos cuentas. En caso de que no te funcione es muy importante que nos indiques la mayor cantidad posible de detalles

Según los resultados de esa prueba seguimos buscando por unn lado o por otro

Pero en otro hilo, porfa :-)

Saludos, Obijuan


El jueves, 26 de septiembre de 2019, 0:40:57 (UTC+2), juan benitez escribió:
buenas noches tengo un problema con mi alhambra II, si tomo cualquier bloque de los que estan en ejemplo de cualquier coleccion y los cargo no pasa nada, por ejemplo si tengo un bloque que sea para encender un led, digamos el hola mundo para encender el led  7 y lo cargo no pasa nada, tengo que entrar en el bloque de salida y cambiar el numero del 7 al 6 por ejemplo y luego seleccionar el led 7 nuevamente y le doy a cargar y solo de esta manera si se enciend el led. le ha pasado esto a alguien mas, como lo puedo corregir. gracias. 

El mié., 25 sept. 2019 a las 17:53, Juan Gonzalez Gomez (<obijua...@gmail.com>) escribió:
Lista la sesión 3: variables

https://github.com/myTeachingURJC/2019-20-LAB-AO/wiki/L3:-Practica-1

Objetivos :

  • Aprender a manejar variables
  • Entender el segmento de datos
  • Entender las pseudoinstrucciones
  • Saber cómo leer palabras de la memoria, y almacenarlas
  • Instrucciones lw, sw
  • Pseudoinstrucciones li, mv, la
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-lado-libre+unsubscribe@googlegroups.com.

Obijuan

unread,
Sep 29, 2019, 2:06:23 PM9/29/19
to FPGAwars: explorando el lado libre
A partir del minuto 16.30 he tenido un probelma con la cámara y me ha cambiado al micrófono externo, por lo que se oye mucho más bajo. Os pido disculpas... Como los vídeos los grabo en directo del tirón, no me he dado cuenta al grabarlo. Y en vez de repetirlo desde cero he preferido subirlo

Obijuan

unread,
Oct 2, 2019, 11:02:34 AM10/2/19
to FPGAwars: explorando el lado libre
Ya está lista la documentación de la sesión 4 del laboratorio:


Un poquito de entrada/salida mapeada en memoria :-)

Saludos, Obijuan



El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Oct 3, 2019, 3:53:36 AM10/3/19
to FPGAwars: explorando el lado libre

Vídeo 1 de la sesión 2: Funcionamiento del procesador. Código máquina. Lenguaje ensamblador


Saludos, Obijuan


El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Oct 3, 2019, 6:17:23 AM10/3/19
to FPGAwars: explorando el lado libre

Vídeo 2 de la sesión 2: Mapa de memoria. Segmento de código



Saludos, Obijuan

Obijuan

unread,
Oct 3, 2019, 1:36:32 PM10/3/19
to FPGAwars: explorando el lado libre

Saludos, Obijuan


El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Oct 3, 2019, 2:47:07 PM10/3/19
to FPGAwars: explorando el lado libre
Vídeo 4 de la sesión 2: Instrucción sub. Evaluación de expresiones


Saludos, Obijuan

El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Oct 8, 2019, 3:54:26 AM10/8/19
to FPGAwars: explorando el lado libre
Sesión 5: Llamadas al sistema. Instrucción ecall

Documentación en la wiki:


Saludos, Obijuan

El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Oct 8, 2019, 11:36:16 AM10/8/19
to FPGAwars: explorando el lado libre
Sesión 3. Vídeo 1: Pseudo-instrucciones

Ya está el vídeo 1 de la sesión 3, sobre las pseudo-instrucciones li y mv del RISC-V


Saludos, Obijuan



Obijuan

unread,
Oct 8, 2019, 1:11:20 PM10/8/19
to FPGAwars: explorando el lado libre
Sesión 3. Práctica 1. Vídeo 2: El segmento de datos

Aprenderemos a definir nuestras variables con el RARs


Saludos, Obijuan



El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Oct 12, 2019, 6:35:23 AM10/12/19
to FPGAwars: explorando el lado libre
Sesión 3. Práctica 1. Vídeo 3: Leyendo variables con load y store



Aprendemos a acceder a una variable de memoria y la modificamos. Esto es algo que utilizaremos muchísimo

Saludos, Obijuan

Obijuan

unread,
Oct 12, 2019, 12:39:17 PM10/12/19
to FPGAwars: explorando el lado libre

Sesión 3. Práctica 1. Vídeo 4: Varias variables

Ejemplos de acceso a varias variables de memoria




Obijuan

unread,
Oct 15, 2019, 3:39:59 AM10/15/19
to FPGAwars: explorando el lado libre
Ya está publicada la sesión 6: Cadenas de caracteres


Saludos, Obijuan



El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Oct 20, 2019, 12:53:27 PM10/20/19
to FPGAwars: explorando el lado libre
Vídeo 11:  Sesion 4, Práctica 2, Vídeo 1: Entrada/salida mapeada

Introducción a la conexión con periféricos mediante la entrada/salida mapeada en memoria



Saludos, Obijuan

El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Obijuan

unread,
Oct 21, 2019, 6:52:59 AM10/21/19
to FPGAwars: explorando el lado libre
Sesión 7: Bucles y Saltos condicionales
 
Con los saltos condicionales el procesador ya puede tomar decisiones. Esto nos permite hacer programas más complejos



Saludos, Obijuan


El miércoles, 11 de septiembre de 2019, 10:26:46 (UTC+2), Obijuan escribió:

Miquel Servera

unread,
Oct 21, 2019, 3:56:41 PM10/21/19
to FPGAwars: explorando el lado libre
Hola buenas noches, me estoy leyendo dichos documentos y estoy disfrutando un montón pero necesito una aclaración, estando en la practica L2 seria correcta la forma de hacer esta multiplicación.
multiplicacion-1.asm

Obijuan

unread,
Oct 21, 2019, 4:43:13 PM10/21/19
to FPGAwars: explorando el lado libre
Hola Miguel!

La operación que has implementado es: f = 2 * x5 + 18, que para el caso de x5 = 6 da como resultado 30, que coincide con 5 * 6

Me imagino que querías implementar algo como esto: f = 2 * x5 + 3 * x5  = 5 * x5

Uno de los dos operandos tiene que ser una constante. Si quieres multiplicar dos variables tienes que hacer un bucle para sumar una de ellas tantas veces como diga la otra (pero en la sesión L2 todavía no se ha visto eso)

Saludos, Obijuan

Miquel Servera

unread,
Oct 22, 2019, 9:37:26 AM10/22/19
to FPGAwars: explorando el lado libre
Muchas gracias por la ayuda, voy a probar.
Saludos!!!
Message has been deleted

Miquel Servera

unread,
Oct 23, 2019, 4:32:06 PM10/23/19
to FPGAwars: explorando el lado libre
Buenas noches, seguimos estudiando y aprendiendo con este gran profesor que es Obijuan. Suma de dos variables almacenadas en la memoria:
load-store-2.asm

Juan Gonzalez Gomez

unread,
Oct 24, 2019, 4:00:00 AM10/24/19
to FPGA-WARS: explorando el lado libre
¡Estupendo Miquel! :-)

El programa está perfecto. Esta línea no hace falta que la incluyas:

#-- Leemos la variable resultado y la almacenamos en x10
lw, x10, 0(x7)

porque en la siguiente se hace la suma y se asigna el resultado a x10. No hace falta leer la variable resultado, sólo almacenar la suma en ella al final

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.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/7de2615e-b4f1-42c6-84be-343016a62ef0%40googlegroups.com.

Obijuan

unread,
Oct 24, 2019, 6:00:50 AM10/24/19
to FPGAwars: explorando el lado libre
Vídeo 12: Sesión 4, Práctica 2. Parte II: Probando un puerto de Salida real

Ejemplo de funcionamiento de un puerto de salida mapeado en la dirección 0xFFFF0000, en un sistema real

En la asigntura trabajaremos con el simulador, pero quiero que veáis cómo lo puedes llevar a un sistema real


De momento la carga del firmware se hace con apio, usando la línea de comandos, pero es algo que cambiaremos para hacerlo más fácil

Miquel Servera

unread,
Oct 24, 2019, 6:50:57 AM10/24/19
to FPGAwars: explorando el lado libre
Muchas gracias, tomo nota.
Saludos!!
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-lado-libre+unsubscribe@googlegroups.com.

Obijuan

unread,
Oct 26, 2019, 7:20:38 AM10/26/19
to FPGAwars: explorando el lado libre
Vídeo 13: Sesión 4. Práctica 2: Displays de 7 segmentos

Ejemplo de manejo de un display de  7 segmentos en el simulador RARs


Obijuan

unread,
Oct 29, 2019, 6:04:11 AM10/29/19
to FPGAwars: explorando el lado libre

Sesión 8: Práctica 3: Cadenas II

Ahora que ya sabemos hacer bucles y tomar decisiones podemos implementar algoritmos sencillos para manipular cadenas

Obijuan

unread,
Nov 5, 2019, 3:21:12 PM11/5/19
to FPGAwars: explorando el lado libre
Sesión 9. Práctica 4-1: Subrutinas de nivel 1

Obijuan

unread,
Nov 7, 2019, 5:13:21 AM11/7/19
to FPGAwars: explorando el lado libre
Vídeo 1 de la sesión 5 del Laboratorio de Arquitectura de computadores: Registros de la ABI RISC-V

Obijuan

unread,
Nov 7, 2019, 6:35:54 AM11/7/19
to FPGAwars: explorando el lado libre

Vídeo 2 de la sesión 5 del Laboratorio de Arquitectura de Computadores: Instrucción ECALL

Obijuan

unread,
Nov 7, 2019, 7:41:23 AM11/7/19
to FPGAwars: explorando el lado libre

Vídeo 3 de la sesión 5 del laboratorio de Arquitectura de Computadores: Llamadas al sistema PrintInt, ReadInt y PrintChar


La sesión 5 ya está terminada :-)

Obijuan

unread,
Nov 13, 2019, 4:06:29 AM11/13/19
to FPGAwars: explorando el lado libre
Sesión 10: La pila. Llamadas a subrutinas multinivel

Diego Harosteguy

unread,
Nov 13, 2019, 8:35:13 AM11/13/19
to FPGAwars: explorando el lado libre
Hola Obijuan, como siempre gracias por compartir todo esto!.

Saludos.
               Diego.

Obijuan

unread,
Nov 14, 2019, 3:15:40 AM11/14/19
to FPGAwars: explorando el lado libre
Vídeo 17. Práctica 2. Sesión 6. vídeo 1:  Cadenas de caracteres definidas en tiempo de compilación




Saludos, Obijuan

Obijuan

unread,
Nov 14, 2019, 5:11:10 AM11/14/19
to FPGAwars: explorando el lado libre
Vídeo 18. Práctica 2. Sesión 6. vídeo 2:  Cadenas de caracteres definidas en TIEMPO DE EJECUCIÓN



Saludos, Obijuan

Obijuan

unread,
Nov 14, 2019, 6:28:23 AM11/14/19
to FPGAwars: explorando el lado libre
Vídeo 19. Práctica 2. Sesión 6. vídeo 3: Manipulando cadenas. Instrucciones lb y sb

Obijuan

unread,
Nov 14, 2019, 12:44:57 PM11/14/19
to FPGAwars: explorando el lado libre
Vídeo 20. Práctica 2. Sesión 6. vídeo 4: Accediendo a los displays y al teclado hexadecimal

Obijuan

unread,
Nov 14, 2019, 2:00:18 PM11/14/19
to FPGAwars: explorando el lado libre
Vídeo 21. Práctica 2. Sesión 6. vídeo 5: Medias palabras. Alineamiento. Directiva Include


Con esto ya está acabada la sesión 6 y la práctica 2

¡Que el RISCV os acompañe!

Obijuan

unread,
Nov 20, 2019, 3:17:58 AM11/20/19
to FPGAwars: explorando el lado libre

Obijuan

unread,
Nov 21, 2019, 4:25:49 AM11/21/19
to FPGAwars: explorando el lado libre
Vídeo 21. Sesión 7. Práctica 3: Introducción. Toma de decisiones en procesadores

Recapitulamos lo que llevamos hasta ahora y preparamos el terreno para aprender las operaciones básicas que le permiten al procesador tomar decisionens

Obijuan

unread,
Nov 21, 2019, 7:25:09 AM11/21/19
to FPGAwars: explorando el lado libre
Vídeo 23. Sesión 7. Práctica 3: Saltos incondicionales hacia adelante

Obijuan

unread,
Nov 21, 2019, 10:11:16 AM11/21/19
to FPGAwars: explorando el lado libre

Obijuan

unread,
Nov 21, 2019, 10:49:28 AM11/21/19
to FPGAwars: explorando el lado libre
Vídeo 25. Sesión 7. Práctica 3. Saltos incondicioanles hacia atrásl

Obijuan

unread,
Nov 21, 2019, 1:58:29 PM11/21/19
to FPGAwars: explorando el lado libre
Vídeo 26. Sesión 7. Práctica 3. Saltos condicionales. Decisiones


Saludos, Obijuan

Obijuan

unread,
Nov 22, 2019, 12:16:41 PM11/22/19
to FPGAwars: explorando el lado libre

Obijuan

unread,
Nov 26, 2019, 6:05:23 AM11/26/19
to FPGAwars: explorando el lado libre
Vídeo 28. Sesión 8. Práctica 3: Interpretación como caracteres ASCII

Obijuan

unread,
Nov 26, 2019, 7:54:45 AM11/26/19
to FPGAwars: explorando el lado libre
Vídeo 29. Sesión 8. Práctica 3: Conversión de cadenas a números

Obijuan

unread,
Nov 26, 2019, 11:20:39 AM11/26/19
to FPGAwars: explorando el lado libre

Obijuan

unread,
Nov 26, 2019, 12:25:58 PM11/26/19
to FPGAwars: explorando el lado libre
Vídeo 31. Sesión 8. Práctica 3: Detectando palíndromos


Con esto hemos terminado la práctica 3. Lo siguiente que aprenderemos será a hacer subrutinas (práctica 4)

Obijuan

unread,
Nov 30, 2019, 4:38:02 AM11/30/19
to FPGAwars: explorando el lado libre
Vídeo 32. Sesión 9. Práctica 4: Subrutinas. Instrucciones jal y ret



Saludos, Obijuan

Democrito

unread,
Nov 30, 2019, 5:59:24 AM11/30/19
to FPGAwars: explorando el lado libre
Ladrillo a ladrillo (como en una construcción) se va viendo cómo nace las funciones y todo eso que utilizamos en lenguajes de más alto nivel. Muchísimas gracias!

Obijuan

unread,
Dec 1, 2019, 4:45:55 AM12/1/19
to FPGAwars: explorando el lado libre
Vídeo 33. Sesión 9. Práctica 4: Registro ra. Dirección de retorno

Obijuan

unread,
Dec 2, 2019, 5:04:09 AM12/2/19
to FPGAwars: explorando el lado libre
Vídeo 34. Sesión 9. Práctica 4: Instrucciones jal y jalr




Saludos, Obijuan

Obijuan

unread,
Dec 2, 2019, 7:29:15 AM12/2/19
to FPGAwars: explorando el lado libre
Vídeo 35. Sesión 9. Práctica 4: Paso de parámetros

Veremos el convenio de paso de parámetros al llamar a las funciones

Obijuan

unread,
Dec 2, 2019, 9:20:23 AM12/2/19
to FPGAwars: explorando el lado libre

Vídeo 36. Sesión 9. Práctica 4: Separación de las subrutinas en ficheros independientes

Obijuan

unread,
Dec 2, 2019, 11:45:17 AM12/2/19
to FPGAwars: explorando el lado libre
Vídeo 37. Sesión 9. Práctica 4: Convenio de uso de los registros


Con esto terminamos la sesión 9 (Subrutinas de nivel 1)

Obijuan

unread,
Dec 5, 2019, 7:44:48 AM12/5/19
to FPGAwars: explorando el lado libre
Vídeo 38. Sesión 10. Práctica 4: Subrutinas multinivel


Saludos, Obijuan

Obijuan

unread,
Dec 10, 2019, 11:48:48 AM12/10/19
to FPGAwars: explorando el lado libre
Vídeo 39. Sesión 10. Práctica 4: Preservando registros

Al utilizar subrutinas hay que tener cuidado de no violar el convenio de uso de los registros, establecido en la ABI del RISC-V 
En este vídeo se explica qué registros se pueden usar y cómo, aunque todavía sin entrar en los detalles de la pila


Saludos, Obijuan

Obijuan

unread,
Dec 10, 2019, 1:09:37 PM12/10/19
to FPGAwars: explorando el lado libre

Obijuan

unread,
Dec 12, 2019, 1:36:31 PM12/12/19
to FPGAwars: explorando el lado libre
 
Vídeo 41. Sesión 10. Práctica 4: Usando la pila

Veremos un ejemplo de uso de la pila


Saludos, Obijuan

Obijuan

unread,
Dec 12, 2019, 2:15:04 PM12/12/19
to FPGAwars: explorando el lado libre
Vídeo 42. Sesión 10. Práctica 4: Otro ejemplo de uso de la pila

Obijuan

unread,
Dec 27, 2019, 6:39:46 AM12/27/19
to FPGAwars: explorando el lado libre
 Vídeo 43. Sesión 11. Práctica 4: Algoritmos y recursividad

Seguimos con el curso de Risc-v!


Saludos, Obijuan

Obijuan

unread,
Dec 27, 2019, 2:31:59 PM12/27/19
to FPGAwars: explorando el lado libre
 Vídeo 44. Sesión 11. Práctica 4: Factorial, mediante subrutinas anidadas

Obijuan

unread,
Dec 28, 2019, 7:02:51 AM12/28/19
to FPGAwars: explorando el lado libre
 Vídeo 45. Sesión 11. Práctica 4: Factorial, mediante subrutina recursiva

Obijuan

unread,
Dec 28, 2019, 7:53:38 AM12/28/19
to FPGAwars: explorando el lado libre

Obijuan

unread,
Dec 28, 2019, 3:03:01 PM12/28/19
to FPGAwars: explorando el lado libre
 Vídeo 47. Sesión 11. Práctica 4: Ejercicio recursivo resuelto: Longitud de una cadena

Obijuan

unread,
Dec 29, 2019, 3:01:20 PM12/29/19
to FPGAwars: explorando el lado libre
Vídeo 48. Comenzamos el bloque final: Memoria dinámica: Montículo y reserva de memoria

Obijuan

unread,
Dec 30, 2019, 6:02:16 AM12/30/19
to FPGAwars: explorando el lado libre

Obijuan

unread,
Dec 30, 2019, 2:03:30 PM12/30/19
to FPGAwars: explorando el lado libre

Obijuan

unread,
Dec 31, 2019, 2:14:02 AM12/31/19
to FPGAwars: explorando el lado libre
 
Vídeo 51. Recorriendo una lista de manera iterativa


Saludos, Obijuan

Obijuan

unread,
Dec 31, 2019, 2:26:55 AM12/31/19
to FPGAwars: explorando el lado libre
Vídeo 52. Recorriendo una lista de manera recursiva


Con este vídeo terminamos el bloque 5 y también el curso. Prepararé un vídeo final de despedida

¡Que el RISC-V os acompañe!

Obijuan

unread,
Dec 31, 2019, 3:57:59 AM12/31/19
to FPGAwars: explorando el lado libre
Vídeo 53: DESPEDIDA


Con esto hemos acabo el curso. Empezamos década nueva! y sin duda será la década del RISC-v y de las FPGAs libres!

¡Feliz año 2020!

Saludos, Obiuan

Alejandro Mejia

unread,
May 18, 2020, 7:24:28 PM5/18/20
to FPGAwars: explorando el lado libre
Hola ObiJuan,

una pregunta, una vez ensamblado un programa en RARS quedan dos espacios de memoria, la de programa iniciando en 0x0040000 y la de datos en 0x10010000 , cuando se exporta como bin solo se exporta una de las dos areas, la de programa se carga en la alhambra con 

iceprog -o 1M archivo.bin

Como se carga el area de datos??

Saludos

Obijuan

unread,
May 19, 2020, 8:03:35 AM5/19/20
to FPGAwars: explorando el lado libre
Hola,

La respuesta no es trivial. Depende de cómo tengas configurado tu mapa de memoria

Los datos pueden ser de sólo lectura (como por ejemplo cadenas con mensajes) o de lectura y escritura (las típicas variables).

En el caso de variables (lectura/escritura) tienen que estar en la memoria RAM (la dirección depende de dónde la tengas mapeada). Antes de ejecutarse tu programa deberá existir una rutina de inicialización, que lea los valores iniciales de las variables y los almacene en la memoria RAM. Estos valores pueden estar guardados en la flash. Así, el programa de inicialización los lee de la flash, los guarda en la RAM y le pasa el control a tu programa principal

En general, el proceso sería:

* Grabar el código con iceprog (en la dirección definida por el diseñador del sistema)
* Grabar los datos iniciales en otra memoria de la flash (definida también por el diseñador del sistema) con iceprog
* Tu código debe comenzar primero con la inicialización: lectura de los datos de la flash y copia a la RAM

Cuando programas en C, por ejemplo, eso lo hace automáticamente el compilador y el liinker. Añaden el código de inicialización (init.s) y luego saltan a tu programa principal (main.s)

Tengo pendiente hacer unos tutoriales sobre el manejo del RISC-V con la FPGA y el RARs, y dejar todo el ecosistema listo para hacerlo muy sencillo, pero todavía no he tenido tiempo

Saludos, Obijuan

Alejandro Mejia

unread,
May 19, 2020, 4:40:47 PM5/19/20
to fpga-wars-explora...@googlegroups.com
Hola Obijuan,

gracias por tu respuesta, te cuento cual es la idea.
Tomamos el procesador RISC V que tienes https://github.com/Obijuan/RISC-V-FPGA sintetizado para la Alhambra II con la version de 2 puertos (soc-rars-MMIO-2-ports.ice) luego realizamos el L4- Pract 2-1 con el 7 segmentos y se nos ocurrió hacer un programa que hiciera el contador hexadecimal de un digito y lo mostrara en el 7 segmentos haciendo un loop para hacer el sleep de 1 segundo (en el ejemplo uso ecall) , esto funciono perfecto en el RARS pero cuando intentamos subirlo a la Alhambra, nos encontramos con el tema de como cargar el area de datos (.data). El diseño no ha sido modificado y en teoria el area de datos deberia estar en 0x10010000 

Este es el programa de ejemplo
image.png
#-- Contador Hexadecimal 1 digito - Salida 7 Segmentos
             .data
digitos: .word 0XBF, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X67, 0x77, 0x7C, 0x39, 0x5e, 0x79 
            .text
            li s0, 0XFFFF0010 #dirección del siete segmentos
            la a1, digitos #dirección de los dígitos

inicio:   li x1, 0x0F
            la a1, digitos

bucle:  lw t0, 0(a1) #leo dígito de memoria
           sw t0, 0(s0) #mando al periférico
           addi a1, a1, 4

          # delay 1000 ms
          li a0, 1000
          li a7, 32
          ecall

          addi x1,x1,-1
          beqz x1, inicio

          b bucle

Me gustaria que me ampliaras un poco mas ese procedimiento del init.s para poder ejecutar el codigo en el Soc de la Alhambra

Una pregunta que herramienta de cross compiler usas para programar este SoC en C?

Saludos




Mailtrack Remitente notificado con
Mailtrack 19/05/20 15:36:47

--
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/5e658ccc-7fa4-4bc8-9b2d-c8ec2c548241%40googlegroups.com.


--
Alejandro Mejia A

Obijuan

unread,
May 20, 2020, 8:22:19 AM5/20/20
to FPGAwars: explorando el lado libre
Hola,

Todavía no he tenido tiempo de preparar ejemplos ni documentación para trabajar con el risv desde el RARs. Para probar ese ejemplo puedes mapearte una memoria RAM en la dirección donde está el segmento de datos y la inicializas con los valores del 7 segmentos. Estos valores los exportas directamente desde el RARs

El compilador que uso es el GCC, que está portado para el riscv

Puedes encontrar información en la documentación del taller que hicieron los de Radiona


En cuanto pueda haré ejemplos y documentación y os avisaré, pero ahora de momento estoy liado con otras cosas y no tengo tiempo

Saludos, Juan
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-lado-libre+unsubscribe@googlegroups.com.

Alejandro Mejia

unread,
May 20, 2020, 1:48:30 PM5/20/20
to fpga-wars-explora...@googlegroups.com
Mi aporte a los tutoriales!!!

El reto: Hacer un contador hexadecimal de un digito en un display 7
segmentos, que se ejecute en el PicoRv32 de Obijuan en la tarjeta Alhambra =
2

La dificultad:
La memoria RAM instanciada en el dise=C3=B1o de Obijuan es de 1k en las
direcciones 0x00 - 0x400
No hay una instancia de memoria RAM en la direcci=C3=B3n 0x10010000 por tan=
to se
plantean dos soluciones : 1- Cambiar la direcci=C3=B3n del bloque de memori=
a RAM
o instanciar una nueva RAM en la direcci=C3=B3n de memoria especifica
Por otro lado estamos hablando de una memoria RAM que se inicia vac=C3=ADa =
, por
tanto tenemos que implementar un c=C3=B3digo de inicializaci=C3=B3n de la m=
emoria con
los valores iniciales (la otra soluci=C3=B3n, seria instanciar un bloque RO=
M en
el dise=C3=B1o)

Soluci=C3=B3n implementada : Inicializar el bloque de memoria actualmente
instanciado en el PicoSoc (0x00-0x400) con los valores necesarios y
despu=C3=A9s recorrer la memoria tomando los valores a presentar

C=C3=B3digo ASM

#-- Ejemplo de escritura en un puerto de salida
#-- Sacar un valor binario por los LEDs

    #--- Direcci=C3=B3n donde est=C3=A1 mapeado el Puerto de salida
      li s0, SEG7 #direcci=C3=B3n del siete segmentos
      li s1, LEDS #direccion de los leds


inicio:  li x1, 0x0F #carga 0x0f en el registro x1 para hacer un contador
de 15 - 0
           li a1, RAM

bucle:  lw x2, 0(a1)  #leo d=C3=ADgito de memoria
            sw x1, 0(s1) #mando al perif=C3=A9rico valor de x1 (leds) (Como
debug)
            sw x2, 0(s0) #muestro el contador de digitos en 7 segmentos
            addi a1, a1, 4 #Aumento el puntero a la memoria para el
siguiente digito

delay:    li x31, 24000         #delay para poder visualizar el digito
loop:     addi x31,x31,-1
             bnez x31, loop

             addi x1,x1,-1   #x1=3Dx1-1 (contador de 15 a 0)
             beqz x1, inicio  #salta a inicio si ya conto los 15 d=C3=ADgit=
os

             b bucle #muestra el siguiente d=C3=ADgito


El resultado: (adjunto video)



Mailtrack Remitente notificado con
Mailtrack 20/05/20 12:47:57

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.


--
Alejandro Mejia A

--
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/a430eae4-487f-4e6a-baf7-821c950776e0%40googlegroups.com.
7seg.mp4

Obijuan

unread,
May 21, 2020, 4:58:19 AM5/21/20
to FPGAwars: explorando el lado libre
¡¡ESTUPENDO!!

Muchsimas gracias por tu aportación!!! 🙂

En cuanto pueda haré documentación para continuar con el curso del risc-v, pero esta vez desde un punto de visto práctico, tocando hardware real, y probando todos los ejemplos del RARs en un sistema real en la FPGA 
Ahora mismo tengo la lista de cosas por hacer desbordada y todavía no sé cuando podré continuar con el RISC-v

Este ejemplo será de muchísima ayuda

Saludos, Obijuan
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-lado-libre+unsubscribe@googlegroups.com.


--
Alejandro Mejia A

--
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-lado-libre+unsubscribe@googlegroups.com.

Alejandro Mejia

unread,
May 21, 2020, 10:03:23 AM5/21/20
to fpga-wars-explora...@googlegroups.com
Hola Juan,
Puedo ayudarte con eso!! en este momento estoy precisamente dictando el curso en mi universidad y el enfoque es precisamente probar todo en hardware real (Primordialmente Alhambra y BlackIce MX) puedo ir enviandote material para que hagamos un trabajo conjunto

En esta ocasion te envio el tutorial para adicionar puertos al diseño del SoC Demo :

La version existente del SoC demo cuenta con dos puertos el primero con salidas led para debug y un puerto SPI a una pantalla de 7 Segmentos (que en esta ocasion no la tenia disponible, por esa razon decidimos adicionar el puerto de conexion digital a un display de 7 Segmentos cableado) y aca el proceso de integracion:


1.  Cree una copia del diseño original de Soc-Demo y abrala en IceStudio
2.  En una segunda ventana abra el diseño : soc-rars-MMIO-2-ports.ice y copie el puerto de salida 2 

image.png

peguelo en el primer diseño.

3. Tome nota de la salida rdy nombrada como io2_rdy, esta señal le indica al SoC que la salida ha terminado de realizar sus funciones 
4. Busque el modulo Logica de Acceso y haga doble click sobre la compuerta OR

image.png
5. Desbloquee la edicion del modulo y adicione una nueva entrada

image.png
image.png
image.png
image.png

image.png
6. Cierre el candado y regrese al diseño top

7. Cree una nueva entrada con el nombre de la señal de Ready del nuevo puerto y conectela a la compuerta OR
image.png

image.png

8. Verifique su diseño, si no tiene errores, ya lo puede cargar a la Alhambra 2 y usar el nuevo puerto de salida en la dirección que haya especificado (Para el ejemplo 0xFFFF0010)

9. Test:
Incluyo una modificación del código en C de ejemplo para usar el nuevo puerto, si el comando es 1 , 2 o 3 va a mostrarlo en el puerto del 7 segmentos



Mailtrack Remitente notificado con
Mailtrack 21/05/20 09:02:47

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.


--
Alejandro Mejia A

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


--
Alejandro Mejia A

--
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/b91d96c9-6f87-4d77-866c-5f32d3501f97%40googlegroups.com.
test.c

Rafa Couto

unread,
Dec 26, 2020, 8:03:21 AM12/26/20
to fpga-wars-explora...@googlegroups.com

No había vuelto a tocar ensamblador desde el 8086 y estoy disfrutando como un enano en el RARS. Una pregunta: sería posible sintetizar el RISC-V FPGA para el iCE40HX1K de la Alhambra I?

Bestial el curso, enhorabuena! Infinitas gracias y más allá por hacer que el material sea libre :-)


--
Rafa Couto
GPG key - http://bit.ly/GPG-D76ABDEC

Obijuan

unread,
Dec 28, 2020, 6:17:17 AM12/28/20
to FPGAwars: explorando el lado libre
Hola Rafa!

¡Gracias! 😊️

No he probado a sintetizarlo en la Alhambra I, pero sí que se puede. Hay gente que lo tiene sintetizado en la icestick que lleva la misma FPGA que la Alhambra I

Aquí puedes encontrar buen material



También, para la parte de teoría del curso de arquitectura de computadores estams viendo el nanoRisc-V: una versión pequeña del RISC-V que tiene sólo 8 instrucciones:


La implementación en icestudio la estoy haciendo aquí:


Pero todavía no lo tengo documentado

Saludos, Obijuan
Reply all
Reply to author
Forward
0 new messages