Проектирование КИХ-фильтров на распределенной арифметике в САПР ПЛИС XILINX ISE DESIGN SUITE
В предыдущей работе [1] рассматривались особенности проектирования систолических КИХ-фильтров в базисе ПЛИС Spartan‑6 XC6SLX4 с использованием генератора параметризированных ядер XLogiCORE IP и функции FIR Compiler v6.3 САПР Xilinx ISE 14.2 [2, 3]. Был выбран тип фильтра Single-Rate FIR.
Кратко остановимся на основных результатах. На рис. 1 показан проект КИХ-фильтра на четыре отвода. Коэффициенты фильтра С0 = –2, С1 = –1, С2 = 7 и С3 = 6. Пример 1 демонстрирует тестбенч для моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода. На рис. 2 отображено моделирование прохождения сигнала по структуре КИХ-фильтра. На вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра 11 тактов синхрочастоты. Для размещения проекта в базис ПЛИС XC6SLX4 требуется 48 триггеров, тактируемых фронтом синхросигнала из общих логических ресурсов ПЛИС, и один ЦОС-блок DSP48A1 (всего доступно 8 ЦОС-блоков), при этом максимальная частота составила 348 МГц.
Сигнал, подвергающийся фильтрации, подается на вход Date (7:0). Высокий уровень сигнала s_data_tvalid разрешает работу фильтра. Стробирование результатов фильтрации осуществляется выходным сигналом m_axis_data_tvalid, то есть появление единичного импульса свидетельствует о готовности результата фильтрации сигнала на выходе m_axis_data_tdata(7:0), который остается неизменным вплоть до появления следующего стробирующего импульса. Расстояние между стробами — четыре такта синхрочастоты (результат фильтрации держится пять тактов синхрочастоты). Пример 1 демонстрирует специальную моделирующую программу на языке VHDL (испытательный стенд) для функционального моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода.
LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY new_test_bench IS END new_test_bench; ARCHITECTURE behavior OF new_test_bench IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT fir_compiler_v6_3 PORT( aclk : IN std_logic; s_axis_data_tvalid : IN std_logic; s_axis_data_tready : OUT std_logic; s_axis_data_tdata : IN std_logic_vector(7 downto 0); m_axis_data_tvalid : OUT std_logic; m_axis_data_tdata : OUT std_logic_vector(7 downto 0) ); END COMPONENT; --Inputs signal aclk : std_logic := ‘0’; signal s_axis_data_tvalid : std_logic := ‘1’; signal s_axis_data_tdata : std_logic_vector(7 downto 0) := (others => ‘0’); --Outputs signal s_axis_data_tready : std_logic; signal m_axis_data_tvalid : std_logic; signal m_axis_data_tdata : std_logic_vector(7 downto 0); -- Clock period definitions constant aclk_period : time := 20 ns; BEGIN -- Instantiate the Unit Under Test (UUT) uut: fir_compiler_v6_3 PORT MAP ( aclk => aclk, s_axis_data_tvalid => s_axis_data_tvalid, s_axis_data_tready => s_axis_data_tready, s_axis_data_tdata => s_axis_data_tdata, m_axis_data_tvalid => m_axis_data_tvalid, m_axis_data_tdata => m_axis_data_tdata ); -- Clock process definitions aclk_process :process begin aclk <= ‘0’; wait for aclk_period/2; aclk <= ‘1’; wait for aclk_period/2; end process; tb : process begin wait for 20 ns; s_axis_data_tdata <= “11111011”; wait for 20 ns; s_axis_data_tdata <= “00000011”; wait for 20 ns; s_axis_data_tdata <= “00000001”; wait for 20 ns; s_axis_data_tdata <= “00000000”; wait; END process; END;
Пример 1. Испытательный стенд для моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода, разработанной с помощью генератора параметризированных ядер XLogiCORE IP FIR Compiler v6.3
Рассмотрим проектирование КИХ-фильтров на последовательной распределенной арифметике. Генератор параметризированных ядер XLogiCORE IP FIR Compiler v5.0 предлагает на выбор три структуры фильтра: прямую форму систолического фильтра, в котором операции умножения и сложения выполняются параллельно с конвейеризацией; обратную и на распределенной арифметике. Функция FIR Compiler v5.0 не поддерживает современный протокол AXI4‑Stream. На рис. 3 показана структурная схема КИХ-фильтра на четыре отвода с использованием последовательной распределенной арифметики, применение которой позволяет сократить четыре умножителя на константу и многоразрядное дерево сумматоров [4]. На практике для реализации адресуемых массивов комбинаций весовых коэффициентов фильтра используют таблицы перекодировок (LUT) ПЛИС. Более подробную информацию по распределенной арифметике можно найти в предыдущих работах [5, 6, 7].
Выберем тип фильтра Single-Rate FIR и формат представления чисел с фиксированной запятой. В случае реализации КИХ-фильтра на распределенной арифметике генератор автоматически определяет тип арифметики: параллельная или последовательная [8]. Степень параллелизма зависит от соотношения частоты взятия входных отчетов (fs) и частоты тактирования системы (fclk). Чем выше fs по отношению к fclk, тем меньше латентность фильтра L (задержка появления профильтрованного сигнала, измеряется в тактах синхроимпульса).
Частота взятия входных отчетов fs = 50 МГц, частота тактирования системы fclk = 250 МГц. Коэффициенты фильтра такие же, разрядность представления коэффициентов — 8 бит. Предполагаем, что на вход фильтра поступают только целые значения, как со знаком, так и без, например –5, 3, 1, 0. Разрядность представления значений входного сигнала, подлежащего фильтрации (B), — 4 бит, профильтрованного сигнала — 14 бит (рис. 4). Под дробную часть числа в обоих случаях отводим 0 бит (Input Data Fractional Bits и Output Fractional Bits).
Для размещения проекта в базис ПЛИС XC6SLX4 требуется 57 триггеров, тактируемых фронтом синхросигнала из общих логических ресурсов ПЛИС LUT — 41, из них 30 используются как логические ресурсы, 8 LUT для реализации сдвигового регистра, при этом максимальная частота составила 439 МГц.
LIBRARY ieee; USE ieee.std_logic_1164.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --USE ieee.numeric_std.ALL; ENTITY fir4_test_5 IS END fir4_test_5; ARCHITECTURE behavior OF fir4_test_5 IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT fir_compiler_v5_0 PORT( clk : IN std_logic; nd : IN std_logic; rfd : OUT std_logic; rdy : OUT std_logic; din : IN std_logic_vector(3 downto 0); dout : OUT std_logic_vector(13 downto 0) ); END COMPONENT; --Inputs signal clk : std_logic := ‘0’; signal nd : std_logic := ‘0’; signal din : std_logic_vector(3 downto 0) := (others => ‘0’); --Outputs signal rfd : std_logic; signal rdy : std_logic; signal dout : std_logic_vector(13 downto 0); -- Clock period definitions constant clk_period : time := 20 ns; BEGIN -- Instantiate the Unit Under Test (UUT) uut: fir_compiler_v5_0 PORT MAP ( clk => clk, nd => nd, rfd => rfd, rdy => rdy, din => din, dout => dout ); -- Clock process definitions clk_process :process begin clk <= ‘0’; wait for clk_period/2; clk <= ‘1’; wait for clk_period/2; end process; -- Stimulus process stim_proc: process begin -- hold reset state for 100 ns. wait for 100 ns; wait for clk_period*10; -- insert stimulus here wait; end process; tb : process begin wait for 20 ns; nd<= ‘1’; din <= “1011”; wait for 20 ns; nd<= ‘0’; din <= “0000”; wait for 20 ns; din <= “0000”; wait for 20 ns; din <= “0000”; wait for 20 ns; nd<= ‘1’; din <= “0011”; wait for 20 ns; nd<= ‘0’; din <= “0000”; wait for 20 ns; din <= “0000”; wait for 20 ns; din <= “0000”; wait for 20 ns; nd<= ‘1’; din <= “0001”; wait for 20 ns; din <= “0000”; wait for 20 ns; din <= “0000”; wait for 20 ns; din <= “0000”; wait for 20 ns; nd<= ‘1’; din <= “0000”; wait; END process; END;
Пример 2. Испытательный стенд для моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода
На рис. 5 представлен отчет о характеристиках спроектированного КИХ-фильтра на четыре отвода. Частота тактирования ядра фильтра установлена в 250 МГц, а входная частота дискретизации — 50 МГц. Разрядность входной шины данных — 4 бит. Структура коэффициентов фильтра — несимметричная, разрядность представления коэффициентов — 8 бит. Задана полная точность вычисления выходных значений профильтрованного сигнала. Латентность фильтра 8 тактов синхрочастоты.
На рис. 6 представлен проект КИХ-фильтра на четыре отвода в САПР ПЛИС Xilinx ISE 14.2 с использованием генератора параметризированных ядер XLogiCORE IP FIR Compiler v5.0. Испытательный стенд для моделирования прохождения сигнала по структуре КИХ-фильтра на четыре отвода показывает пример 2. Моделирование прохождения сигнала по структуре КИХ-фильтра демонстрирует рис. 7. На вход фильтра подаются значения –5, 3, 1.
Разрешение на прием фильтром новых значений определяется высоким уровнем сигнала nd. Готовность фильтром прочитать новую порцию информации определяется выходными стробирующими импульсами сигнала rfd. Результат фильтрации определяется выходными стробирующими импульсами сигнала rdy. Сравнивая результаты фильтрации сигнала на рис. 2 и рис. 7, убеждаемся в их идентичности (смена профильтрованных значений на выходе фильтра осуществляется через 4 такта синхрочастоты) за исключением времени появления отклика фильтра (латентности). Систолический КИХ-фильтр на четыре отвода имеет латентность 11, а фильтр на последовательной распределенной арифметике без использования встроенных умножителей в ПЛИС — 8 тактов синхрочастоты.
Рассмотрим случай с параллельной распределенной арифметикой. Частота взятия входных отчетов fs = 250 МГц и частота тактирования системы fclk = 300 МГц. Функция FIR Compiler v5.0, исходя из соотношения частот, автоматически определила латентность фильтра 5 тактов синхрочастоты. Для размещения проекта в базис ПЛИС XC6SLX4 требуется уже 111 триггеров, тактируемых фронтом синхросигнала из общих логических ресурсов ПЛИС, LUT — 88, из них 74 используются как логические ресурсы, 1 LUT функционирует как блок памяти и 1 LUT как сдвиговый регистр, при этом максимальная частота составила 438 МГц. Рис. 8 показывает моделирование прохождения сигнала по структуре КИХ-фильтра. На вход фильтра подаются значения –5, 3, 1. Правильные значения на выходе 10, –1, –40, –10, 25, 6. Латентность фильтра составила 5 тактов синхрочастоты.
В таблице 1 приведен анализ задействованных ресурсов ПЛИС XC6SLX4 при реализации КИХ-фильтров на 4 отвода с использованием функции FIR Compiler v6.3 и FIR Compiler v5.0 САПР Xilinx ISE 14.2. Из анализа таблицы 1 следует, что наиболее быстродействующими являются фильтры на распределенной арифметике.
Ресурсы ПЛИС |
Систолический |
Распределенная арифметика |
|
Последовательная |
Параллельная |
||
Триггеры логических блоков в секциях |
48 |
57 |
111 |
Количество секций с LUT |
33 |
41 |
88 |
LUT для выполнения комбинационных функций |
22 |
30 |
74 |
LUT как блоки памяти |
11 |
8 |
1 |
LUT как сдвиговые регистры |
11 |
8 |
1 |
Кол-во ЦОС-блоков DSP48A1 |
1 |
– |
– |
Латентность фильтра |
11 |
8 |
5 |
Рабочая частота, МГц |
348 |
439 |
438 |
На рис. 9, 10 показаны временные диаграммы работы КИХ-фильтра на четыре отвода, реализованного в базисе ПЛИС серии Stratix III EP3SL50F484C2 (содержит 27 встроенных ЦОС-блоков) с использованием последовательной и параллельной распределенной арифметики на мегафункции FIR Compiler САПР Altera Quartus II версии 9.0. На рисунках обозначено: x — входной сигнал, подлежащий фильтрации; y — профильтрованный сигнал. Если сравнить результаты фильтрации, в частности для КИХ-фильтра на параллельной распределенной арифметике, сигнал y ПЛИС Altera Stratix III (стробирующий сигнал source_valid) на рис. 10 и сигнал dout ПЛИС Xilinx XC6SLX4 (стробирующий сигнал rdy) на рис. 8, то видно, что фильтры формируют выходной результат идентично. Отличия заключаются в настройках интерфейса. На рис. 10 также показана импульсная характеристика фильтра.
Анализ задействованных ресурсов ПЛИС серии Stratix III фирмы Altera при реализации КИХ-фильтров на четыре отвода с применением мегафункции FIR Compiler показан в таблице 2 (в меню Assignments/Device/Target device используется опция Auto device selected by the Fitter). Мегафункция настроена следующим образом: тип структуры — Single-Rate FIR; разрядность входной шины данных — 4 бит; коэффициенты не масштабируются; результат фильтрации представляется с точностью 9 бит. Для хранения коэффициентов фильтра и отсчетов используются логические ячейки адаптивных логических модулей. КИХ-фильтр на мегафункции FIR Compiler работает по протоколу Avalon Streaming (Avalon-ST).
Ресурсы ПЛИС cерии Stratix III |
Последовательная |
Параллельная |
АЛМ (ALMs) |
78 |
79 |
Количество АЛМ для выполнения комбинационных функций (Combinational ALUTs) |
74 |
87 |
Количество выделенных регистров (Dedicated logic Registers) |
136 |
134 |
Аппаратные перемножители (DSP 18×18) |
– |
– |
Рабочая частота в наихудшем случае для модели slow 1100 мВ 85 C, МГц |
400 |
400 |
Примечание. АЛМ — адаптивные логические модули.
Рассмотрим размещение КИХ-фильтра в ресурсы ПЛИС Xilinx XC6SLX4 (рис. 11). Во всех случаях установлена целевая задача проектирования — сбалансированная. Кристалл ПЛИС разбит на 8 тактовых регионов (доменов). КИХ-фильтр с использованием систолической структуры и ЦОС-блока занимает три тактовых региона, а фильтры на последовательной и параллельной арифметике — по два. Последовательная занимает меньшее число ресурсов ПЛИС, но они более широко разбросаны по кристаллу, что может увеличивать задержки в трассировочных ресурсах, а параллельная при более значительном потреблении ресурсов больше локализована. Области локализации для систолического фильтра (рис. 11а) и фильтров с использованием распределенной арифметики (рис. 11б, рис. 11в) показаны красными овалами. На рис. 12 изображено размещение КИХ-фильтра в ресурсы ПЛИС Altera серии Stratix III EP3SL50F484C2.
Выводы
Анализ временных диаграмм на примере КИХ-фильтра на четыре отвода на последовательной и параллельной распределенной арифметике, разработанного с использованием функции FIR Compiler v5.0 САПР Xilinx ISE и мегафункции FIR Compiler САПР Altera Quartus II, показывает, что фильтры формируют выходные значения идентично и имеют примерно равное быстродействие для ПЛИС серии Spartan‑6 и Stratix III. В случае КИХ-фильтров на параллельной арифметике выходной сигнал (профильтрованные значения) формируется через каждый синхроимпульс, а для фильтра на последовательной арифметике с несимметричной — через B и через B+1 для фильтра с симметричной импульсной характеристикой, то есть в нашем случае через 4 такта синхроимпульса.
Отказ от использования в функции FIR Compiler v6.3 структур фильтров на распределенной арифметике говорит о том, что в настоящее время наблюдается ориентация на массовое применение ЦОС-блоков в ПЛИС, однако ведущие разработчики САПР Xilinx и Altera сохранили возможность использования распределенной арифметики из-за ряда преимуществ. Например, структуры КИХ-фильтров на основе распределенной арифметики обладают рекордным быстродействием, которое не снижается с ростом числа отводов. Такие решения особенно эффективны в низкобюджетных сериях ПЛИС, где существует недостаточное число встроенных аппаратных ЦОС-блоков. Фильтрам на распределенной арифметике присущи такие недостатки, как меньшая точность представления коэффициентов и входных отсчетов, в частности, КИХ-фильтры на систолических структурах для ПЛИС серий Virtex‑5/6 позволяют иметь максимальную точность представления коэффициентов 49 бит против 32 бит и их нельзя перегрузить в режиме онлайн. Распределенная арифметика не позволяет также реализовать полифазный банк фильтров и параллельную потоковую обработку информации.
- Строгонов А., Цыбин С., Городков П. Проектирование КИХ-фильтров в САПР ПЛИС Xilinx ISE Design Suite // Компоненты и технологии. 2014. № 11.
- Тарасов И. Возможности FPGA фирмы Xilinx для цифровой обработки сигналов // Компоненты и технологии. 2007. № 5.
- Тарасов И. Е., Певцов Е. Ф. Программируемые логические схемы и их применение в схемотехнических решениях: Учебное пособие/ФГБОУ ВПО «Московский государственный технический университет радиотехники, электроники и автоматики». М., 2012.
- Knapp S. Parallel processing in FPGAs rivals DSP speed. Personal Engineering. October 1998.
- Строгонов А., Быстрицкий А. КИХ-фильтр на распределенной арифметике: проектируем сами // Компоненты и технологии. 2013. № 3.
- Строгонов А., Быстрицкий А. Проектирование КИХ-фильтров с учетом архитектурных особенностей ПЛИС // Компоненты и технологии. 2014. № 8.
- Строгонов А. КИХ-фильтры на параллельной распределенной арифметике // Компоненты и технологии. 2013. № 5.
- xilinx.com. Product Specification. IP LogiCORE FIR Compiler v5.0. DS534 March 1, 2011.