CPU de 1 bit, la menos potente del mundo

dancresp
Mensajes: 6178
Registrado: 13 Nov 2010 02:08
Ubicación: Barcelona
Agradecido : 632 veces
Agradecimiento recibido: 953 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor dancresp » 27 Dic 2023 01:57

Último mensaje de la página anterior:

Tengo una duda con esta CPU de 1 supuesto bit...

Se programa con los 4 microswitch que hay en la placa.
Entonces, ¿esto no lo convierte en una CPU de 4 bits con un único nibble de memoria?
Buscando la IP de la W.O.P.R. he encontrado mi índice

mvalder
Mensajes: 549
Registrado: 21 May 2023 02:04
Agradecido : 489 veces
Agradecimiento recibido: 268 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor mvalder » 27 Dic 2023 04:41

dancresp escribió:Tengo una duda con esta CPU de 1 supuesto bit...

Se programa con los 4 microswitch que hay en la placa.
Entonces, ¿esto no lo convierte en una CPU de 4 bits con un único nibble de memoria?

Igual digo tonterías porque yo no sé apenas de esto. He tenido que consultar el manual del Z80 para acordarme de cómo se formaban las instrucciones (opcodes + operandos). Y eso que de joven ensamblaba a mano y me funcionaron los programas...cahis.

He mirado la definición de las instrucciones en el readme.md del github en inglés:
Description

Left switch: Controls MUX to choose whether to update Reg A or PC
Right switch: Controls second XOR operand or sets destination PC address

LR
00: MUX=0, RA=RA^0=RA, PC=!PC
01: MUX=0, RA=RA^1=!RA, PC=!PC
10: MUX=1, RA=RA, PC=0
11: MUX=1, RA=RA, PC=1

In regular words:
OFF, OFF will preserve the value of A and advance PC (0->1, 1->0)
OFF, ON will invert the value of A (0->1, 1->0) and advance PC (0->1, 1->0)
ON, OFF will preserve the value of A and set PC to 0
ON, ON will preserve the value of A and set PC to 1


Y luego la traducción al inglés del index.md de los docs (lo marco como código para que separe algo las columnas).

Código: Seleccionar todo

item            spec
general purpose register      1bit x 1
address space            2bit
address bus width         1bit
ROM capacity             4bit
instruction set            ADD, JMP
program counter         1bit
flag register            Unimplemented
arithmetic operations      1bit addition (XOR)
clock frequency            Approximately 1Hz
Total number of ICs          Four


Creo que el invento es una CPU de 1 bit con:
    - registros de 1 bit (uno solo, acumulador). La palabra = 1 bit y, por tanto, eso da nombre a la CPU. Sin embargo, existe una "palabra larga" de 2 bits para las instrucciones.
    - un juego de 2 instrucciones que ocupan 2 bits cada una (uno por el opcode y otro por el operando).
    - El espacio de direcciones (de palabras) de memoria sería de 4 bits, aunque no lo dice así la documentación. En total, son los 4 microinterruptores de la ROM. Eso requeriría un bus de direcciones de 2 bits para dar un total de 2^2 = 4 palabras, pero.. ver más abajo.
    - No hay RAM. El LED de salida se controla con el Registro Acumulador.
    - El contador de programas tiene 1 bit (dos valores posibles, 0 y 1).
    - El bus de direcciones es de 1 bit y, por tanto, el espacio de direcciones son 2 bits. Estas direcciones son para el contador de programa, no las palabras de la RAM/ROM. Podríamos decir que el contador (y el bus) funciona con la "palabra larga" de 2 bits.

Y entonces:
    - La capacidad de 4 bits (palabras) para la ROM de la 1-bit CPU es consistente con la capacidad de direccionamiento de un Z80 (8 bits). El Z80 tiene un espacio de memoria (en palabras =bytes) que da el bus de direcciones (con 16 bits, el doble de los 8 bits de registros y datos). 2^16 = 65536 = 64kB (64 k palabras).
    - Despista un poco eso de que el el contador de programa de la 1-bit CPU no tenga la misma métrica que el espacio de direcciones de palabras y se mueva de dos en dos bits por las palabras (cortas) de la ROM. En principio, uno esperaba que la CPU de 1 bit tuviera un bus de direcciones de 2 bits, pero no es necesario en este caso.

Y ya está bien de rollo, que no son horas.

Avatar de Usuario
ron
Mensajes: 21771
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 3833 veces
Agradecimiento recibido: 4681 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor ron » 27 Dic 2023 07:36

Pues en Japón debe ser el tamagotchi de moda porque se ha agotado. xD

Out of Japan: This ultra-low-end 1-bit DIY "computer" sold out immediately after launch
No display outputs, no peripheral inputs, just some LEDs to prove it's working


-507

Avatar de Usuario
cacharreo
Mensajes: 757
Registrado: 03 Jun 2023 09:37
Ubicación: /home/cacharreo/
Agradecido : 244 veces
Agradecimiento recibido: 427 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor cacharreo » 27 Dic 2023 08:07

ron escribió:Pues en Japón debe ser el tamagotchi de moda porque se ha agotado. xD

Como las combas inalámbricas de AliExpress. -banghead

dancresp escribió:Tengo una duda con esta CPU de 1 supuesto bit...
Se programa con los 4 microswitch que hay en la placa.
Entonces, ¿esto no lo convierte en una CPU de 4 bits con un único nibble de memoria?

Más bien 4 bits de memoria (4 palabras de 1 bit).
© cacharreo

dancresp
Mensajes: 6178
Registrado: 13 Nov 2010 02:08
Ubicación: Barcelona
Agradecido : 632 veces
Agradecimiento recibido: 953 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor dancresp » 27 Dic 2023 10:48

Según el manual hay estas combinaciones:

Código: Seleccionar todo

01 23 | Function | Looped C equivalent | Description
----------------------------------------------------------------------------
00 00 | NOP, NOP | void; void;         | Do nothing
00 01 | NOP, INV | void; a=!a;         | Half frequency blink
00 10 | NOP, NOP | void; void;         | Do nothing
00 11 | NOP, HLT | void; while(1);     | Halt forever
01 00 | INV, NOP | a=!a; void;         | Half frequency blink
01 01 | INV, INV | a=!a; a=!a;         | Maximum frequency blink
01 10 | INV, NOP | a=!a; void;         | Half frequency blink
01 11 | INV, HLT | a=!a; while(1);     | Usually one state change, then halt
10 00 | HLT, NOP | while(1); void;     | Halt forever
10 01 | HLT, INV | while(1); a=!a;     | At most one state change, then halt
10 10 | HLT, NOP | while(1); void;     | Halt forever
10 11 | HLT, HLT | while(1); while(1); | Halt forever
11 00 | NOP, NOP | void; void;         | Do nothing
11 01 | NOP, INV | void; a=!a;         | Half frequency blink
11 10 | NOP, NOP | void; void;         | Do nothing
11 11 | NOP, HLT | void; while(1);     | Halt forever


cacharreo escribió:Más bien 4 bits de memoria (4 palabras de 1 bit).

Vale, serían 4 bits de memoria, pero dispuestos en 2 bits por cada una de las 2 direcciones de memoria que puede direccionar... creo.

Es para volverse loco de lo simple que es !!! -banghead
Buscando la IP de la W.O.P.R. he encontrado mi índice

mvalder
Mensajes: 549
Registrado: 21 May 2023 02:04
Agradecido : 489 veces
Agradecimiento recibido: 268 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor mvalder » 27 Dic 2023 10:58

dancresp escribió:Según el manual hay estas combinaciones:

Código: Seleccionar todo

01 23 | Function | Looped C equivalent | Description
----------------------------------------------------------------------------
00 00 | NOP, NOP | void; void;         | Do nothing
00 01 | NOP, INV | void; a=!a;         | Half frequency blink
00 10 | NOP, NOP | void; void;         | Do nothing
00 11 | NOP, HLT | void; while(1);     | Halt forever
01 00 | INV, NOP | a=!a; void;         | Half frequency blink
01 01 | INV, INV | a=!a; a=!a;         | Maximum frequency blink
01 10 | INV, NOP | a=!a; void;         | Half frequency blink
01 11 | INV, HLT | a=!a; while(1);     | Usually one state change, then halt
10 00 | HLT, NOP | while(1); void;     | Halt forever
10 01 | HLT, INV | while(1); a=!a;     | At most one state change, then halt
10 10 | HLT, NOP | while(1); void;     | Halt forever
10 11 | HLT, HLT | while(1); while(1); | Halt forever
11 00 | NOP, NOP | void; void;         | Do nothing
11 01 | NOP, INV | void; a=!a;         | Half frequency blink
11 10 | NOP, NOP | void; void;         | Do nothing
11 11 | NOP, HLT | void; while(1);     | Halt forever


cacharreo escribió:Más bien 4 bits de memoria (4 palabras de 1 bit).

Vale, serían 4 bits de memoria, pero dispuestos en 2 bits por cada una de las 2 direcciones de memoria que puede direccionar... creo.

Es para volverse loco de lo simple que es !!! -banghead

Sí, es lo que yo decía de que el contador de programa salta de dos en dos bits. Como solo hay dos posiciones posibles para el contador, el bus de direcciones solo necesita un bit.

Avatar de Usuario
cacharreo
Mensajes: 757
Registrado: 03 Jun 2023 09:37
Ubicación: /home/cacharreo/
Agradecido : 244 veces
Agradecimiento recibido: 427 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor cacharreo » 28 Dic 2023 20:32

mvalder escribió:Sí, es lo que yo decía de que el contador de programa salta de dos en dos bits. Como solo hay dos posiciones posibles para el contador, el bus de direcciones solo necesita un bit.

El contador de programa salta de bit en bit, es decir PC solo toma los valores 0 y 1, aunque las instrucciones tienen 2 bits (opcode y operando). Esta CPU no tiene que leer el primer bit de instrucción y después el operando porque están dichos bits están directamente conectados a los dos multiplexores y a la puerta XOR, el primer conmutador DIP-2 (con sus dos interruptores) se habilita cuando PC=0 y el segundo cuando PC=1.

A todos los efectos los dos bits de cada instrucción se "leen" a la vez. Los dos diodos bajo cada conmutador DIP-2 y el inversor entre ambos conmutadores son los que controlan qué instrucción se ejecuta según el valor de PC (que lo lleva el flip-flop que está más abajo en el esquema).

El primer bit de cada instrucción controla qué valor seleccionan los dos multiplexores y el segundo bit el valor a seleccionar.

Para que se comprenda mejor cómo trabaja os dejo este enlace con el diseño hecho para Logisim y ahí podéis verlo funcionando, cambiar las instrucciones sobre la marcha, ver los efectos, etc. No es lo más entretenido del mundo en estas fechas pero sí mucho más ilustrativo que ver solo el esquema. ;)

La siguiente tabla muestra las posibles combinaciones de instrucciones numerando los conmutadores DIP de 0 a 3 de izquierda a derecha.

Código: Seleccionar todo

01 23 | Instrucciones | Descripción
----------------------------------------------------------------------------
00 00 | NOP, NOP      | No hace nada
00 01 | NOP, INV      | El LED RegA parpadea a 1/4Hz
00 10 | NOP, NOP      | No hace nada
00 11 | NOP, HLT      | Parada (infinita)
01 00 | INV, NOP      | El LED RegA parpadea a 1/4Hz
01 01 | INV, INV      | El LED RegA parpadea a 1/2Hz
01 10 | INV, NOP      | El LED RegA parpadea a 1/4Hz
01 11 | INV, HLT      | Parada o cambio de estado en RegA y después, parada
10 00 | HLT, NOP      | Parada (infinita)
10 01 | HLT, INV      | Parada o cambio de estado en RegA y después, parada
10 10 | HLT, NOP      | Parada (infinita)
10 11 | HLT, HLT      | Parada (infinita)
11 00 | NOP, NOP      | No hace nada
11 01 | NOP, INV      | El LED RegA parpadea a 1/4Hz
11 10 | NOP, NOP      | No hace nada
11 11 | NOP, HLT      | Parada (infinita)

Las frecuencias de parpadeo son aproximadas, tened en cuenta que el reloj de esta CPU en realidad oscila alrededor de los 971mHz.
© cacharreo

mvalder
Mensajes: 549
Registrado: 21 May 2023 02:04
Agradecido : 489 veces
Agradecimiento recibido: 268 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor mvalder » 28 Dic 2023 22:16

cacharreo escribió:A todos los efectos los dos bits de cada instrucción se "leen" a la vez. Los dos diodos bajo cada conmutador DIP-2 y el inversor entre ambos conmutadores son los que controlan qué instrucción se ejecuta según el valor de PC (que lo lleva el flip-flop que está más abajo en el esquema).

El primer bit de cada instrucción controla qué valor seleccionan los dos multiplexores y el segundo bit el valor a seleccionar.

Para que se comprenda mejor cómo trabaja os dejo este enlace con el diseño hecho para Logisim y ahí podéis verlo funcionando, cambiar las instrucciones sobre la marcha, ver los efectos, etc. No es lo más entretenido del mundo en estas fechas pero sí mucho más ilustrativo que ver solo el esquema. ;)


Muchas gracias, cacharreo. ¡Cómo te lo has currado! Como dije en mi presentación hace meses, yo no sé electrónica;, pero voy aprendiendo con este foro, je, je. Me he instalado el Logisim y lo miraré con detalle.

Me da la impresión de que estamos diciendo lo mismo de dos formas distintas. Intento explicarme:
    Numeramos los bits (microinterruptores) de izquierda a derecha, como dices: b0 (opcode), b1 (operando), b2 (opcode), b3 (operando).
    El contador de programa tiene un solo bit.
    PC=0 - > apunta a la instrucción que comienza por el bit b0 y está formada por b0 y b1.
    PC=1 - > apunta a la instrucción que comienza por el bit b2 y está formada por b2 y b3.

Como dices, en realidad, solo se lee el opcode en el b0 o el b2, y los operandos (b1 o b3) no se direccionan.
    A eso es a lo que yo me refería (quizá impropiamente) con que el contador de programa salta de dos en dos bits... en el espacio de la ROM formado por las direcciones 0-1-2-3. La instrucción JMP 1 significa: lee el tercer bit (b2) y ejecuta ese opcode.
    El valor del PC salta de bit en bit, la dirección (medida en bits) a la que se refiere en ROM saltaría de dos en dos.

1-bit-CPU.png
1-bit-CPU.png (34.31 KiB) Visto 568 veces


Ya digo que en realidad solo soy aficionado a estas cosas. Muchas gracias de nuevo por el trabajo.

Avatar de Usuario
cacharreo
Mensajes: 757
Registrado: 03 Jun 2023 09:37
Ubicación: /home/cacharreo/
Agradecido : 244 veces
Agradecimiento recibido: 427 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor cacharreo » 28 Dic 2023 22:25

mvalder escribió:Muchas gracias, cacharreo. ¡Cómo te lo has currado! Como dije en mi presentación hace meses, yo no sé electrónica;, pero voy aprendiendo con este foro, je, je.

De nada, por mi parte estoy encantado de tener un sano debate sobre estos temas. ;)

mvalder escribió:Me he instalado el Logisim y lo miraré con detalle.

Es una pena que le falten los diodos y los interruptores (conmutadores) SPST normalitos. El circuito hubiera quedado más simple y visual de contar con esos componentes.

mvalder escribió:Me da la impresión de que estamos diciendo lo mismo de dos formas distintas. Intento explicarme:
    Numeramos los bits (microinterruptores) de izquierda a derecha, como dices: b0 (opcode), b1 (operando), b2 (opcode), b3 (operando).
    El contador de programa tiene un solo bit.
    PC=0 - > apunta a la instrucción que comienza por el bit b0 y está formada por b0 y b1.
    PC=1 - > apunta a la instrucción que comienza por el bit b2 y está formada por b2 y b3.

Entendí lo que querías decir pero lo que quería destacar es que a nivel físico, dejamos el lógico de lado, los dos bits de cada instrucción están conectados y son leídos/ejecutados -que no deja de ser una forma de hablar a la vista del esquema- simultáneamente en el mismo momento que se fija el valor del reloj. En una CPU normal no habría ninguna duda, primero se lee b0, después b1, después b2, después b3,... pero en este cacharro no hay memoria sino interruptores y los así llamados bits de las instrucciones están directamente cableados a la lógica de control (a modo de bus de control o de instrucciones). Nada que ver con RAM, ROM o similares y por eso que puede confundir buscar la analogía.
© cacharreo

mvalder
Mensajes: 549
Registrado: 21 May 2023 02:04
Agradecido : 489 veces
Agradecimiento recibido: 268 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor mvalder » 28 Dic 2023 22:34

cacharreo escribió:Entendí lo que querías decir pero lo que quería destacar es que a nivel físico, dejamos el lógico de lado, los dos bits de cada instrucción están conectados y son leídos/ejecutados -que no deja de ser una forma de hablar a la vista del esquema- simultáneamente en el mismo momento que se fija el valor del reloj. En una CPU normal no habría ninguna duda, primero se lee b0, después b1, después b2, después b3,... pero en este cacharro no hay memoria sino interruptores y los así llamados bits de las instrucciones están directamente cableados a la lógica de control. Nada que ver con RAM, ROM o similares y por eso que puede confundir buscar la analogía.

Gracias por destacar el nivel físico, cacharreo. El diseño del circuito hace que el contador de programa solo tenga un bit.

Por eso se me ocurrió decir por ahí arriba que en la ROM no se operaba sobre palabras (1 bit) sino sobre palabras largas (2 bits). Dicho de otro modo: sólo hay dos direcciones, la 0 y la 1, que son a las que se refiere el PC.

Edito:
Y, en efecto, la segunda mitad de la "palabra larga" no se "lee". Y la primera mitad, tampoco, je, je.

dancresp
Mensajes: 6178
Registrado: 13 Nov 2010 02:08
Ubicación: Barcelona
Agradecido : 632 veces
Agradecimiento recibido: 953 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor dancresp » 28 Dic 2023 22:50

Sea como sea, no deja de ser curioso lo que da que hablar un cacharro tan simple.

Teniendo el esquema del circuito, al final habrá que hacer una tirada aunque solo sea para tenerlo.
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
cacharreo
Mensajes: 757
Registrado: 03 Jun 2023 09:37
Ubicación: /home/cacharreo/
Agradecido : 244 veces
Agradecimiento recibido: 427 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor cacharreo » 29 Dic 2023 08:22

dancresp escribió:Teniendo el esquema del circuito, al final habrá que hacer una tirada aunque solo sea para tenerlo.

Y con el de Naoto64 agotado no queda otra. ;)
© cacharreo

Avatar de Usuario
cacharreo
Mensajes: 757
Registrado: 03 Jun 2023 09:37
Ubicación: /home/cacharreo/
Agradecido : 244 veces
Agradecimiento recibido: 427 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor cacharreo » 29 Dic 2023 15:38

dancresp escribió:Teniendo el esquema del circuito, al final habrá que hacer una tirada aunque solo sea para tenerlo.


Mide 100x25mm. y está pendiente de unos retoques en la serigrafía ¿cómo lo véis así? ¿que quedaría por añadir?

Imagen Imagen Imagen Imagen Imagen
© cacharreo

mvalder
Mensajes: 549
Registrado: 21 May 2023 02:04
Agradecido : 489 veces
Agradecimiento recibido: 268 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor mvalder » 29 Dic 2023 15:59

cacharreo escribió:
dancresp escribió:Teniendo el esquema del circuito, al final habrá que hacer una tirada aunque solo sea para tenerlo.


Mide 100x25mm. y está pendiente de unos retoques en la serigrafía ¿cómo lo véis así? ¿que quedaría por añadir?

Imagen Imagen

¡Fantástico! Me pido uno; montado, por favor.

Para rizar el rizo:
- ¿Podría llevar unas instrucciones serigrafiadas en la cara de abajo?
- Si pudiera funcionar con batería ya sería la bomba. Claro que implicaría aumentar algo el tamaño y poner algún componente más.

Sea como sea, si se hace la tirada, no me la pierdo. Muchas gracias, cacharreo.

Avatar de Usuario
cacharreo
Mensajes: 757
Registrado: 03 Jun 2023 09:37
Ubicación: /home/cacharreo/
Agradecido : 244 veces
Agradecimiento recibido: 427 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor cacharreo » 29 Dic 2023 16:23

mvalder escribió:- ¿Podría llevar unas instrucciones serigrafiadas en la cara de abajo?

Así está.

mvalder escribió:- Si pudiera funcionar con batería ya sería la bomba. Claro que implicaría aumentar algo el tamaño y poner algún componente más.

Lo he tenido en cuenta pero el soporte para la batería ocupa demasiado (y aparte la electrónica asociada). En este tamaño actual 100x25mm se están dentro de la oferta de los fabricantes de placas y por encima de 100mm. el precio se dispara.
© cacharreo

dancresp
Mensajes: 6178
Registrado: 13 Nov 2010 02:08
Ubicación: Barcelona
Agradecido : 632 veces
Agradecimiento recibido: 953 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor dancresp » 29 Dic 2023 18:42

cacharreo escribió:Mide 100x25mm. y está pendiente de unos retoques en la serigrafía ¿cómo lo véis así? ¿que quedaría por añadir?

Un DigiRule de 1 bit !!! -shock

Por descontado que yo me pido uno.
Supongo que los entregarán montados...

Ya dirás que hemos de hacer. -drinks
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
cacharreo
Mensajes: 757
Registrado: 03 Jun 2023 09:37
Ubicación: /home/cacharreo/
Agradecido : 244 veces
Agradecimiento recibido: 427 veces

Re: CPU de 1 bit, la menos potente del mundo

Mensajepor cacharreo » 29 Dic 2023 19:01

De momento está abierto el turno de sugerencias, correcciones, revisiones,... más adelante se enviará a hacer (que se recibe solo la placa sin componentes) y comenzará la fase de pruebas.
© cacharreo


Volver a “No Catalogados”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados