6 votos

¿Cómo imitar una FPGA no (es decir un PC con CPU, RAM, disco duro) a puertas de la lógica?

Sé que un FPGA utiliza look-up tables (LUTs) para sintetizar las puertas de la lógica. Una LUT es un bloque de memoria RAM que es indexado por un número de entradas. La salida es el valor almacenado en esa dirección de memoria. La magia es que el LUT puede ser programado para mostrar lo que usted desea para una entrada en particular. Así, una LUT puede ser programado con la tabla de verdad de cualquier puerta lógica con el fin de imitar! Que es como un FPGA sintetiza las puertas de la lógica que se especifica en el código HDL.

Estaba pensando el otro día, ¿cómo es que un ordenador normal imitar las puertas de la lógica? Hasta donde yo sé (que no es mucho), si puedo escribir un programa en C++, primero debe ser compilado a código de máquina, de modo que la CPU puede leer. Entonces, cuando yo presione "ejecutar", el código de la máquina pasa a la memoria a la espera de procesamiento del CPU. No estoy muy claro sobre lo que sucede después, pero en algún momento la CPU debe tener ejecutar las operaciones lógicas que mi programa contiene, a la derecha? A diferencia de un FGPA, la CPU no puede sintetizar todos los recursos que necesita. Así que ¿cómo es ejecutar el programa?

Mis Conjeturas:

  1. La CPU tiene un número de pre-construcción de puertas lógicas. Cuando se encuentra con un Y la instrucción en el código de C++ es la ejecución, utiliza uno de sus Y puertas. Si ve una O declaración, utiliza uno de sus puertas; si ve a una declaración de SI, utiliza uno de sus SI las puertas; etc.

  2. O, se implementa la lógica en la memoria de alguna manera similar a una tabla de búsqueda. Esto tiene más sentido para mí, ya que no dependa de un limitado número de puerta de recursos. Si mi programa requiere de toneladas de lógica O por ejemplo, la CPU no conseguir un cuello de botella por falta de O puertas.

Así que, ¿cómo de lejos soy yo?

Edit: Gracias por las respuestas a todos, he aprendido bastante acerca de Cpu y Alu. Además, "SI la puerta" en mi primer supongo que es una errata, que debe ser "la puerta" (aunque es sólo un ejemplo, cualquier puerta lógica que haría). Lo siento por la confusión que existe.

17voto

Andrew Walker Puntos 9038

En realidad su primer supongo que no es tan lejos como algunos afirman.

Una CPU está construido alrededor de algo que se llama "la Unidad de la Lógica Aritmética" (ALU) y una aplicación simplista de que es tener las puertas de la lógica de ejecución de todas las operaciones básicas conectado a las entradas en paralelo. Todos los posibles elementales de cálculo se lo realiza en paralelo, con la salida de la realidad deseada seleccionada por un multiplexor.

En una forma extremadamente simple (tiza de la placa de modelo) de la CPU, algunos de los bits del código de operación instrucción que se está ejecutando actualmente están cableados para que multiplexor que decir que la lógica de resultado de la función a utilizar. (Los otros, los resultados no deseados se desperdiciaron)

El real de la tecnología utilizada para implementar los cálculos en la ALU varía - podría ser "real" las puertas de la lógica, o podría ser LUT si la CPU está implementado dentro de una LUT basado en FPGA (una muy buena manera para comprender lo esencial de almacena-programa de informática es el diseño de un simple procesador y construir en una lógica de simulador y tal vez, entonces, un FPGA).

7voto

GSerg Puntos 33571

Bastante lejos.

La CPU se compone de bienes puertas (no programable LUTs). La clave de las operaciones sobre los datos se realiza en un bloque de lógica a menudo conocida como ALU (arithmetic-logic unit). Dentro de este bloque es un conjunto de puertas que puede, por ejemplo, Y se aplican a dos operandos juntos, bit por bit. Hay otro conjunto de puertas que se pueden añadir a ellos, y así sucesivamente.

Al ejecutar instrucciones en la CPU, las instrucciones son decodificados de una en una, y la lógica asociada con la instrucción de que se activa en el interior de la ALU.

La diferencia es el tiempo-vs-área de compensación. Si usted tiene un montón de Excusas para hacer, lo puede hacer en una FPGA usando muchos de los Stui en paralelo y conseguir que se hagan en un corto período de tiempo. Si las haces en un CPU, que se hará de una en una (secuencialmente) en el pequeño bloque de lógica que está diseñado para esa tarea.

1voto

Gromer Puntos 148

La CPU no se trata solo de " un número de pre-construir puertas lógicas. Un moderno procesador tiene entre alrededor de 50 millones de dólares a varios miles de millones de transistores, correspondiente a los muchos millones de puertas.

La CPU ya cuenta con todos los recursos necesarios para la ejecución de su programa de C++. Los recursos proporcionados cumplir con el conjunto de instrucciones definidas por la plataforma de hardware, sea x86, ARM, MIPS, etc. Esas instrucciones se incluyen instrucciones Aritméticas, Moviendo la memoria, condicionales, etc. Mira los conjuntos de instrucciones de su plataforma para obtener una comprensión de cómo la CPU opera.

Cuando la CPU realiza una operación de "Y", mientras que en algún lugar se utiliza una puerta and, hay millones de rejas Y portones en la CPU para todos los tipos de operaciones.

Esas instrucciones se realizan en el diseño de transistores en un chip. A ver cómo algunos de esos trabajos, buscar cosas como flip-flops, Complementos, o de otra lógica digital.

0voto

Edper Puntos 116

La diferencia entre una CPU y una FPGA es el paralelismo. Del FPGA son muy buenos en la realización de una serie de (lógicamente) tareas sencillas, a la vez, con un mínimo de demora. Una lógica más compleja y secuencias de operaciones que son mejor atendidos por la CPU ALU (Unidad de Aritmética y Lógica).

Si usted está interesado en un software de emulación de la puerta de su diseño, que es normalmente (si ingenuamente) empleado para simplificar funciones de lógica booleana, a continuación, echa un vistazo a Quine–McCluskey algoritmo. He utilizado este diseño de mi propio software de síntesis en la Uni cuando no podía avanzar la cara del estudio, y para la diversión.

0voto

dwestbrook Puntos 1754

Como usted ha observado, el contenido de la tabla de búsqueda determinar si un LUT es una compuerta or (0, 1, 1, 1), y la puerta (0, 0, 0, 1), un XOR (0, 1, 1, 0), etc.

La tabla de búsqueda de sí mismo es implementado usando codificado puertas, es decir, el resultado es

(lut[0] AND NOT a AND NOT b) OR
(lut[1] AND     a AND NOT b) OR
(lut[2] AND NOT a AND     b) OR
(lut[3] AND     a AND     b)

Si usted mira en esta línea por línea, usted puede ver que sólo una de estas líneas puede tener nunca un uno lógico, por lo que de esta forma se selecciona una de las LUT entradas. De la misma manera, también se puede elegir entre varias fuentes de datos:

Si op1 es el de dos bits número de registro, el lhs operando puede ser seleccionado como

(reg0 AND NOT op1[0] AND NOT op1[1]) OR
(reg1 AND     op1[0] AND NOT op1[1]) OR
(reg2 AND NOT op1[0] AND     op1[1]) OR
(reg3 AND     op1[0] AND     op1[1])

A continuación, opcode puede seleccionar la operación a realizar:

((lhs AND rhs) AND NOT opcode[0] AND NOT opcode[1]) OR
((lhs OR rhs)  AND     opcode[0] AND NOT opcode[1]) OR
((lhs + rhs)   AND NOT opcode[0] AND     opcode[1]) OR
((lhs - rhs)   AND     opcode[0] AND     opcode[1])

Donde res = (lhs + rhs) se define como

res[0] = lhs[0] XOR rhs[0];
res[1] = lhs[1] XOR rhs[1] XOR (lhs[0] AND rhs[0]);
...

Así que al final, me puede hervir todo a fijos puertas, dejando sólo las entradas de la variable. Un FPGA es una variante de tal, donde las puertas están organizados que realizan una búsqueda en la tabla.

En un verdadero sistema del mundo que me gustaría, además, optimizar, por ejemplo, combinar el equivalente de las señales y el intento de minimizar las puertas de conmutación cuando la señal es posteriormente eliminado por una puerta and y no tendrá ningún efecto sobre el resultado:

is_and_op = NOT opcode[0] AND NOT opcode[1];

Varios elementos del circuito desea saber si se están ejecutando actualmente una operación de "y".

lhs_and = lhs AND is_and_op;
rhs_and = rhs AND is_and_op;

Si no, pasamos ceros en las puertas de la realización de la operación.

res_and = lhs_and AND rhs_and;

Esta es la operación real, como antes.

res = res_and AND is_and_op OR ...;

La selección también puede utilizar nuestro puño y letra.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X