Итак, я пытаюсь создать модуль для управления серводвигателем SG90. Но у меня проблемы с частью архитектуры; модуль имеет запись 6 битов, которая контролирует, где я хочу, чтобы был серводвигатель, но управляет двигателем с 16-битным вектором. Мой способ сделать это - умножить переменную в 6 бит (которая имеет то же значение, что и запись) и поместить ее в 16-битный вектор, что-то вроде этого:
case position is
when "000000" =>
value:= X"0ccc";
when "111111" =>
value := X"1999";
when others =>
value:=std_logic_vector((control*52)+3276);
end case;
Что это должно сделать, например, если я поставлю «000000», выход будет «0 ccc», переводя серводвигатель в исходное положение. «111111» будет «1999» или конечная позиция и все остальное между ними должно учитываться этим выражением. Но я получаю следующую ошибку: Error (10327): VHDL error at ServomotorF.vhd(46): can't determine definition of operator ""*"" -- found 0 possible definitions
Если это помогает, я использую библиотеки
use ieee.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
Я также попытался использовать numeric_std, но это просто дает мне больше ошибки. Единственное другое решение, о котором я могу подумать, - это делать одно за другим, используя гигантскую структуру case.
, если я использую «unsigned», я получаю ошибку нескольких определений unsigned.