我有一个实例化 FIFO 的实体,其深度是通用的:
DEPTH_FIFO : natural range 2 to 64 := 3; -- number of vectors in the FIFO
我必须声明一个可以存储 FIFO 索引的计数器,但我需要知道计数器的大小。
signal cnt_FIFO : unsigned(length_cnt_FIFO-1 downto 0);
我的问题是找到一种方法来计算常量length_cnt_FIFO。
我已经尝试过这个:
constant length_cnt_FIFO : natural := CEIL(LOG(2, DEPTH_FIFO));
与库使用 ieee.MATH_REAL.all;
但是我遇到了类型转换的问题。
有人有想法让这个工作或任何其他解决方案吗?
提前致谢,
SLP
最佳答案
- 您的
DEPTH_FIFO
是自然的,但您必须将其转换为实数才能将其传递给对数函数。 - CEIL 函数返回实数:您必须将其转换回自然数,才能将其存储在自然类型常量中。
- LOG 函数的参数是实数,因此传递文字 2 会导致问题,因为它被作为整数处理。使用例如
2.0
代替 LOG2 函数。
这对我有用:
constant length_cnt_FIFO : natural := natural(CEIL(LOG2(real(DEPTH_FIFO))));
关于type-conversion - 当 std_logic_vector 的大小可参数化时,如何计算其所需的位数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58281901/