我需要取结果的绝对值,我只对最重要的位感兴趣 . 这就是我所做的:
data_ram_h <= std_logic_vector(abs(signed(resize(r4(calc_cnt - 2), data_ram_h'length) + r4(calc_cnt - 1) +
r4(calc_cnt) + r4(calc_cnt + 1) + r4(calc_cnt + 2) -
r2(calc_cnt - 2) - r2(calc_cnt - 1) - r2(calc_cnt) -
r2(calc_cnt + 1) - r2(calc_cnt + 2))))(11 downto 4);
我尝试检查语法,我收到此错误:
type conversion std_logic_vector is not allowed as a prefix for an slice name.
data_ram_h是正确维度的std_logic_vector,而abs函数返回一个signed,在转换为std_logic_vector时应该没有问题 . 我使用的库是使用ieee.numeric_std.all .
我哪里错了?在此先感谢c:
2 回答
类型转换是一种基本操作,恰好需要围绕它的操作数表达式括起来 . 并且存在问题,它的使用不是函数调用,因此它不能用作切片名称的前缀 .
切片名称的前缀是function_call或名称 . (IEEE Std 1076-2008,5种类型,5.1通用,显式类型转换,8名称,8.1通用,8.5切片名称) .
如果是函数调用,则可以对结果进行切片 .
另一方面,你可以切片“”abs“,所以切片然后进行类型转换:
使用
abs
作为函数调用需要使用它的声明名称"abs"
.我只是在猜测一些声明,所以我不能保证这在您的代码中有效 . 以上示例进行了分析,详细说明和运行,其中说明子类型范围是兼容的 .
最后我解开了疑问 . 即使
std_logic_vector
是一个函数,所以我需要3个变量来对结果进行切片而不会出错 . 我在这做了什么:具有以下定义:
谢谢Paebbels的评论:)
如果有人有更好的解决方法,请发布!