Диапазон назначения VHDL на основе логической константы - PullRequest
0 голосов
/ 29 сентября 2018

Кажется невозможным сделать что-то, что работает как код, приведенный ниже в VHDL.Возможно ли это использовать какой-то другой синтаксис?Есть ли такая вещь, как оператор if, который можно поместить в объявление диапазона?Я ничего не могу найти в Интернете по этому поводу.

if not using_census_vector then
    variable diff : natural range 0 to ((2**cRed_pixel_bits)+(2**cGreen_pixel_bits)+(2**cBlue_pixel_bits)) * window_size * window_size - 1 := 0;
else
    variable diff : natural range 0 to ((window_size * window_size * 3 )) := 0; 
end if;

1 Ответ

0 голосов
/ 30 сентября 2018

Используйте функцию для возврата верхнего индекса.Возможно, нет необходимости в параметрах (если вы не хотите, чтобы они были общими и перемещены в пакет), поскольку все остальные параметры должны находиться в области видимости

function calc_high return integer is
begin
  if not using_census_vector then
    return ((2**cRed_pixel_bits)+(2**cGreen_pixel_bits)+(2**cBlue_pixel_bits)) * window_size * window_size - 1;
  else
    return ((window_size * window_size * 3 )); 
  end if;
end function

variable diff : natural range 0 to calc_high := 0;
...