|
FIR фильтр на VHDL с помощью fdatool, проблемы с быстродействием |
|
|
|
Jun 25 2013, 09:36
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Добрый день!
Столкнулся с такой проблемой: реализую полосовой фильтр на частоту 1 МГц, использую окно Блекмана, на 512 коэффициентов. ПЛИС Altera Cyclone IV E EP4CE115F29C7N. Загвоздка в том, что нужно сделать фильтр с частотой сэмплирования в 40 МГц, но чтобы он работал на тактовой частоте в 240 МГц (для экономии ресурсов, т.е. умножителей). В fdatool все настроил и при генерации VHDL кода, указываю, чтобы структура была каскадная. Все генерируется, но вот работать на частоте тактирования в 240 МГц отказывается, максимум на 120 МГц выходит. Аналогичный фильтр, но в FIR Compiler генерируется, разводится и работает, но у меня нет лицензии на него.
Помогите решить данную проблему, может в коде что-то подправить или в fdatool есть нюансы.
|
|
|
|
|
 |
Ответов
|
Jun 25 2013, 09:56
|

Утомлённый солнцем
     
Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832

|
Цитата(mr.alexeevas @ Jun 25 2013, 11:36)  Добрый день!
Столкнулся с такой проблемой: реализую полосовой фильтр на частоту 1 МГц, использую окно Блекмана, на 512 коэффициентов. ПЛИС Altera Cyclone IV E EP4CE115F29C7N. Загвоздка в том, что нужно сделать фильтр с частотой сэмплирования в 40 МГц, но чтобы он работал на тактовой частоте в 240 МГц (для экономии ресурсов, т.е. умножителей). В fdatool все настроил и при генерации VHDL кода, указываю, чтобы структура была каскадная. Все генерируется, но вот работать на частоте тактирования в 240 МГц отказывается, максимум на 120 МГц выходит. Аналогичный фильтр, но в FIR Compiler генерируется, разводится и работает, но у меня нет лицензии на него.
Помогите решить данную проблему, может в коде что-то подправить или в fdatool есть нюансы. Pipelining в перемножителях включен? А почему так не хотите? http://electronix.ru/forum/index.php?showt...t&p=1031347
|
|
|
|
|
Jun 25 2013, 11:07
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(_Anatoliy @ Jun 25 2013, 13:56)  Pipelining в перемножителях включен? А почему так не хотите? http://electronix.ru/forum/index.php?showt...t&p=1031347Pipelining включен. А вот ссылка не открывается.
|
|
|
|
|
Jun 27 2013, 12:39
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(_Anatoliy @ Jun 25 2013, 18:08)  Это не тот Pipelining,если включали его при генерации hdl-кода.Нужно перемножители ручками подключать и в них уже включать Pipelining(причём не меньше 3). Я так до 240 МГц разгонял фильтр на третьем циклоне. Я руками подключил умножители, поэксперементировал с Pipelining, поставил еще регистров, но максимум чего добился это 170 МГц, можете подсказать, чтобы еще такого в матлабовском коде можно подправить?
|
|
|
|
|
Jun 28 2013, 05:54
|

Утомлённый солнцем
     
Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832

|
Цитата(mr.alexeevas @ Jun 27 2013, 13:39)  Я руками подключил умножители, поэксперементировал с Pipelining, поставил еще регистров, но максимум чего добился это 170 МГц, можете подсказать, чтобы еще такого в матлабовском коде можно подправить? В таких случаях совет стандартный : анализировать отчёт тайм-квеста,искать пути которые валятся,принимать меры.Насколько я помню матлаб реализует дерево сумматоров - оно Вам нужно? Вот отчёт тайм-квеста на тот вариант, который я выкладывал(для Циклона-3).
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 28 2013, 06:16
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(_Anatoliy @ Jun 28 2013, 09:54)  В таких случаях совет стандартный : анализировать отчёт тайм-квеста,искать пути которые валятся,принимать меры.Насколько я помню матлаб реализует дерево сумматоров - оно Вам нужно? Вот отчёт тайм-квеста на тот вариант, который я выкладывал(для Циклона-3). Да, тот код оригинальный и реализация получается быстродействующая, но дело в том, что необходимо сделать фильтр с тактовой 240 МГц, а вот данные должны приниматься и выдаваться с частотой в 40 МГц.
|
|
|
|
|
Jun 28 2013, 10:09
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(_Anatoliy @ Jun 28 2013, 13:26)  Вам не нужно добиваться быстродействия фильтра 240МГц,40МГц достаточно.Сигнал enable должен быть активным один такт на каждые шесть тактов клока. А чтобы таймквест правильно посчитал слэки ему нужно указать что фильтр работает со скважностью 6. Это делается командой set_multicycle_path. Быстродействие в 240 МГц нужно для экономии умножителей, т.к. их в моем фильтре 512, и получается, что если быстродействие 240, а данные на 40, то можно использовать в 6 раз меньше коэффициентов.
|
|
|
|
|
Jul 1 2013, 04:35
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(_Anatoliy @ Jun 28 2013, 20:25)  Ясно.Только не коэффициентов а умножителей.Так Вам не понятно как такой фильтр реализовать?У Вас же есть матлабовский hdl-файл,разберитесь как он работает,принцип перенесите на мой быстродействующий фильтр. Да, умножителей) Думаю так и сделаю, но пока не получается подключить аппаратный умножитель, т.к. умножение происходит внутри цикла в вашем фильтре. Я новичок в этом деле, всего пару месяцев работаю с ПЛИС на VHDL.
|
|
|
|
|
Jul 1 2013, 11:43
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(_Anatoliy @ Jul 1 2013, 10:05)  Ключевое слово generate.Осваивайте. Не понимаю, как в той структуре можно использовать generate. Если вносить под процесс, то quartus ругается, что он ожидает loop, если процесс убрать, то проблема с объявлением переменных. К тому же, не понимаю, как тогда испрользовать rising_edge
|
|
|
|
|
Jul 1 2013, 11:49
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(mr.alexeevas @ Jul 1 2013, 14:43)  Не понимаю, как в той структуре можно использовать generate. Если вносить под процесс, то quartus ругается, что он ожидает loop, если процесс убрать, то проблема с объявлением переменных. К тому же, не понимаю, как тогда испрользовать rising_edge пример на основе компаратора Количество разрядов сравниваемых данных (чисел) компаратора задается в GENERIC Описание портов: CLK – тактовая частота; RESET − асинхронный сброс; А, В – сравниваемые N-разрядные данные; ALB, AGB, ALEB, AGEB, AEB, ANEB – результаты сравнения чисел А и В; Код library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity comp is GENERIC(width: INTEGER:=3); Port ( CLK: in STD_LOGIC; RESET: in STD_LOGIC; A, B: in STD_LOGIC_VECTOR(width downto 0); ALB, AGB: out STD_LOGIC; ALEB, AGEB: out STD_LOGIC; AEB, ANEB: out STD_LOGIC ); end comp;
architecture Behavioral of comp is begin process(CLK,RESET) begin if (RESET = '1') then ALB <= '0'; AGB <= '0'; ALEB <= '0'; AGEB <= '0'; AEB <= '0'; ANEB <= '0'; elsif (CLK'event and CLK ='1') then if ( A < B ) then ALB <= '1'; else ALB <= '0'; end if; if ( A > B ) then AGB <= '1'; else AGB <= '0'; end if; if ( A <= B ) then ALEB <= '1'; else ALEB <= '0'; end if; if ( A >= B ) then AGEB <= '1'; else AGEB <= '0'; end if; if ( A = B ) then AEB <= '1'; else AEB <= '0'; end if; if ( A /= B ) then ANEB <= '1'; else ANEB <= '0'; end if; end if; end process;
end Behavioral; или конкретней формулируйте вопросы...
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Jul 1 2013, 12:10
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-04-13
Из: Санкт-Петербург
Пользователь №: 76 668

|
Цитата(Maverick @ Jul 1 2013, 15:49)  или конкретней формулируйте вопросы... Речь идет об использовании generate, а не generic.
|
|
|
|
Сообщений в этой теме
mr.alexeevas FIR фильтр на VHDL с помощью fdatool Jun 25 2013, 09:36   mr.alexeevas Цитата(_Anatoliy @ Jun 25 2013, 18:08) По... Jun 26 2013, 04:51    _Anatoliy Цитата(mr.alexeevas @ Jun 26 2013, 05:51)... Jun 26 2013, 07:07     mr.alexeevas Цитата(_Anatoliy @ Jun 26 2013, 11:07) Ст... Jun 26 2013, 10:41               Maverick Цитата(mr.alexeevas @ Jul 1 2013, 15:10) ... Jul 1 2013, 12:21             _Anatoliy Цитата(mr.alexeevas @ Jul 1 2013, 13:43) ... Jul 1 2013, 12:21              mr.alexeevas Цитата(_Anatoliy @ Jul 1 2013, 16:21) Код... Jul 2 2013, 10:36               _Anatoliy Цитата(mr.alexeevas @ Jul 2 2013, 11:36) ... Jul 2 2013, 12:30                mr.alexeevas Цитата(_Anatoliy @ Jul 2 2013, 16:30) Вни... Jul 3 2013, 04:53 mr.alexeevas Спасибо, разобрался. Действительно, быстродействие... Jul 1 2013, 12:51 _Anatoliy Цитата(mr.alexeevas @ Jul 1 2013, 14:51) ... Jul 1 2013, 13:11  mr.alexeevas Цитата(_Anatoliy @ Jul 1 2013, 17:11) Я с... Jul 2 2013, 04:53
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|