亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产资源在线一区| 国产盗摄视频一区二区三区| 久久爱www久久做| 色av综合在线| 国产精品久久久久天堂| 日韩成人精品视频| 欧美一区二区三区在| 亚洲精品国产视频| 国产美女av一区二区三区| 精品视频123区在线观看| 中文字幕亚洲不卡| 久久狠狠亚洲综合| 欧美一区二区在线看| 一级女性全黄久久生活片免费| 成人性视频免费网站| 久久婷婷久久一区二区三区| 喷水一区二区三区| 欧美疯狂做受xxxx富婆| 亚洲黄网站在线观看| 成人激情av网| 日本一区二区成人| 色av综合在线| 久久精品亚洲精品国产欧美| 亚洲一区二区三区美女| 丁香婷婷综合网| 久久午夜色播影院免费高清| 日本怡春院一区二区| 欧美日韩三级一区| 亚洲一本大道在线| 在线观看一区二区视频| 一区二区三区不卡视频在线观看| 91小宝寻花一区二区三区| 亚洲欧洲色图综合| 94-欧美-setu| 又紧又大又爽精品一区二区| 91久久香蕉国产日韩欧美9色| 亚洲图片另类小说| 色视频成人在线观看免| 亚洲综合网站在线观看| 欧美日韩黄视频| 日韩激情一区二区| 欧美第一区第二区| 国产乱码精品一品二品| 国产校园另类小说区| 成人av在线一区二区三区| 中文字幕欧美一区| 在线免费观看不卡av| 视频一区二区三区中文字幕| 日韩一区二区三区av| 精品一区二区综合| 中国av一区二区三区| 91麻豆文化传媒在线观看| 香蕉av福利精品导航| 精品国产自在久精品国产| 国产999精品久久久久久| 美女视频一区二区| 国产欧美日韩卡一| 在线亚洲+欧美+日本专区| 日日摸夜夜添夜夜添国产精品| 亚洲精品在线电影| 99精品在线免费| 天天av天天翘天天综合网色鬼国产| 精品女同一区二区| 色婷婷久久久久swag精品| 日韩av不卡一区二区| 中文字幕免费一区| 欧美乱妇23p| 成人永久免费视频| 亚洲成a人在线观看| 久久久久青草大香线综合精品| 91视频国产观看| 九九精品一区二区| 亚洲天堂福利av| 日韩欧美国产精品一区| 99国产一区二区三精品乱码| 麻豆视频观看网址久久| 亚洲精品一二三| 久久久www成人免费无遮挡大片| 在线观看欧美精品| 国产成人在线视频播放| 天天做天天摸天天爽国产一区| 中文字幕精品一区二区三区精品| 8x8x8国产精品| 色哟哟精品一区| 国产精品66部| 蜜臀久久99精品久久久久宅男| 国产一区二区三区观看| 一区二区三区日本| 国产精品你懂的在线欣赏| 日韩午夜小视频| 欧洲另类一二三四区| 99久久伊人精品| 国产91精品一区二区| 久草中文综合在线| 青青青爽久久午夜综合久久午夜 | 青青国产91久久久久久 | 精品福利二区三区| 欧美精品久久久久久久久老牛影院| av电影天堂一区二区在线| 国产在线精品一区二区三区不卡| 亚洲成av人综合在线观看| 亚洲欧洲制服丝袜| 国产精品伦理在线| 国产精品视频第一区| 国产日韩欧美一区二区三区综合 | 欧美日韩一区二区三区四区| 91在线观看下载| 风流少妇一区二区| 国产成人av一区二区| 国产一区二区网址| 国产在线精品一区二区三区不卡| 久久国产人妖系列| 韩日av一区二区| 国产一区二区视频在线| 国产精品亚洲视频| 成人精品gif动图一区| 成人一级视频在线观看| 成人亚洲一区二区一| 99久久综合精品| 色久优优欧美色久优优| 在线视频一区二区三区| 欧美人妇做爰xxxⅹ性高电影| 欧美精品自拍偷拍动漫精品| 亚洲欧美国产三级| 国产精品超碰97尤物18| 日韩码欧中文字| 一区二区三区国产| 日日摸夜夜添夜夜添精品视频| 久久精品国产亚洲一区二区三区 | 成人丝袜18视频在线观看| 成人激情视频网站| 91网上在线视频| 欧美日韩激情一区二区三区| 日韩欧美综合一区| 国产日韩欧美a| 亚洲人xxxx| 蜜臀va亚洲va欧美va天堂| 国产福利电影一区二区三区| 91欧美激情一区二区三区成人| 91高清视频免费看| 欧美v亚洲v综合ⅴ国产v| 国产精品网曝门| 五月天亚洲婷婷| 国产精品白丝jk白祙喷水网站| 色婷婷综合五月| 日韩免费看的电影| 国产精品国产三级国产普通话蜜臀 | 久久五月婷婷丁香社区| 日韩毛片高清在线播放| 蜜桃av一区二区| 成人国产在线观看| 91精品久久久久久久99蜜桃| 2022国产精品视频| 一区二区日韩电影| 国产美女久久久久| 欧美日韩视频在线一区二区| 精品国产一区二区亚洲人成毛片| 中文字幕日韩一区二区| 麻豆精品新av中文字幕| 91在线播放网址| 久久久综合精品| 婷婷久久综合九色国产成人| 国产精品一二三在| 91麻豆精品国产91久久久久久久久| 国产日本欧美一区二区| 男男gaygay亚洲| 国产日韩欧美一区二区三区乱码 | 91网页版在线| 久久免费国产精品| 成人性生交大片免费看中文网站| 精品视频一区二区三区免费| 国产欧美日韩另类视频免费观看 | 精品国产免费人成电影在线观看四季| 亚洲精品中文在线| 成人h动漫精品一区二区| 精品欧美一区二区在线观看| 丝袜亚洲另类欧美综合| 色综合久久久久综合体| 欧美激情在线免费观看| 精品在线一区二区| 在线不卡免费av| 亚洲一卡二卡三卡四卡五卡| 91在线视频网址| 中文字幕第一区二区| 国产精品一区二区三区乱码| 日韩三级免费观看| 视频一区二区三区中文字幕| 欧美日韩精品专区| 亚洲精品大片www| 一本大道综合伊人精品热热| 国产精品视频免费看| 国产成人精品免费一区二区| 久久久亚洲精品石原莉奈| 久久成人久久鬼色| 日韩三级精品电影久久久| 轻轻草成人在线| 精品福利二区三区| 国产成人在线网站| 国产日产精品一区| 不卡的av中国片|