aboutsummaryrefslogtreecommitdiffstats
path: root/src/psl/psl-qm.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-06-16 07:29:53 +0200
committerTristan Gingold <tgingold@free.fr>2020-06-16 07:29:53 +0200
commitc033bff91ebf329f3876d70b49588e1d785fc1f7 (patch)
treef5652e131531e5ea1c478e1df219345d4e7d7daa /src/psl/psl-qm.adb
parent828ad61b5b84c135d74e9064112c2db4ebd6adf4 (diff)
downloadghdl-c033bff91ebf329f3876d70b49588e1d785fc1f7.tar.gz
ghdl-c033bff91ebf329f3876d70b49588e1d785fc1f7.tar.bz2
ghdl-c033bff91ebf329f3876d70b49588e1d785fc1f7.zip
vhdl psl: add support for equivalence operator. Fix #1371
Diffstat (limited to 'src/psl/psl-qm.adb')
-rw-r--r--src/psl/psl-qm.adb16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/psl/psl-qm.adb b/src/psl/psl-qm.adb
index 722577018..100900212 100644
--- a/src/psl/psl-qm.adb
+++ b/src/psl/psl-qm.adb
@@ -275,6 +275,22 @@ package body PSL.QM is
return Build_Primes_And (Build_Primes (Get_Left (N), False),
Build_Primes (Get_Right (N), True));
end if;
+ when N_Equiv_Bool =>
+ if not Negate then
+ -- a <-> b <-> (a && b) || (!a && !b)
+ return Build_Primes_Or
+ (Build_Primes_And (Build_Primes (Get_Left (N), False),
+ Build_Primes (Get_Right (N), False)),
+ Build_Primes_And (Build_Primes (Get_Left (N), True),
+ Build_Primes (Get_Right (N), True)));
+ else
+ -- !(a <-> b) <-> (!a && b) || (a && !b)
+ return Build_Primes_Or
+ (Build_Primes_And (Build_Primes (Get_Left (N), True),
+ Build_Primes (Get_Right (N), False)),
+ Build_Primes_And (Build_Primes (Get_Left (N), False),
+ Build_Primes (Get_Right (N), True)));
+ end if;
when others =>
Error_Kind ("build_primes", N);
end case;