Diseño de CPU muy simple en LogiSim

7

Actualmente estoy en la escuela secundaria, y me ha interesado la ingeniería informática / eléctrica, específicamente el diseño de microprocesadores. He leído Code by Charles Petzold , y he comenzado a leer el < a href="https://en.wikibooks.org/wiki/Microprocessor_Design"> Wikilibro de diseño de microprocesadores (que parece estar incompleto). Al leer Code , entiendo la lógica básica detrás de una CPU, y han comenzado a construir uno en LogiSim. El Capítulo 17 en Código detalla la CPU que quiero construir, pero los circuitos carecen de componentes clave: señales de reloj y decodificación de instrucciones. Algunas de las señales de reloj parecen ser bastante obvias (la PC parece necesitar una señal de reloj constante) pero otras (como la forma de bloquear los valores de RAM) he tenido que pensar y tratar de trabajar.

Puedo construir un acumulador que funcione (no puede llamarse con precisión una ALU, creo, porque carece de la parte L) que cambia entre suma y resta con una sola entrada, y entiendo que esto es todo lo que necesito para la parte aritmética: una vez que hago funcionar los códigos de salto, puedo implementar la multiplicación y la división en el código. La parte con la que estoy luchando es la decodificación de instrucciones. A través de algunas búsquedas en Google, veo que cada código de operación debe interpretarse como múltiples microinstrucciones, pero estoy perdido en cuanto a cómo necesito que esto funcione. Actualmente, mi decodificador de instrucciones es solo un circuito de análisis combinacional con una única salida binaria para cada código de operación: 13 en total.

La forma en que funciona el código es que tiene un valor de código de 8 bits (solo uso el byte de bajo nivel), y luego dos valores de dirección de 8 bits separados que luego combino para ser la entrada de la dirección de 16 bits en la RAM. Para bloquear los valores, tengo un contador separado que cuenta hasta 10b y luego se restablece en 00b. Es la entrada de reloj para cada pestillo en turno (para los tres pestillos, hay a, b, y c. Los segundos relojes tienen un valor de 1 mientras que b & c es 0, luego b es 1 y 1 & c es 0 , entonces c es uno y 1 & b son 0, luego se restablece). Pero en instrucciones como ADD 000Ah, la PC salta a 000AH ... que se supone que se agrega al acumulador, pero en realidad se engancha al código, y luego se interpreta como el siguiente código de operación, que hace que todo funcione. loco.

Siento que me falta información importante sobre la decodificación de instrucciones y cómo necesito hacer señales de reloj ...

Aquí están los archivos .circ de LogiSim: enlace enlace enlace enlace enlace enlace

PetzoldMk5 es la CPU principal, confiando en los otros archivos que se importarán como bibliotecas.

Aquí hay una lista de códigos de operación (todos binarios):

Load                 0001
Add                  0010
Add w/ Carry         0011
Sub                  0100
Sub w/ Borrow        0101
Jump                 0110
Jump w/ Carry        0111
Jump W/ 0            1000
Jump w/o C           1001
Jump W/o 0           1010
Store                1011
Halt                 1100
Reset                1101
    
pregunta Will Hodges

3 respuestas

2

Creo que te estás perdiendo un aspecto clave de cómo funcionan las ALU. Normalmente, cada bit del acumulador se conecta a cada uno de los diversos bloques de funciones a través de un demultiplexor. Usando un byte de comando, se selecciona la función y cada bit del acumulador se conecta a la entrada apropiada del bloque de funciones. El tamaño del demultiplexador determina cuántas funciones puede manejar la ALU. En mi ejemplo muy burdo que se muestra a continuación, una ALU con una entrada de 4 bits podría hacer referencia a 16 funciones diferentes utilizando el demultiplexor:

TengaencuentaqueenlamayoríadelasCPU,estediseñoestáoptimizadoenundesordendepuertasparareducirelconteodetransistores.

Sepuedenusarmásfuncionesteniendounregistrodecomandomásgrande,peroestotambiénrequeriríamásciclosderelojparacargarelcomando.

Recomiendoleerelsiguientelibrosideseaobtenermásinformaciónsobreeldiseñodigital: Fundamentals of Logic Design 7th ed.

    
respondido por el Takide
2

Odio publicar un "solo enlace" como respuesta, pero creo que deberías estar al tanto del trabajo de Warren Toomey con las CPU's en Logisim, ya que probablemente sea exactamente lo que estás buscando.

Él tiene un par de tutoriales construyendo una CPU bastante simple aquí ...

enlace

Y si eso no hace flotar su barco, tiene una CPU más sofisticada aquí ...

enlace

... Todo lo cual está bien explicado y tiene descargas en archivos .circ.

Otra gran, y posiblemente más funcional, CPU / computadora DIY es Magic-1 que se encuentra en enlace . Aunque no se hace en Logisim, está bastante bien documentado, e incluye fotografías, esquemas y descripciones. También es más que una CPU en un simulador. Tiene un compilador ANSI C, un sistema operativo y algún software. También tiene la clara ventaja de haber sido construido en hardware. De hecho, actualmente está en funcionamiento y sirve páginas web.

Finalmente, Los elementos de los sistemas de computación y el sitio asociado nand2tetris.org aparecen como el # 1 recurso de información recomendado para construir su propia computadora desde el principio cada vez que la busco. Mucho (¿Todo?) El contenido es gratuito, creo. YouTube estaría de acuerdo; muchas personas han realizado proyectos a partir de esta fuente.

    
respondido por el Charlie
0

Parece que estás en el camino correcto.

Cuando esté planeando sus microinstrucciones, deberá definir claramente en su mente el patrón de "tráfico" para el movimiento de sus datos a través de sus diversos bloques. Realizar un ADD requerirá múltiples pasos. Si tiene registros de mantenimiento para sus dos operandos de ALU, entonces esos deberán ser cargados desde la RAM, o algún registro o bus. Si tiene un bus interno compartido, es posible que deba cargar un operando a la vez. Una vez que sepa qué bytes (dirección, literal inmediato, datos RAM, puntero) deben moverse hacia dónde, planifique el orden del movimiento de los bytes a través del bus (es) dentro y fuera de los diversos registros. Es posible que se quede atascado y necesite agregar un registro de retención interno porque se debe conservar algún valor intermedio hasta el siguiente paso de microinstrucción.

Creo que lo que sospecha que falta es la complejidad requerida para que la lógica tome la instrucción o el código de operación y la traduzca en varios estados dentro de su CPU. Puede ser complejo, pero es posible crear una máquina de estado algo simple y luego expandirla con conceptos lógicos básicos.

Por ejemplo, digamos que está creando los pasos de micro-instrucciones para una operación de MOVE. Esto podría describirse de manera general mediante 3 pasos: 1) Afirmar los contenidos del registro de origen en el bus interno, 2) marcar el reloj de escritura del registro de destino, 3) Anular la afirmación del contenido del registro de origen del bus interno. Los pasos 1) a 3) describen el tiempo para una habilitación de salida de registro (OE) y una habilitación de escritura de registro (WE) que podrían distribuirse selectivamente a cualquier registro fuente y cualquier registro objetivo conectado al bus interno compartido con demultiplexores.

Si no tiene mucha práctica en la creación de Máquinas de Estado Finito, podría ser útil observar los diferentes enfoques para darle otro elemento fundamental para generar las señales de control de su micro-secuenciador.

Quédate con él. La cantidad de conocimiento que adquiera será fenomenal. Y espero que te diviertas mucho.

    
respondido por el Entrepreneur

Lea otras preguntas en las etiquetas

Comentarios Recientes

mics permite una simulación realista del acoplamiento compuesto. Para la simulación se requiere instalar más de 1000 circuitos multinúcleo con una superposición del 90% y más de 4000 combinaciones posibles de circuitos en paralelo Aunque la mayoría de los usuarios no requieren 2000 operaciones lógicas o más, se renderizarán múltiples juegos clásicos de computadora. La simulación está disponible para videojuegos clásicos como Myst y la simulación DCS World. La estabilidad del procesador es buena en muchos,... Lees verder