Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с generic?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
eteP
Как написать в VHDL такую конструкцию?

Код
entity avg is
    generic (
 NUMDATABITSIN    : integer := 14;
 NUMAVG      : integer := 32
    );
 port(
  CLK:  in std_logic;
  RSTl:  in std_logic;
  CE:  in std_logic;
  DATA_IN:    in std_logic_vector(NUMDATABITSIN-1 downto 0);
  DATA_DRY:    out std_logic;
  DATA_OUT:    out std_logic_vector(NUMDATABITSIN + fix(log(NUMAVG)/log(4)) -1 downto 0)
     );
end avg;


Не понятно как написать формулу для DATA_OUT.
Здесь пример я написал как это выглядит на MatLab.

Спасибо.
xdan
Цитата(eteP @ Apr 6 2005, 11:35)
Как написать в VHDL такую конструкцию?

Код
entity avg is
    generic (
 NUMDATABITSIN    : integer := 14;
 NUMAVG      : integer := 32
    );
 port(
  CLK:  in std_logic;
  RSTl:  in std_logic;
  CE:  in std_logic;
  DATA_IN:    in std_logic_vector(NUMDATABITSIN-1 downto 0);
  DATA_DRY:    out std_logic;
  DATA_OUT:    out std_logic_vector(NUMDATABITSIN + fix(log(NUMAVG)/log(4)) -1 downto 0)
     );
end avg;


Не понятно как написать формулу для DATA_OUT.
Здесь пример я написал как это выглядит на MatLab.

Спасибо.
*

Делаешь пакет, в его заголовке обьявляешь нужные функции, в теле пакета описываешь тела этих функций.

потом добавляешь:
Код
use.work.my_package.all;
entity avg is
...

и можешь пользоваться обьявленными в пакете функциями и константами во всем модуле. Можешь прямо в пакете обявить константы для размерности
DATA_OUT и прямо в нем их инициализировать, с помощью предварительно обьявленных функций...

... или я не так понял суть проблемы smile.gif.
Rok
Цитата
и можешь пользоваться обьявленными в пакете функциями и константами во всем модуле.

С константами все понятно. Человек спрашивает как ему fix(log(NUMAVG)/log(4)) посчитать, чтобы автоматом размерность выставлялась.
Вот например такой код для log2:
Код
function LOG2(Number : positive) return natural is
variable Temp : positive := 1;
begin
if Number=1 then
return 0;
 else
  for i in 1 to integer'high loop
   Temp := 2*Temp;
    if Temp>=Number then
     return i;
    end if;
end loop;
end if;    
end LOG2;

А принцип такой же, можно в package запихнуть, а можно и на месте.
А потом еще нужно будет функцию для fix написать.
Порыться можно в сети поискать.
Вот нашел
Смотри здесь
Готовый package к употреблению rolleyes.gif .
eteP
Срасибо.
То что надо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.