¿Cómo se puede traducir de manera eficiente este bucle for en vhdl usando para generar sentencias?

0
Hi guys i have this pseudo-code nested for loop (very simple to translate in C)

Input : x; //is an unsigned
Output : y;

val = 0;
for i = 0:n-1
  for j = 0:n-1
    if( ((x >> i) & 0x1) && ((x >> j) & 0x1) )
        val = val + x << (i + j);

y = val;

¿Hay alguna manera de traducir esto usando for-generate statments en VHDL? Soy consciente del hecho de que podría implementar básicamente el mismo código usando el proceso y el ciclo secuencial para el ciclo, pero ¿es posible hacer algo similar con el uso de for genera en su lugar?

(mi principal problema es que no hay ninguna variable en las declaraciones simultáneas).

    
pregunta user8469759

1 respuesta

1

Si usa bucles dentro de un proceso, puede usar una variable. Esto (traducido a VHDL válido) debe sintetizarse bien (suponiendo que n es una constante o genérica).

El hardware resultante puede ser grande o lento, pero lo mismo sería cierto si usas generar sentencias. Si no cumple con su tamaño o sus objetivos de velocidad, puede jugar con procesos cronometrados y canalizaciones.

La forma obvia de hacerlo usando if ... generate sería hacer de Val una señal de matriz 2-D, lo que hace que el "desenrollado" en hardware paralelo sea absolutamente explícito. (o una matriz 1-D de tamaño n * n) Pero eso es más complejo y propenso a errores que el enfoque de proceso simple.

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas