![]() |
1
1
而giwrgos rizakos原创 question 关于调整大小,关于运算符和函数重载可见性的问题和答案由来已久(这里没有运算符“+”的函数声明)。 在对这些问题和答案进行搜索之后,此答案尝试提供一个问题和答案对,该对可用于消除基于在解释流中提供权威参考的未来重复问题。 问题从可见性开始: 12.3能见度
它涉及重载子程序: 4.5.2操作员超载
运算符重载被定义为子程序并使用子程序重载规则: 4.5子程序重载 4.5.1概述
作为一个segue子程序,可以用签名来描述为一个速记: 4.5.3签名
下面是一个例子:
可以用签名来描述。
z被声明为std_logic_vector类型。“+”的左操作数是x,它是主题类型转换为无符号(9.3.6中给出的规则,两种数组类型,相同的元素类型)。右操作数是使用
12.5过载解决的背景
通过use use子句使函数可见,并使数值形式的声明可见: 12.4使用条款
在未找到函数声明的示例上执行相同的重载解析。找不到“+”的函数声明
正如马修·泰勒所指出的,你可以在右手边修改作业 表达 按类型转换为标准逻辑矢量:
而不需要resize函数调用的原因可以通过引用ieee包numeric-std中的“+”`[unsigned,unsigned return unsigned]的函数声明来权威地显示。 numeric_std-body.vhdl ,在 1076-2008 downloads.zip 这是-2008标准的一部分):
要解释该命令,需要在numeric_std.vhdl中声明unsigned(也可以在上述zip文件中找到):
它是提供元素解析函数名的unresolved_unsigned的子类型。标准中解释了分辨率函数: 4.6分辨率函数
子类型声明语法可能需要找到解析函数: 6.3子类型声明
解析的函数可以在std_logic_1164包声明中找到(在上述zip文件中,作为标准的一部分提供)。 分辨率是一个模拟问题,见14.7模型的执行,特别是14.7.3信号值的传播及其子条款,其中分辨率应用于信号。 (关于这里,你可以看到为什么会有很多不完整的答案,但并不排除未来的问题。在标准中寻找答案需要对主题的理解,它的主要受众是工具实现者和高级用户,其中vhdl语法和语义的定义非常简洁,允许它用作正式的表示法。) |
![]() |
2
2
错误信息非常清楚。运算符“+”没有可以添加两个
所以,如果添加另一个类型转换以将添加的结果转换回
超载 只有当函数、过程或运算符正好有一个匹配项时才有效。如果少于一个,编译器就没有可供选择的版本;如果多于一个,编译器就不知道该选择哪一个,并且存在一个需要解决的歧义。
实际上,您不需要调整大小
|
![]() |
Ryan · 使用16位DSP的33*33位 7 年前 |
![]() |
elmakhloufi assaad · 用vhdl读取二进制文件 7 年前 |
![]() |
CJC · VHDL:使用聚合其他对象为多个数据类型赋值 7 年前 |
|
Koli · 如何使用VHDL在组合逻辑中并发执行语句? 7 年前 |
![]() |
Andreea Dumitru · PIC24的签名扩展指令[关闭] 7 年前 |
![]() |
Wad · VHDL块和保护输入-这段代码做什么? 7 年前 |
![]() |
Seung Jin Lee · 连接到多个驱动程序或同步描述错误的问题 7 年前 |
|
v4ttel · VHDL:除法和十进制表示法 7 年前 |