CPU FPGA, ¿cómo encontrar la velocidad máxima?

14

Me estoy metiendo en los FPGA, y si entiendo correctamente, estás conectando puertas lógicas juntas usando código. Entonces, si diseño una CPU en Verilog, debería conectar algunas puertas lógicas y funcionar, pero ¿cómo sé qué tan rápido puede funcionar mi CPU DIY? ¿De qué depende?

Uwe Keim
fuente
12
@ KingDuken Tengo curiosidad acerca de la alternativa a Verilog para diseñar algo como la CPU que tienes en mente (no VHDL, supongo :))?
Eugene Sh.
1
@ KingDuken Ese no es el problema que tengo, ya hice mi CPU y su arquitectura en el tablero y quiero portarla a un FPGA. Mi pregunta es, ¿cómo puedo calcular cuál sería el reloj de frecuencia máxima para mi CPU, qué lo limita?
44
Es posible que desee google "análisis de tiempo estático"
The Photon
14
@KingDuken Como alguien que ha diseñado dos CPU, en realidad no lleva tanto tiempo. Puede tener un procesador en funcionamiento en 1-2 meses, si sabe lo que está haciendo.
user110971
2
@KingDuken Dato curioso: Sun / Oracle ha lanzado el código fuente de Verilog a sus procesadores UltraSPARC T1 y T2. Por casualidad he visto varios en persona, y todos funcionaron. Para su información, ¡incluso fueron a ganar SPECint_rate2006! : D Eso muestra claramente lo imposible que es diseñar CPU en Verilog u otros HDL. Lo he hecho un par de veces como pasatiempo, y realmente no es nada imposible (una vez que lo asimilas, como siempre)
Richard the Spacecat

Respuestas:

29

La velocidad de un diseño está limitada por varias cosas. Lo más probable es que sea el retraso de propagación a través de la lógica combinatoria en su diseño, llamada ruta crítica . Si usa un FPGA rápido y escribe su HDL con mucho cuidado, probablemente podría alcanzar los 700 MHz en algo como un Virtex Ultrascale +. En un FPGA de extremo inferior, por ejemplo, un Spartan 6, una cifra razonable es probablemente más de 250 MHz. Esto requiere una canalización en todas partes para que tenga la cantidad mínima absoluta de lógica combinatoria entre componentes con estado (minimizar niveles de lógica), bajos abanicos (minimizar carga en elementos lógicos) y nidos de ratas congestionados (rutas de enrutamiento eficientes).

La lógica de la estructura de diferentes FPGA tendrá diferentes parámetros de temporización. Los FPGA más rápidos y costosos tendrán retrasos más pequeños y, como resultado, pueden lograr frecuencias de reloj más altas con el mismo diseño, o ejecutar un diseño o diseño más complejo con menos canalización a la misma frecuencia. El rendimiento dentro de un proceso en particular puede ser similar, por ejemplo, Kintex Ultrascale y Virtex Ultrascale se realizan en el mismo proceso y tienen retrasos de enrutamiento y celdas similares. Es imposible decir qué tan rápido será un diseño dado sin ejecutarlo a través de la cadena de herramientas y mirar los informes de tiempo del análisis de tiempo estático.

Al realizar ejecuciones de la cadena de herramientas para determinar la velocidad máxima del reloj, tenga en cuenta que las herramientas están orientadas al tiempo: intentarán cumplir con las limitaciones de tiempo especificadas. Si no se especifican restricciones de tiempo, el resultado puede ser muy pobre ya que las herramientas no intentarán optimizar el diseño para la velocidad. En general, las herramientas tendrán que ejecutarse varias veces con diferentes restricciones de período de reloj para encontrar cuál es la frecuencia de reloj máxima alcanzable.

Si puede optimizar su diseño para que la ruta crítica no sea el límite, se encontrará con limitaciones en la generación y distribución de reloj (PLL, DCM, buffers de reloj y redes de reloj globales). Estos límites se pueden encontrar en hojas de datos parciales, pero es difícil acercarse a ellos con un diseño no trivial. He ejecutado cosas en un Virtex Ultrascale a 500 MHz, pero esto fue solo un puñado de contadores para proporcionar señales de activación a otros componentes.

alex.forencich
fuente
22

Sintetiza su diseño en la tecnología de destino (un FPGA particular) y deja que las herramientas de análisis de temporización estática le indiquen cuál es el período mínimo de reloj.

O bien, agrega restricciones al diseño en primer lugar, y luego las herramientas le permitirán saber si se cumplen o no.

Dave Tweed
fuente
¿Qué causaría que no se cumplan las restricciones? ¿Qué limita el período del reloj? Es que depende del uso FPGA o es el mismo para toda la familia de FPGA? (O tal vez para cada FPGA en la existencia?)
3
Depende de la velocidad del FPGA y de la cantidad de lógica combinatoria que coloque entre los FF en su diseño.
Dave Tweed
99
@ appmaker1358, ¿ha intentado leer la hoja de datos de un FPGA? La clasificación de velocidad es uno de los parámetros más importantes que se mencionan en la hoja de datos.
The Photon
2
La velocidad estará limitada por la ruta de tiempo más larga, que será el retraso de propagación más largo a través de la lógica y el enrutamiento entre dos elementos con estado (flip flops, RAM, etc.). Diferentes FPGA tendrán diferentes parámetros de temporización y, por lo tanto, un diseño alcanzará diferentes velocidades en diferentes FPGA. Sin embargo, hay algunas partes de la FPGA que tienen una frecuencia limitada: los componentes de distribución de reloj y los PLL generalmente tienen límites, pero es difícil escribir HDL que se acerque a aquellos para diseños no triviales.
alex.forencich
3
Además, siempre debe agregar restricciones de tiempo. La ubicación y el enrutamiento toman en cuenta las restricciones y trabajan para tratar de cumplirlas. Si no agrega ninguna restricción, las herramientas no se esforzarán mucho y no obtendrá un número muy optimista.
alex.forencich
13

La velocidad que ejecutará su CPU se basará en el retraso de flop a flop más largo en su diseño sintetizado. El retraso de flop a flop incluirá el reloj a Q, el enrutamiento, la lógica / LUT y el tiempo de configuración del flop. Estos agregados juntos forman la ruta crítica de su cronometraje, que puede inspeccionar en la salida del informe de cronometraje mediante la herramienta de ubicación y ruta.

Hay disciplinas de diseño enteras dedicadas a hacer arquitecturas que minimizan este retraso para aprovechar al máximo un proceso dado: canalización, ejecución paralela, ejecución especulativa, etc. Es una tarea fascinante e involucradora, exprimiendo esa última onza de rendimiento de un FPGA (o para el caso, un ASIC).

Dicho esto, los proveedores de FPGA otorgarán diferentes grados de velocidad para sus partes, que corresponden a una velocidad máxima de MHz. Por ejemplo, un -2 Xilinx Artix es una parte de '250 MHz' en términos generales, aunque es capaz de velocidades de reloj más altas para diseños altamente canalizados.

Cuando interactúa con la síntesis de FPGA y las herramientas de ubicación y ruta, deberá dar restricciones para su diseño. Estos le dicen a la herramienta que fluye el retraso objetivo de flop a flop que está tratando de lograr. En Quartus (Altera) y Vivado (Xilinx) estas restricciones usan una sintaxis llamada SDC, que significa Restricciones de diseño de Synopsys. SDC vino inicialmente del mundo ASIC y también ha sido adoptado por la industria FPGA. Conozca SDC: lo ayudará a obtener los resultados que desea.

Altera y Xilinx tienen comunidades en línea para obtener ayuda sobre cómo usar la sintaxis SDC y muchos otros temas.

Dicho todo esto, si te importa la velocidad, debes considerar un FPGA que tenga una macro de CPU rígida, como Zynq.

hacktastical
fuente
-2

La CPU no funcionará más rápido que los relojes globales, por lo que eso pondría un límite superior a la velocidad con la que podría funcionar. Por lo general, la información sobre la velocidad máxima del reloj se encuentra en las hojas de datos de FGPA.

Pico de voltaje
fuente