aboutsummaryrefslogtreecommitdiffstats
path: root/src/synth/synth-ieee-std_logic_1164.ads
diff options
context:
space:
mode:
Diffstat (limited to 'src/synth/synth-ieee-std_logic_1164.ads')
-rw-r--r--src/synth/synth-ieee-std_logic_1164.ads125
1 files changed, 123 insertions, 2 deletions
diff --git a/src/synth/synth-ieee-std_logic_1164.ads b/src/synth/synth-ieee-std_logic_1164.ads
index 33a298f81..324fb2a52 100644
--- a/src/synth/synth-ieee-std_logic_1164.ads
+++ b/src/synth/synth-ieee-std_logic_1164.ads
@@ -44,7 +44,7 @@ package Synth.Ieee.Std_Logic_1164 is
'-' -- Don't care.
);
- subtype X01 is Std_Ulogic range 'X' .. '1';
+ subtype X01 is Std_Ulogic range 'X' .. '1';
function Read_Std_Logic (M : Memory_Ptr; Off : Uns32) return Std_Ulogic;
procedure Write_Std_Logic (M : Memory_Ptr; Off : Uns32; Val : Std_Ulogic);
@@ -60,7 +60,11 @@ package Synth.Ieee.Std_Logic_1164 is
type Table_1d_X01 is array (Std_Ulogic) of X01;
- To_X01 : constant Table_1d_X01 := "XX01XX01X";
+ -- UX01ZWLH-
+ To_X01 : constant Table_1d_X01 := "XX01XX01X";
+ Map_X01 : constant Table_1d := "XX01XX01X";
+ Map_X01Z : constant Table_1d := "XX01ZX01X"; -- Note: W => X
+ Map_UX01 : constant Table_1d := "UX01XX01X";
And_Table : constant Table_2d :=
-- UX01ZWLH-
@@ -75,6 +79,19 @@ package Synth.Ieee.Std_Logic_1164 is
"UX0XXX0XX" -- -
);
+ Nand_Table : constant Table_2d :=
+ -- UX01ZWLH-
+ ("UU1UUU1UU", -- U
+ "UX1XXX1XX", -- X
+ "111111111", -- 0
+ "UX10XX10X", -- 1
+ "UX1XXX1XX", -- Z
+ "UX1XXX1XX", -- W
+ "111111111", -- L
+ "UX10XX10X", -- H
+ "UX1XXX1XX" -- -
+ );
+
Or_Table : constant Table_2d :=
-- UX01ZWLH-
("UUU1UUU1U", -- U
@@ -88,6 +105,19 @@ package Synth.Ieee.Std_Logic_1164 is
"UXX1XXX1X" -- -
);
+ Nor_Table : constant Table_2d :=
+ -- UX01ZWLH-
+ ("UUU0UUU0U", -- U
+ "UXX0XXX0X", -- X
+ "UX10XX10X", -- 0
+ "000000000", -- 1
+ "UXX0XXX0X", -- Z
+ "UXX0XXX0X", -- W
+ "UX10XX10X", -- L
+ "000000000", -- H
+ "UXX0XXX0X" -- -
+ );
+
Xor_Table : constant Table_2d :=
-- UX01ZWLH-
("UUUUUUUUU", -- U
@@ -101,8 +131,99 @@ package Synth.Ieee.Std_Logic_1164 is
"UXXXXXXXX" -- -
);
+ Xnor_Table : constant Table_2d :=
+ -- UX01ZWLH-
+ ("UUUUUUUUU", -- U
+ "UXXXXXXXX", -- X
+ "UX10XX10X", -- 0
+ "UX01XX01X", -- 1
+ "UXXXXXXXX", -- Z
+ "UXXXXXXXX", -- W
+ "UX10XX10X", -- L
+ "UX01XX01X", -- H
+ "UXXXXXXXX" -- -
+ );
+
Not_Table : constant Table_1d :=
-- UX01ZWLH-
"UX10XX10X";
+ Match_Eq_Table : constant Table_2d :=
+ -- UX01ZWLH-
+ ("UUUUUUUU1", -- U
+ "UXXXXXXX1", -- X
+ "UX10XX101", -- 0
+ "UX01XX011", -- 1
+ "UXXXXXXX1", -- Z
+ "UXXXXXXX1", -- W
+ "UX10XX101", -- L
+ "UX01XX011", -- H
+ "111111111" -- -
+ );
+
+ Match_Ne_Table : constant Table_2d :=
+ -- UX01ZWLH-
+ ("UUUUUUUU1", -- U
+ "UXXXXXXX1", -- X
+ "UX01XX011", -- 0
+ "UX10XX101", -- 1
+ "UXXXXXXX1", -- Z
+ "UXXXXXXX1", -- W
+ "UX01XX011", -- L
+ "UX10XX101", -- H
+ "111111111" -- -
+ );
+
+ Match_Le_Table : constant Table_2d :=
+ -- UX01ZWLH-
+ ("UUUUUUUU1", -- U
+ "UXXXXXXX1", -- X
+ "UX11XX111", -- 0
+ "UX01XX011", -- 1
+ "UXXXXXXX1", -- Z
+ "UXXXXXXX1", -- W
+ "UX11XX111", -- L
+ "UX01XX011", -- H
+ "111111111" -- -
+ );
+
+ Match_Lt_Table : constant Table_2d :=
+ -- UX01ZWLH-
+ ("UUUUUUUU1", -- U
+ "UXXXXXXX1", -- X
+ "UX01XX011", -- 0
+ "UX00XX001", -- 1
+ "UXXXXXXX1", -- Z
+ "UXXXXXXX1", -- W
+ "UX01XX011", -- L
+ "UX00XX001", -- H
+ "111111111" -- -
+ );
+
+ Match_Ge_Table : constant Table_2d :=
+ -- UX01ZWLH-
+ ("UUUUUUUU1", -- U
+ "UXXXXXXX1", -- X
+ "UX10XX101", -- 0
+ "UX11XX111", -- 1
+ "UXXXXXXX1", -- Z
+ "UXXXXXXX1", -- W
+ "UX10XX101", -- L
+ "UX11XX111", -- H
+ "111111111" -- -
+ );
+
+ Match_Gt_Table : constant Table_2d :=
+ -- UX01ZWLH-
+ ("UUUUUUUU1", -- U
+ "UXXXXXXX1", -- X
+ "UX00XX001", -- 0
+ "UX10XX101", -- 1
+ "UXXXXXXX1", -- Z
+ "UXXXXXXX1", -- W
+ "UX00XX001", -- L
+ "UX10XX101", -- H
+ "111111111" -- -
+ );
+
end Synth.Ieee.Std_Logic_1164;