type-conversion - 当 std_logic_vector 的大小可参数化时,如何计算其所需的位数?

标签 type-conversion vhdl

我有一个实例化 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.al​​l;

但是我遇到了类型转换的问题。

有人有想法让这个工作或任何其他解决方案吗?

提前致谢,

SLP

最佳答案

  1. 您的 DEPTH_FIFO 是自然的,但您必须将其转换为实数才能将其传递给对数函数。
  2. CEIL 函数返回实数:您必须将其转换回自然数,才能将其存储在自然类型常量中。
  3. 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/

相关文章:

c# - 将字符串转换为 BASE62

c - 从unit8_t缓冲区到结构体的指针类型转换

go - 如何在 Go 中将 [Size]byte 转换为字符串?

simulation - 通过modelsim进行vhdl模拟的VCD转储。如何?

c - 使用C编程调用VHDL实现

vhdl - RTL pragma 指令触发器的完整列表

java - 如何对一个整数的3位数字求和?

c++ - 如何使用 std::map 从模板中获取数据类型

indexing - VHDL std_logic_vector 索引与 "downto"

vhdl - 这个组合码产生锁存器正常吗?