【发布时间】:2020-01-09 00:24:24
【问题描述】:
我正在使用 VHDL-2002,尝试通过以下方式声明一个常量
constant CORDIC_SCALE_FACTOR : integer := 0.607252935*(2**COORDS_WIDTH);
COORDS_WIDTH 是先前定义的泛型。但是,由于类型的原因,我无法执行此乘法。我想做的是将2**COORDS_WIDTH 转换为浮点类型,然后将结果转换为整数值(假设转换将采用浮点的实部并将其分配给整数)。我怎样才能做到这一点?我在网上找到了处理这种类型转换的资源,但不是文字,这应该更容易。
【问题讨论】:
-
“这应该更容易。” 欢迎使用 VHDL。如果您想要更轻松的生活,请使用 System Verilog。 :-)
-
那么就没有办法在常量之间进行这种操作了吗?
-
相信VHDL专家很快就会给你答案。正是为了这种本应简单但并非如此的事情,我尽量避免使用 VHDL。您可能可以通过告诉他们您使用的 VHDL 标准来帮助他们。 2008 年?
-
我正在使用仅支持部分 VHDL 2008 的 gHDL,所以我使用的是 2002
-
error: no function declarations for operator "*",它在抱怨结果值,没有 "*"[real, integer return integer] 乘法运算符。致力于 Oldfart 对强类型语言的偏见。提供带有错误指示的minimal reproducible example,在一个包中提供 4 行带有常量 COORDS_WIDTH 的声明。修复是类型转换 -constant CORDIC_SCALE_FACTOR: integer := integer(0.607252935 * (2 ** COORDS_WIDTH));