2016-10-12 4 views
1

誰かがこのコードをチェックして、どこに間違いがあるのか​​教えていただけますか?コンパイラはこのエラーメッセージを送信します。Funcio_2.vhd(10): "OR":(vcom-1576)の近くに ')'があります。vhdlで間違った機能があります

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

は私が言うことができるものから

+0

を、これは快適さのためではありません。 – Yeste

+0

書き換えられたコードに同じエラーメッセージが表示されません。 – trentcl

+0

前と同じです: "OR"の近く:(vcom-1576)が ')'と期待しています。 – Yeste

答えて

1

を働いていない、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; 

あなたは、いくつかの他の言語のように、よりしっかりORよりも、その後VHDLをバインドするANDを望んでいた場合とにかくあなたが望んでいたことは決してやっていないだろうし、Modelsimはちょうどバグを捕まえた。いずれにしても、あなたが望むものを明確にするために式をカッコで括る必要があります。もちろん

、あなたはまた、いくつかのブール代数行うことができます:私は間違いを探すためにしようと懸命に試みた

f <= a XNOR d; 
関連する問題