Я написал простую функцию, которая делает log2 вычисление любого целого числа, а затем «ceils» это до следующего целого числа:«Ожидаемый тип аннулируются» - функция VHDL ошибка
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
Почему ожидать типа Пустоты? И как я могу избежать получения этой ошибки?
Вызов функции - это выражение, которое возвращает значение. Если бы вы предоставили [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve), кто-то мог бы продублировать ошибку в другом инструменте, который может дать более выразительный отчет об ошибках. В идеальном мире вы должны получить сообщение об ошибке, сообщающее, что log2ceil не обозначает процедуру, а использование - синтаксическая ошибка. (Попробуйте назначить возвращаемое значение вызова функции переменной или объекту класса сигнала типа integer или natural). – user1155120
При составлении минимального, полного и проверяемого примера вы также можете попытаться уменьшить код функции 'log2ceil' или просто использовать другую тестовую функцию. –
Это очень странное сообщение об ошибке от компилятора VHDL!Это имело бы смысл для компилятора C, где процедуры моделируются с использованием «void functions», поэтому вы можете вызывать функции и отбрасывать возвращаемые значения. Вы не можете сделать это в VHDL. –