4 votos

Inherente Pseudo-aleatorio en modernas herramientas de diseño de FPGA

Hacer Lugar Y la Ruta de los algoritmos de las modernas herramientas de diseño de FPGA ( Qaurtus / Vivado / etc... ) han incorporado la aleatoriedad en ellos ?

I. E: Sería posible obtener 2 resultados diferentes al compilar el mismo diseño de dos veces ( se da la misma versión de software ) ?

4voto

Tom Carpenter Puntos 7192

TL;DR; La respuesta puede depender de la síntesis de las herramientas, pero lo más probable es que la respuesta es no, a menos que usted use aleatorizado semillas.


Ciertamente, para las versiones más modernas de Intel/Altera Quartus (desde algún tiempo antes de 12.1), si se compila el mismo origen de los archivos utilizando exactamente la misma versión de software (incluyendo subversion/nivel de parche) para el mismo dispositivo, usted obtendrá el mismo resultado cada vez.

Las herramientas de síntesis para Quartus hacer uso de la aleatorización cuando se busca el mejor ajuste - que se trate de un montón de diferentes vías para que se ajuste al diseño. Sin embargo, hacen uso de una semilla de valor para sus PRNG. Este valor es una constante que no cambia de compilar compilar. Por supuesto, usted puede cambiar manualmente en los ajustes de compilación.

El resultado neto de usar un fijo de la semilla es que no importa cómo muchas veces usted compilar el diseño, usted obtiene resultados deterministas.

Quartus tiene una herramienta llamada Espacio de Diseño Explorer que permite que el diseño sea compilado varias veces con diferentes valores de semilla para tratar de encontrar uno que se traduce en un mejor ajuste. Pero que le permitirá guardar el valor de la semilla una vez encontrado para el futuro determinista compila.

Esto es realmente muy útil comportamiento. Digamos que usted desea utilizar el control de origen para mantener todos tus archivos de origen seguro, pero no desea comprobar en el compilado listas - que necesita para ser capaz de recrear la listas/flujos de bits de origen sin ellos cambiando. O desea actualizar una memoria de inicialización del archivo. Usted no quiere que todo el diseño para cambiar sólo para cambiar un valor predeterminado el valor de la memoria (por ejemplo, la instrucción de los datos para un suave procesador).

3voto

btonner Puntos 31

Hay dos cuestiones aquí, el problema del determinismo y de la pseudo-aleatorios resultados.

Hablando con Quartus: Quartus Hace operaciones iniciales de semillas aleatorias. Si cambia nada y construir de nuevo usted obtiene el mismo resultado sin embargo, hay dos comentarios: En su archivo QSF si cambia incluso un archivo de ruta (relativa a absoluta, etc.) obtendrá un resultado diferente. Tales cosas inherentemente cambio de la semilla. Puede establecer explícitamente la semilla en la configuración del proyecto o QSF.

Vivado: Vivado no tiene explícitamente accesible la aleatorización como tal. Me parece a mi construye en vivado son inherentemente determinista, pero tengo la sospecha de Xilinx puede hacer algunas determinista de la semilla de base de pseudo aleatoriedad en las colocaciones iniciales / decisiones de enrutamiento. Una idea que apoya esto es que si usted hace un muy pequeño cambio en el diseño que usted podría conseguir salvajemente diferentes resultados. Me parece la mejor manera para lograr diferentes resultados de diseño para barrer el diseño de estrategias (de los que hay ~32).

En tanto herramientas de reconstrucción y cambio de nada, el mismo construir resultado obtenido es. Que dijo que muchos de los entornos de compilación de hacer las cosas (como etapa se basa en la fecha de carpetas) que causa Quartus a tomar una nueva semilla.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X