aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-07-02 18:56:05 +0200
committerTristan Gingold <tgingold@free.fr>2020-07-02 18:56:10 +0200
commit7cef548049a386a6afaa0ad825318ab4833b0446 (patch)
treeff388f636e80082d94262df9cba5c7c758d5a9d6
parentb3aec78254d4048f61693a88a3d25d1f5d8ccd25 (diff)
downloadghdl-7cef548049a386a6afaa0ad825318ab4833b0446.tar.gz
ghdl-7cef548049a386a6afaa0ad825318ab4833b0446.tar.bz2
ghdl-7cef548049a386a6afaa0ad825318ab4833b0446.zip
synth-environment: allow multiple assignments from instance ports
-rw-r--r--src/synth/synth-environment.adb33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/synth/synth-environment.adb b/src/synth/synth-environment.adb
index f050265c3..18133594e 100644
--- a/src/synth/synth-environment.adb
+++ b/src/synth/synth-environment.adb
@@ -658,9 +658,22 @@ package body Synth.Environment is
return True;
end Is_Finalize_Assignment_Multiport;
- function Is_Tribuf_Assignment (Prev, Next : Conc_Assign) return Boolean
+ function Is_Tribuf_Net (N : Net) return Boolean
is
use Netlists.Gates;
+ begin
+ case Get_Id (Get_Net_Parent (N)) is
+ when Id_Tri
+ | Id_Resolver
+ | Id_Port =>
+ return True;
+ when others =>
+ return False;
+ end case;
+ end Is_Tribuf_Net;
+
+ function Is_Tribuf_Assignment (Prev, Next : Conc_Assign) return Boolean
+ is
P_Val : Net;
N_Val : Net;
begin
@@ -675,22 +688,8 @@ package body Synth.Environment is
end if;
-- Both assignments must be a tri or a resolver.
- case Get_Id (Get_Net_Parent (P_Val)) is
- when Id_Tri
- | Id_Resolver =>
- null;
- when others =>
- return False;
- end case;
- case Get_Id (Get_Net_Parent (N_Val)) is
- when Id_Tri
- | Id_Resolver =>
- null;
- when others =>
- return False;
- end case;
-
- return True;
+ return Is_Tribuf_Net (P_Val)
+ and then Is_Tribuf_Net (N_Val);
end Is_Tribuf_Assignment;
-- Compute the VALUE to be assigned to WIRE_REC. Handle partial