?? std_logic_unsigned.vhdl
字號:
---------------------------------------------------------------------------- ---- Copyright (c) 1990, 1991, 1992 by Synopsys, Inc. ---- All rights reserved. ---- ---- This source file may be used and distributed without restriction ---- provided that this copyright statement is not removed from the file ---- and that any derivative work contains this copyright notice. ---- ---- Package name: STD_LOGIC_UNSIGNED ---- ---- ---- Date: 09/11/92 KN ---- 10/08/92 AMT ---- ---- Purpose: ---- A set of unsigned arithemtic, conversion, ---- and comparision functions for STD_LOGIC_VECTOR. ---- ---- Note: comparision of same length discrete arrays is defined ---- by the LRM. This package will "overload" those ---- definitions ---- ----------------------------------------------------------------------------library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;package STD_LOGIC_UNSIGNED is function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR; function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR; function "+"(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "-"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR; function "-"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR; function "-"(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "+"(L: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "*"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "<"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN; function "<"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN; function "<"(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN; function "<="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN; function "<="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN; function "<="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN; function ">"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN; function ">"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN; function ">"(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN; function ">="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN; function ">="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN; function ">="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN; function "="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN; function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN; function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN; function "/="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN; function "/="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN; function "/="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN; function SHL(ARG:STD_LOGIC_VECTOR;COUNT: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function SHR(ARG:STD_LOGIC_VECTOR;COUNT: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function CONV_INTEGER(ARG: STD_LOGIC_VECTOR) return INTEGER;-- remove this since it is already in std_logic_arith-- function CONV_STD_LOGIC_VECTOR(ARG: INTEGER; SIZE: INTEGER) return STD_LOGIC_VECTOR;end STD_LOGIC_UNSIGNED;library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;package body STD_LOGIC_UNSIGNED is function maximum(L, R: INTEGER) return INTEGER is begin if L > R then return L; else return R; end if; end; function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is -- pragma label_applies_to plus constant length: INTEGER := maximum(L'length, R'length); variable result : STD_LOGIC_VECTOR (length-1 downto 0); begin result := UNSIGNED(L) + UNSIGNED(R);-- pragma label plus return std_logic_vector(result); end; function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR is -- pragma label_applies_to plus variable result : STD_LOGIC_VECTOR (L'range); begin result := UNSIGNED(L) + R;-- pragma label plus return std_logic_vector(result); end; function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is -- pragma label_applies_to plus variable result : STD_LOGIC_VECTOR (R'range); begin result := L + UNSIGNED(R);-- pragma label plus return std_logic_vector(result); end; function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR is -- pragma label_applies_to plus variable result : STD_LOGIC_VECTOR (L'range); begin result := UNSIGNED(L) + R;-- pragma label plus return std_logic_vector(result); end; function "+"(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is -- pragma label_applies_to plus variable result : STD_LOGIC_VECTOR (R'range); begin result := L + UNSIGNED(R);-- pragma label plus return std_logic_vector(result); end; function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is -- pragma label_applies_to minus constant length: INTEGER := maximum(L'length, R'length); variable result : STD_LOGIC_VECTOR (length-1 downto 0); begin result := UNSIGNED(L) - UNSIGNED(R); -- pragma label minus return std_logic_vector(result); function "-"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR is -- pragma label_applies_to minus variable result : STD_LOGIC_VECTOR (L'range); begin result := UNSIGNED(L) - R; -- pragma label minus return std_logic_vector(result); end; function "-"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is -- pragma label_applies_to minus variable result : STD_LOGIC_VECTOR (R'range); begin result := L - UNSIGNED(R); -- pragma label minus return std_logic_vector(result); end; function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR is variable result : STD_LOGIC_VECTOR (L'range); begin result := UNSIGNED(L) - R; return std_logic_vector(result); end; function "-"(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is -- pragma label_applies_to minus variable result : STD_LOGIC_VECTOR (R'range); begin result := L - UNSIGNED(R); -- pragma label minus return std_logic_vector(result); end; function "+"(L: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is variable result : STD_LOGIC_VECTOR (L'range); begin result := + UNSIGNED(L); return std_logic_vector(result); end; function "*"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is -- pragma label_applies_to mult constant length: INTEGER := maximum(L'length, R'length); variable result : STD_LOGIC_VECTOR ((L'length+R'length-1) downto 0); begin result := UNSIGNED(L) * UNSIGNED(R); -- pragma label mult return std_logic_vector(result); end; function "<"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is -- pragma label_applies_to lt constant length: INTEGER := maximum(L'length, R'length); begin return UNSIGNED(L) < UNSIGNED(R); -- pragma label lt end; function "<"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is -- pragma label_applies_to lt begin return UNSIGNED(L) < R; -- pragma label lt end; function "<"(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is -- pragma label_applies_to lt begin return L < UNSIGNED(R); -- pragma label lt end; function "<="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is -- pragma label_applies_to leq begin return UNSIGNED(L) <= UNSIGNED(R); -- pragma label leq end; function "<="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is -- pragma label_applies_to leq begin return UNSIGNED(L) <= R; -- pragma label leq end; function "<="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is -- pragma label_applies_to leq begin return L <= UNSIGNED(R); -- pragma label leq end; function ">"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is -- pragma label_applies_to gt begin return UNSIGNED(L) > UNSIGNED(R); -- pragma label gt end; function ">"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is -- pragma label_applies_to gt begin return UNSIGNED(L) > R; -- pragma label gt end; function ">"(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is -- pragma label_applies_to gt begin return L > UNSIGNED(R); -- pragma label gt end; function ">="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is -- pragma label_applies_to geq begin return UNSIGNED(L) >= UNSIGNED(R); -- pragma label geq end; function ">="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is -- pragma label_applies_to geq begin return UNSIGNED(L) >= R; -- pragma label geq end; function ">="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is -- pragma label_applies_to geq begin return L >= UNSIGNED(R); -- pragma label geq end; function "="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is begin return UNSIGNED(L) = UNSIGNED(R); end; function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is begin return UNSIGNED(L) = R; end; function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is begin return L = UNSIGNED(R); end; function "/="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is begin return UNSIGNED(L) /= UNSIGNED(R); end; function "/="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is begin return UNSIGNED(L) /= R; end; function "/="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is begin return L /= UNSIGNED(R); end; function CONV_INTEGER(ARG: STD_LOGIC_VECTOR) return INTEGER is variable result : UNSIGNED(ARG'range); begin result := UNSIGNED(ARG); return CONV_INTEGER(result); end; function SHL(ARG:STD_LOGIC_VECTOR;COUNT: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is begin return STD_LOGIC_VECTOR(SHL(UNSIGNED(ARG),UNSIGNED(COUNT))); end; function SHR(ARG:STD_LOGIC_VECTOR;COUNT: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is begin return STD_LOGIC_VECTOR(SHR(UNSIGNED(ARG),UNSIGNED(COUNT))); end;-- remove this since it is already in std_logic_arith --function CONV_STD_LOGIC_VECTOR(ARG: INTEGER; SIZE: INTEGER) return STD_LOGIC_VECTOR is --variable result1 : UNSIGNED (SIZE-1 downto 0); --variable result2 : STD_LOGIC_VECTOR (SIZE-1 downto 0); --begin --result1 := CONV_UNSIGNED(ARG,SIZE); --return std_logic_vector(result1); --end;end STD_LOGIC_UNSIGNED;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -