vhdl中的功能错误

时间:2016-10-12 15:57:32

标签: modelsim

有人可以查看此代码并告诉我错误在哪里?编译器发送此错误消息:Funcio_2.vhd(10):near" OR":(vcom-1576)期待')'。

--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));

没有工作

1 个答案:

答案 0 :(得分:0)

据我所知,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就永远不会做你想要的,而且ModelsI只是抓住了这个bug。无论哪种方式,您都必须将表达式括起来以阐明您想要的内容。

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

f <= a XNOR d;