4

次のように2つの整数を除算しようとしています:

variable m0Low : integer := 0;
variable m1Low : integer := 0;
m1Low := divide(m1Low,m0Low);

関数を使用すると:

function  divide  (a : UNSIGNED; b : UNSIGNED) return UNSIGNED is    
    variable a1 : unsigned(a'length-1 downto 0):=a;    
    variable b1 : unsigned(b'length-1 downto 0):=b;    
    variable p1 : unsigned(b'length downto 0):= (others => '0');    
    variable i : integer:=0;               
    begin    
        for i in 0 to b'length-1 loop    
            p1(b'length-1 downto 1) := p1(b'length-2 downto 0);    
            p1(0) := a1(a'length-1);    
            a1(a'length-1 downto 1) := a1(a'length-2 downto 0);    
            p1 := p1-b1;    
            if(p1(b'length-1) ='1') then    
                a1(0) :='0';    
                p1 := p1+b1;    
            else    
                a1(0) :='1';    
            end if;
        end loop;    
    return a1;    
end divide;

ただし、次のエラーが表示されます。 Divide can not have such operands in this context.

変数を符号なしにキャストしようとしていますm1Low := divide(unsigned(m1Low),unsigned(m0Low));

しかし、次のエラーが表示されます。 The expression can not be converted to type unsigned.

私に何ができるか考えていますか?ありがとうハリス

4

2 に答える 2

4

整数を符号なしベクトルとして渡したい場合は、型キャストではなく変換する必要があります。

numeric_stdまず、ライブラリが必要です。

use ieee.numeric_std.all;

to_unsigned次に、整数を符号なしベクトルに変換するために使用できます。その関数では、変換先の符号なしベクトルの長さを知る必要があるため、次の'length属性を使用します。

destination_vector := to_unsigned(source_integer, destination_vector'length);

次のように、符号なしから整数に戻すことができます (関数入力に関する情報は関数で直接利用できるため、入力の長さを伝える必要はありません)。

destination_integer := to_integer(source_vector);
于 2013-05-17T09:22:15.327 に答える