Function 没有参数的VHDL函数?

Function 没有参数的VHDL函数?,function,parameters,compiler-errors,vhdl,Function,Parameters,Compiler Errors,Vhdl,可以定义没有参数的VHDL函数吗 我试图计算记录类型中的位数,但要这样做,必须创建该类型的实例。因此,由于我不能只定义const BITS=t_rec.a'length+t_rec.b'length,我想定义一个函数function BITS()return natural,它实例化一条记录rec:t_rec,并返回rec.a'length+rec.b'length。但是,编译器在函数声明处出现异常“(”)时失败,甚至在到达定义之前 我只想包含一个未使用的伪参数,但我怀疑lint工具会抱怨 在记

可以定义没有参数的VHDL函数吗

我试图计算记录类型中的位数,但要这样做,必须创建该类型的实例。因此,由于我不能只定义
const BITS=t_rec.a'length+t_rec.b'length
,我想定义一个函数
function BITS()return natural
,它实例化一条记录
rec:t_rec
,并返回
rec.a'length+rec.b'length
。但是,编译器在函数声明处出现异常“(”)时失败,甚至在到达定义之前

我只想包含一个未使用的伪参数,但我怀疑lint工具会抱怨

在记录之前为每个记录字段定义子类型将过于冗长

完整示例:

package pack is function BITS() return natural; end package pack; package body pack is function BITS() return natural is begin return 0; end function; end package body pack;
错误消息:

pack.vhd:1:30:不允许使用空接口列表

定义没有输入的函数时,应省去括号,例如:

function BITS return natural is
  variable rec : rec_t;
begin
  return rec.a'length + rec.b'length;
end function;
调用函数时也不应包含括号。例如:

report integer'image( BITS );
不是


定义无输入的函数时,应省去括号,例如:

function BITS return natural is
  variable rec : rec_t;
begin
  return rec.a'length + rec.b'length;
end function;
调用函数时也不应包含括号。例如:

report integer'image( BITS );
不是


功能声明的语法见IEEE Std 1076-2008 4.2子程序声明,4.2.1概述,其中在BNF中,形式参数列表是可选的(用方括号括起来,请参见1.3.2语法描述e))。可选的正式参数列表(4.2.2.1正式参数列表),如果存在,是一个接口列表(6.5.6接口列表,6.5.6.1概述),至少包含一个接口元素(参见BNF和1.3.2,a))。这就是导致“编译器”错误的原因。去掉包含括号的正式参数列表。提供一个包含实际错误消息的列表,我将对您的问题进行投票。它似乎不是重复的。我将投票表决一个解释为什么(VHDL语法不允许空接口列表声明)的答案。@user1155120我也会。为什么VHDL语法不允许空接口列表声明?@user1155120完成,请向上投票)@MatthewTaylor完成,请更新功能声明的语法见IEEE Std 1076-2008 4.2子程序声明,4.2.1概述,其中在BNF中,您会发现形式_参数_列表是可选的(用方括号括起来,请参见1.3.2语法描述e))。可选的正式参数列表(4.2.2.1正式参数列表),如果存在,是一个接口列表(6.5.6接口列表,6.5.6.1概述),至少包含一个接口元素(参见BNF和1.3.2,a))。这就是导致“编译器”错误的原因。去掉包含括号的正式参数列表。提供一个包含实际错误消息的列表,我将对您的问题进行投票。它似乎不是重复的。我将投票表决一个解释为什么(VHDL语法不允许空接口列表声明)的答案。@user1155120我也会投票。为什么VHDL语法不允许空接口列表声明?@user1155120完成,请向上投票)@MatthewTaylor完成,请向上投票。请扩展您的答案并添加一个调用示例,因为函数调用也没有括号:).9.3.4函数调用,函数调用::=函数名[(实际参数部分)],实际参数部分::=参数关联列表,6.5.7关联列表,6.5.7.1常规,关联列表::=关联元素{,关联元素}。至少有一个关联,从9.3.4我们可以看到括号和实际_参数_部分是可选的(1.3.2 c))。6.5.7.1“如果接口列表中的接口元素包含默认表达式…则任何对应的关联列表都不需要包含该接口元素的关联元素。”您能否扩展您的答案并添加调用示例,因为函数调用也没有括号:)。9.3.4函数调用,函数调用::=函数名[(实际参数部分)],实际参数部分::=参数关联列表,6.5.7关联列表,6.5.7.1常规,关联列表::=关联元素{,关联元素}。至少有一个关联,从9.3.4我们可以看到括号和实际_参数_部分是可选的(1.3.2 c))。6.5.7.1“如果接口列表中的接口元素包含默认表达式……则任何相应的关联列表都不需要包含该接口元素的关联元素。”