📄 numeric_std-body.vhdl
字号:
variable L01 : UNSIGNED(L_LEFT downto 0); variable R01 : UNSIGNED(R_LEFT downto 0); begin if ((L'LENGTH < 1) or (R'LENGTH < 1)) then assert NO_WARNING report "NUMERIC_STD.""="": null argument detected, returning FALSE" severity WARNING; return FALSE; end if; L01 := TO_01(XL, 'X'); R01 := TO_01(XR, 'X'); if ((L01(L01'LEFT)='X') or (R01(R01'LEFT)='X')) then assert NO_WARNING report "NUMERIC_STD.""="": metavalue detected, returning FALSE" severity WARNING; return FALSE; end if; return UNSIGNED_EQUAL(RESIZE(L01, SIZE), RESIZE(R01, SIZE)); end "="; -- Id: C.26 function "=" (L, R: SIGNED) return BOOLEAN is constant L_LEFT: INTEGER := L'LENGTH-1; constant R_LEFT: INTEGER := R'LENGTH-1; alias XL: SIGNED(L_LEFT downto 0) is L; alias XR: SIGNED(R_LEFT downto 0) is R; constant SIZE: NATURAL := MAX(L'LENGTH, R'LENGTH); variable L01 : SIGNED(L_LEFT downto 0); variable R01 : SIGNED(R_LEFT downto 0); begin if ((L'LENGTH < 1) or (R'LENGTH < 1)) then assert NO_WARNING report "NUMERIC_STD.""="": null argument detected, returning FALSE" severity WARNING; return FALSE; end if; L01 := TO_01(XL, 'X'); R01 := TO_01(XR, 'X'); if ((L01(L01'LEFT)='X') or (R01(R01'LEFT)='X')) then assert NO_WARNING report "NUMERIC_STD.""="": metavalue detected, returning FALSE" severity WARNING; return FALSE; end if; return SIGNED_EQUAL(RESIZE(L01, SIZE), RESIZE(R01, SIZE)); end "="; -- Id: C.27 function "=" (L: NATURAL; R: UNSIGNED) return BOOLEAN is constant R_LEFT: INTEGER := R'LENGTH-1; alias XR: UNSIGNED(R_LEFT downto 0) is R; variable R01 : UNSIGNED(R_LEFT downto 0); begin if (R'LENGTH < 1) then assert NO_WARNING report "NUMERIC_STD.""="": null argument detected, returning FALSE" severity WARNING; return FALSE; end if; R01 := TO_01(XR, 'X'); if (R01(R01'LEFT)='X') then assert NO_WARNING report "NUMERIC_STD.""="": metavalue detected, returning FALSE" severity WARNING; return FALSE; end if; if UNSIGNED_NUM_BITS(L) > R'LENGTH then return FALSE; end if; return UNSIGNED_EQUAL(TO_UNSIGNED(L, R01'LENGTH), R01); end "="; -- Id: C.28 function "=" (L: INTEGER; R: SIGNED) return BOOLEAN is constant R_LEFT: INTEGER := R'LENGTH-1; alias XR: SIGNED(R_LEFT downto 0) is R; variable R01 : SIGNED(R_LEFT downto 0); begin if (R'LENGTH < 1) then assert NO_WARNING report "NUMERIC_STD.""="": null argument detected, returning FALSE" severity WARNING; return FALSE; end if; R01 := TO_01(XR, 'X'); if (R01(R01'LEFT)='X') then assert NO_WARNING report "NUMERIC_STD.""="": metavalue detected, returning FALSE" severity WARNING; return FALSE; end if; if SIGNED_NUM_BITS(L) > R'LENGTH then return FALSE; end if; return SIGNED_EQUAL(TO_SIGNED(L, R01'LENGTH), R01); end "="; -- Id: C.29 function "=" (L: UNSIGNED; R: NATURAL) return BOOLEAN is constant L_LEFT: INTEGER := L'LENGTH-1; alias XL: UNSIGNED(L_LEFT downto 0) is L; variable L01 : UNSIGNED(L_LEFT downto 0); begin if (L'LENGTH < 1) then assert NO_WARNING report "NUMERIC_STD.""="": null argument detected, returning FALSE" severity WARNING; return FALSE; end if; L01 := TO_01(XL, 'X'); if (L01(L01'LEFT)='X') then assert NO_WARNING report "NUMERIC_STD.""="": metavalue detected, returning FALSE" severity WARNING; return FALSE; end if; if UNSIGNED_NUM_BITS(R) > L'LENGTH then return FALSE; end if; return UNSIGNED_EQUAL(L01, TO_UNSIGNED(R, L01'LENGTH)); end "="; -- Id: C.30 function "=" (L: SIGNED; R: INTEGER) return BOOLEAN is constant L_LEFT: INTEGER := L'LENGTH-1; alias XL: SIGNED(L_LEFT downto 0) is L; variable L01 : SIGNED(L_LEFT downto 0); begin if (L'LENGTH < 1) then assert NO_WARNING report "NUMERIC_STD.""="": null argument detected, returning FALSE" severity WARNING; return FALSE; end if; L01 := TO_01(XL, 'X'); if (L01(L01'LEFT)='X') then assert NO_WARNING report "NUMERIC_STD.""="": metavalue detected, returning FALSE" severity WARNING; return FALSE; end if; if SIGNED_NUM_BITS(R) > L'LENGTH then return FALSE; end if; return SIGNED_EQUAL(L01, TO_SIGNED(R, L01'LENGTH)); end "="; --============================================================================ -- Id: C.31 function "/=" (L, R: UNSIGNED) return BOOLEAN is constant L_LEFT: INTEGER := L'LENGTH-1; constant R_LEFT: INTEGER := R'LENGTH-1; alias XL: UNSIGNED(L_LEFT downto 0) is L; alias XR: UNSIGNED(R_LEFT downto 0) is R; constant SIZE: NATURAL := MAX(L'LENGTH, R'LENGTH); variable L01 : UNSIGNED(L_LEFT downto 0); variable R01 : UNSIGNED(R_LEFT downto 0); begin if ((L'LENGTH < 1) or (R'LENGTH < 1)) then assert NO_WARNING report "NUMERIC_STD.""/="": null argument detected, returning TRUE" severity WARNING; return TRUE; end if; L01 := TO_01(XL, 'X'); R01 := TO_01(XR, 'X'); if ((L01(L01'LEFT)='X') or (R01(R01'LEFT)='X')) then assert NO_WARNING report "NUMERIC_STD.""/="": metavalue detected, returning TRUE" severity WARNING; return TRUE; end if; return not(UNSIGNED_EQUAL(RESIZE(L01, SIZE), RESIZE(R01, SIZE))); end "/="; -- Id: C.32 function "/=" (L, R: SIGNED) return BOOLEAN is constant L_LEFT: INTEGER := L'LENGTH-1; constant R_LEFT: INTEGER := R'LENGTH-1; alias XL: SIGNED(L_LEFT downto 0) is L; alias XR: SIGNED(R_LEFT downto 0) is R; constant SIZE: NATURAL := MAX(L'LENGTH, R'LENGTH); variable L01 : SIGNED(L_LEFT downto 0); variable R01 : SIGNED(R_LEFT downto 0); begin if ((L'LENGTH < 1) or (R'LENGTH < 1)) then assert NO_WARNING report "NUMERIC_STD.""/="": null argument detected, returning TRUE" severity WARNING; return TRUE; end if; L01 := TO_01(XL, 'X'); R01 := TO_01(XR, 'X'); if ((L01(L01'LEFT)='X') or (R01(R01'LEFT)='X')) then assert NO_WARNING report "NUMERIC_STD.""/="": metavalue detected, returning TRUE" severity WARNING; return TRUE; end if; return not(SIGNED_EQUAL(RESIZE(L01, SIZE), RESIZE(R01, SIZE))); end "/="; -- Id: C.33 function "/=" (L: NATURAL; R: UNSIGNED) return BOOLEAN is constant R_LEFT: INTEGER := R'LENGTH-1; alias XR: UNSIGNED(R_LEFT downto 0) is R; variable R01 : UNSIGNED(R_LEFT downto 0); begin if (R'LENGTH < 1) then assert NO_WARNING report "NUMERIC_STD.""/="": null argument detected, returning TRUE" severity WARNING; return TRUE; end if; R01 := TO_01(XR, 'X'); if (R01(R01'LEFT)='X') then assert NO_WARNING report "NUMERIC_STD.""/="": metavalue detected, returning TRUE" severity WARNING; return TRUE; end if; if UNSIGNED_NUM_BITS(L) > R'LENGTH then return TRUE; end if; return not(UNSIGNED_EQUAL(TO_UNSIGNED(L, R01'LENGTH), R01)); end "/="; -- Id: C.34 function "/=" (L: INTEGER; R: SIGNED) return BOOLEAN is constant R_LEFT: INTEGER := R'LENGTH-1; alias XR: SIGNED(R_LEFT downto 0) is R; variable R01 : SIGNED(R_LEFT downto 0); begin if (R'LENGTH < 1) then assert NO_WARNING report "NUMERIC_STD.""/="": null argument detected, returning TRUE" severity WARNING; return TRUE; end if; R01 := TO_01(XR, 'X'); if (R01(R01'LEFT)='X') then assert NO_WARNING report "NUMERIC_STD.""/="": metavalue detected, returning TRUE" severity WARNING; return TRUE; end if; if SIGNED_NUM_BITS(L) > R'LENGTH then return TRUE; end if; return not(SIGNED_EQUAL(TO_SIGNED(L, R01'LENGTH), R01)); end "/="; -- Id: C.35 function "/=" (L: UNSIGNED; R: NATURAL) return BOOLEAN is constant L_LEFT: INTEGER := L'LENGTH-1; alias XL: UNSIGNED(L_LEFT downto 0) is L; variable L01 : UNSIGNED(L_LEFT downto 0); begin if (L'LENGTH < 1) then assert NO_WARNING report "NUMERIC_STD.""/="": null argument detected, returning TRUE" severity WARNING; return TRUE; end if; L01 := TO_01(XL, 'X'); if (L01(L01'LEFT)='X') then assert NO_WARNING report "NUMERIC_STD.""/="": metavalue detected, returning TRUE" severity WARNING; return TRUE; end if; if UNSIGNED_NUM_BITS(R) > L'LENGTH then return TRUE; end if; return not(UNSIGNED_EQUAL(L01, TO_UNSIGNED(R, L01'LENGTH))); end "/="; -- Id: C.36 function "/=" (L: SIGNED; R: INTEGER) return BOOLEAN is constant L_LEFT: INTEGER := L'LENGTH-1; alias XL: SIGNED(L_LEFT downto 0) is L; variable L01 : SIGNED(L_LEFT downto 0); begin if (L'LENGTH < 1) then assert NO_WARNING report "NUMERIC_STD.""/="": null argument detected, returning TRUE" severity WARNING; return TRUE; end if; L01 := TO_01(XL, 'X'); if (L01(L01'LEFT)='X') then assert NO_WARNING report "NUMERIC_STD.""/="": metavalue detected, returning TRUE" severity WARNING; return TRUE; end if; if SIGNED_NUM_BITS(R) > L'LENGTH then return TRUE; end if; return not(SIGNED_EQUAL(L01, TO_SIGNED(R, L01'LENGTH))); end "/="; --============================================================================ -- Id: S.1 function SHIFT_LEFT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED is begin if (ARG'LENGTH < 1) then return NAU; end if; return UNSIGNED(XSLL(STD_LOGIC_VECTOR(ARG), COUNT)); end SHIFT_LEFT; -- Id: S.2 function SHIFT_RIGHT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED is begin if (ARG'LENGTH < 1) then return NAU; end if; return UNSIGNED(XSRL(STD_LOGIC_VECTOR(ARG), COUNT)); end SHIFT_RIGHT; -- Id: S.3 function SHIFT_LEFT (ARG: SIGNED; COUNT: NATURAL) return SIGNED is begin if (ARG'LENGTH < 1) then return NAS; end if; return SIGNED(XSLL(STD_LOGIC_VECTOR(ARG), COUNT)); end SHIFT_LEFT; -- Id: S.4 function SHIFT_RIGHT (ARG: SIGNED; COUNT: NATURAL) return SIGNED is begin if (ARG'LENGTH < 1) then return NAS; end if; return SIGNED(XSRA(STD_LOGIC_VECTOR(ARG), COUNT)); end SHIFT_RIGHT; --============================================================================ -- Id: S.5 function ROTATE_LEFT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED is begin if (ARG'LENGTH < 1) then return NAU; end if; return UNSIGNED(XROL(STD_LOGIC_VECTOR(ARG), COUNT)); end ROTATE_LEFT; -- Id: S.6 function ROTATE_RIGHT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED is begin if (ARG'LENGTH < 1) then return NAU; end if; return UNSIGNED(XROR(STD_LOGIC_VECTOR(ARG), COUNT)); end ROTATE_RIGHT; -- Id: S.7 function ROTATE_LEFT (ARG: SIGNED; COUNT: NATURAL) return SIGNED is begin if (ARG'LENGTH < 1) then return NAS; end if; return SIGNED(XROL(STD_LOGIC_VECTOR(ARG), COUNT)); end ROTATE_LEFT; -- Id: S.8 function ROTATE_RIGHT (ARG: SIGNED; COUNT: NATURAL) return SIGNED is begin if (ARG'LENGTH < 1) then return NAS; end if; return SIGNED(XROR(STD_LOGIC_VECTOR(ARG), COUNT)); end ROTATE_RIGHT; --============================================================================--START-V93 ------------------------------------------------------------------------------ -- Note : Function S.9 is not compatible with VHDL 1076-1987. Comment -- out the function (declaration and body) for VHDL 1076-1987 compatibility. ------------------------------------------------------------------------------ -- Id: S.9 function "sll" (ARG: UNSIGNED; COUNT: INTEGER) return UNSIGNED is begin if (COUNT >= 0) then return SHIFT_LEFT(ARG, COUNT); else return SHIFT_RIGHT(ARG, -COUNT); end if; end "sll"; ------------------------------------------------------------------------------ -- Note : Function S.10 is not compatible with VHDL 1076-1987. Comment -- out the function (declaration and body) for VHDL 1076-1987 compatibility. ------------------------------------------------------------------------------ -- Id: S.10 function "sll" (ARG: SIGNED; COUNT: INTEGER) return SIGNED is begin if (COUNT >= 0) then return SHIFT_LEFT(ARG, COUNT); else return SIGNED(SHIFT_RIGHT(UNSIGNED(ARG), -COUNT)); end if; end "sll"; ------------------------------------------------------------------------------ -- Note : Function S.11 is not compatible with VHDL 1076-1987. Comment -- out the function (de
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -