VHDL: use o comprimento de um inteiro genérico para determinar o número de linhas selecionadas

Estou tentando criar um canhão reutilizável; ele recebe uma matriz de entrada de bits e desloca um determinado número de posições (determinado por outra entrada). Eu quero parametrizar o módulo para que ele funcione para qualquern.

O número de linhas de seleção necessárias é determinado porn -> isto é,SHIFT_CNT = log2(NUMBITS-1)+1 no código abaixo. É considerado uma má forma na minha organização (e eu acho que no geral) ter portas que não são destd_logic_vector oustd_logic, então eu usei umstd_logic_vector para o número de linhas de seleção. Eu preciso ajustar o comprimento dostd_logic_vector com base na entrada genérica. Existe uma maneira de fazer isso sem usar um segundo genérico? eu tenho vistoisto postar, mas não lida com genéricos.este post elimina os genéricos inteiramente ou usa o valor do log como genérico, o que não é tão intuitivo para os futuros usuários (e pode causar problemas se oINPUT não é um poder de dois).

A declaração deSHIFT_CNT abaixo está definitivamente incorreto; Existe uma maneira de gerar automaticamente o comprimento na declaração de entidade sem usar um 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;

questionAnswers(5)

yourAnswerToTheQuestion