diff options
Diffstat (limited to 'src/synth/netlists-gates.ads')
-rw-r--r-- | src/synth/netlists-gates.ads | 60 |
1 files changed, 34 insertions, 26 deletions
diff --git a/src/synth/netlists-gates.ads b/src/synth/netlists-gates.ads index e1de55289..e9c153c97 100644 --- a/src/synth/netlists-gates.ads +++ b/src/synth/netlists-gates.ads @@ -39,61 +39,69 @@ package Netlists.Gates is subtype Dyadic_Module_Id is Module_Id range Id_And .. Id_Smul; -- Logical and arithmetic shifts. + -- FIXME: clarify right operand: width, large values Id_Lsl : constant Module_Id := 13; Id_Lsr : constant Module_Id := 14; Id_Asr : constant Module_Id := 15; subtype Shift_Module_Id is Module_Id range Id_Lsl .. Id_Asr; - Id_Buf : constant Module_Id := 16; - Id_Not : constant Module_Id := 17; + -- Rotations. + -- FIXME: clarify right operand. + Id_Rol : constant Module_Id := 16; + Id_Ror : constant Module_Id := 17; - Id_Neg : constant Module_Id := 18; + subtype Rotate_Module_Id is Module_Id range Id_Lsl .. Id_Asr; - subtype Monadic_Module_Id is Module_Id range Id_Buf .. Id_Neg; + subtype Shift_Rotate_Module_Id is Module_Id range Id_Lsl .. Id_Ror; - Id_Eq : constant Module_Id := 20; - Id_Ne : constant Module_Id := 21; - Id_Ule : constant Module_Id := 22; - Id_Sle : constant Module_Id := 23; - Id_Ult : constant Module_Id := 24; - Id_Slt : constant Module_Id := 25; - Id_Uge : constant Module_Id := 26; - Id_Sge : constant Module_Id := 27; - Id_Ugt : constant Module_Id := 28; - Id_Sgt : constant Module_Id := 29; + Id_Not : constant Module_Id := 18; + Id_Neg : constant Module_Id := 19; + + subtype Monadic_Module_Id is Module_Id range Id_Not .. Id_Neg; + + Id_Eq : constant Module_Id := 21; + Id_Ne : constant Module_Id := 22; + Id_Ule : constant Module_Id := 23; + Id_Sle : constant Module_Id := 24; + Id_Ult : constant Module_Id := 25; + Id_Slt : constant Module_Id := 26; + Id_Uge : constant Module_Id := 27; + Id_Sge : constant Module_Id := 28; + Id_Ugt : constant Module_Id := 29; + Id_Sgt : constant Module_Id := 30; subtype Compare_Module_Id is Module_Id range Id_Eq .. Id_Sgt; - Id_Red_And : constant Module_Id := 30; - Id_Red_Or : constant Module_Id := 31; + Id_Red_And : constant Module_Id := 31; + Id_Red_Or : constant Module_Id := 32; subtype Reduce_Module_Id is Module_Id range Id_Red_And .. Id_Red_Or; - Id_Concat2 : constant Module_Id := 32; - Id_Concat3 : constant Module_Id := 33; - Id_Concat4 : constant Module_Id := 34; + Id_Concat2 : constant Module_Id := 40; + Id_Concat3 : constant Module_Id := 41; + Id_Concat4 : constant Module_Id := 42; subtype Concat_Module_Id is Module_Id range Id_Concat2 .. Id_Concat4; -- Concatenation with N inputs. - Id_Concatn : constant Module_Id := 35; + Id_Concatn : constant Module_Id := 43; -- Inputs: s, i0, i1 -- Output: o - Id_Mux2 : constant Module_Id := 36; + Id_Mux2 : constant Module_Id := 44; -- Inputs: s, i0, i1, s2, s3 -- Output: o - Id_Mux4 : constant Module_Id := 37; + Id_Mux4 : constant Module_Id := 45; subtype Mux_Module_Id is Module_Id range Id_Mux2 .. Id_Mux4; -- 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 := 38; - Id_Isignal : constant Module_Id := 39; - Id_Output : constant Module_Id := 40; - Id_Port : constant Module_Id := 41; + Id_Signal : constant Module_Id := 46; + Id_Isignal : constant Module_Id := 47; + Id_Output : constant Module_Id := 48; + Id_Port : constant Module_Id := 49; -- Note: initial values must be constant nets. -- |