⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 numeric_std-body.vhdl

📁 vhdl集成电路设计软件.需要用gcc-4.0.2版本编译.
💻 VHDL
📖 第 1 页 / 共 5 页
字号:
  -- Id: A.31  function "rem" (L: SIGNED; R: INTEGER) return SIGNED is    constant R_LENGTH: NATURAL := MAX(L'LENGTH, SIGNED_NUM_BITS(R));    variable XR, XREM: SIGNED(R_LENGTH-1 downto 0);  begin    if (L'LENGTH < 1) then return NAS;    end if;    XR := TO_SIGNED(R, R_LENGTH);    XREM := RESIZE((L rem XR), XREM'LENGTH);    if R_LENGTH > L'LENGTH and XREM(0)/='X'        and XREM(R_LENGTH-1 downto L'LENGTH)        /= (R_LENGTH-1 downto L'LENGTH => XREM(L'LENGTH-1))        then      assert NO_WARNING report "NUMERIC_STD.""rem"": Remainder Truncated"          severity WARNING;    end if;    return RESIZE(XREM, L'LENGTH);  end "rem";  -- Id: A.32  function "rem" (L: INTEGER; R: SIGNED) return SIGNED is    constant L_LENGTH: NATURAL := MAX(SIGNED_NUM_BITS(L), R'LENGTH);    variable XL, XREM: SIGNED(L_LENGTH-1 downto 0);  begin    if (R'LENGTH < 1) then return NAS;    end if;    XL := TO_SIGNED(L, L_LENGTH);    XREM := RESIZE((XL rem R), XREM'LENGTH);    if L_LENGTH > R'LENGTH and XREM(0)/='X'        and XREM(L_LENGTH-1 downto R'LENGTH)        /= (L_LENGTH-1 downto R'LENGTH => XREM(R'LENGTH-1))        then      assert NO_WARNING report "NUMERIC_STD.""rem"": Remainder Truncated"          severity WARNING;    end if;    return RESIZE(XREM, R'LENGTH);  end "rem";  --============================================================================  -- Id: A.33  function "mod" (L, R: UNSIGNED) return UNSIGNED is    constant L_LEFT: INTEGER := L'LENGTH-1;    constant R_LEFT: INTEGER := R'LENGTH-1;    alias XXL: UNSIGNED(L_LEFT downto 0) is L;    alias XXR: UNSIGNED(R_LEFT downto 0) is R;    variable XL: UNSIGNED(L_LEFT downto 0);    variable XR: UNSIGNED(R_LEFT downto 0);    variable FQUOT: UNSIGNED(L'LENGTH-1 downto 0);    variable FREMAIN: UNSIGNED(R'LENGTH-1 downto 0);  begin    if ((L'LENGTH < 1) or (R'LENGTH < 1)) then return NAU;    end if;    XL := TO_01(XXL, 'X');    XR := TO_01(XXR, 'X');    if ((XL(XL'LEFT)='X') or (XR(XR'LEFT)='X')) then      FREMAIN := (others => 'X');      return FREMAIN;    end if;    DIVMOD(XL, XR, FQUOT, FREMAIN);    return FREMAIN;  end "mod";  -- Id: A.34  function "mod" (L, R: SIGNED) return SIGNED is    constant L_LEFT: INTEGER := L'LENGTH-1;    constant R_LEFT: INTEGER := R'LENGTH-1;    alias XXL: SIGNED(L_LEFT downto 0) is L;    alias XXR: SIGNED(R_LEFT downto 0) is R;    variable XL: SIGNED(L_LEFT downto 0);    variable XR: SIGNED(R_LEFT downto 0);    variable FQUOT: UNSIGNED(L'LENGTH-1 downto 0);    variable FREMAIN: UNSIGNED(R'LENGTH-1 downto 0);    variable XNUM: UNSIGNED(L'LENGTH-1 downto 0);    variable XDENOM: UNSIGNED(R'LENGTH-1 downto 0);    variable RNEG: BOOLEAN := FALSE;  begin    if ((L'LENGTH < 1) or (R'LENGTH < 1)) then return NAS;    end if;    XL := TO_01(XXL, 'X');    XR := TO_01(XXR, 'X');    if ((XL(XL'LEFT)='X') or (XR(XR'LEFT)='X')) then      FREMAIN := (others => 'X');      return SIGNED(FREMAIN);    end if;    if XL(XL'LEFT)='1' then      XNUM := UNSIGNED(-XL);    else      XNUM := UNSIGNED(XL);    end if;    if XR(XR'LEFT)='1' then      XDENOM := UNSIGNED(-XR);      RNEG := TRUE;    else      XDENOM := UNSIGNED(XR);    end if;    DIVMOD(XNUM, XDENOM, FQUOT, FREMAIN);    if RNEG and L(L'LEFT)='1' then      FREMAIN := "0"-FREMAIN;    elsif RNEG and FREMAIN/="0" then      FREMAIN := FREMAIN-XDENOM;    elsif L(L'LEFT)='1' and FREMAIN/="0" then      FREMAIN := XDENOM-FREMAIN;    end if;    return SIGNED(FREMAIN);  end "mod";  -- Id: A.35  function "mod" (L: UNSIGNED; R: NATURAL) return UNSIGNED is    constant R_LENGTH: NATURAL := MAX(L'LENGTH, UNSIGNED_NUM_BITS(R));    variable XR, XREM: UNSIGNED(R_LENGTH-1 downto 0);  begin    if (L'LENGTH < 1) then return NAU;    end if;    XR := TO_UNSIGNED(R, R_LENGTH);    XREM := RESIZE((L mod XR), XREM'LENGTH);    if R_LENGTH > L'LENGTH and XREM(0)/='X'        and XREM(R_LENGTH-1 downto L'LENGTH)        /= (R_LENGTH-1 downto L'LENGTH => '0')        then      assert NO_WARNING report "NUMERIC_STD.""mod"": Modulus Truncated"          severity WARNING;    end if;    return RESIZE(XREM, L'LENGTH);  end "mod";  -- Id: A.36  function "mod" (L: NATURAL; R: UNSIGNED) return UNSIGNED is    constant L_LENGTH: NATURAL := MAX(UNSIGNED_NUM_BITS(L), R'LENGTH);    variable XL, XREM: UNSIGNED(L_LENGTH-1 downto 0);  begin    if (R'LENGTH < 1) then return NAU;    end if;    XL := TO_UNSIGNED(L, L_LENGTH);    XREM := RESIZE((XL mod R), XREM'LENGTH);    if L_LENGTH > R'LENGTH and XREM(0)/='X'        and XREM(L_LENGTH-1 downto R'LENGTH)        /= (L_LENGTH-1 downto R'LENGTH => '0')        then      assert NO_WARNING report "NUMERIC_STD.""mod"": Modulus Truncated"          severity WARNING;    end if;    return RESIZE(XREM, R'LENGTH);  end "mod";  -- Id: A.37  function "mod" (L: SIGNED; R: INTEGER) return SIGNED is    constant R_LENGTH: NATURAL := MAX(L'LENGTH, SIGNED_NUM_BITS(R));    variable XR, XREM: SIGNED(R_LENGTH-1 downto 0);  begin    if (L'LENGTH < 1) then return NAS;    end if;    XR := TO_SIGNED(R, R_LENGTH);    XREM := RESIZE((L mod XR), XREM'LENGTH);    if R_LENGTH > L'LENGTH and XREM(0)/='X'        and XREM(R_LENGTH-1 downto L'LENGTH)        /= (R_LENGTH-1 downto L'LENGTH => XREM(L'LENGTH-1))        then      assert NO_WARNING report "NUMERIC_STD.""mod"": Modulus Truncated"          severity WARNING;    end if;    return RESIZE(XREM, L'LENGTH);  end "mod";  -- Id: A.38  function "mod" (L: INTEGER; R: SIGNED) return SIGNED is    constant L_LENGTH: NATURAL := MAX(SIGNED_NUM_BITS(L), R'LENGTH);    variable XL, XREM: SIGNED(L_LENGTH-1 downto 0);  begin    if (R'LENGTH < 1) then return NAS;    end if;    XL := TO_SIGNED(L, L_LENGTH);    XREM := RESIZE((XL mod R), XREM'LENGTH);    if L_LENGTH > R'LENGTH and XREM(0)/='X'        and XREM(L_LENGTH-1 downto R'LENGTH)        /= (L_LENGTH-1 downto R'LENGTH => XREM(R'LENGTH-1))        then      assert NO_WARNING report "NUMERIC_STD.""mod"": Modulus Truncated"          severity WARNING;    end if;    return RESIZE(XREM, R'LENGTH);  end "mod";  --============================================================================  -- Id: C.1  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 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 not UNSIGNED_LESS_OR_EQUAL(RESIZE(L01, SIZE), RESIZE(R01, SIZE));  end ">";  -- Id: C.2  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 not SIGNED_LESS_OR_EQUAL(RESIZE(L01, SIZE), RESIZE(R01, SIZE));  end ">";  -- Id: C.3  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 TRUE;    end if;    return not UNSIGNED_LESS_OR_EQUAL(TO_UNSIGNED(L, R01'LENGTH), R01);  end ">";  -- Id: C.4  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 L > 0;    end if;    return not SIGNED_LESS_OR_EQUAL(TO_SIGNED(L, R01'LENGTH), R01);  end ">";  -- Id: C.5  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 not UNSIGNED_LESS_OR_EQUAL(L01, TO_UNSIGNED(R, L01'LENGTH));  end ">";  -- Id: C.6  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 0 > R;    end if;    return not SIGNED_LESS_OR_EQUAL(L01, TO_SIGNED(R, L01'LENGTH));  end ">";  --============================================================================  -- Id: C.7  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 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_LESS(RESIZE(L01, SIZE), RESIZE(R01, SIZE));  end "<";  -- Id: C.8  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_LESS(RESIZE(L01, SIZE), RESIZE(R01, SIZE));  end "<";  -- Id: C.9  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"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -