亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 66_signed.vhd

?? 基于VHDL語言編程的100個例子,從簡單到復雜,由淺入深
?? VHD
?? 第 1 頁 / 共 5 頁
字號:
	variable one_bit : STD_ULOGIC;
	variable result : STD_LOGIC_VECTOR (A'range);
    begin
	    for i in A'range loop
	        if (IS_X(A(i))) then
		    assert false 
		    report "There is an 'U'|'X'|'W'|'Z'|'-' in an arithmetic operand, the result will be 'X'(es)."
		    severity warning;
		    result := (others => 'X');
	            return result;
	        end if;
		result(i) := tbl_BINARY(A(i));
	    end loop;
	    return result;
    end;



    -- Type propagation function which returns a signed type with the
    -- size of the left arg.
    function LEFT_SIGNED_ARG(A,B: SIGNED) return SIGNED is
      variable Z: SIGNED (A'left downto 0);
      -- pragma return_port_name Z
    begin
      return(Z);
    end;
	
    -- Type propagation function which returns an unsigned type with the
    -- size of the left arg.
    function LEFT_UNSIGNED_ARG(A,B: UNSIGNED) return UNSIGNED is
      variable Z: UNSIGNED (A'left downto 0);
      -- pragma return_port_name Z
    begin
      return(Z);
    end;
	
    -- Type propagation function which returns a signed type with the
    -- size of the result of a signed multiplication
    function MULT_SIGNED_ARG(A,B: SIGNED) return SIGNED is
      variable Z: SIGNED ((A'length+B'length-1) downto 0);
      -- pragma return_port_name Z
    begin
      return(Z);
    end;
	
    -- Type propagation function which returns an unsigned type with the
    -- size of the result of a unsigned multiplication
    function MULT_UNSIGNED_ARG(A,B: UNSIGNED) return UNSIGNED is
      variable Z: UNSIGNED ((A'length+B'length-1) downto 0);
      -- pragma return_port_name Z
    begin
      return(Z);
    end;



    function mult(A,B: SIGNED) return SIGNED is

      variable BA: SIGNED((A'length+B'length-1) downto 0);
      variable PA: SIGNED((A'length+B'length-1) downto 0);
      variable AA: SIGNED(A'length downto 0);
      variable neg: STD_ULOGIC;
      constant one : UNSIGNED(1 downto 0) := "01";
      
      -- pragma map_to_operator MULT_TC_OP
      -- pragma type_function MULT_SIGNED_ARG
      -- pragma return_port_name Z

      begin
	if (A(A'left) = 'X' or B(B'left) = 'X') then
            PA := (others => 'X');
            return(PA);
	end if;
        PA := (others => '0');
        neg := B(B'left) xor A(A'left);
        BA := CONV_SIGNED(('0' & SIGNED' (ABS(B))),(A'length+B'length));
        AA := '0' & ABS(A);
        for i in 0 to A'length-1 loop
          if AA(i) = '1' then
            PA := PA+BA;
          end if;
          BA := SHL(BA,one);
        end loop;
        if (neg= '1') then
          return(-PA);
        else 
          return(PA);
        end if;
      end;

    function mult(A,B: UNSIGNED) return UNSIGNED is

      variable BA: UNSIGNED((A'length+B'length-1) downto 0);
      variable PA: UNSIGNED((A'length+B'length-1) downto 0);
      constant one : UNSIGNED(1 downto 0) := "01";
      
      -- pragma map_to_operator MULT_UNS_OP
      -- pragma type_function MULT_UNSIGNED_ARG
      -- pragma return_port_name Z

      begin
	if (A(A'left) = 'X' or B(B'left) = 'X') then
            PA := (others => 'X');
            return(PA);
	end if;
        PA := (others => '0');
        BA := CONV_UNSIGNED(B,(A'length+B'length));
        for i in 0 to A'length-1 loop
          if A(i) = '1' then
            PA := PA+BA;
          end if;
          BA := SHL(BA,one);
        end loop;
        return(PA);
      end;

    -- subtract two signed numbers of the same length
    -- both arrays must have range (msb downto 0)
    function minus(A, B: SIGNED) return SIGNED is
	variable carry: STD_ULOGIC;
	variable BV: STD_ULOGIC_VECTOR (A'left downto 0);
	variable sum: SIGNED (A'left downto 0);

	-- pragma map_to_operator SUB_TC_OP

	-- pragma type_function LEFT_SIGNED_ARG
        -- pragma return_port_name Z

    begin
	if (A(A'left) = 'X' or B(B'left) = 'X') then
            sum := (others => 'X');
            return(sum);
	end if;
	carry := '1';
	BV := not STD_ULOGIC_VECTOR(B);

	for i in 0 to A'left loop
	    sum(i) := A(i) xor BV(i) xor carry;
	    carry := (A(i) and BV(i)) or
		    (A(i) and carry) or
		    (carry and BV(i));
	end loop;
	return sum;
    end;

    -- add two signed numbers of the same length
    -- both arrays must have range (msb downto 0)
    function plus(A, B: SIGNED) return SIGNED is
	variable carry: STD_ULOGIC;
	variable BV, sum: SIGNED (A'left downto 0);

	-- pragma map_to_operator ADD_TC_OP
	-- pragma type_function LEFT_SIGNED_ARG
        -- pragma return_port_name Z

    begin
	if (A(A'left) = 'X' or B(B'left) = 'X') then
            sum := (others => 'X');
            return(sum);
	end if;
	carry := '0';
	BV := B;

	for i in 0 to A'left loop
	    sum(i) := A(i) xor BV(i) xor carry;
	    carry := (A(i) and BV(i)) or
		    (A(i) and carry) or
		    (carry and BV(i));
	end loop;
	return sum;
    end;


    -- subtract two unsigned numbers of the same length
    -- both arrays must have range (msb downto 0)
    function unsigned_minus(A, B: UNSIGNED) return UNSIGNED is
	variable carry: STD_ULOGIC;
	variable BV: STD_ULOGIC_VECTOR (A'left downto 0);
	variable sum: UNSIGNED (A'left downto 0);

	-- pragma map_to_operator SUB_UNS_OP
	-- pragma type_function LEFT_UNSIGNED_ARG
        -- pragma return_port_name Z

    begin
	if (A(A'left) = 'X' or B(B'left) = 'X') then
            sum := (others => 'X');
            return(sum);
	end if;
	carry := '1';
	BV := not STD_ULOGIC_VECTOR(B);

	for i in 0 to A'left loop
	    sum(i) := A(i) xor BV(i) xor carry;
	    carry := (A(i) and BV(i)) or
		    (A(i) and carry) or
		    (carry and BV(i));
	end loop;
	return sum;
    end;

    -- add two unsigned numbers of the same length
    -- both arrays must have range (msb downto 0)
    function unsigned_plus(A, B: UNSIGNED) return UNSIGNED is
	variable carry: STD_ULOGIC;
	variable BV, sum: UNSIGNED (A'left downto 0);

	-- pragma map_to_operator ADD_UNS_OP
	-- pragma type_function LEFT_UNSIGNED_ARG
        -- pragma return_port_name Z

    begin
	if (A(A'left) = 'X' or B(B'left) = 'X') then
            sum := (others => 'X');
            return(sum);
	end if;
	carry := '0';
	BV := B;

	for i in 0 to A'left loop
	    sum(i) := A(i) xor BV(i) xor carry;
	    carry := (A(i) and BV(i)) or
		    (A(i) and carry) or
		    (carry and BV(i));
	end loop;
	return sum;
    end;



    function "*"(L: SIGNED; R: SIGNED) return SIGNED is
	-- pragma label_applies_to mult
    begin
          return     mult(CONV_SIGNED(L, L'length),
		          CONV_SIGNED(R, R'length)); -- pragma label mult 
    end;
      
    function "*"(L: UNSIGNED; R: UNSIGNED) return UNSIGNED is
	-- pragma label_applies_to mult
    begin
          return   mult(CONV_UNSIGNED(L, L'length),
                        CONV_UNSIGNED(R, R'length)); -- pragma label mult 
    end;
        
    function "*"(L: UNSIGNED; R: SIGNED) return SIGNED is
	-- pragma label_applies_to plus
    begin
 	return       mult(CONV_SIGNED(L, L'length+1),
		          CONV_SIGNED(R, R'length)); -- pragma label mult 
    end;

    function "*"(L: SIGNED; R: UNSIGNED) return SIGNED is
	-- pragma label_applies_to plus
    begin
	return      mult(CONV_SIGNED(L, L'length),
		         CONV_SIGNED(R, R'length+1)); -- pragma label mult 
    end;


    function "*"(L: SIGNED; R: SIGNED) return STD_LOGIC_VECTOR is
	-- pragma label_applies_to mult
    begin
          return STD_LOGIC_VECTOR (mult(CONV_SIGNED(L, L'length),
		          CONV_SIGNED(R, R'length))); -- pragma label mult 
    end;
      
    function "*"(L: UNSIGNED; R: UNSIGNED) return STD_LOGIC_VECTOR is
	-- pragma label_applies_to mult
    begin
          return STD_LOGIC_VECTOR (mult(CONV_UNSIGNED(L, L'length),
                        CONV_UNSIGNED(R, R'length))); -- pragma label mult 
    end;
        
    function "*"(L: UNSIGNED; R: SIGNED) return STD_LOGIC_VECTOR is
	-- pragma label_applies_to plus
    begin
 	return STD_LOGIC_VECTOR (mult(CONV_SIGNED(L, L'length+1),
		          CONV_SIGNED(R, R'length))); -- pragma label mult 
    end;

    function "*"(L: SIGNED; R: UNSIGNED) return STD_LOGIC_VECTOR is
	-- pragma label_applies_to plus
    begin
	return STD_LOGIC_VECTOR (mult(CONV_SIGNED(L, L'length),
		         CONV_SIGNED(R, R'length+1))); -- pragma label mult 
    end;


    function "+"(L: UNSIGNED; R: UNSIGNED) return UNSIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := max(L'length, R'length);
    begin
	return unsigned_plus(CONV_UNSIGNED(L, length),
			     CONV_UNSIGNED(R, length)); -- pragma label plus
    end;


    function "+"(L: SIGNED; R: SIGNED) return SIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := max(L'length, R'length);
    begin
	return plus(CONV_SIGNED(L, length),
		    CONV_SIGNED(R, length)); -- pragma label plus
    end;


    function "+"(L: UNSIGNED; R: SIGNED) return SIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := max(L'length + 1, R'length);
    begin
	return plus(CONV_SIGNED(L, length),
		    CONV_SIGNED(R, length)); -- pragma label plus
    end;


    function "+"(L: SIGNED; R: UNSIGNED) return SIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := max(L'length, R'length + 1);
    begin
	return plus(CONV_SIGNED(L, length),
		    CONV_SIGNED(R, length)); -- pragma label plus
    end;


    function "+"(L: UNSIGNED; R: INTEGER) return UNSIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := L'length + 1;
    begin
	return CONV_UNSIGNED(
		plus( -- pragma label plus
		    CONV_SIGNED(L, length),
		    CONV_SIGNED(R, length)),
		length-1);
    end;


    function "+"(L: INTEGER; R: UNSIGNED) return UNSIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := R'length + 1;
    begin
	return CONV_UNSIGNED(
		plus( -- pragma label plus
		    CONV_SIGNED(L, length),
		    CONV_SIGNED(R, length)),
		length-1);
    end;


    function "+"(L: SIGNED; R: INTEGER) return SIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := L'length;
    begin
	return plus(CONV_SIGNED(L, length),
		    CONV_SIGNED(R, length)); -- pragma label plus
    end;


    function "+"(L: INTEGER; R: SIGNED) return SIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := R'length;
    begin
	return plus(CONV_SIGNED(L, length),
		    CONV_SIGNED(R, length)); -- pragma label plus
    end;


    function "+"(L: UNSIGNED; R: STD_ULOGIC) return UNSIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := L'length;
    begin
	return unsigned_plus(CONV_UNSIGNED(L, length),
		     CONV_UNSIGNED(R, length)) ; -- pragma label plus
    end;


    function "+"(L: STD_ULOGIC; R: UNSIGNED) return UNSIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := R'length;
    begin
	return unsigned_plus(CONV_UNSIGNED(L, length),
		     CONV_UNSIGNED(R, length)); -- pragma label plus
    end;


    function "+"(L: SIGNED; R: STD_ULOGIC) return SIGNED is
	-- pragma label_applies_to plus
	constant length: INTEGER := L'length;
    begin
	return plus(CONV_SIGNED(L, length),
		    CONV_SIGNED(R, length)); -- pragma label plus
    end;


    function "+"(L: STD_ULOGIC; R: SIGNED) return SIGNED is

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久草热8精品视频在线观看| 国产精品亚洲午夜一区二区三区| 国产精品你懂的在线欣赏| 欧美成人一区二区三区| 91精品中文字幕一区二区三区| 福利一区二区在线观看| 97国产一区二区| 成人h精品动漫一区二区三区| 久久99国产精品久久99| 久久精品噜噜噜成人88aⅴ | 亚洲123区在线观看| 一区二区三区日韩在线观看| 国产精品三级av在线播放| 国产精品久久久久三级| 成人欧美一区二区三区视频网页| 中文字幕中文字幕一区| 亚洲精品ww久久久久久p站| 亚洲激情网站免费观看| 亚洲男女毛片无遮挡| 一区二区三区四区在线播放| 一区二区成人在线| 免费看黄色91| 欧美日韩久久不卡| 欧美一区二区视频网站| www久久久久| 国产精品色呦呦| 亚洲精品成人精品456| 亚洲mv在线观看| 久久―日本道色综合久久| 欧美剧情电影在线观看完整版免费励志电影 | 日韩一级高清毛片| 久久婷婷成人综合色| 亚洲国产高清aⅴ视频| 亚洲三级在线播放| 婷婷六月综合网| 日本最新不卡在线| 国产精品一二三区| 91极品视觉盛宴| 精品美女被调教视频大全网站| 欧美激情综合在线| 亚洲香蕉伊在人在线观| 国产在线精品一区二区夜色| 成人av网在线| 欧美一区二区三区日韩视频| 亚洲国产激情av| 午夜视频在线观看一区| 国产精品亚洲视频| 欧美日韩在线播放三区| 欧美—级在线免费片| 亚洲成a人在线观看| 国产精品一二三区在线| 欧美性生活一区| 久久看人人爽人人| 性感美女久久精品| 国产成人无遮挡在线视频| 欧美色区777第一页| 国产午夜亚洲精品不卡| 五月综合激情婷婷六月色窝| 国产成人av电影免费在线观看| 欧美性感一类影片在线播放| 欧美激情中文字幕| 日韩国产精品久久久久久亚洲| 不卡欧美aaaaa| 日韩午夜电影av| 亚洲综合无码一区二区| 国产精品女上位| 中文字幕第一区二区| 亚洲精品国产a| 国产一区二区三区四区五区入口| 日本电影亚洲天堂一区| 久久美女艺术照精彩视频福利播放| 亚洲制服欧美中文字幕中文字幕| 国产电影精品久久禁18| 欧美日韩三级视频| 欧美激情中文不卡| 九色综合狠狠综合久久| 欧美男同性恋视频网站| 综合网在线视频| 国产精品996| 日韩欧美亚洲另类制服综合在线 | 狠狠色丁香久久婷婷综合_中| 欧洲色大大久久| 国产精品久久久久婷婷| 欧美专区日韩专区| 国产精品久久久久精k8 | 国产美女在线精品| 69av一区二区三区| 一区二区三区电影在线播| av不卡在线观看| 国产精品亲子伦对白| 国产麻豆精品95视频| 欧美大片拔萝卜| 日韩精品五月天| 色先锋aa成人| 亚洲天堂av老司机| www.日韩av| 亚洲国产精品v| 成人理论电影网| 亚洲国产精品ⅴa在线观看| 国产一区二区日韩精品| 精品粉嫩超白一线天av| 免费观看在线综合| 日韩视频永久免费| 久久精品国产一区二区三区免费看| 欧美另类z0zxhd电影| 亚洲午夜羞羞片| 欧美日本国产视频| 丝袜美腿成人在线| 91精品国产综合久久精品| 日韩国产欧美三级| 欧美成人精品1314www| 韩国女主播成人在线| 久久精品一区二区三区av| 国产精品一区2区| 国产精品三级久久久久三级| av高清久久久| 亚洲尤物在线视频观看| 欧美日韩国产高清一区| 青青草国产精品亚洲专区无| 91精品国产综合久久国产大片| 麻豆精品精品国产自在97香蕉| 精品av久久707| 国产精品一区在线观看乱码 | 三级一区在线视频先锋| 欧美电影在哪看比较好| 日本成人中文字幕在线视频| 精品女同一区二区| 国产成人av资源| 亚洲精品第一国产综合野| 欧美在线免费播放| 日韩激情视频在线观看| 精品毛片乱码1区2区3区 | 精品国产伦一区二区三区免费| 国内久久精品视频| 国产精品白丝在线| 精品视频在线视频| 精品一区二区三区欧美| 欧美国产丝袜视频| 欧美影院一区二区三区| 久久99热99| 亚洲色图19p| 91精品国产日韩91久久久久久| 精品在线播放免费| 一色桃子久久精品亚洲| 欧美夫妻性生活| 成人性生交大片免费| 亚洲第一在线综合网站| xfplay精品久久| 色综合久久综合网欧美综合网 | av成人动漫在线观看| 丝袜美腿一区二区三区| 久久精品无码一区二区三区| 色综合天天综合| 卡一卡二国产精品| 一区二区三区日韩| 久久伊人中文字幕| 欧洲一区在线观看| 国产精品亚洲综合一区在线观看| 亚洲精品日韩一| 国产亚洲欧美色| 欧美日韩电影在线| 99久久婷婷国产综合精品电影| 麻豆久久久久久久| 亚洲自拍偷拍九九九| 欧美经典三级视频一区二区三区| 欧美日韩高清一区二区不卡| 成人av资源在线观看| 免费日韩伦理电影| 一区二区三区在线影院| 国产欧美日韩久久| 欧美大片免费久久精品三p| 日本韩国一区二区三区视频| 国内精品自线一区二区三区视频| 亚洲国产三级在线| 亚洲欧洲日产国码二区| 久久天天做天天爱综合色| 在线不卡免费欧美| 色欧美乱欧美15图片| 国产成人亚洲精品青草天美| 美女在线视频一区| 午夜视频久久久久久| 伊人婷婷欧美激情| 亚洲欧洲99久久| 久久久99精品久久| 日韩女优av电影在线观看| 欧美色网站导航| 日本黄色一区二区| 91啪亚洲精品| 成人午夜免费电影| 国产精品中文字幕欧美| 六月丁香婷婷色狠狠久久| 天天影视色香欲综合网老头| 亚洲激情校园春色| 亚洲欧美偷拍卡通变态| 中文在线资源观看网站视频免费不卡 | 欧美一区二区播放| 欧美肥妇free| 777久久久精品| 制服丝袜国产精品| 欧美一级免费观看|