在VHDL中创建++运算符

kla*_*ter 2 function operator-overloading vhdl

我想为STD_LOGIC_VECTOR类型创建一个新的C++样式运算符.到目前为止,我设法创建并使用以下功能:

FUNCTION PLUS_ONE ( a : STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR is 
BEGIN
    RETURN std_logic_vector( unsigned( a ) + 1);
END FUNCTION;
Run Code Online (Sandbox Code Playgroud)

现在,如果我创建这个:

FUNCTION "++" ( a : STD_LOGIC_VECTOR) RETURN      STD_LOGIC_VECTOR is 
BEGIN
    RETURN std_logic_vector( unsigned( a ) + 1);
END FUNCTION;
Run Code Online (Sandbox Code Playgroud)

ISE抛出以下错误:

"++" is not a predefined operator.
Run Code Online (Sandbox Code Playgroud)

现在的问题是,是否有可能在VHDL中创建新的运算符,我遗漏了一些东西

ric*_*ick 5

您只能在VHDL中重载运算符,不能创建新的运算符符号.引用LRM(第4.5.2节):

指定符是运算符符号的函数的声明用于使运算符超载.运算符符号的字符序列应是9.2中定义的运算符类中的运算符之一.

手册的相应部分说:

condition_operator ::= ??
logical_operator ::= and | or | nand | nor | xor | xnor
relational_operator ::= = | /= | < | <= | > | >= | ?= | ?/= | ?< | ?<= | ?> | ?>=
shift_operator ::= sll | srl | sla | sra | rol | ror
adding_operator ::= + | – | &
sign ::= + | –
multiplying_operator ::= * | / | mod | rem
miscellaneous_operator ::= ** | abs | not
Run Code Online (Sandbox Code Playgroud)

尽管我喜欢简洁,但我必须承认,选择速记操作符而不是标准的表达方式是"语法糖",并且有可能使代码混淆.值得注意的是,像Python和Ruby这样的"时髦"语言也没有++运算符.

VHDL可以支持++运营商吗?我目前正在研究VHDL解析器,我冒险说添加一个后缀++运算符会破坏语言语法的一些规则,特别是因为一元运算符期望在符号的右边取一个操作数.由于这一点以及支持这种改变的强烈论据,我不希望很快就能看到它.所有人都考虑过,我个人的选择是坚持使用value := value + 1标准数据类型.