我编写了一个简单的函数,它对任何整数进行 log2 计算,然后将其“ceils”到下一个整数:
function log2ceil(intVal: integer) return natural is
variable i : natural;
variable bitCount : natural;
begin
i := (intVal - 1);
bitCount := 0;
while (i > 0) loop
bitCount := bitCount + 1;
i:=shiftRightInt(i,1);
end loop;
return bitCount;
end log2ceil;
function shiftRightInt(ValueToShift: integer; NrToShift:natural) return integer is
begin
return to_integer(shift_right(to_unsigned(ValueToShift, 32), NrToShift));
end shiftRightInt;
工作正常。问题在于模拟。每次我尝试在测试台上用一个简单的函数调用来模拟它:
stim: process
begin
wait for 10 ns;
log2ceil(3);
wait;
end process;
它给了我以下错误:
ERROR: [VRFC 10-1472] type error near log2ceil ; expected type void
为什么它期望类型 Void?以及如何避免出现此错误?