integer - VHDL:找出/报告整数的位宽/长度(相对于 std_logic_vector)?

标签 integer logic width vhdl synthesis

假设我需要一个信号来表示从 0 到 5 的数字;显然这需要 3 位 std_logic 来表示(即如果 MAXVAL=5,则 bitwidth= {wcalc "floor(logtwo($MAXVAL))+1"}) 。

我知道我可以这样做:

SIGNAL myLogicVector : STD_LOGIC_VECTOR(2 downto 0) := 5; 

我用它显式指定一个由三个 std_logic“位”组成的数组,并设置初始值;然后我可以使用 REPORT 打印出长度(在本例中为 3):

report("Bit width of myLogicVector is "& integer'image(myLogicVector'length));

到目前为止,一切都很好。但是,假设我使用整数(数字)类型:

SIGNAL myInteger : NATURAL range 0 to 5 := 5;

我猜测这里的“编译器”(“合成器”)会自动推断出它需要 3 位存储长度,因为该整数的值介于 0 到 5 之间。如果是的,我的问题是:是否有可能以某种方式在报告中打印出这个位宽度/长度/大小?

当然,诀窍是这样的:

report("Bit width of myInteger is "& integer'image(myInteger'length));

...将会失败(例如,“HDLParsers:3389 - 属性'长度的前缀必须是一个数组对象”),因为据我所知,所有这些属性都像 'length'range 仅适用于数组 ( Understanding VHDL Attributes ),而整数(自然)不是数组 - 它是 < em>数字 :) ( VHDL vector integer conversion question )

再次,我知道我可能会使用 log2 ( Computing the width of an unsigned variable from maximum value? ) - 但我想要的只是快速查看(在合成期间)“”有多少“位”为最终综合设计分配的“合成器”,从而估算最终 FPGA 资源的使用量(特别是如果我使用“泛型”以某种方式计算整数的特定最大值 )。

好的,提前感谢您的回复, 干杯!

编辑:一些上下文:我正在使用 ISE Webpack 9.2;我尝试使用“通用”变量/常量作为参数,然后使用方程来计算计数器的最大值。我猜这个计算发生在“编译”时(在 ISE 中是“综合”,而不是“实现设计”),因此我希望在此处出现报告消息(事实上我得到了因此,对于 std_logic_vector 来说,在综合日志中 - 然而,对我来说相同的报告消息也在行为模拟开始时出现,这很好)。

这些报告消息的目标是确保我的方程正确,并且合成器不会尝试推断 32 位计数器 - 即使我只想从 0 计数到 5 :)

最佳答案

原则上,VHDL 整数的表示是未定义的。

实际上,您通常可以假设综合工具将使用 2 的补码表示,同时考虑范围约束。因此,范围约束和实现的位宽之间的关系很简单,尽管从 VHDL 内报告位宽并非如此。

关于integer - VHDL:找出/报告整数的位宽/长度(相对于 std_logic_vector)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5195242/

相关文章:

c# - 表示数字的最少位数

java - 将字符串(时间戳)转换为整数

java - Integer.MIN_VAL 仍然显示负值

c - 为什么我的回答总是错

html - 保持两列css3之间的宽度比

width - 跨度宽度属性被禁用

Python 将字符串转换为命名空间

javascript - 对除第一项之外的数组进行排序。 Array.prototype.sort()

java - 如何左旋转数组的元素

jquery - 文本区域宽度自动调整大小