¿Cómo calcular el número requerido de elementos lógicos FPGA?

5

Tengo un hexápodo Lynxmotion que utiliza servos de hobby para cada uno de sus 18 grados de libertad (DOF).

El problema básico con esto es que no puedo obtener datos sobre los ángulos conjuntos. He modificado los servos para poder medir su orientación a través de la señal del potenciómetro. Para cada DOF quiero leer la orientación del servo a través de ADC y usar un controlador PID para generar la señal PWM apropiada. Esto funciona simplemente lo suficiente con un Arduino para un servo.

Lamentablemente, no he encontrado ningún microcontrolador con 18 temporizadores de 10 bits (o más) capaces de generar PWM y 18 ADC. Como tal, estoy explorando la idea de usar un FPGA. Específicamente estoy considerando el Papilio Pro FPGA . Al leer sobre esto, veo que tiene alrededor de 500,000 elementos lógicos. Si bien soy nuevo en FPGA, supongo que esta es la métrica más importante para mis necesidades (si me equivoco, no dude en corregirme).

La pregunta en mi mente es, ¿cuántos elementos lógicos necesito para mi aplicación? ¿Existen buenas reglas de oro para tales cálculos?

    
pregunta DaemonMaker

3 respuestas

7

Durante varios años, los proveedores de FPGA realmente no han anunciado "puertas lógicas equivalentes", porque es una métrica muy pobre de cuánta funcionalidad se puede lograr en un FPGA dado.

Para obtener una imagen más completa de lo que está disponible en Papilio, desea consultar esta tabla desde Descripción general de la familia Spartan 6 :

Según la página de Sparkfun que vinculaste, el dispositivo en el Papilio es el XC6SLX9, la segunda fila en la tabla.

En un sistema como el que estás describiendo, es probable que los recursos limitantes sean los flip-flops. Es bastante sencillo, una vez que comience a pensar en su diseño en detalle, averiguar cuántas chanclas se requieren. Con 11,000 flip-flops, debería poder administrar fácilmente 18 contadores y controlar la lógica.

Otro recurso a tener en cuenta es la E / S. Con 18 ADC de 10 bits, probablemente necesitará utilizar una interfaz en serie para conectarse a ellos o una interfaz paralela multiplexada. También querrá asegurarse de que la placa Papilio se adhiera lo suficiente a los pines de E / S, y que se puedan seleccionar E / S accesibles a los niveles de voltaje que necesita (lo que puede requerir la excavación de la documentación de Papilio o la hoja de datos para el dispositivo S6 específico que está utilizando).

Si estaba diseñando un microcontrolador o haciendo funciones de tipo DSP, el bloque RAM o los segmentos de DSP podrían ser el recurso limitante, pero dudo que tenga problemas con los de su proyecto.

    
respondido por el The Photon
4

Creo que no es posible o no es la mejor manera de intentar resolverlo a mano. Estoy pensando en diseños que utilizan miles de elementos escritos en HDL donde la relación directa con las puertas y las celdas lógicas no es obvia. Además, la mayoría de los IC FPGA crecen al duplicar su tamaño de un modelo a otro, por lo que no tiene mucho sentido saber exactamente la cantidad de silicio que necesita, solo un orden de magnitud está bien. Mi consejo es que intente con Xilinx ISE o Altera Quartus, escriba un primer acercamiento a su código e intente encajarlo en un dispositivo que comience con los más pequeños. Encontrarás fácilmente el correcto. Debería usar entre un 50% (de lo contrario, sería mejor que el más pequeño) y un 80%. No intente exprimir las cosas hasta el punto de usar más del 90%, ya que todos los diseños cambian, ¿no es así? y tendrá problemas si descubre un error y necesita algo de recursos adicionales allí, entonces no encaja en su dispositivo "optimizado". Sea un poco generoso, es por eso que rara vez se usa el cálculo exacto de los recursos o no se utiliza en absoluto.

    
respondido por el Joan
1

Lo que estás pidiendo no es fácil de responder.

Si necesita 18 temporizadores, puede crear un temporizador y crear una instancia 16 veces, o puede crear una máquina de estados que maneje 16 contadores diferentes. Depende de cuánto tiempo quiera dedicar al diseño y cuál es su frecuencia deseada. Para el control de motores, apuesto a que puede crear una máquina de estados bastante simple con 18 registros de contadores que es muy muy pequeño. Crear PWM es aún más fácil, lo que necesita es un contador de ejecución libre y una lógica que compare el rango del contador y cree su señal, luego lo instancia 18 veces. Toda la lógica será inferior a 1000 flip flops.

Y para el ADC, ¿cómo planea conectar 18 ADC al FPGA? Porque ese puede ser el problema complicado aquí.

    
respondido por el FarhadA

Lea otras preguntas en las etiquetas