síntesis de bucle vhdl

1

Supongamos que tenemos un algoritmo iterativo como:

r(j) := f(r(j-1))
r(0) := value

Y ese vhdl implementó un proceso para tales algoritmos (asumiendo un poco de pseudocódigo ...)

process(x) is
  variable r := x;
  variable k := 0;
begin
  while(k < MAX) loop
    r := f(r); -- f( ) could be a vhdl function
    k := k + 1;
  end loop;
  y <= r; -- y is the output of the entity that embodies this process
end process;

¿La síntesis resultaría en una cascada de f logic sin canalización?

Actualizar ...

Creo que podría escribir algo equivalente con un for ... generate ¿Eso haría alguna diferencia en términos de síntesis?

    
pregunta user8469759

1 respuesta

1

Su código no puede ser sintetizado por los sintetizadores lógicos que conozco. Mientras que los bucles y los bucles son desenrollados por el sintetizador, deben tener límites constantes. Si desea que el resultado sea combinatorio, use un bucle for en su lugar:

process(x)
  variable r: <r-type> := x;
begin
  for k in 0 to MAX - 1 loop
    r := f(r);
  end loop;
  y <= r; -- y is the output of the entity that embodies this process
end process;

Tenga en cuenta que puede hacer lo mismo con una declaración generate , el resultado de la síntesis sería exactamente el mismo:

type r_array is array(0 to MAX) of <r-type>;
...
g: for k in 1 to MAX generate
  r(k) <= f(r(k - 1));
end generate g;
r(0) <= x;
y    <= r(MAX);

Si desea un resultado secuencial, procesando una iteración por ciclo de reloj, use algo como:

process(clock)
  variable r: <r-type>;
  variable k: natural range 0 to MAX;
begin
  if rising_edge(clock) then
    if reset = '1' then
      k    := MAX;
      done <= '0';
    else
      if start = '1' then
        r    := x;
        k    := 0;
        done <= '0';
      end if;
      if k = MAX then
        done <= '1';
        y    <= r; -- y is the output of the entity that embodies this process
      else
        r := f(r);
        k := k + 1;
      end if;
    end if;
  end if;
end process;
    
respondido por el Renaud Pacalet

Lea otras preguntas en las etiquetas