📄 8_bitpkg.vhd
字号:
----------------------PACKAGE bit_rtl_pkg is---------------------- subtype short is integer range 0 to 65535; subtype int4 is integer range 0 to 16; subtype int8 is integer range 0 to 255; function bit_to_int (in1:bit_vector) return integer; function int_to_bit1( aa3: integer;len:integer) return bit_vector; function int_to_bit (in1:integer) return bit_vector; function "+" ( in1, in2 : bit_vector ) return integer; function "+" ( in1, in2 : bit_vector ) return bit_vector; function "+" ( in1: bit_vector;in2: integer ) return bit_vector; function "-" ( in1, in2: bit_vector ) return integer; function "-" ( in1, in2 : bit_vector ) return bit_vector; function "-" ( in1: bit_vector;in2: integer ) return bit_vector; function "*" ( in1,in2: bit_vector ) return bit_vector; function "*" ( in1,in2: bit_vector ) return integer; function "/" ( in1,in2: bit_vector ) return bit_vector; function "/" ( in1,in2: bit_vector ) return integer;end bit_rtl_pkg;--------------------------PACKAGE BODY bit_rtl_pkg is--------------------------- function bit_to_int (in1:bit_vector) return integer is ALIAS v1: BIT_VECTOR(in1'LENGTH-1 DOWNTO 0) IS in1; variable inpv : bit_vector(in1'LENGTH-1 DOWNTO 0 ); variable SUM: integer := 0; variable negative :boolean:= false; begin inpv := in1; if v1(v1'length-1) = '1' then for i in v1'length-1 downto 0 loop inpv(i) := not inpv(i); end loop; lp1: for i in 0 to v1'length-1 loop if inpv(i) = '1' THEN inpv(i) := '0'; else inpv(i) := '1'; exit lp1; end if; end loop; negative := true; end if; for i in v1'length-1 downto 0 loop if inpv(i) = '1' then SUM := SUM + 2**i; end if; end loop; if negative then return (0-SUM); else return SUM; end if; end bit_to_int; function log2( in1: integer ) return integer is begin
return 1; end; function int_to_bit1( aa3: integer;len:integer) return bit_vector is variable i,aa4: integer; variable j : integer; --variable digit1: integer:=2**(len-1); variable result1 :bit_vector((len-1) downto 0); begin i:=0; if aa3 < 0 then aa4 := 0-aa3; else aa4:=aa3; end if; while(aa4>0) loop if ( aa4 mod 2 = 1 ) then result1(i) := '1' ; else result1(i) := '0'; end if; i:=i+1; aa4 := aa4/2; end loop; j:=len-1; for j in len-1 downto i loop result1(j) := '0'; end loop; if (aa3<0) then for i in len-1 downto 0 loop result1(i) := not result1(i); end loop; lp1: for i in 0 to len-1 loop if result1(i) = '1' THEN result1(i) := '0'; else result1(i) := '1'; exit lp1; end if; end loop; end if; -- for i in (len-1) downto 0 loop -- if aa4 >= digit1 then -- result1(i):='1'; -- aa4 := aa4 - digit1; -- else -- result1(i):='0'; -- end if; -- digit1:=digit1/2; -- end loop; return result1; end int_to_bit1; function int_to_bit (in1:integer) return bit_vector is variable temp: integer; variable digit: integer; variable i : integer; variable result :bit_vector( log2(in1) downto 0); begin temp:=in1; i :=0; result:= "000000000000000000000000000000000"; while (temp > 0) loop digit := temp mod 2; if ( digit = 1) then result(i) := '1'; else result(i) := '0'; end if; i:=i+1; temp := temp /2; end loop; return result; end int_to_bit; function "+" ( in1, in2 : bit_vector ) return integer is begin return(bit_to_int(in1)+bit_to_int(in2)); end "+"; function "+" ( in1, in2 : bit_vector ) return bit_vector is begin return (int_to_bit1( bit_to_int(in1)+ bit_to_int(in2),in1'length )); end "+"; function "+" ( in1 : bit_vector;in2:integer ) return bit_vector is begin return(int_to_bit1(bit_to_int(in1)+in2,in1'length)); end "+"; function "-" ( in1, in2 : bit_vector ) return integer is begin return(bit_to_int(in1)-bit_to_int(in2)); end "-"; function "-" ( in1, in2 : bit_vector ) return bit_vector is begin return(int_to_bit1(bit_to_int(in1)- bit_to_int(in2),in1'length)); end "-"; function "-" ( in1 : bit_vector;in2:integer ) return bit_vector is begin return(int_to_bit1(bit_to_int(in1)-in2,in1'length)); end "-"; function "*" ( in1, in2 : bit_vector ) return integer is begin return( bit_to_int(in1)*bit_to_int(in2) ); end "*"; function "*" ( in1, in2 : bit_vector ) return bit_vector is begin return( int_to_bit1( bit_to_int(in1)*bit_to_int(in2),in1'length )); end "*"; function "/" ( in1, in2 : bit_vector ) return integer is begin return(bit_to_int(in1)/ bit_to_int(in2)); end "/"; function "/" ( in1, in2 : bit_vector ) return bit_vector is begin return(int_to_bit1(bit_to_int(in1)/ bit_to_int(in2),in1'length)); end "/";end bit_rtl_pkg;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -