vhdl 中的错误函数

Wrong function in vhdl

谁能检查一下这段代码,告诉我哪里错了?编译器发送此错误消息:Funcio_2.vhd(10): near "OR": (vcom-1576) expecting ')'.

--Definimos la entidad funcio_2-
 ENTITY funcio_2 IS
 PORT(a,b,c,d:IN BIT;f:OUT BIT);
 END funcio_2;

 --Definimos su arquitectura logica-

 ARCHITECTURE logica OF funcio_2 IS
 BEGIN
 f<= (((NOT a) AND b) AND ((NOT c) OR b) AND(NOT d) OR(a AND c AND d) OR a AND(NOT d)) AND (NOT(a OR (NOT d)) OR NOT(((NOT a) AND b) AND ((NOT c) OR b) AND(NOT d) OR(a AND c AND d) OR a AND(NOT d)) AND (a OR (NOT d));


 END logica;

重写了我的代码,现在看起来像:

f<= (NOT a AND b AND NOT c OR b AND NOT d OR a AND c AND d OR a AND NOT d) AND NOT(a OR (NOT d)) OR NOT(NOT a AND b AND NOT c OR b AND NOT d OR a AND c AND d OR a AND NOT d) AND (a OR (NOT d));

不工作

据我所知,Modelsim 要求将 ANDOR 运算符组合在一起的表达式用括号括起来,以消除它们优先级的歧义。我在任何地方都找不到这个文档,所以我只是做了一个有根据的猜测,结果证明是可以编译的。根据 VHDL 标准,ANDOR 具有相同的优先级,因此它们应该从左到右计算。

我冒昧定义了一些临时信号,但我认为这是一回事:

t1 <= ((((((NOT a AND b AND NOT c) OR b) AND NOT d) OR a) AND c AND d) OR a) AND NOT d;
t2 <= a OR (NOT d);
t3 <= t1 AND NOT t2;
t4 <= t3 OR NOT t1;
f <= t4 AND t2;

如果您希望 ANDOR 绑定得更紧密,就像在某些其他语言中一样,那么 VHDL 无论如何都不会完成您想要的操作,而 Modelsim 恰好捕获了错误。无论哪种方式,您都必须将表达式括起来以阐明您想要的内容。

当然,你也可以做一些布尔代数:

f <= a XNOR d;