Skip to content
Juan Gonzalez-Gomez edited this page Dec 24, 2019 · 39 revisions

LOG

Viernes, 25-Oct-2019

Voy a empezar a implementar bloques para realizar entrada/salida directamente desde los circuitos hardware. Cómo molaría tener una consola, con comandos, que esté implementandad totalmente en hardware 😄

Estos bloques además, permitirán depurar los circuitos más fácilmente

Vamos a partir del bloque serie de la colección Jedi. Para nosotros será una máquina básica, cuya función es la de transmitir un byte por el puerto serie. Como lo voy a tratar como una máquina, voy a modificar el compoente de la colección Jedi para darle el look de máquina

Sábado, 27-Oct-2019

Ya tengo el bloque putc-bit, para enviar el estado de un bit. Voy a hacer la versión transparente (TC: Transparent channel) que permite encadenarlos. He hecho pruebas con caracteres normales y la cosa funciona bastante bien :-)

El componente putc-bit-TC también está listo. on este componente ya se puede hacer una "tabla de verdad" cutre, que aparezca bien muestreando a una frecuencia fija, o bien cuando hay un cambio en las entradas

Sábado, 02-Nov-2019

El putc-bit (-TC) está funcionando muy bien. Ahora hay que permitir que se pueda enviar un carácter cualquiera Putc-char: ejemplo 2 hecho: Imprimir el estado del pulsador y un /n al final... OK!

Para probarlo con el tio hay que ejecutar esta línea:

tio -m INLCRNL /dev/ttyUSB1

El ejemplo 2 funciona muy bien directamente desde el terminal. Para configurarlo hay que poner:

stty -F /dev/ttyUSB1 raw ispeed 115200 ospeed 115200 cs8 -ignpar -cstopb -echo

Y luego con sólo hacer:

cat /dev/ttyUSB1

ya vemos lo que nos envía la placa :-) ¡¡Mola!!!

Ejemplo 3: puerta not. Se muestrean la entrada y la salida cada 100ms

Miércoles, 06-Nov-2019

Ejemplo 4 del Putc-char listo: tabla de verdad de la puerta not. Se envía el estado de la entrada y la salida cada vez que hay un cambio en el estado de la entrada

Putc-char-TC: Ejemplo 1 y 2 listos!

Jueves, 07-Nov-2019

Ya tengo los ejemplos 3 y 4 de Putc-char-TC. Funcionan muy bien! :-) He hecho el ejemplo de monitorizar una puerta NOT, y va de lujo

Lo siguiente será meter el componente para las cadenas, que es super importante: PRINT!

¡Ya tengo una primera versión del bloque de Print! Voy a hacer algunons ejemplos

Para pasar de texto a ASCII se puede usar esta línea en python:

print(" ".join(["{:02X}".format(ord(i)) for i in "Mi cadena de texto"]) + " 00")

Viernes, 08-Nov-2019

Ejemplos a hacer:

  • Ejemplo 1: Imprimir dos cadenas, una al apretar el pulsador 1 y otra al apretar el 2 (OK)
  • Ejemplo 2: Lo mismo pero con ASCII ART (OK)
  • Ejemplo 3: Pantalla con mensaje inicial, al hacer reset: "HW STDIO...". Con el pulsador SW1 se cambia el estado de un LED (toggle) y se imprime la cadena OK!. Con el pulsador SW2 se imprime el estado actual del LED: ON u OFF

Para hacer pruebas con el terminal hw de entrada, se puede probar el ejemplo 3 pero usando la tecla r para "Leer" el estado del LED. Luego ampliarlo con otras teclas para cambiar las entradas

Para los mensajes en ARTE ASCII estoy usando este enlace: http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20

Domingo, 17-Nov-2019

Ya tengo listo el bloque Getc-bit para recibir bits. Funciona muy bien!

TODO: Ejemplo 2 del getc-bit: Encender y apagar dos leds con 0,1 y 's' y 'n' TODO: InputLn-bit: para introducir un bit, con edición

Lunes, 18-Nov-2019

Ejemplo 2 del getc-bit Listo! Se encienden y apagan los leds con 0,1 y 's' y 'n'

Ejemplo 3 del getc-bit Listo!: Preguntar inicialmente por el encendido de un circuito de prueba

TODO: Input-bit: para introducir un bit, con o sin eco. Es necesario porque hay que gestionar la habilitación o no de los receptores. Así, el receptor se convierte también en una máquina

Miércoles, 20-Nov-2019

Ya tengo los tres ejemplos del input-bit listos. También he hecho el bloque printLN-OK y su depurador correspondiente. Es el momento de hacer la Release 0.1. OK!

Miércoles, 27-Nov-2019

Ya tengo una versión de print para el bus stdout (print-asc). Se le pasa como parámetros caracteres ASCII (Colocando su código ascii en la memoria). Voy a modificar todos los ejemplos para usar este nueva rutina de print

¡Listo! El print-TC ya está eliminado y se ha sustituido por print-asc

Jueves, 28-Nov-2019

¡Ya tengo el primer bloque print-str funcionando! Es para cadenas de 4 caracteres, y puesto que hay un 0 al final, solo podemos imprimir mensajes de 3 caracteres. Por ejemplo "OK\n" :-)

Antes de seguir voy a explorar más el bug que aparece en las memorias inicializadas desde cadena de texto al hacer la verificación:

En la línea:

localparam LEN = $size(STR)/8;

Sale este error:

Unable to evaluate parameter LEN value : ($size(<STR="\00\000", wid=16))/(32'b0000000000000000000000000001000)

Lo he reducido a lo mínimo, este código da error:

localparam STR = "hola";
localparam LEN = $size(STR);

OK. Ese error se soluciona usando $bits en vez de size

localparam LEN = $bits(STR);

Lo he probado y va bien... pero aparece otro error en el iverilog:

 mem_8[LENT-1 - j] = str[ 8*(j+E)+1 : 8*(j+E+1) ];

El mensaje de error es:

A reference to a wire or reg ('j') is not allowed in a constant expression.
Part select expressions must be constant

El código mínimo que provoca el error es este:

reg [7:0] mem_8 [0:4];
reg [8:1] str = "hola";

integer j;
initial begin
  
  for (j = 0; j < 4; j++)
    mem_8[j] = str[j+1: j];

end

Parece que al verilog lo que no le gusta es usar el operador :, pero si se usa la variable j parece que se lo traga... Una posible solución sería obtener los 8 bits del caracter a pelo, usando concatenación de bits. Este es un ejemplo con 2 bits, que no da error:

mem_8[j] = {str[j], str[j-1]};

¿Funcionará para 8?

¡¡¡Siiiiii!!!! Joder... parece que funciona!!!! Ya no da el error en verificación y parece que sintetiza bien!! Perfecto! Ya tengo los bloques print-str-2 y print-str-4 operativos, con sus ejemplos de prueba :-)

Martes, 03-Dic-2019

Ya tengo listas todas las memorias que faltan: 64B, 128B y 256B, tanto de inicialización con código ASCII como con cadenas

  • NEXT: Implementar print-asc-128B y sus circuitos implicados (máquina de contar con stop)

Jueves, 05-Dic-2019

Listo print-asc-128 y print-str-128

  • NEXT: print-asc-256 y print-str-256

Lunes, 9-dic-2019

Ya tengo todos los ejemplos migrados a los buses stdin y stdout. Primer ejemplo de hcalc-0.1, un calculadora de bit, que usa un acumulador (acc = acc + op). El usuario introduce el operando binario (0,1) y se va acumulando. El resultado se muestra sólo en un bit

Next: Calculadora de 1 bit de 2 operandos. Hay dos versiones, la version de terminal y la version que vaya rellenando op1 + op2 = res.... OK!

Next: Pruebas de la memoria de 2x1 bits...OK!
Next: Pruebas de la pila...

Martes, 24-dic-2019

Recordatorio:

tio -m INLCRNL,ODELBS,OCRNL /dev/ttyUSB1