VHDL: use la longitud de un entero genérico para determinar el número de líneas seleccionadas
Estoy tratando de crear un cambiador de cañón reutilizable; toma una matriz de entrada de bits y los desplaza un cierto número de posiciones (determinado por otra entrada). Quiero parametrizar el módulo para que funcione para cualquiern
.
El número de líneas de selección requeridas está determinado porn
-> es decir,SHIFT_CNT = log2(NUMBITS-1)+1
en el código de abajo. Se considera una mala forma en mi organización (y creo que en general) tener puertos que no son destd_logic_vector
ostd_logic
, así que usé unstd_logic_vector
para el número de líneas seleccionadas. Necesito ajustar la longitud delstd_logic_vector
Basado en la entrada genérica. ¿Hay una manera de hacer esto sin usar un segundo genérico? He vistoesta Publicar, pero no se trata de los genéricos.Esta La publicación elimina los genéricos por completo o utiliza el valor de registro como genérico, que no es tan intuitivo para los futuros usuarios (y podría causar problemas si elINPUT
no es un poder de dos).
La declaracion deSHIFT_CNT
abajo es definitivamente incorrecto; ¿Hay una manera de generar automáticamente la longitud en la declaración de la entidad sin utilizar 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;