diff options
| -rw-r--r-- | src/synth/netlists-builders.adb | 5 | ||||
| -rw-r--r-- | src/synth/netlists-disp_vhdl.adb | 8 | ||||
| -rw-r--r-- | src/synth/netlists-gates.ads | 58 | 
3 files changed, 41 insertions, 30 deletions
diff --git a/src/synth/netlists-builders.adb b/src/synth/netlists-builders.adb index 14323413b..20626b2c3 100644 --- a/src/synth/netlists-builders.adb +++ b/src/synth/netlists-builders.adb @@ -353,6 +353,8 @@ package body Netlists.Builders is        Create_Compare_Module (Design, Res.M_Compare (Id_Ult),                               Get_Identifier ("ult"), Id_Ult); +      Create_Compare_Module (Design, Res.M_Compare (Id_Ule), +                             Get_Identifier ("ule"), Id_Ule);        Create_Concat_Modules (Res);        Create_Const_Modules (Res); @@ -403,6 +405,7 @@ package body Netlists.Builders is        Wd : constant Width := Get_Width (L);        pragma Assert (Wd /= No_Width);        pragma Assert (Get_Width (R) = Wd); +      pragma Assert (Ctxt.M_Dyadic (Id) /= No_Module);        Inst : Instance;        O : Net;     begin @@ -418,6 +421,7 @@ package body Netlists.Builders is                             Id : Monadic_Module_Id;                             Op : Net) return Net     is +      pragma Assert (Ctxt.M_Monadic (Id) /= No_Module);        Inst : Instance;        O : Net;     begin @@ -435,6 +439,7 @@ package body Netlists.Builders is        Wd : constant Width := Get_Width (L);        pragma Assert (Wd /= No_Width);        pragma Assert (Get_Width (R) = Wd); +      pragma Assert (Ctxt.M_Compare (Id) /= No_Module);        Inst : Instance;        O : Net;     begin diff --git a/src/synth/netlists-disp_vhdl.adb b/src/synth/netlists-disp_vhdl.adb index df40831bf..0f7418167 100644 --- a/src/synth/netlists-disp_vhdl.adb +++ b/src/synth/netlists-disp_vhdl.adb @@ -203,7 +203,7 @@ package body Netlists.Disp_Vhdl is              Port_Name := Get_Output_Desc (Get_Module (Inst), Idx).Name;              case Get_Sname_Kind (Inst_Name) is                 when Sname_Version => -                  Put ("net_"); +                  Put ("n");                    Put_Name_Version (Inst_Name);                    Put ("_");                    Put_Interface_Name (Port_Name); @@ -497,8 +497,14 @@ package body Netlists.Disp_Vhdl is           when Id_Ult =>              Disp_Template ("  \o0 <= '1' when \ui0 < \ui1 else '0';" & NL,                             Inst); +         when Id_Ule => +            Disp_Template ("  \o0 <= '1' when \ui0 <= \ui1 else '0';" & NL, +                           Inst);           when Id_Eq =>              Disp_Template ("  \o0 <= '1' when \i0 = \i1 else '0';" & NL, Inst); +         when Id_Ne => +            Disp_Template ("  \o0 <= '1' when \i0 /= \i1 else '0';" & NL, +                           Inst);           when Id_Or =>              Disp_Template ("  \o0 <= \i0 or \i1;" & NL, Inst);           when Id_And => diff --git a/src/synth/netlists-gates.ads b/src/synth/netlists-gates.ads index 90615dc7a..60955221c 100644 --- a/src/synth/netlists-gates.ads +++ b/src/synth/netlists-gates.ads @@ -44,39 +44,39 @@ package Netlists.Gates is     Id_Ne  : constant Module_Id := 17;     Id_Ule : constant Module_Id := 18;     Id_Sle : constant Module_Id := 19; -   Id_Ult : constant Module_Id := 18; -   Id_Slt : constant Module_Id := 19; -   Id_Uge : constant Module_Id := 18; -   Id_Sge : constant Module_Id := 19; -   Id_Ugt : constant Module_Id := 18; -   Id_Sgt : constant Module_Id := 19; +   Id_Ult : constant Module_Id := 20; +   Id_Slt : constant Module_Id := 21; +   Id_Uge : constant Module_Id := 22; +   Id_Sge : constant Module_Id := 23; +   Id_Ugt : constant Module_Id := 24; +   Id_Sgt : constant Module_Id := 25;     subtype Compare_Module_Id is Module_Id range Id_Eq .. Id_Sgt; -   Id_Red_And : constant Module_Id := 20; -   Id_Red_Or  : constant Module_Id := 21; +   Id_Red_And : constant Module_Id := 26; +   Id_Red_Or  : constant Module_Id := 27; -   Id_Concat2 : constant Module_Id := 22; -   Id_Concat3 : constant Module_Id := 23; -   Id_Concat4 : constant Module_Id := 24; +   Id_Concat2 : constant Module_Id := 28; +   Id_Concat3 : constant Module_Id := 29; +   Id_Concat4 : constant Module_Id := 30;     subtype Concat_Module_Id is Module_Id range Id_Concat2 .. Id_Concat4; -   Id_Split2 : constant Module_Id := 25; -   Id_Split3 : constant Module_Id := 26; +   Id_Split2 : constant Module_Id := 31; +   Id_Split3 : constant Module_Id := 32;     --  Inputs: s, i0, i1     --  Output: o -   Id_Mux2 : constant Module_Id := 27; +   Id_Mux2 : constant Module_Id := 33;     --  Inputs: s, i0, i1, s2, s3     --  Output: o -   Id_Mux4 : constant Module_Id := 28; +   Id_Mux4 : constant Module_Id := 34;     --  Like a wire: the output is equal to the input, but could be elimited     --  at any time.  Isignal has an initial value. -   Id_Signal  : constant Module_Id := 29; -   Id_Isignal : constant Module_Id := 30; -   Id_Output  : constant Module_Id := 31; +   Id_Signal  : constant Module_Id := 35; +   Id_Isignal : constant Module_Id := 36; +   Id_Output  : constant Module_Id := 37;     --  Note: initial values must be constant nets.     -- @@ -85,44 +85,44 @@ package Netlists.Gates is     --  input.     --  Inputs: CLK, D     --  Output: Q -   Id_Dff   : constant Module_Id := 32; +   Id_Dff   : constant Module_Id := 38;     --  A DFF with an asynchronous reset.  Note that the asynchronous reset     --  has priority over the clock.  When RST is asserted, the value is     --  set to RST_VAL.     --  Inputs: CLK, D, RST, RST_VAL     --  Output: Q -   Id_Adff  : constant Module_Id := 33; +   Id_Adff  : constant Module_Id := 39;     --  A simple DFF with an initial value (must be constant).  This is     --  for FPGAs. -   Id_Idff  : constant Module_Id := 34; +   Id_Idff  : constant Module_Id := 40;     --  A DFF with an asynchronous reset and an initial value. -   Id_Iadff : constant Module_Id := 35; +   Id_Iadff : constant Module_Id := 41;     --  Width change: truncate or extend.  Sign is know in order to possibly     --  detect loss of value. -   Id_Utrunc : constant Module_Id := 40; -   Id_Strunc : constant Module_Id := 41; -   Id_Uextend : constant Module_Id := 42; -   Id_Sextend : constant Module_Id := 43; +   Id_Utrunc : constant Module_Id := 42; +   Id_Strunc : constant Module_Id := 43; +   Id_Uextend : constant Module_Id := 44; +   Id_Sextend : constant Module_Id := 45;     subtype Truncate_Module_Id is Module_Id range Id_Utrunc .. Id_Strunc;     subtype Extend_Module_Id is Module_Id range Id_Uextend .. Id_Sextend;     --  Extract a bit or a slice at a constant offset.     --  OUT := IN0[OFF+WD-1:OFF] -   Id_Extract : constant Module_Id := 44; +   Id_Extract : constant Module_Id := 46;     --  OUT := IN0[IN1*STEP+OFF+WD-1:IN1*STEP+OFF] -   Id_Dyn_Extract : constant Module_Id := 45; +   Id_Dyn_Extract : constant Module_Id := 47;     --  This gate has two inputs A, B and one parameter POS.     --  It replaces bits POS + width(B) - 1 .. POS of A by B, ie:     --  T := A;     --  T (POS + width(B) - 1 .. POS) := B     --  OUT := T. -   Id_Insert : constant Module_Id := 47; +   Id_Insert : constant Module_Id := 48;     --  Positive/rising edge detector.  This is a pseudo gate.     --  A negative edge detector can be made using by negating the clock before  | 
