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

📄 8_bitpkg.vhd

📁 北京里工大学ASIC设计研究所的100个 VHDL程序设计例子
💻 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 + -