aboutsummaryrefslogtreecommitdiffstats
path: root/src/synth/synth-stmts.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/synth/synth-stmts.adb')
-rw-r--r--src/synth/synth-stmts.adb42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb
index cc8ae6da3..647cd0184 100644
--- a/src/synth/synth-stmts.adb
+++ b/src/synth/synth-stmts.adb
@@ -331,27 +331,33 @@ package body Synth.Stmts is
Cond : Node;
Cwf : Node;
Val, Cond_Val : Value_Acc;
- First, Last : Value_Acc;
+ First, Last : Net;
+ V : Net;
begin
- Last := null;
+ Last := No_Net;
Cwf := Get_Conditional_Waveform_Chain (Stmt);
while Cwf /= Null_Node loop
Val := Synth_Waveform (Syn_Inst, Get_Waveform_Chain (Cwf), Targ_Type);
+ V := Get_Net (Val);
Cond := Get_Condition (Cwf);
if Cond /= Null_Node then
Cond_Val := Synth_Expression (Syn_Inst, Cond);
- Val := Create_Value_Mux2 (Cond_Val, Val, null);
+ V := Build_Mux2 (Build_Context,
+ Get_Net (Cond_Val),
+ No_Net, V);
+ Set_Location (V, Cwf);
end if;
- if Last /= null then
- Last.M_F := Val;
+ if Last /= No_Net then
+ Connect (Get_Input (Get_Net_Parent (Last), 1), V);
else
- First := Val;
+ First := V;
end if;
- Last := Val;
+ Last := V;
Cwf := Get_Chain (Cwf);
end loop;
- Synth_Assignment (Syn_Inst, Target, First, Stmt);
+ Val := Create_Value_Net (First, Get_Value_Type (Syn_Inst, Targ_Type));
+ Synth_Assignment (Syn_Inst, Target, Val, Stmt);
end Synth_Conditional_Signal_Assignment;
procedure Synth_Variable_Assignment
@@ -373,28 +379,32 @@ package body Synth.Stmts is
Cond : Node;
Ce : Node;
Val, Cond_Val : Value_Acc;
- First, Last : Value_Acc;
+ V : Net;
+ First, Last : Net;
begin
- Last := null;
+ Last := No_Net;
Ce := Get_Conditional_Expression_Chain (Stmt);
while Ce /= Null_Node loop
Val := Synth_Expression_With_Type
(Syn_Inst, Get_Expression (Ce), Targ_Type);
+ V := Get_Net (Val);
Cond := Get_Condition (Ce);
if Cond /= Null_Node then
Cond_Val := Synth_Expression (Syn_Inst, Cond);
- Val := Create_Value_Mux2 (Cond_Val, Val, null);
+ V := Build_Mux2 (Build_Context, Get_Net (Cond_Val), No_Net, V);
+ Set_Location (V, Ce);
end if;
- if Last /= null then
- Last.M_F := Val;
+ if Last /= No_Net then
+ Connect (Get_Input (Get_Net_Parent (Last), 1), V);
else
- First := Val;
+ First := V;
end if;
- Last := Val;
+ Last := V;
Ce := Get_Chain (Ce);
end loop;
- Synth_Assignment (Syn_Inst, Target, First, Stmt);
+ Val := Create_Value_Net (First, Get_Value_Type (Syn_Inst, Targ_Type));
+ Synth_Assignment (Syn_Inst, Target, Val, Stmt);
end Synth_Conditional_Variable_Assignment;
procedure Synth_If_Statement (C : in out Seq_Context; Stmt : Node)