Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial Internet of Things >> Incrustado

¿Qué tipo de codificación debo utilizar? Ejemplos de aplicaciones FPGA

Siga tres experimentos que muestran el proceso de determinar qué tipo de codificación se adapta a una FPGA determinada.

¿Qué tipo de codificación debo usar para mi FPGA? Como mencioné en el artículo anterior, un compilador generalmente decidirá esto por usted, y le recomiendo que siga lo que decida el compilador.

Sin embargo, es importante comprender las diferencias entre los tipos de codificación y por qué un compilador puede llegar a una determinada conclusión. Con eso en mente, este artículo lo guiará a través de un experimento que muestra un ejemplo de aplicación FPGA y analiza, paso a paso, qué tipo de codificación es mejor.

Hasta ahora en esta serie, hemos discutido cómo crear una máquina de estado finito (FSM) con Verilog, el estado inicial y cómo la memoria afecta la codificación FPGA, y una descripción general de alto nivel que compara la codificación binaria vs. .

El sistema bajo prueba

Para este experimento, quería crear una instancia de una máquina de estado una gran cantidad de veces para magnificar las diferencias en el hardware resultante cuando se utilizan codificaciones binarias, Gray y one-hot.

El sistema que finalmente elegí es el Juego de la vida de Conway, un autómata celular que simula el comportamiento de las células vivas en su entorno, que es una matriz bidimensional rectangular de células. El Juego de la vida de Conway es una simulación de cómo estas células nacen, se reproducen y mueren, de acuerdo con un conjunto simple de reglas que cada célula sigue para determinar qué sucede en el siguiente ciclo. Cada célula viva puede sobrevivir o morir, y cada célula muerta puede permanecer muerta o volverse viva. Estas son las reglas para cada ciclo:

  1. Las células vivas con dos o tres vecinos vivos sobreviven.
  2. Las células muertas con tres vecinos vivos cobran vida.
  3. Todas las demás células mueren o permanecen muertas.

Estas reglas crean muchos comportamientos y patrones interesantes que se han estudiado ampliamente en informática.

Así es como se ve el Juego de la vida de Conway cuando se ejecuta lo que se conoce como un solo cañón planeador de Gosper.

Una variación del Juego de la vida de Conway, conocido como el cañón planeador de Bill Gosper. GIF creado por Lucas Vieira [CC BY-SA 3.0]

Código Verilog

Volviendo a nuestro sistema de prueba, cada celda fue diseñada como una máquina de estado con ocho estados. Es cierto que la lógica de una celda en Game of Life de Conway se puede resolver en un ciclo, pero decidí hacer una máquina de 8 estados para tener una diferencia notable al usar diferentes codificaciones. Los estados se utilizan para contar los vecinos vivos de una celda.

La siguiente parte del código de Verilog muestra la estructura del módulo de celda para estas máquinas, incluida la codificación binaria original de los estados.

`define STATE_0 3'b000

`define STATE_1 3'b001

`define STATE_2 3'b010

`define STATE_3 3'b011

`define STATE_4 3'b100

`define STATE_5 3'b101

`define STATE_6 3'b110

`define STATE_7 3'b111

módulo LifeCell (

entrada clk,

entrada nrst,

semilla de entrada,

ingrese [7:0] vecinos,

registro de salida vivo);

reg [2:0] estado;

siempre @ (posedge clk)

if (nrst ==0)

estado <=`STATE_0;

más

caso (estado)

`STATE_0:begin

// ...

estado <=`STATE_1;

end

`STATE_1:begin

// ...

estado <=`STATE_2;

end

// ...

`STATE_7:begin

// ...

estado <=`STATE_1;

end

endcase

endmodule

Si desea examinar más de cerca el código, no dude en consultar el proyecto en GitHub.

Implementaciones de codificación FPGA

El sistema se sintetizó e implementó como un mundo de células 23x23, en un total de 27 variantes:se utilizaron tres FSM diferentes, todas con las tres codificaciones mencionadas anteriormente, todas en tres FPGA objetivo diferentes.

FSM n. ° 1:modelo original

Esta máquina tiene un estado inicial que se ejecuta una vez y luego se ejecuta en un ciclo a través de los siete estados restantes. Esta es casi una secuencia completa, por lo que la codificación Gray me pareció prometedora al principio.

FSM n. ° 2:una secuencia

Esta máquina se comporta como un contador de 3 bits, por lo que también esperaba que la codificación Gray aplastara a la competencia.

FSM # 3:Una maraña arbitraria

Esta máquina tiene la misma ruta crítica de FSM # 1, pero pasa por una ruta arbitraria cuando se sabe que el número de vecinos vivos excede 3.

Para este comportamiento de transición de estado arbitrario, esperaba que la codificación one-hot fuera la mejor opción.

Arquitecturas de destino

El sistema se implementó para tres FPGA objetivo, utilizando la herramienta de desarrollo de su proveedor:

Comparación de los resultados

Comparar el desempeño de dos o más sistemas es difícil, principalmente porque el veredicto depende de las métricas que usemos y de los aspectos que consideramos más importantes que otros. Para este experimento, reuní los siguientes datos para producir una puntuación para cada implementación:

Para cada implementación, estos cuatro aspectos se compararon entre las tres codificaciones, por lo que, entre las codificaciones, obtuve un resultado mejor, peor y medio:el mejor obtiene su puntaje positivo, el peor obtiene su puntaje negativo y el medio obtiene 0.

Después de sumar todas las puntuaciones de cada modelo, obtuve los siguientes resultados:

Tabla de resultados para las 27 implementaciones. En cada fila, la mejor codificación se muestra en verde, la peor en rojo y el medio en amarillo si no hay empates.

Esto parece sugerir que se mantenga alejado de la codificación one-hot, con solo dos casos en los que gana, uno de los cuales es un empate. Además, aunque originalmente esperaba que one-hot fuera la mejor codificación para el modelo FSM n. ° 3, resultó ser su peor codificación, sin ninguna herramienta de desarrollo que la recomendara. Dicho esto, hay casos en los que one-hot supera al resto, principalmente en las métricas de frecuencia y potencia.

En general, la codificación Gray parece ser la mejor opción para este sistema en particular.

Al extraer los ganadores de esta tabla, obtenemos lo siguiente:

El veredicto

Aunque esta comparación parece favorecer la codificación Gray sobre la binaria y one-hot, los resultados dependen en gran medida de las métricas que usamos, y estas métricas reflejan lo que es importante para nosotros. Por ejemplo, en esta comparación, consideré la frecuencia y la potencia más importantes que el uso (la cantidad de elementos lógicos y registros en el diseño). Si hubiera valorado el uso sobre la frecuencia y la frecuencia sobre la potencia, seguramente habría resultado una clasificación diferente.

Esta comparación no pretendía ser un trabajo definitivo sobre el rendimiento obtenido mediante el uso de estas codificaciones. En cambio, muestra la clasificación producida por mis preferencias personales en las arquitecturas que utilicé.

Una vez más, si desea echar un vistazo al código, ver las 27 implementaciones o ver mi simulación del Juego de la vida de Conway en acción, consulte el proyecto en GitHub.


Incrustado

  1. Swissbit:llave de unidad flash USB 3.1 para aplicaciones industriales
  2. AAEON:COM Express Type 6 para aplicaciones exigentes
  3. Cómo seleccionar un controlador
  4. ¿Cuándo debo usar la prueba de placa desnuda?
  5. Por qué debería usar un reactor de línea
  6. ¿Cuándo debe usar una grúa martillo? Una guía
  7. ¿Qué industrias utilizan materiales de Kevlar?
  8. ¿Por qué debería utilizar una solución de Experto Remoto?
  9. Saber qué aleación de aluminio usar
  10. Titanio frente a aluminio:qué metal no ferroso usar
  11. ¿Qué tipo de bomba es más eficiente?