Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не получается реализовать КИХ фильтр на VHDL
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Georg.A
Доброго времени суток всем!
Пытаюсь сделать простой КИХ фильтр на ПЛИС, да все никак не выходит каменный цветок.
Для начала с помощью fdatool`a создал фильтр с необходимой АЧХ. Конкретно полосовой фильтр Баттерворта 4-го порядка. Сгенерил структуру (прикреплена).
Отквантизировал коэффициенты для 18 разрядной знаковой сетки.
Отвел два разряда для целой части и 15 для дробной. Масштабирующий коэффициент взял соответственно 2^15 = 32768.
было:
a2 -1,807830810546870
a3 0,999114990234375
gain 0,000640869140625

стало:
a2 59239
a3 32739
gain 21
VHDL код прикреплен в файле.
При прошивке в плис на выходе фильтра какая-то каша, хотя должна по идее быть гармоника.
Кто знает подскажите пожалуйста, может что-то не так делаю?
andrew_b
Вы до прошивки в симуляторе посмотрите, как у вас это работает.
Georg.A
andrew_b в симуляторе пробовал проверить, но отлаживать фильтр глядя на цифровые коды мне показалось нереальным (может я не прав?). Пользуюсь Isim от Xilinx, не нашел как в нем отображать сигналы в аналоговом виде, ни в документации, ни в самоой проге. Где-то встречалось, что в каких-то сторонних симуляторах есть такая опция. Может Вы знаете в каких и посоветуете?
_Anatoliy
Цитата(Georg.A @ Jun 26 2013, 06:51) *
andrew_b в симуляторе пробовал проверить, но отлаживать фильтр глядя на цифровые коды мне показалось нереальным (может я не прав?). Пользуюсь Isim от Xilinx, не нашел как в нем отображать сигналы в аналоговом виде, ни в документации, ни в самоой проге. Где-то встречалось, что в каких-то сторонних симуляторах есть такая опция. Может Вы знаете в каких и посоветуете?

Для предварительной отладки подайте на вход фильтра дельта-функцию,на выходе должны увидеть импульсную характеристику вашего фильтра.
andrew_b
Цитата(Georg.A @ Jun 26 2013, 09:51) *
andrew_b в симуляторе пробовал проверить, но отлаживать фильтр глядя на цифровые коды мне показалось нереальным (может я не прав?).
А как вы вообще собираетесь отлаживать цифровые устройства? Если не работает в симуляторе, то в железе тем более не заработает.
У вас есть модель (написанная в Matlab или даже на C/C++) и ваш VHDL-код. Они должны работать абсолютно одинаково, бит в бит.
Генерируете некоторый входной поток, пропускаете его через модель, получаете эталонный выход. Это у вас получается два эталонных файла.
Далее этот же входной поток из файла подаёте в симуляторе на вход вашего VHDL-кода. Выход записываете в файл и сравниваете с эталонным выходом. Совпадает -- отлично. Есть хоть какая-то разница -- ищете ошибку.
Также хорошо иметь кроме выхода еще несколько точек внутри фильтра для более точного контроля.
Bad0512
Цитата(andrew_b @ Jun 26 2013, 14:31) *
А как вы вообще собираетесь отлаживать цифровые устройства? Если не работает в симуляторе, то в железе тем более не заработает.
У вас есть модель (написанная в Matlab или даже на C/C++) и ваш VHDL-код. Они должны работать абсолютно одинаково, бит в бит.
Генерируете некоторый входной поток, пропускаете его через модель, получаете эталонный выход. Это у вас получается два эталонных файла.
Далее этот же входной поток из файла подаёте в симуляторе на вход вашего VHDL-кода. Выход записываете в файл и сравниваете с эталонным выходом. Совпадает -- отлично. Есть хоть какая-то разница -- ищете ошибку.
Также хорошо иметь кроме выхода еще несколько точек внутри фильтра для более точного контроля.

Есть способ немного другой - использовать косимуляцию (квеста + симулинк). Собираем фильтр в квесте, подключаем как отдельный блок в симулинк, на вход подаём тестовое воздействие (например, белый шум). Выход заводми на спектроанализатор. Если фильтр работает неправильно - это сразу будет видно на спектре. Способ неоднократно описан в литературе.
З.Ы. Да, забыл сказать, на этом пути есть много непонятностей, придётся почитать доки и форумы, стандартный подход (википедия + fdatool) тут недостаточен.
Georg.A
Всем спасибо большое за ответы!
Ошибку обнаружил при симуляции: поставил вместо минуса плюс в формуле. ИХ и step response совпали с матлабовскими.

Но один вопрос остался:
если в каких нибудь симуляторах для vhdl возможность представлять сигнал в аналоговой форме?

Допустим хочу посмотреть форму импульсной характеристики фильтра или модулирующий сигнал. Или без вариантов запись в файл и строить графики в другой проге?
crono
Цитата(Georg.A @ Jun 27 2013, 14:59) *
Но один вопрос остался:
если в каких нибудь симуляторах для vhdl возможность представлять сигнал в аналоговой форме?

В Active-HDL точно можно.
Apast
Цитата(Georg.A @ Jun 27 2013, 13:59) *
Всем спасибо большое за ответы!
Ошибку обнаружил при симуляции: поставил вместо минуса плюс в формуле. ИХ и step response совпали с матлабовскими.

Но один вопрос остался:
если в каких нибудь симуляторах для vhdl возможность представлять сигнал в аналоговой форме?

Допустим хочу посмотреть форму импульсной характеристики фильтра или модулирующий сигнал. Или без вариантов запись в файл и строить графики в другой проге?


Active-HDL от Aldec например, выходные результаты можно представлять в виде аналогового сигнала.
andrew_b
Цитата(Georg.A @ Jun 27 2013, 14:59) *
если в каких нибудь симуляторах для vhdl возможность представлять сигнал в аналоговой форме?
ModelSim
Victor®
Цитата(andrew_b @ Jun 27 2013, 15:43) *
ModelSim


Добавлю, что можно сделать вывод в файл и смотреть спектр чем душе угодно
Georg.A
Спасибо большое за ответы!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.