誰かがこのコードをチェックして、どこが間違っているのか教えてくれますか?コンパイラは次のエラーメッセージを送信します: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では、式の組み合わせAND
とOR
演算子を括弧で囲んで、優先順位を明確にする必要があります。これがどこにも文書化されていなかったので、知識に基づいて推測したところ、コンパイルされたことがわかりました。VHDLの標準によると、AND
そしてOR
、彼らは評価されるべきであるので、同じ優先順位を持ち、左から右へ。
私はいくつかの一時的なシグナルを自由に定義しましたが、これは同じことだと思います。
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;
他のいくつかの言語のように、AND
より緊密にバインドしたい場合OR
、VHDLはとにかくあなたが望むことを決して行わなかったでしょう、そしてModelsimはただバグを捕らえました。どちらの方法でも、必要なものを明確にするために式を括弧で囲む必要があります。
もちろん、ブール代数を実行することもできます。
f <= a XNOR d;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加