假设我需要一个信号来表示从 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
仅适用于数组(了解 VHDL 属性),而整数(自然)不是数组-它是一个数字:) (VHDL向量整数转换问题)
同样,我知道我可以使用 log2(从最大值计算无符号变量的宽度?) - 但我想快速查看(在合成期间)“合成器”有多少“位”分配给最终的综合设计,因此大约将使用多少最终 FPGA 资源(特别是如果我使用“泛型”以某种方式计算整数的特定最大值)。
好吧,提前感谢您的任何回复,干杯!
编辑:一些上下文:我使用的是 ISE Webpack 9.2;我正在尝试使用“通用”变量/常量作为参数,然后使用方程式计算计数器的最大值。我猜这个计算发生在“编译”时间(这将是 ISE 中的“合成” - 而不是“实施设计”),所以我希望报告消息出现在这里(事实上我得到了它们,对于 std_logic_vector 正确的,在综合日志中 - 但是,对于我来说,相同的报告消息也发生在行为模拟开始时,这很好)。
这些报告消息的目标是确保我的方程式都正常,并且合成器不会尝试推断 32 位计数器 - 即使我只想从 0 计数到 5 :)