¿Cuáles son algunos de los algoritmos básicos de síntesis de FPGA que se asignan a LUT?

1

Estoy intentando buscar documentos fáciles de entender que ayuden a explicar cómo se asignan las funciones lógicas a LUT. Por ejemplo si tengo c = (a+b)*c -d , ¿cómo se asigna esto a la LUT? o si se diseña un contador, cómo se asigna el mismo etc.

    
pregunta Fanatic23

3 respuestas

2

Una LUT es una memoria (Look. Up. Table). Implementa tablas de verdad lógica utilizando la dirección de memoria como bits de entrada y la salida de datos de memoria como bits de salida.

A modo de ejemplo, para un contador de 4 bits: en la dirección 4'b0000 se almacena 4'b0001; en la dirección 4'b0001 se almacena 4'b0010; ...; en la dirección 4'b1011 se almacena 4'b1100; Etcétera. Las salidas se registran y se devuelven a las entradas, por lo que en cada reloj el ciclo se repite y la salida del contador aumenta.

    
respondido por el markt
1

La respuesta de Markt es correcta. Si tiene curiosidad por saber cómo funcionan realmente los algoritmos de síntesis, le recomendaría el trabajo de De Micheli en EPFL. Fue muy instrumental en la síntesis de VLSI enlace . Escribió un gran libro sobre el tema: enlace Puede que sea un poco más denso de lo que Lo estás buscando, pero es un excelente texto.

    
respondido por el Doov
0

La asignación precisa depende del tipo de LUT implementado. Una configuración muy común es una LE con una LUT de 16 entradas (4 entradas), dividida en dos mitades para obtener dos salidas. Cada una de las medias LUT se parece a esto:

simular este circuito : esquema creado usando CircuitLab

La configuración de LE contiene los valores que vienen de la izquierda (datos de la tabla), así como algunos valores que se aplican a otras puertas alrededor de la LUT, por ejemplo, un indicador de selección que puede extraer la tercera entrada de la parte superior de un LE vecino La mitad de la mesa. De esa manera, puede implementar fácilmente un sumador:

left    right   cin     out     cout
0       0       0       0       0
0       0       1       1       0
0       1       0       1       0
0       1       1       0       1
1       0       0       1       0
1       0       1       0       1
1       1       0       0       1
1       1       1       1       1

La señal cout de la tabla para el bit 0 está conectada a la señal cin del bit 1, por lo que obtiene un sumador completo con carry.

La resta agrega el complemento de dos del valor del lado derecho, y la multiplicación agrega el valor del lado izquierdo desplazado en N bits a la izquierda si el bit N se establece en el valor del lado derecho (por lo tanto, un multiplicador de 9x9 necesita un bit de 9 bits). sumador, un sumador de 8 bits, un sumador de 7 bits, ...).

Estas operaciones pueden combinarse si hay un paquete de tablas más óptimo; por ejemplo, puedo representar el complemento de dos necesario para la resta en la tabla de búsqueda para el sumador. Esa optimización es un problema difícil ya menudo no existe una solución óptima, pero encontrar una que coincida con los requisitos de tiempo suele ser suficiente.

El mapeo c=(a+b)*c-d requiere lógica combinatoria para (a+b)*c-d , y una etapa de registro que guarda el valor de c . El registro necesita una señal adicional para activar la actualización, de lo contrario terminarías con (a+b)*((a+b)*c-d)-d bastante rápido.

    
respondido por el Simon Richter

Lea otras preguntas en las etiquetas