Candid Moe's user avatar
Candid Moe's user avatar
Candid Moe's user avatar
Candid Moe
  • Member for 5 years, 7 months
  • Last seen more than 5 years ago
  • Springfield
About

Programando desde 1975.

Hardware: Arduino, ESP8266, ESP32, FPGA.

Software: Python, Linux, Verilog.

Proyecto: Construir una CPU J1 en una FPGA.

2/Dic/23 - Un emulador es realmente necesario

Hasta el momento he depurado los programas en assembler usando las facilidades de Verilog + gtkwave antes de pasarlos al FPGA, pero ahora el código Verilog entra en un loop infinito cuya causa no acierto a descubrir.

Para seguir avanzando, escribi un emulador de la J1s en Python, y funciona de maravillas. Puedo cargar programas, examinar/modificar la memoria, colocar breakpoint y tracear listando los códigos nmemotécnicos:

j1emu: Un emulador para la cpu j1s.
Escriba '?' para ayuda en línea.
Emulador escuchando en 127.0.0.1:8085 ... 
Conectado desde 127.0.0.1:45192
>load tests/nuc.hex
>break 3
breakpoint: 0x0003
>trace 100
0000 d555 0x5555         | 5555
0001 800f 0x000f         |    f 5555
0002 4111 call 0x0111    |    f 5555
0111 6011 dup            |    f    f 5555
0112 410d call 0x010d    |    f    f 5555
010d 9000 0x1000         | 1000    f    f 5555
010e 6203 +              | 100f    f 5555
010f 5000 icall 0x0000   |    f 5555
100f 0014 0x0014         |   14    f 5555
0110 608c ret            |   14    f 5555
0113 6110 swap           |    f   14 5555
0114 40e6 call 0x00e6    |    f   14 5555
00e6 8001 0x0001         |    1    f   14 5555
00e7 628f %+             |   10   14 5555
0115 619c %swap          | *** Breakpoint at 0x0003 ***
---
PC: 0003 40ea call 0x00ea 
ST:   14   10 5555
RT: 

>

El emulador usa el teclado/pantalla para recibir comandos y mostrar resultados. La conexión del usuario al computador emulado (cpu J1s, memoria, IO) se hace vía telnet. Dos ventanas separadas facilitan la depuración.

8/Nov/23 - Todo de nuevo

Volví a empezar por n-esima vez este proyecto. Deje LC3 de lado; tener que administrar el uso de registros se volvió una carga pesada de llevar.

Volví al diseño del J1. Es una máquina de stack con un juego de instrucciones muy simple. Use como base la versión J1a para construir J1s, la versión apropiada para la FPGA Icesugar.

He trabajado en paralelo depurando la CPU con Verilog y el kernel en Assembler. El Assembler lo escribi en Python y produce las correspondientes imagenes de RAM. Estas se incluyen en el fuente Verilog, que se compila y se flashea en la FPGA.

El kernel actual solo sabe leer y almacenar una línea de texto recibido por consola. El siguiente paso será escribir la rutina para parsear y ejecutar los comandos Forth recibidos.

En resumen: he llegado más lejos que nunca y lo que me queda es principalmente programación tradicional en Assembler. Con eso se implementa un subconjunto mínimo de Forth. A partir de ahí todo sigue en Forth.

Badges
This user doesn’t have any gold badges yet.
This user doesn’t have any silver badges yet.
1
bronze badge
Posts

This user hasn’t posted yet.