Quiero aprender cómo hacer una CPU desde cero [cerrado]

0

Soy nuevo en electrónica, programo de vez en cuando y conozco los conceptos básicos de las puertas lógicas. He usado Logisim en el pasado y me preguntaba si alguien podría contarme sobre una buena clase en línea que pueda tomar o un buen sitio para obtener más información. Gracias de antemano

    
pregunta Marcus Mardis

3 respuestas

4

No sé de clases en línea, pero puedo decirte lo que hice cuando diseñé mi primera CPU. Así que hay tres pasos:

  • Obtenga un buen libro de diseño digital / arquitectura informática. Recomiendo encarecidamente el "Diseño digital y la arquitectura de la computadora" de Harris y Harris, y también "Organización y diseño de la computadora" de Patterson y Hennessy (2ª edición). Por supuesto, hay muchos otros libros, pero estos son generalmente aceptados como muy buenos.
  • Aprenda un HDL (lenguaje de descripción de hardware). Prefiero VHDL, pero también puedes probar Verilog
  • Diseña tu procesador en papel. Comience con un conjunto de instrucciones relativamente pequeño, y luego puede agregar funcionalidad o actualizarlo (etapas de canalización, FPU, etc.)

Después de diseñar su ISA y su arquitectura, puede comenzar a implementarlo en el HDL que desee. Luego, puede "descargarlo" en una placa de evaluación FPGA y ver su CPU en funcionamiento.

    
respondido por el Arkoudinos
1

Estoy de acuerdo con el comentario de @transistor.

La programación a nivel de ensamblador podría ser una forma mucho más rápida y efectiva de aprender inicialmente que intentar comenzar a diseñar una CPU.

Creo que diseñar una CPU sería bastante trabajo para que haga algo significativo, y sin los casos de prueba o uso adecuados, el diseño podría ser una tontería, pero no habría manera de saberlo. Para que la cosa haga algo significativo, también necesitará memoria y periféricos.

Para poner la escala de la tarea en contexto, las CPU de estilo embebido de 32 bits simples tienen más de 2000 compuertas. (Basándome en las recientes comparaciones RISC-V, intentaré encontrar el enlace) Creo que podría ser sin una interfaz de bus, o periféricos importantes como un mecanismo de comunicación o cualquier temporizador. IIRC, el tamaño de la ALU de 32 bits y los registros marca la diferencia, pero es poco probable que una CPU de 8 bits utilizable sea mucho más pequeña.

Aprender a programar en ensamblador primero sería necesario de todos modos, ya que probablemente querrá probar el diseño de su CPU, por lo que no es un desperdicio de energía.

Recomiendo el programa en C y el ensamblador con ATmega, tal vez incluso un Arduino, ya que son bastante baratos y están bastante bien documentados. El valor importante de ATmega para mí es que la relación entre C y el ensamblador es lo suficientemente buena como para que pueda escribir en C y entender el código del ensamblador con relativa facilidad.

Además, ATmega fue diseñado para ser un buen objetivo para C en sistemas integrados, y C / C ++ sigue siendo el lenguaje de alto nivel favorito para el desarrollo integrado. Por lo tanto, estaría aprendiendo sobre una arquitectura relativamente moderna diseñada para un lenguaje de alto nivel, en lugar de una programación de ensamblador.

Finalmente, no está lleno de muchos mecanismos diseñados para soportar sistemas operativos completos como Linux, por lo que hay mucho menos que aprender.

Una pregunta clave es qué quieres hacer con tu CPU?

Sin embargo, es probable que su pregunta obtenga respuestas basadas en la opinión, lo cual no es un buen ajuste.

    
respondido por el gbulmer
1

Puedo recomendar este cursos en línea . Usted crea una ALU de 1 bit, luego una ALU de 4 bits y luego una ALU de 8 bits. Descargue el Quartus II de Altera y comience a hacer un multiplexor, un sumador, un decodificador y póngalo en una ALU para obtener un sistema de 4 u 8 bits que puede realizar sus operaciones. Si obtiene un FPGA, incluso puede ejecutar su propio código en su propia CPU personalizada. FPGA es una buena forma de aprender, pero también puedes simular todo en un programa como Qsys en Quartus II.

    
respondido por el Niklas Rosencrantz

Lea otras preguntas en las etiquetas