gpt4 book ai didi

generics - VHDL:使用整数通用的长度来确定选择行的数量

转载 作者:行者123 更新时间:2023-12-02 15:40:17 26 4
gpt4 key购买 nike

我正在尝试创建一个可重复使用的桶形移位器;它接受输入的位数组并将它们移动一定数量的位置(由另一个输入确定)。我想参数化该模块,以便它适用于任何 n

所需的选择行数由 n --> 决定,即下面代码中的 SHIFT_CNT = log2(NUMBITS-1)+1。在我的组织中(我认为总体而言),拥有非 std_logic_vectorstd_logic 的端口被认为是不好的形式,因此我使用了 std_logic_vector为选择行的数量。我需要根据输入泛型调整 std_logic_vector 的长度。有没有办法在不使用第二个泛型的情况下做到这一点?我见过this帖子,但它不涉及泛型。 This post 完全消除了泛型或使用日志值作为泛型,这对 future 的用户来说并不直观(如果 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;

最佳答案

您可以使用数学库计算logarit结果的log2和ceil来声明SHIFT_CNT的大小。

use IEEE.math_real.all;

或特定功能

use IEEE.math_real."ceil";
use IEEE.math_real."log2";

例如你想计算 clog2 的值 a

result := integer(ceil(log2(real(a))));

如果您只是使用这些函数来计算参数,您的代码是可合成的(我做到了)

如果您不想在实体中使用它,您可以使用这些函数在库或泛型中声明它们。

关于generics - VHDL:使用整数通用的长度来确定选择行的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12750007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com