Разработка КИХ-фильтров в системе Xilinx System Generator САПР ISE Design Suite
System Generator IDS 14.4 — инструмент для разработки и отладки высокопроизводительных систем цифровой обработки сигналов в базисе ПЛИС фирмы Xilinx в системе визуально-имитационного моделирования Matlab/Simulink (версия 8.0.0.783 (R2012b)). Программный пакет обеспечивает высокоуровневое представление проекта, абстрагированное от конкретной аппаратной платформы, которое автоматически компилируется в ПЛИС Xilinx [1, 2, 3, 4, 5, 6]. System Generator является частью технологии XtremeDSP фирмы Xilinx.
System Generator сокращает время симуляции проектов за счет hardware-in-the-loop и HDL co-simulation. System Generator автоматически транслирует ЦОС-системы из Matlab/Simulink-описаний в высокооптимизированные VHDL-описания для ПЛИС Xilinx и создает испытательные стенды. Методология hardware-in-the-loop существенно ускоряет цикл проектирования, поскольку позволяет верифицировать проекты в ПЛИС непосредственно из системы Matlab/Simulink. HDL co-simulation разрешает пользователям импортировать HDL-код и симулировать всю систему в целом. Подробности о преимуществах использования новой методологии объектно-ориентированного проектирования, проводимой фирмой Xilinx, можно найти в работах [1, 2].
Проектирование КИХ-фильтров с использованием стандартных блоков системы Matlab/Simulink
Рассмотрим разработку КИХ-фильтра на 4 отвода:
y = С0x0+C1x1+C2x2+C3x3
на стандартных блоках системы Matlab/Simulink (рис. 1а). Предположим, что коэффициенты фильтра известны и равны С0 = –2, C1 = –1, C2 = 7 и C3 = 6.
Частота дискретизации сигнала Fs = 1 кГц ([0:1/fs:3] — вектор дискретных значений времени; 1+[0:1/fs:3].*75 — частота импульса). В поле «шаг модельного времени (Sample time)» должна стоять 1 (рис. 1б). На рис. 2 показан нижний уровень модели КИХ-фильтра на 4 отвода. А на рис. 3 изображен сигнал, подлежащий фильтрации, и профильтрованный сигнал. Константы фильтра и сигнал, подлежащий фильтрации, преобразовываются из формата с плавающей запятой в формат с фиксированной запятой (fixdt(1,16,10)) с помощью «автоматизированных мастеров», встроенных в блоки с 16‑битной точностью с учетом знака числа (рис. 4).
>> fs=1e3; % частота дискретизации 1 кГц >> t=0:1/fs:3; % вектор дискретных значений >> f0=1+[t*75]; % частота импульса >> s1=cos(2.*pi.*t.*f0); зашумленный сигнал >> plot(s1); Пример 1. Расчет временной функции в Matlab
С помощью приложения Simulink HDL Coder системы Matlab/Simulink извлечем из имитационной модели КИХ-фильтра в автоматическом режиме код языка VHDL и сгенерируем моделирующую программу на языке VHDL (испытательный стенд). Далее в САПР Xilinx ISE 14.4 разработаем проект и осуществим функциональное моделирование. Проект разместим в базис ПЛИС серии Spartan-6 xa6slx4-3csg225.
На рис. 5 и 6 показаны результаты функционального моделирования с использованием испытательного стенда. На рис. 5 и 6 видно, что входной сигнал и коэффициенты фильтра умножаются на масштабный множитель 1024 (210) согласно выбранному формату представления чисел с фиксированной запятой fixdt(1, 16, 10). Для получения правильного результата фильтрации необходимо предусмотреть последующее деление на 1048576. Уравнение фильтрации будет выглядеть так:
y/1048576 = (C0×1024)(x0×1024)+ +(C1×1024)(x1×1024)+(C2×1024)(x2×1024)+(C3×1024)(x3×1024).
Проектирование КИХ-фильтров с использованием Xilinx System Generator САПР ISE Design Suite
Рассмотрим разработку имитационной модели КИХ-фильтра на распределенной арифметике без использования встроенных ЦОС-блоков (тип фильтра — Single-Rate FIR) с применением функционального блока FIR Compiler v5.0, являющегося аналогом функции FIR Compiler v5.0 САПР Xilinx ISE, получаемой с помощью генератора параметризированных ядер XLogiCORE IP (рис. 7). Примеры использования генератора параметризированных ядер для разработки КИХ-фильтров на 4 отвода можно посмотреть в работах [7, 8]. Для верификации предусмотрены фильтры DF2T (транспонированная реализация дискретного фильтра) и Digital Filter (прямая форма). Блок FIR Compiler v5.0 является параметризированным (рис. 8). На рис. 8 показаны настройки блока. Согласно настройкам блока реализуется КИХ-фильтр на параллельной распределенной арифметике. На рис. 9 показано имитационное моделирование.
Для представления чисел со знаком в формате с фиксированной запятой Xilinx System Generator использует нотацию FIX, а для беззнаковых — UFIX. Формат FIX можно рассматривать как пару чисел M.N, где M — общее число двоичных разрядов; N — число разрядов дробной части. Входной сигнал представляется в формате FIX_16_8, коэффициенты фильтра в формате FIX_8_4, профильтрованный сигнал FIX_26_12 (рис. 10). С помощью блока System Generator создадим в автоматическом режиме проект фильтра и испытательный стенд. Проект разместим в базис ПЛИС серии Spartan-6 xc6slx4-3tqg144.
На рис. 10 и 11 показано функциональное моделирование с использованием моделирующей программы, сгенерированной в автоматическом режиме для случая, когда применен функциональный блок FIR Compiler v5.0. Входной сигнал, подлежащий фильтрации, умножается на масштабный множитель 256, а коэффициенты фильтра масштабируются на 16 согласно выбранному формату представления чисел.
Для получения правильного результата фильтрации необходимо предусмотреть деление на 4096. Уравнение фильтрации будет выглядеть следующим образом:
y/4096 = (C0×16)(x0×256)+(C1×16)(x1×256)+(C2×16)(x2×256)+ +(C3×16)(x3×256).
На рис. 12 показана модель КИХ-фильтра на 4 отвода с перегружаемыми коэффициентами с использованием блока FIR Compiler v5.0, а на рис. 13 — результаты имитационного моделирования.
Рассмотрим разработку имитационной модели систолического КИХ-фильтра (тип фильтра — Single-Rate FIR) с использованием блока FIR Compiler v6.3, являющегося аналогом функции FIR Compiler v6.3 САПР Xilinx ISE, получаемой с помощью генератора параметризированных ядер XLogiCORE IP (рис. 14). На рис. 15 показан формат представления входного сигнала и закладка «Реализация» блока FIR Compiler 6.3. Входной сигнал представлен в формате FIX_16_8, а коэффициенты фильтра в формате FIX_4_0. Профильтрованный сигнал представляется с 20‑битной точностью. На рис. 16 показано имитационное моделирование.
С помощью блока System Generator создадим в автоматическом режиме проект фильтра и испытательный стенд. На рис. 17 показано функциональное моделирование с использованием моделирующей программы, сгенерированной в автоматическом режиме (период синхросигнала 100 нс). Входной сигнал, подлежащий фильтрации, умножается на масштабный множитель 256, а коэффициенты фильтра не масштабируются согласно выбранному формату представления чисел. Для получения правильного результата фильтрации необходимо предусмотреть деление на 256. Уравнение фильтрации будет выглядеть следующим образом:
y/256 = C0(x0×256)+C1(x1×256)+ +C2(x2×256)+C3(x3×256).
Проектирование КИХ-фильтров для случая, когда коэффициенты неизвестны
Рассмотрим проектирование КИХ-фильтра (рис. 18) с использованием MAC-блока c большим числом отводов для подавления высокочастотных шумов в аудиосистеме (CD-качество). Данный пример основан на функциональном блоке n‑tap Dual Port Memory MAC FIR Filter из библиотеки Xilinx Reference Blockset/DSP. Кратко рассмотрен в работе [6].
Для хранения коэффициентов фильтра и входных отсчетов будем использовать блочную память ПЛИС Xilinx (двухпортовое ОЗУ). Параметры спецификации фильтра следующие: единицы измерения Гц; частота взятия отчетов Fs = 44 100 Гц (44,1 кГц); порядок фильтра — автоматический выбор (Minimum Order); граница полосы пропускания fPass = 6000 Гц (6 кГц); граница полосы задерживания (подавления) fStop = 7725 Гц (7,725 кГц); неравномерность АЧХ в полосе пропускания APass (Rp = 1 дБ); минимальное затухание в полосе задерживания AStop (Rs = 48 дБ). Осуществим синтез фильтров с равномерными пульсациями АЧХ в полосах пропускания и задерживания методом Ремеза (Equiripple). По заданной технической спецификации синтезируется фильтр с порядком n = 42 (импульсная характеристика содержит n+1 ненулевых отсчетов), или 43 коэффициента.
На рис. 19 показаны настройки функционального блока источника случайного сигнала. В поле Sample Time необходимо указать период дискретизации сигнала 1/Fs = 1/44 100.
Библиотека DSP Xilinx blockset содержит встроенную графическую среду для синтеза и анализа фильтров FDATool, представленную в виде одноименного блока, помеченного маркером X (рис. 20а). Использование специальной функции xlfda_numerator(‘FDATool’) позволяет импортировать рассчитанные коэффициенты фильтра (числитель передаточной функции) непосредственно в блок MAC Based FIR. Коэффициенты можно также посмотреть в системе Matlab с помощью команды xlfda_numerator(‘FDATool’).
Блок MAC Based FIR является параметризованным (шесть переменных). Двойным кликом по блоку можно задать значения параметров в определенных полях (рис. 20б). Входные данные представляются в формате FIX_10_8, а коэффициенты как FIX_12_12. Обозначения переменных можно посмотреть в маске (правая кнопка мыши, Mask, Edit Mask) на рис. 21.
Максимальное значение коэффициента составляет 0.3022 (определяется командой: max(xlfda_numerator(‘FDATool’)) а минимальное –0.067. Поэтому коэффициенты фильтра целесообразно представить в формате Fix_12_12. Это обеспечивает приведение коэффициентов к диапазону [–0.5, 0.4998]. Для сравнения можно было бы использовать формат Fix_12_11 (перенесение десятичной точки влево на один разряд при сохранении длины слова), что привело бы к диапазону [–1, 0,9995] (рис. 22).
На рис. 23а изображена структурная схема КИХ-фильтра на 43 отвода с использованием одного MAC-блока и блочной двухпортовой памяти (ОЗУ). Входной сигнал перед записью в блочную память подвергается передискретизации на величину в 43 раза выше, чем частота взятия отсчетов Fs. Память разбита на два банка, которые используют различные режимы работы. Первый сконфигурирован как ОЗУ и работает в режиме циклического буфера, второй как ПЗУ. Емкость первого банка памяти, предназначенного для хранения отсчетов, составляет 43 строки (адреса 0–42) на 10 столбцов (FIX_10_8) или 43×10‑разрядных слов. Циклический буфер имитирует работу линии задержки фильтра (рис. 23а). Второй банк предназначен для хранения коэффициентов фильтра емкостью 43 строки (адреса 43–85) на 12 столбцов (FIX_12_12) или 43×12‑разрядных слов. На рис. 23б показан пример реализации КИХ-фильтра на 4 отвода с использованием 1 MAC-блока.
На рис. 24 дана структурная схема MAC-блока с применением библиотек System Generator. Схема предназначена для размещения в логические ресурсы ПЛИС. Основные функциональные блоки: Memory (двухпортовая память с управляющим автоматом), MAC engine (блок умножения с накоплением), Register (регистр захвата для операции конвейеризации), Down Sample (понижение частоты дискретизации в 43 раза), Convert 1 (представляет результат фильтрации с требуемой точностью или преобразует формат FIX_24_20, образующийся в процессе умножения и накопления, в формат FIX_10_8). Блок din (Xilinx Gateway In, можно рассматривать как вход в ПЛИС) преобразует тип double в формат FIX_10_8. Блок MAC Out выполняет обратную функцию, преобразует формат FIX_10_8 в тип double. Его можно рассматривать как выход из ПЛИС.
Блок Dual Port RAM представляет память ОЗУ с двумя портами A и B. Входные отсчеты записываются в и считываются из порта A (ОЗУ), коэффициенты считываются из порта B (рис. 25). Процессом записи и считывания управляет автомат (блок Address Control) (рис. 26). Основные функциональные блоки автомата — это два суммирующих счетчика coef_counter (предварительно загружается число 43) и Data_Counter (предварительно загружается 0), адресующихся к портам A и B ОЗУ и компаратор. На один из входов компаратора подключается константа 85 (команда 2*length(coef)-1). Компаратор управляет входом разрешения счета счетчика Data_Counter и формирует сигнал we (латентность 1), разрешающий запись в ОЗУ, и сигнал сброса аккумулятора (латентность 5) с последующим формированием сигнала разрешения работы регистра захвата.
ОЗУ (рис. 27) инициализируется вектором значений с применением следующей команды [zeros(1, length(coef))(coef)] (рис. 28). Блок памяти имеет латентность 1. На рис. 27 показано, что сигнал, подлежащий фильтрации, подвергается передискретизации в 43 раза. Передискретизация и последующая операция понижения частоты дискретизации (децимация) обеспечивают по внешним входам фильтра организацию структуры фильтра типа Single-Rate FIR.
Для выравнивания числа столбцов в банках памяти используется блок pad (основан на блоке Xilinx Bus Concatenator), выполняющий роль конкатенации (склеивания) двух шин. Склеиваются две шины в форматах UFix_10_0 (10‑разрядная шина, младшие разряды lo) и UFix_2_0 (2‑разрядная шина, старшие разряды hi). Результатом склеивания является шина в формате UFix_12_0, которая преобразуется в тип Fix_12_12.
На рис. 29 показан умножитель и аккумулятор. Результат умножения представляется в формате Fix_22_20, а результат сложения в формате Fix_24_20 c учетом переполнения и операции расширения знака числа. Разрядность выходной шины аккумулятора определяется следующей командой:
ceil(log2(max(1,sum(abs(coef*2^coef_binpt)))))+data_width+1.
Умножитель имеет латентность 3 для согласования с реальной латентностью, равной трем, характерной для встроенных умножителей в ПЛИС Xilinx.
На рис. 30 показана настройка периода симуляции в Simulink. С учетом того, что используется передискретизация, период симуляции должен быть 1/(43Fs). Период синхросигнала задаем 10 нс. В меню Configuration Parameters задаем время симуляции 0,05 c. На рис. 31 показано удаление высокочастотных составляющих из случайного сигнала с помощью КИХ-фильтра на 43 отвода. Моделирование отклика КИХ-фильтра на единичный импульс в Simulink показано на рис. 32. Период синхросигнала увеличен до 100 нс. Функциональное моделирование показывает, что входной сигнал (единичный импульс, не путать с дельта-функцией, которая позволяет просмотреть коэффициенты фильтра, рис. 11) и выходной сигнал умножаются на 256 (рис. 33). Профильтрованные значения обновляются через 43 такта синхроимпульса. Фрагменты значений выходного сигнала и коэффициентов фильтра в формате double и FIX приведены в таблице.
Значения отклика в формате double |
Значения отклика в формате FIX_10_8 (значения отклика * масштабный множитель 256) |
Коэффициенты фильтра в формате double |
Коэффициенты фильтра в формате FIX_12_12 (коэфф. |
–0,00195; |
–1 |
–0,0019 |
–8 |
–0,01196; |
–3 |
–0,099 |
–41 |
–0,02588; |
–7 |
–0,0139 |
–57 |
–0,0400; |
–10 |
–0,0141 |
–58 |
В рассматриваемом примере предложена оригинальная идея организации работы циклического буфера. Сигнал, вырабатываемый компаратором (we) приостанавливает на один такт синхроимпульса работу счетчика Data_Counter (рис. 34), тем самым происходит двойная адресация к строке 42. Это обеспечивает запись десятичного числа один в строку памяти с адресом 42. При работе в САПР ISE эта единица умножается на масштабный множитель 256. Далее это число будет умножено на коэффициент –8 (–0,0019 в формате double), что и даст результат –2048 (рис. 34а). Через последующие 43 такта десятичная единица будет записана в строку с адресом 41 (рис. 34б). Эта единица вышеописанным способом заполнит первый банк ОЗУ, то есть «пробежится» по всем коэффициентам фильтра, и процедура повторится снова в зависимости от ширины единичного импульса, которая задается параметром Step Time. В нашем случае это величина 0,001 (рис. 32, блок Step). Как только импульс упадет в ноль, им последовательно будет заполнен первый банк ОЗУ.
Проверка результата фильтрации (рис. 33).
Фрагмент уравнения КИХ-фильтра:
y(FIX24_20) = –8(FIX12_12)×X0 – 41(FIX12_12)×X1 – 57(FIX12_12) – …
Первый проход:
X0 = 1(FIX10_8);
y(FIX24_20) = –8×256 = –2048;
ydouble = –2048/1048576 ≈ –0,00195.
Переводим формат ydouble в y(FIX10_8) = –0,00195×256 ≈ –0,499 ≈ –1.
Второй проход:
X1 = 1(FIX10_8);
X0 = 1(FIX10_8);
y(FIX24_20) = –8×256–41×256 =
= –2048–10496 = –12544;
ydouble = –12544/1048576 ≈ –0,01196.
Переводим формат ydouble в y(FIX10_8) = –0,01196×256 ≈ –3,06176 ≈ –3.
Третий проход:
X2 = 1(FIX10_8);
X1 = 1(FIX10_8);
X0 = 1(FIX10_8);
y(FIX24_20) = –8×256 – 41×256 – 57×256 = –27136;
ydouble = –27136/1048576 ≈ –0,02588.
Переводим формат ydouble в y(FIX10_8) = –0,02588×256 ≈ –6,62528 ≈ –7.
Выводы
С использованием Xilinx System Generator рассмотрено проектирование КИХ-фильтров в формате с фиксированной запятой. Рассмотрение результатов функционального моделирования с использованием моделирующих программ на языке VHDL, сгенерированных в автоматическом режиме при переходе от имитационных моделей КИХ-фильтров различной структуры, созданных в системе Matlab/Simulink, к функциональным в САПР ПЛИС Xilinx ISE Design Suite, показало, что входной сигнал, подлежащий фильтрации, и коэффициенты фильтра умножаются на масштабные множители 2N. Подводя итог, можно отметить, что в функциональном блоке n‑tap Dual Port Memory MAC FIR Filter используются такие понятия, как интерполяция, децимация, двухпортовая память, циклический буфер, латентность.
- Тарасов И. Методология проектирования для ПЛИС Xilinx: организационные аспекты // Компоненты и технологии. 2015. № 1.
- Тарасов И. Проектирование для ПЛИС Xilinx: системные аспекты и уровень регистровых передач // Компоненты и технологии. 2015. № 2.
- Долинский М. Обзор современных подходов и средств к «программистской» разработке аппаратного обеспечения алгоритмически сложных цифровых систем // Компоненты и технологии. 2004. № 1.
- Литвинов А. Быстрая разработка устройств ЦОС в системе Xilinx System Generator // Современная электроника. 2013. № 1.
- Тарасов И. Возможности FPGA фирмы Xilinx для цифровой обработки сигналов // Компоненты и технологии. 2007. №5
- System Generator for DSP. User Guide. UG640 (v 13.3). October 19, 2011. xilinx.com
- Строгонов А., Цыбин С., Городков П. Проектирование КИХ-фильтров в САПР ПЛИС Xilinx ISE Design Suite // Компоненты и технологии. 2014. № 11.
- Строгонов А., Цыбин С., Городков П. Проектирование КИХ-фильтров на распределенной арифметике в САПР ПЛИС Xilinx ISE Design Suite // Компоненты и технологии. 2015. № 2.