我试图将两个整数分成如下:
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.
知道我能做什么吗? 谢谢 哈里斯
答案 0 :(得分:6)
将整数转换为无符号或有符号数据类型,
use IEEE.NUMERIC_STD.all;
你必须使用,
to_unsigned(I,U’length);
to_signed(I,S’length)
其中I是整数值,U'length是无符号向量长度(位数)。
我没有验证您的代码及其实际工作情况,但我对代码的更正只是,
m1Low := to_integer(divide(to_unsigned(m1Low, N),to_unsigned(m0Low, N)));
你应该指定N,其中矢量的长度取决于你的设计。我使用了to_integer(),因为你的函数将无符号值返回到整数变量。
希望这些简单的笔记可以帮助你。
答案 1 :(得分:4)
如果要将整数作为无符号向量传递,则需要转换它们,而不是 typecast 它们。
首先,您需要numeric_std
库:
use ieee.numeric_std.all;
然后您可以使用to_unsigned
将整数转换为无符号向量。对于该函数,您需要知道要转换为的无符号向量的长度,因此请使用'length
属性:
destination_vector := to_unsigned(source_integer, destination_vector'length);
你可以从unsigned转换回整数(不需要告诉输入的长度,因为有关函数输入的信息可直接用于函数),如下所示:
destination_integer := to_integer(source_vector);