Estoy tratando de crear una palanca de cambios reutilizable; toma una matriz de bits de entrada y los desplaza a un cierto número de posiciones (determinada por otra entrada). Quiero parametrizar el módulo para que funcione para cualquier n
.VHDL: use la longitud de un entero genérico para determinar el número de líneas de selección
El número de líneas de selección requeridas está determinado por n
-> es decir, SHIFT_CNT = log2(NUMBITS-1)+1
en el código siguiente. Se considera una mala forma en mi organización (y creo que en general) tener puertos que no sean de std_logic_vector
o std_logic
, así que utilicé un std_logic_vector
para el número de líneas de selección. Necesito ajustar la longitud del std_logic_vector
según la entrada genérica. ¿Hay alguna manera de hacer esto sin usar un segundo genérico? He visto this publicación, pero no trata con genéricos. La publicación This elimina completamente los genéricos o utiliza el valor de registro como genérico, que no es tan intuitivo para los usuarios futuros (y podría causar problemas si el INPUT
no tiene una potencia de dos).
La declaración de SHIFT_CNT
a continuación es definitivamente incorrecta; ¿Hay alguna manera de generar automáticamente la longitud en la declaración de entidad sin usar un segundo genérico?
entity BarrelShifter is
generic (NUMBITS : integer :=8);
Port (INPUT : in std_logic_vector (NUMBITS-1 downto 0);
OUTPUT : out std_logic_vector (NUMBITS-1 downto 0);
SHIFT_CNT : in std_logic_vector ((NUMBITS-1)'length downto 0)
);
end BarrelShifter;
Esa era una de mis preocupaciones: no quería escribir una función que requiriera recursos de FPGA para calcular. Todavía me gustaría algo que sea totalmente autónomo si es posible (en lugar de escribir una biblioteca y luego recordar incluirlo en cualquier lugar que lo necesite) – NickD
Puedo ver por qué querrías eso (yo también lo haría, ya que es tal problema común!) pero estoy bastante seguro de que no hay una manera más elegante de hacerlo. En mi empresa tenemos una biblioteca con funciones comunes como esta que importamos en todos los archivos fuente. – pc3e