eteP 0 6 апреля, 2005 Опубликовано 6 апреля, 2005 · Жалоба Как написать в 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 0 6 апреля, 2005 Опубликовано 6 апреля, 2005 · Жалоба Как написать в 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. Спасибо. <{POST_SNAPBACK}> Делаешь пакет, в его заголовке обьявляешь нужные функции, в теле пакета описываешь тела этих функций. потом добавляешь: use.work.my_package.all; entity avg is ... и можешь пользоваться обьявленными в пакете функциями и константами во всем модуле. Можешь прямо в пакете обявить константы для размерности DATA_OUT и прямо в нем их инициализировать, с помощью предварительно обьявленных функций... ... или я не так понял суть проблемы :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rok 0 6 апреля, 2005 Опубликовано 6 апреля, 2005 · Жалоба и можешь пользоваться обьявленными в пакете функциями и константами во всем модуле. С константами все понятно. Человек спрашивает как ему 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: . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eteP 0 7 апреля, 2005 Опубликовано 7 апреля, 2005 · Жалоба Срасибо. То что надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться