|
|
  |
Не получается реализовать КИХ фильтр на VHDL |
|
|
|
Jun 25 2013, 13:57
|
Группа: Участник
Сообщений: 11
Регистрация: 4-10-10
Пользователь №: 59 910

|
Доброго времени суток всем! Пытаюсь сделать простой КИХ фильтр на ПЛИС, да все никак не выходит каменный цветок. Для начала с помощью fdatool`a создал фильтр с необходимой АЧХ. Конкретно полосовой фильтр Баттерворта 4-го порядка. Сгенерил структуру (прикреплена). Отквантизировал коэффициенты для 18 разрядной знаковой сетки. Отвел два разряда для целой части и 15 для дробной. Масштабирующий коэффициент взял соответственно 2^15 = 32768. было: a2 -1,807830810546870 a3 0,999114990234375 gain 0,000640869140625 стало: a2 59239 a3 32739 gain 21 VHDL код прикреплен в файле. При прошивке в плис на выходе фильтра какая-то каша, хотя должна по идее быть гармоника. Кто знает подскажите пожалуйста, может что-то не так делаю?
Сообщение отредактировал Georg.A - Jun 25 2013, 13:58
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 26 2013, 05:51
|
Группа: Участник
Сообщений: 11
Регистрация: 4-10-10
Пользователь №: 59 910

|
andrew_b в симуляторе пробовал проверить, но отлаживать фильтр глядя на цифровые коды мне показалось нереальным (может я не прав?). Пользуюсь Isim от Xilinx, не нашел как в нем отображать сигналы в аналоговом виде, ни в документации, ни в самоой проге. Где-то встречалось, что в каких-то сторонних симуляторах есть такая опция. Может Вы знаете в каких и посоветуете?
|
|
|
|
|
Jun 26 2013, 07:31
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Georg.A @ Jun 26 2013, 09:51)  andrew_b в симуляторе пробовал проверить, но отлаживать фильтр глядя на цифровые коды мне показалось нереальным (может я не прав?). А как вы вообще собираетесь отлаживать цифровые устройства? Если не работает в симуляторе, то в железе тем более не заработает. У вас есть модель (написанная в Matlab или даже на C/C++) и ваш VHDL-код. Они должны работать абсолютно одинаково, бит в бит. Генерируете некоторый входной поток, пропускаете его через модель, получаете эталонный выход. Это у вас получается два эталонных файла. Далее этот же входной поток из файла подаёте в симуляторе на вход вашего VHDL-кода. Выход записываете в файл и сравниваете с эталонным выходом. Совпадает -- отлично. Есть хоть какая-то разница -- ищете ошибку. Также хорошо иметь кроме выхода еще несколько точек внутри фильтра для более точного контроля.
|
|
|
|
|
Jun 26 2013, 09:03
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(andrew_b @ Jun 26 2013, 14:31)  А как вы вообще собираетесь отлаживать цифровые устройства? Если не работает в симуляторе, то в железе тем более не заработает. У вас есть модель (написанная в Matlab или даже на C/C++) и ваш VHDL-код. Они должны работать абсолютно одинаково, бит в бит. Генерируете некоторый входной поток, пропускаете его через модель, получаете эталонный выход. Это у вас получается два эталонных файла. Далее этот же входной поток из файла подаёте в симуляторе на вход вашего VHDL-кода. Выход записываете в файл и сравниваете с эталонным выходом. Совпадает -- отлично. Есть хоть какая-то разница -- ищете ошибку. Также хорошо иметь кроме выхода еще несколько точек внутри фильтра для более точного контроля. Есть способ немного другой - использовать косимуляцию (квеста + симулинк). Собираем фильтр в квесте, подключаем как отдельный блок в симулинк, на вход подаём тестовое воздействие (например, белый шум). Выход заводми на спектроанализатор. Если фильтр работает неправильно - это сразу будет видно на спектре. Способ неоднократно описан в литературе. З.Ы. Да, забыл сказать, на этом пути есть много непонятностей, придётся почитать доки и форумы, стандартный подход (википедия + fdatool) тут недостаточен.
|
|
|
|
|
Jun 27 2013, 10:59
|
Группа: Участник
Сообщений: 11
Регистрация: 4-10-10
Пользователь №: 59 910

|
Всем спасибо большое за ответы! Ошибку обнаружил при симуляции: поставил вместо минуса плюс в формуле. ИХ и step response совпали с матлабовскими.
Но один вопрос остался: если в каких нибудь симуляторах для vhdl возможность представлять сигнал в аналоговой форме?
Допустим хочу посмотреть форму импульсной характеристики фильтра или модулирующий сигнал. Или без вариантов запись в файл и строить графики в другой проге?
|
|
|
|
|
Jun 27 2013, 11:15
|
Частый гость
 
Группа: Свой
Сообщений: 94
Регистрация: 28-11-12
Из: Москва
Пользователь №: 74 605

|
Цитата(Georg.A @ Jun 27 2013, 14:59)  Но один вопрос остался: если в каких нибудь симуляторах для vhdl возможность представлять сигнал в аналоговой форме?
В Active-HDL точно можно.
|
|
|
|
|
Jun 27 2013, 11:16
|
Местный
  
Группа: Свой
Сообщений: 224
Регистрация: 22-06-04
Из: Новосибирск
Пользователь №: 87

|
Цитата(Georg.A @ Jun 27 2013, 13:59)  Всем спасибо большое за ответы! Ошибку обнаружил при симуляции: поставил вместо минуса плюс в формуле. ИХ и step response совпали с матлабовскими.
Но один вопрос остался: если в каких нибудь симуляторах для vhdl возможность представлять сигнал в аналоговой форме?
Допустим хочу посмотреть форму импульсной характеристики фильтра или модулирующий сигнал. Или без вариантов запись в файл и строить графики в другой проге? Active-HDL от Aldec например, выходные результаты можно представлять в виде аналогового сигнала.
|
|
|
|
|
Jun 28 2013, 13:53
|
Группа: Участник
Сообщений: 11
Регистрация: 4-10-10
Пользователь №: 59 910

|
Спасибо большое за ответы!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|