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;