tldr; Construí y luego amplié la computadora de tablero de 8 bits Ben Eaters. Después de la compilación inicial, integré un contador de programa de 16 bits y registros de direcciones de memoria, rediseñé el conjunto de instrucciones y logré acceder a 64 kB de RAM. En el futuro, agregué registros X e Y de 8 bits como registros de contador comparables a X e Y del 6502/10. Con estos 2 registros adicionales, la organización del microcódigo y el tamaño necesario de la ROM ya son incómodamente grandes. ¿Cómo puedo manejar mejor la organización del microcódigo?
Detalles: En el diseño actual ya tengo 7 registros de 8 bits (A, B, ALU, salida, registro de instrucciones, contadores X e Y). Además, tengo 2 registros de 16 bits (contador de programa, registro de dirección de memoria) y un registro de banderas de 2 bits.
Actualmente uso 3 ROM para microcódigo, cada una con un ancho de dirección de 11 bits, por lo tanto, 2 kB cada una y 6 kB en total. Las ROM actualmente decodifican la salida de 18 señales de control para manejar la entrada y salida de todo el hardware conectado al bus único de 8 bits.
Los 11 bits de entrada para las ROM del decodificador están formados por 6 bits de la instrucción (lo que me deja con solo 64 instrucciones como máximo), 2 bits de banderas y 3 bits de un contador de subpasos de instrucción.
El diseño funciona de maravilla, pero me pregunto cómo puedo seguir administrando el microcódigo, si extiendo el diseño aún más. Planeo tener más buses (datos, direcciones, ALU separadas), más banderas, más registros. Me temo que la gran cantidad de bits de entrada necesarios para las ROM de instrucciones aumentará su tamaño con bastante rapidez. Por otro lado, la necesidad de líneas de control también crece con bastante rapidez.
Posibles soluciones que veo: Mi diseño actual tiene la ventaja de que todas las instrucciones son súper rápidas y necesitan entre 2 y 6 ciclos como máximo. Podría, por ejemplo, deshacerme de las líneas de control reduciendo su número y usar registros de desplazamiento para formar señales de control secuencialmente. Pero esto me costó muchos ciclos por instrucción ASM y ralentizaría drásticamente la máquina. El problema de las señales de entrada está completamente sin resolver.
No tengo educación formal en ese campo, por lo tanto, perdone mi pregunta ingenua. Me gustaría entender cómo los ingenieros de hardware en los años 70 y 80 resolvieron estos problemas en CPU como la RCA 1802, la MOS 6502 o la Z80. ¿Hay conceptos de los que no soy consciente? ¿Dónde puedo aprender sobre estos? ¿Alguien puede ayudar aquí?
Tal vez podría usar algo de multiplexación/consolidación. Tal vez puedas usar las mismas líneas para diferentes contextos. Si tiene un indicador de repetición, es probable que no sea útil para las operaciones ALU de registro a registro, por lo que para operaciones como esa, algunas de las líneas podrían hacer otra cosa. Sospecho que su ROM de microcódigo ya tiene una serie de lagunas, solo que no puede alcanzarlas.
usuario_1818839
scott van voss
david tweed
Kartman