Я пытаюсь создать многоразовый баррель; он принимает входной массив бит и сдвигает их на определенное количество позиций (определяется другим входом). Я хочу параметризовать модуль, чтобы он работал для любого n
.
Количество требуемых строк выбора определяется в n
→ i.e., SHIFT_CNT = log2(NUMBITS-1)+1
в приведенном ниже коде. Он считал плохую форму в моей организации (и, я думаю, в целом), чтобы иметь порты, которые не относятся к std_logic_vector
или std_logic
, поэтому я использовал std_logic_vector
для количества выбранных строк. Мне нужно отрегулировать длину std_logic_vector
на основе общего ввода. Есть ли способ сделать это, не используя второй общий? Я видел этот пост, но он не касается дженериков. Это сообщение полностью исключает генерики или использует значение журнала как общее, что не так интуитивно для будущих пользователей (и может вызвать проблемы, если INPUT
не является мощность двух).
Декларация SHIFT_CNT
ниже определенно неверна; есть ли способ автоматически генерировать длину в объявлении объекта без использования второго общего?
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;