diff options
Diffstat (limited to 'src/synth/synth-ieee-std_logic_1164.ads')
-rw-r--r-- | src/synth/synth-ieee-std_logic_1164.ads | 125 |
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; |