Operación digital en un microcontrolador o FPGA

1

Tengo una pregunta simple sobre la propagación lógica en una MCU o FPGA dentro de un solo ciclo de reloj.

Digamos que queremos multiplicar dos números. La multiplicación termina dentro de un solo ciclo de reloj en la mayoría de las MCU, pero se necesita más de una etapa lógica para realizar la multiplicación. Por "etapa lógica" me refiero a operaciones que no se pueden realizar en paralelo, sino recursivamente.

La pregunta: hay otro reloj dentro del "circuito de multiplicación", derivado del reloj principal de la CPU a través de PLL o algo similar, que dispara estas etapas lógicas, o todo funciona de manera continua. En otras palabras, ¿el "circuito de multiplicación" se comporta como un sistema que necesita algún tiempo para establecerse, y este establecimiento ocurre dentro de un solo ciclo de reloj?

    
pregunta Marko Gulin

2 respuestas

3

Parece como si estuviera imaginando que los resultados intermedios de una operación deben almacenarse (registrarse) antes de que comience la siguiente etapa de la operación. De hecho, una función puede ser implementada por un circuito puramente combinatorio si sus entradas y salidas son continuas. Esto último significa que (a) todos los datos de entrada están contenidos simultáneamente en sus entradas, (b) las entradas permanecen sin cambios hasta que la función produce una salida y (c) todos los datos de salida se presentan y se toman simultáneamente en sus salidas.

La multiplicación de números binarios es solo una serie de sumadores multibit. Este circuito está bien documentado en internet. Por ejemplo, para hacer F [7: 0] = A [3: 0] x B [3: 0], cada sumador agrega una forma desplazada de A al total si un bit en B es 1, de lo contrario ese sumador agrega cero. Esencialmente, hace lo siguiente:

Add      A  to F if B[0] is 1 otherwise add zero
Add  2 x A  to F if B[1] is 1 otherwise add zero
Add  4 x A  to F if B[2] is 1 otherwise add zero
Add  8 x A  to F if B[3] is 1 otherwise add zero

Todas estas adiciones se pueden hacer en paralelo, por lo que se utiliza un circuito puramente combinatorio. La 'F comienza con 0' no declarada no es una operación separada, es producida por el circuito sumador. Las formas 'N x A' se producen por cableado, enrutando los bits de A en el lugar correcto en un número binario con ceros alrededor.

Hay un inconveniente en todas las operaciones combinatorias como esta. Cuanto más profundas estén las puertas del circuito lógico combinatorio, mayor será el tiempo de propagación de las señales que pasan. Esto reduce su propia frecuencia de reloj máxima y, por lo tanto, el máximo. Frecuencia de reloj de los circuitos de los que forma parte, como la CPU. La adición de registros intermedios puede producir segmentos de circuito, cada uno con un tiempo de propagación más bajo que el circuito general sin ellos. Los resultados luego toman más ciclos de reloj para producir a partir de las entradas, pero esto permite que el flujo de datos sea canalizado. Por lo tanto, la implementación elegida es una compensación, que depende de lo que intenta hacer y de cuáles objetivos son más importantes que otros.

    
respondido por el TonyM
0

Puede organizar un multiplicador para tener cualquier configuración, desde un diseño de 'solo ciclo' de ancho, rápido y de alta potencia, donde todos los bits se realicen en paralelo, hasta un diseño de varios ciclos 'estrecho, lento, de baja potencia, En serie desplaza los números a través de un multiplicador de 1 bit.

Todas las configuraciones intermedias también son posibles. Podría tener un diseño de 32 bits como un diseño paralelo de 8 bits de ciclos múltiples, por ejemplo.

Como puede imaginar, la configuración que se implementa depende del segmento de mercado al que apunta el fabricante.

    
respondido por el Neil_UK

Lea otras preguntas en las etiquetas