Sé que un FPGA utiliza tablas de consulta (LUT) para sintetizar puertas lógicas. Una LUT es un bloque de RAM que se indexa mediante una serie de entradas. La salida es el valor almacenado en esa dirección de memoria. La magia es que la LUT puede programarse para mostrar lo que desee para una entrada en particular. Por lo tanto, una LUT se puede programar con la tabla de verdad de cualquier puerta lógica para imitarla. Así es como un FPGA sintetiza las puertas lógicas que especifica en su código HDL.
Estaba pensando el otro día, ¿cómo una computadora normal imita las puertas lógicas? Por lo que sé (que no está lejos), si escribo un programa en C ++, primero debe compilarse en código de máquina para que la CPU pueda leerlo. Luego, cuando presiono "ejecutar", el código de la máquina va a la memoria para esperar el procesamiento de la CPU. No tengo muy claro qué sucede a continuación, pero en algún momento la CPU debe ejecutar las operaciones lógicas que contiene mi programa, ¿verdad? A diferencia de un FGPA, la CPU no puede sintetizar los recursos que necesita. Entonces, ¿cómo ejecuta el programa?
Mis conjeturas:
-
La CPU tiene una serie de compuertas lógicas pre-construidas. Cuando se encuentra con un La instrucción AND en el código C ++ se está ejecutando, usa uno de sus AND puertas Si ve una declaración OR, usa una de sus puertas OR; si se ve una declaración IF, usa una de sus puertas IF; etc.
-
O, la lógica se implementa en la memoria de alguna manera similar a una LUT. Esto tiene más sentido para mí, ya que no se basa en un limitado Número de recursos de la puerta. Si mi programa requiere toneladas de lógica OR por ejemplo, la CPU no se embotellará por la falta de puertas OR.
Entonces, ¿qué tan lejos estoy?
Edit: Gracias por las respuestas a todos, aprendí bastante sobre las CPU y las ALU. Además, el "IF gate" en mi primera suposición es un error tipográfico, que debería ser "OR gate" (aunque es solo un ejemplo, cualquier compuerta lógica funcionaría). Lo siento por esa confusión.