【发布时间】:2012-09-26 19:57:24
【问题描述】:
我正在尝试创建一个可重复使用的桶形移位器;它需要一个输入位数组并将它们移动一定数量的位置(由另一个输入确定)。我想对模块进行参数化,使其适用于任何n。
所需的选择行数由n 确定--> 即SHIFT_CNT = log2(NUMBITS-1)+1 在下面的代码中。在我的组织中(我认为总体而言),拥有不是std_logic_vector 或std_logic 的端口被认为是一种糟糕的形式,因此我使用std_logic_vector 来表示选择行的数量。我需要根据输入通用调整std_logic_vector 的长度。有没有办法在不使用第二个泛型的情况下做到这一点?我看过this 的帖子,但它不涉及泛型。 This 帖子完全消除了泛型或使用日志值作为泛型,这对未来的用户来说不是那么直观(如果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;
【问题讨论】: