Esquema de promediado sintetizable

0

Buscando una solución inteligente (escribiendo en Verilog)

Digamos que tengo dos valores de 8 bits, y cada valor tiene una puntuación de 8 bits, para un total de cuatro entradas, y quiero combinar los dos valores en un valor de 8 bits en función de las puntuaciones. Hipotéticamente, la forma más sencilla sería

((score1 * value1) + (score2 * value2)) / (score1 + score2)

Sin embargo, me parece que esto no es "fácilmente sintetizable" debido a la división por valores que no son potencias de dos.

¿Alguien tiene ideas inteligentes para escribir un código que sirva para esta función sintetizable? No tengo en mente una definición específica para esta fusión, pero tiene que ser sintetizable. También estoy bien, con menos posibilidades de fusionar los valores, lo que significa que estoy bien con solo decir 128 formas de fusionar los valores

    
pregunta David

1 respuesta

2

La solución más directa probablemente sería utilizar una tabla de búsqueda para \ $ \ frac {1} {score1 + score2} \ $.

Eso significaría que solo necesitas dos sumas y tres multiplicaciones.

Si necesita un resultado cada reloj, tendrá un canal de tres etapas:

  • En la primera etapa, computar

    • temp1 = score1 × value1
    • temp2 = score2 × value2
    • temp3 = score1 + score2
  • En la segunda etapa, computar

    • temp4 = temp1 + temp2
    • temp5 = 1 / temp3 (búsqueda de tabla)
  • En la tercera etapa, computar

    • resultado = temp4 × temp5
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas