我的代码中有两个函数:
function derivative(error, previous_error, dt :in std_logic_vector(7 downto 0)) return std_logic_vector is
variable derivative_val: std_logic_vector(15 downto 0);
begin
derivative_val := div(sub(error,previous_error),dt);
return derivative_val;
end derivative;
function mul(num1,num2 : in std_logic_vector(7 DOWNTO 0)) return std_logic_vector is
variable v_TEST_VARIABLE1 : integer;
variable v_TEST_VARIABLE2 : integer;
variable n_times: integer:=1;
variable product: integer:=0;
begin
v_TEST_VARIABLE1 := to_integer(unsigned(num1)) ;
v_TEST_VARIABLE2 := to_integer(unsigned(num2)) ;
for n_times in 1 to v_TEST_VARIABLE2 loop
product:=product + v_TEST_VARIABLE1;
end loop;
return std_logic_vector(to_unsigned(product,16));
end mul;
在后半部分我试图分配一个变量。
variable derivative_term: std_logic_vector(15 downto 0) := x"0000";
derivative_term := mul(mul(Kp,Td), derivative(error, previous_error,dt));
编译时,我得到了:
No feasible entries for subprogram "mul".
有没有其他方法可以使用它? 提前谢谢。
答案 0 :(得分:1)
mul
函数接受类型为num*
的参数std_logic_vector(7 downto
0)
,因此长度为8,并返回长度为std_logic_vector
的结果
16。
因此,当调用mul(mul(...), ...)
时,外部mul
获得第一个参数
类型std_logic_vector
的长度为16,与要求不匹配
函数的参数长度。
您可以使用"*"
来代替编写自己的乘法函数
ieee.numeric_std
,可以用作:
slv_16_0 <= std_logic_vector(unsigned(slv_8_0) * unsigned(slv_8_1));
它还处理未知值,如'X'
,结果长度为总和
这两个论点的长度。