sda*_*aau 5 logic integer synthesis vhdl width
假设我需要一个信号来表示0到5之间的数字; 显然这需要表示3比特的std_logic(即如果MAXVAL = 5,则bitwidth = { wcalc "floor(logtwo($MAXVAL))+1"}).
我知道我能做到:
SIGNAL myLogicVector : STD_LOGIC_VECTOR(2 downto 0) := 5;
Run Code Online (Sandbox Code Playgroud)
我明确指定了三个std_logic'位'的数组,并设置初始值; 然后我可以使用REPORT打印出长度(在本例中为3):
report("Bit width of myLogicVector is "& integer'image(myLogicVector'length));
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是,假设我使用整数(数字)类型:
SIGNAL myInteger : NATURAL range 0 to 5 := 5;
Run Code Online (Sandbox Code Playgroud)
我猜这里'编译器'('合成器')会自动推断它需要3位存储长度,因为这个整数的范围是0到5之间的值.如果是这样的话,我的问题是:是有可能以某种方式在报告中打印出这个位宽/长度/大小?
当然,诀窍是这样的:
report("Bit width of myInteger is "& integer'image(myInteger'length));
Run Code Online (Sandbox Code Playgroud)
...将失败(例如,使用" HDLParsers:3389 - 属性的前缀'长度必须是数组对象 "),因为据我所知,所有这些属性类似于'length并且'range仅适用于数组(了解VHDL属性),而整数(自然)不是数组 - 它是一个数字 :)(VHDL向量整数转换问题)
再一次,我知道我可以利用log2(从最大值计算无符号变量的宽度?) - 但我想要的只是快速看到(在合成期间)"合成器"有多少'位'分配给最终的综合设计,因此在最终的FPGA资源方面将使用多少(特别是如果我使用'泛型'以某种方式计算整数的特定最大值).
嗯,提前感谢任何回复,干杯!
编辑:一点上下文:我正在使用ISE Webpack 9.2; 我正在尝试使用'通用'变量/常量作为参数,然后使用公式计算计数器的最大值.这个计算,我猜想发生在'编译'时(在ISE中是'Synthesize' - 而不是'实现设计'),所以它就在这里我想要报告消息发生(事实上我得到了它们,对于std_logic_vector,在综合日志中 - 然而,同样的报告消息也发生在行为模拟的开始,这很好).
这些报告消息的目的是确保我的方程式都正常,并且合成器不会尝试推断32位计数器 - 即使我只想从0到5计数:)
原则上,VHDL整数的表示是未定义的.
在实践中,您通常可以假设综合工具将使用2的补码表示,同时考虑范围约束.因此,范围约束和实现的位宽之间的关系是直截了当的,即使从VHDL内报告位宽也不是.
小智 2
\n\n\n我猜测这里的“编译器”(“合成器”)会自动推断出它需要 3 位存储长度,因为该整数的值在 0 到 5 之间
\n
根据规范,它应该,但不是必需的。来自 IEEE 1076.6-2004:
\n\n\n\n\n1.3 术语
\n\n“应”一词表示必须严格遵守的强制性要求,以符合标准,并且不允许偏离(应等于要求)。“应该”一词用于表示某种行动方案是首选,但不一定是必需的;
\n\n8.3.1.2 整数类型
\n\n建议综合工具将具有整数子类型指示的信号或变量转换为相应的位向量。如果范围不包含负值,则该项目应具有无符号二进制表示形式。如果范围包含一个或多个负值,则该项目应具有二进制补码实现。该向量应具有与这些表示一致的最小\n宽度。
\n\n综合工具应支持整数类型以及正数、负数和\n 无约束(通用)整数\n,其边界位于 \xe2\x80\x932 147 483 648 到 +2 147 483 647 范围内(包括边界值 \n成功映射 32 位二进制补码数)
\n\n示例: \xe2\x80\x9cINTEGER 范围 9 到 10\xe2\x80\x9d 应使用 4 位的等效向量长度来合成,就像已使用 \xe2\x80 的子类型指示\n 定义它一样\x9cINTEGER 范围 0 到 15\xe2\x80\x9d。
\n
我可以肯定地说,至少有一种综合工具不会以这种方式使用范围,因为我必须调试形式验证错误比较。
\n\n对于 Xilinx FPGA,XST 综合报告将告诉哪些存储元件具有未使用的位,但不告诉简单的连线。
\n