Modelado preciso de bits para algoritmos (FPGA)

1

¿Cuáles son las herramientas de software utilizadas en la industria para crear modelos de algoritmos de precisión de bits (algoritmos que se implementarán en FPGA)?

Antes de usar una herramienta como Quartus, probamos nuestro algoritmo en lenguaje C. Funcionó. Pero el problema es que la aritmética de punto flotante se utiliza en C. Pero cuando tenemos que implementarla en FPGA solo tenemos aritmética de punto fijo. Entonces, antes de codificar en verilog, ¿hay alguna herramienta para convertir el código C mencionado anteriormente en un modelo de precisión de bits que use aritmética de punto fijo en lugar de aritmética de punto flotante? ¿Cuáles son las herramientas utilizadas en la industria si existen tales herramientas?

    
pregunta RONEY

2 respuestas

3

No es un estándar de la industria, sino una opinión personal: mi técnica es modelar el algoritmo con un paquete genérico, que puedo instanciar con un punto flotante o cualquier tipo de punto fijo que desee.

El algoritmo de punto flotante proviene de C o Fortran o lo que sea, después de reescribirlo como genérico, lo instalo con tipos de punto flotante y verifico que sus salidas coincidan con el original.

Luego puedo instanciar el mismo código con cualquier tamaño de punto fijo, y verificar que su precisión satisfaga mis necesidades, modificando los tipos de puntos fijos (agregando los de mayor resolución para resultados intermedios, etc.) según sea necesario .

La traducción al código VHDL suele ser trivial; adaptándolo aún más (por ejemplo, canalizarlo para la síntesis) un poco menos, pero en cada etapa tengo un modelo de punto fijo de alto nivel con precisión de bit como referencia, por lo que puedo rastrear cualquier desviación de eso.

Esto supone que tiene un idioma que admite muy bien los tipos de punto fijo y punto flotante, y permite paquetes y subprogramas genéricos (como las clases de plantilla en C ++).

Mi elección para esto (y el propósito más general, es decir, la programación que no es de hardware) es Ada-2005 o 2012.

Su facilidad para interactuar con C u otros idiomas facilita la reutilización de modelos de alto nivel, y su similitud con VHDL hace que la traducción a VHDL sea relativamente sencilla (aunque VHDL solo admite tipos de puntos fijos a través de bibliotecas). El soporte adecuado para puntos fijos es mucho menos doloroso que fingir utilizando tipos de enteros, incluso en un lenguaje que le permite definir enteros de cualquier tamaño que desee, en lugar del conjunto restringido disponible en C, etc.

Por lo que sé, el Sistema C apunta a proporcionar facilidades para permitir un enfoque similar, aunque a través de bibliotecas complementarias en lugar de inherentemente en el lenguaje. Tal vez alguien más comente sobre lo bien que funciona. No puedo, ya que nunca he tenido ocasión de usarlo.

    
respondido por el Brian Drummond
1

He hecho esto usando Matlab: creando un prototipo / desarrollando mi algoritmo en Matlab base y luego integrándolo usando las cajas de herramientas de Matlab.

Escribo mi Matlab para que se parezca lo menos posible al VHDL previsto, de modo que tengo una mentalidad muy diferente al escribirlo, muy lejos de RTL. La ventaja de esto es que atrapo más errores. Si escribo Matlab "RTL" y luego utilizo una traducción más mecánica a HDL RTL, encuentro que incluyo el mismo error en ambos "lados".

Escribo vectores de verificación del modelo de Matlab (como archivos .vhd con arreglos VHDL en ellos) y mi banco de pruebas puede verificar que mi implementación de VHDL es bastante precisa con el prototipo de Matlab.

    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas