我正在尝试创建一个可重复使用的桶形移位器;它需要一个输入位数组并将它们移动一定数量的位置(由另一个输入确定)。我想对模块进行参数化,使其适用于任何n
.
所需的选择行数由n
--> 确定,即SHIFT_CNT = log2(NUMBITS-1)+1
在下面的代码中。std_logic_vector
在我的组织中(我认为总体而言),拥有不属于or的端口被认为是一种不好的形式std_logic
,因此我使用 astd_logic_vector
作为选择行的数量。我需要std_logic_vector
根据输入通用调整长度。有没有办法在不使用第二个泛型的情况下做到这一点?我看过这篇文章,但它不涉及泛型。这篇文章完全消除了泛型或使用 log 值作为泛型,这对未来的用户来说不是那么直观(如果INPUT
不是 2 的幂,可能会导致问题)。
下面的声明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;