Дополнение в VHDL не компилируется?

Я знаю, что это довольно известная тема, но ни одно из обычных решений, похоже, не работает.

Вот строка, которая выдает ошибку:

ppl_stage_cnt <= ppl_stage_cnt + 1;

Вот ошибка, которую я получаю (от xst):

Line 89: found '0' definitions of operator "+", cannot determine exact overloaded matching definition for "+"

Вот дополнительная информация для понимания контекста:

signal ppl_stage_cnt : std_logic_vector(log2(ppl)-1 downto 0);


pplstage_cnt: process ( clk )
begin
    if rising_edge( clk ) then      
        if rst = '1' or ei = '1' or li = '1' then
            ppl_stage_cnt <= (others => '0');
        else
            ppl_stage_cnt <= ppl_stage_cnt + 1;
        end if;
    end if;
end process;   

Другие вещи, которые я пробовал:

ppl_stage_cnt <= std_logic_vector(to_unsigned(ppl_stage_cnt, log2(ppl)) + 1);

ppl_stage_cnt <= std_logic_vector(unsigned(ppl_stage_cnt) + '1');

person Nektarios    schedule 13.11.2011    source источник


Ответы (1)


Пытаться

ppl_stage_cnt <= UNSIGNED(ppl_stage_cnt) + 1;

источник: http://objectmix.com/vhdl/190708-how-do-perform-std_logic_vector-addition-using-ieee-numeric_std.html, второе обращение в Google за std_logic_vector operator

person Mark    schedule 13.11.2011
comment
Аааа, я пробовал это раньше, и это не сработало, но это было потому, что я включил 2 конфликтующих арифметических библиотеки. Спасибо - person Nektarios; 13.11.2011
comment
Если ваши векторы представляют числа, используйте типы std_logic_signed или std_logic_unsigned. Таким образом, вы также проверяете свой тип кода. Также чище, чем кастинг везде. - person Paul S; 13.11.2011
comment
Лично я бы использовал только типы unsigned и signed. - person Martin Thompson; 14.11.2011