Puertos de entrada de enteros no ordenados VHDL ¿es una mala práctica?

1

Estoy diseñando un filtro de interpolación personalizable y estoy buscando la mejor manera de pasar los coeficientes (en lugar de puntos de apoyo) al filtro. A continuación verá la implementación actual.

package lin_interpol_filter_unsigned_pack is
        type supp_point_vector is array (integer range <>) of integer;
end package;

--! Use std libraries.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lin_interpol_filter_unsigned_pack.all;
entity lin_interpol_filter_unsigned is

    generic ( 
        --! Determines number of interpolations steps by steps = 2 ^ <interpol_steps_exp_g>
        interpol_steps_exp_g    : integer := 6;
        input_width_g           : integer := 12;
        output_width_g          : integer := 12
    );

    port (
        clk_i               : in std_logic;
        supp_points_vect_i  : in supp_point_vector (0 to 2**interpol_steps_exp_g);
        input_stream_i      : in unsigned (input_width_g downto 0);

        output_stream_o     : out unsigned (output_width_g downto 0)
    );

end;

El usuario tendría que pasar los puntos de apoyo al módulo como una constante. Ahora me preocupa que Vivado no pueda optimizar el puerto de entrada al ancho de bits mínimo, sino que utilice el rango entero (32 bits?). ¿Puedo esperar que Vivado minimice el ancho de bits?

No estoy del todo contento con este enfoque. Me gustaría que el usuario pase los puntos de apoyo como genéricos, pero la declaración genérica dependería de otro genérico (el interpol_steps_exp_g genérico) que no está permitido. ¿Hay tal vez otra manera de pasar los puntos de apoyo convenientemente?

Gracias.

    
pregunta Andy Ef

1 respuesta

2
  

Básicamente, quiero saber si los 64 puntos de soporte (o cualquier otro valor 2 ^ n definido por interpol_steps_exp_g) siempre consistirán en un bus de 32 bits de ancho, o si Vibado puede limitar el ancho del bus a 12 bits si cada uno de los 64 buses tienen un valor constante menor que 2 ^ 12-1.

No estoy familiarizado con las herramientas que usa, pero cualquier compilador moderno es capaz de optimizar el diseño, y si ve en la etapa de compilación que no se usa el bit más alto, eliminará las partes relacionadas de los registros / cables y todo otra lógica de apoyo.

Observe la configuración de optimización de su compilador.

Finalmente, creo que debería ser correcto si define el tamaño de interpol_steps_exp_g del número apropiado de bits en el nivel de origen; si el compilador verá que alguna instancia usa un índice inexistente del vector, lanzará el error.

    
respondido por el Anonymous

Lea otras preguntas en las etiquetas