我正在尝试创建一个可重复使用的桶形移位器; 它需要一个输入的位数组并将它们移位一定数量的位置(由另一个输入确定).我想参数化模块,以便它适用于任何模块n.
所需的选择行数由n- > 确定,即SHIFT_CNT = log2(NUMBITS-1)+1在下面的代码中.它被认为是不好的形式在我的组织(我认为整体的)有不属于港口std_logic_vector或std_logic,所以我用一个std_logic_vector用于选择线的数量.我需要调整std_logic_vector基于输入泛型的长度.有没有办法在不使用第二个通用的情况下执行此操作?我看过这篇文章,但它没有涉及泛型.这篇文章完全消除了泛型或使用日志值作为泛型,这对于未来的用户来说并不直观(如果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;
Run Code Online (Sandbox Code Playgroud)