программируемые логические интегральные

Save this PDF as:
 WORD  PNG  TXT  JPG

Размер: px
Начинать показ со страницы:

Download "программируемые логические интегральные"

Транскрипт

1 УДК В.П. Малахов, д-р техн. наук, А.Ю. Мельниченко, магистр, В.Г. Бровков, канд. техн. наук ПРОЕКТИРОВАНИЕ И ВЕРИФИКАЦИЯ ЦИФРОВЫХ ФИЛЬТРОВ ЗАДАННОЙ СТРУКТУРЫ НА ЯЗЫКЕ VHDL Запропоновано компонент, що конфігурується, на мові VHDL для СІХ та НІХ цифрової фільтрації. Компонент може бути використаний як програмне IP -ядро у більших проектах. Розроблено методику верифікації RTL моделі. Предложен конфигурируемый компонент на языке VHDL для КИХ и БИХ цифровой фильтрации. Компонент может быть использован как программное IP-ядро в более крупных проектах. Разработана методика верификации RTL модели. A configurable component for FIR and IIR digital filtering in VHDL is represented. The component can be used as a soft IP-core for larger projects. A method of the RTL model verification is developed. В современных задачах управления и сбора информации широко применяются методы цифровой фильтрации. Для реализации устройств фильтрации наряду с микроконтроллерами и цифровыми сигнальными процессорами большой популярностью пользуются программируемые логические интегральные схемы (ПЛИС). Одним из основных инструментов при проектировании цифровой системы на ПЛИС является язык описания аппаратуры VHDL. Конкуренция и рыночные отношения в экономике требуют от инженеров повышения не только качества, но и скорости проектирования. Стандартным решением проблемы является применение метода декомпозиции, что на практике выражается в повторном использовании узлов из других проектов или в применении универсальных модулей. Таким образом, создание настраиваемых компонентов для широкого применения может существенно сократить среднее время проектирования устройства. В работе предложен один из вариантов универсального компонента, описывающего цифровой фильтр. В качестве стиля проектирования выбран поведенческий стиль, который в данном случае позволяет компактно и просто описать устройство. Следует, однако, отметить, что при его использовании в других проектах может наблюдаться Малахов В.П., Мельниченко А.Ю., Бровков В.Г., избыточность обобщённого теоретического описания. Это может происходить в том случае, когда некоторые из коэффициентов фильтра являются нулями или такими числами, что для реализации умножения нет необходимости в применении умножителей. Решение данной проблемы полностью доверено синтезаторам, поскольку практически во всех современных пакетах для синтеза применяются алгоритмы оптимизации, и практика свидетельствует об их эффективном функционировании. В архитектуре компонента применен ряд типичных операций (учёт переполнения при суммировании, усечение разрядности при умножении, изменение разрядности при пересылке данных от одних узлов схемы к другим, начальная инициализация регистров наперёд заданными произвольными значениями), которые используются или могут быть использованы при построении цифровых фильтров или при проектировании библиотечных компонентов. Из теории цифровой фильтрации известно [1], что существует несколько структурных схем для реализации цифровых фильтров. Кроме того, каждая из этих теоретических структурных схем может иметь множество практических реализаций, различающихся способами обработки данных во времени, набором оборудования, порядком обработки данных (например, порядком суммирования). Структурная схема фильтра изображена на рис. 1.

2 Рис.1. Структурная схема цифрового фильтра Рисунок демонстрирует, что в качестве примера взята каноническая структура цифрового фильтра классическая структура, пригодная для реализации широкого класса фильтров. Выполнение всех операций умножения в нашем примере производится одновременно в течение одного такта. Для этого используется столько умножителей, сколько коэффициентов содержит фильтр. Все операции сложения осуществляются в течение того же такта на отдельных сумматорах для каждой операции сложения. Число сумматоров также соответствует числу коэффициентов фильтра. Порядок сложения прослеживается непосредственно на рис. 1. Важная задача при составлении модели обеспечение возможности настройки параметров фильтра. При таком подходе экземпляры фильтров можно многократно включать в состав более сложных проектов, причём настройка каждого фильтра является независимой от настроек остальных фильтров. С этой целью принято решение воспользоваться конструкцией generic [2]. Рассмотрим реализацию элементов задержек. Для описания цепочки регистров, хранящих предыдущие значения сигналов, определён тип Path_Type как массив элементов типа signed. Продвижение сигнала по цепочке элементов задержек, а также загрузка начальных значений в регистры, описаны в теле процесса Path. Отдельно стоит обратить внимание на разбор строковых параметров секции generic. Разбор параметров описан в операторе generate с меткой Tbl. Одномерные массивы Init_Registers, A_coef, B_coef преобразуются в сигналы Init_P, AMult, BMult соответственно типа Path_Type. При этом в секции generic строковый параметр составляется следующим образом: слева направо записывается двоичное представление коэффициентов от младшего к старшему; при записи коэффициента младшие разряды следуют за старшими; для удобства восприятия одна такая строка с параметром может быть разделена на несколько строк с помощью знака амперсанда. Основной математической операцией в цифровой фильтрации является умножение с накоплением. Эта операция многократно используется при построении рекурсивной и нерекурсивной частей фильтра. Описание нерекурсивной части фильтра сосредоточено в процессе A, описание рекурсивной в процессе B. В рассмотренном примере все сумматоры описаны как сумматоры с насыщением. Такой способ суммирования часто используется в программах для ЦПОС. Реализацию этой операции можно посмотреть в теле процессов A и B. Суть построения сумматора с насыщением заключается в том, что сначала производится обыкновенное сложение, а затем проверка на переполнение в обе стороны. В случае переполнения в качестве результата возвращается граница диапазона. Реализацию умножения также можно смотреть в теле процессов A и B. Разрядность результата умножения приводится к разрядности регистров (в действительности она вдвое больше). Это позволяет сэкономить аппаратуру, но приводит к определённым потерям точности. Также описанный выше способ приведения разрядности имеет одну особенность. После умножения двух знаковых чисел получается результат, в котором два старших бита совпадают, их называют знаковыми разрядами и при преобразовании оставляют только один из них. Но есть один случай, в котором эти два старших разряда не совпадают так происходит при умножении двух чисел, являющихся отрицательной границей представления данных (этой границе соответствует код 100 0). В таком случае получает- 162

3 ся ошибка, составляющая величину всего диапазона выходных данных умножителя. Возможно использование ряда методов для исключения описанной ситуации. В качестве первого из них можно предложить пользователю самому контролировать наступление нежелательной ситуации. Для этого среди коэффициентов не должно встречаться наибольшее по модулю отрицательное число из диапазона представления чисел, или такое число никогда не должно встречаться в потоке обрабатываемых данных. Последнее условие сложно установить для рекурсивных фильтров. Этот метод хорош тем, что не требует дополнительной аппаратуры. Недостаток метода в том, что на пользователя возлагается определённая аналитическая работа. В качестве второго метода можно предложить контроль переполнения, сходный с анализом переполнения при суммировании. Недостатком метода является дополнительная аппаратура. Третий метод не усекать старший разряд результата умножения, оставляя оба знаковых разряда. Недостатком метода является использование дополнительного разряда, который действительно необходим лишь в редких случаях переполнения умножителя. Применим первый из рассмотренных вариантов. Перед применением такого компонента на практике и включением его в более крупные проекты необходимо произвести тестирование на предмет корректности реализации требуемого алгоритма функционирования. Это поможет устранить случайные ошибки, допущенные при проектировании компонента. Таким образом, верификации будет подлежать не post-fit модель, соответствующая какому-либо кристаллу, а описанная здесь поведенческая модель. Это позволит отследить только логику работы устройства без отвлечения на временные задержки в конкретном кристалле. В таких случаях обычно создают модель испытательного стенда (test bench). При этом описание исследуемого устройства не изменяется. Применение операций чтения и записи файлов (в большинстве случаев можно обойтись возможностями стандартной библиотеки TEX- TIO) в test bench даёт возможность совмещения по данным с другими программными средствами моделирования. Кроме моделирования на VHDL применялось моделирование в пакете SciLab. Процесс тестирования заключается в следующем. В файл Param.VHD записываются параметры цифрового фильтра. В файл Input.SCI помещается код для генерации входного сигнала. После запуска его на моделирование получаем файл Input.TXT с необходимой входной последовательностью. Далее запускаем на моделирование файл Testbench.VHD. Для его работы необходимы файлы Digital_Filter.VHD и Param.VHD. Чтение входной последовательности происходит из файла Input.TXT, запись результата производится в файл OutVHD.TXT. Далее запускаем на моделирование файл Digital_Filter.SCI модель цифрового фильтра в пакете SciLab. Здесь следует отметить, что для проведения абсолютно точного сравнения результатов в математической модели необходимо использовать функции округления. В противном случае сравнение будет только приблизительным. Функции округления были реализованы в виде подпрограмм языка SciLab. Результат работы записывается в файл OutSCI.TXT. Наконец, сравниваются файлы OutVHD.TXT и OutSCI.TXT. Это сравнение можно проводить как обычный просмотр файлов или при помощи программы. При правильной работе их содержимое должно быть одинаковым. Методика тестирования представлена на рис. 2. Рис. 2. Методика верификации алгоритма цифровой фильтрации 163

4 Верификация проекта показала полную идентичность результатов моделирования в математическом пакете и в пакете моделирования цифровых систем, использующем язык VHDL в качестве инструмента ввода схемы. Этот результат позволяет говорить о корректности описания цифрового фильтра и возможности применения разработанной модели на практике. Развивая описанный подход, можно создать библиотеку универсальных конфигурируемых компонентов, которая позволит существенно ускорить процесс проектирования многих цифровых устройств на ПЛИС. Ниже приведён пример отлаженного кода модели на языке VHDL, в которой реализованы подходы, обсуждавшиеся выше. -- подключение стандартных библиотек -- library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.NUMERIC_STD.all; -- описание интерфейса цифрового фильтра -- entity Canonical_Digital_Filter is generic( Order: natural:= 2; Input_Width: positive:= 3; Internal_Width: positive:= 4; Output_Width: positive:= 5; Init_Registers: signed:= "1000" & "0001"; A_coef: signed:= "1000" & "0111" & "0110"; B_coef: signed:= "0110" & "1011" ); port( D: in signed(input_width-1 downto 0); Q: out signed(output_width-1 downto 0); Srst: in std_logic; clk: in std_logic ); end Canonical_Digital_Filter; -- описание структуры цифрового фильтра -- architecture Parallel_SADD_Line_Chains_RTL of Canonical_Digital_Filter is alias n: natural is Order; alias dw: positive is Input_Width; alias pw: positive is Internal_Width; alias qw: positive is Output_Width; type Path_Type is array(0 to n) of signed(pw-1 downto 0); constant AExt: signed(qw-1 downto 0):= (0 => '0', others => '1'); constant AMax: signed(qw-1 downto 0):= AExt ror 1; constant AMin: signed(qw-1 downto 0):= not AMax; constant BExt: signed(pw-1 downto 0):= (0 => '0', others => '1'); constant BMax: signed(pw-1 downto 0):= BExt ror 1; constant BMin: signed(pw-1 downto 0):= not BMax; signal Init_P: Path_Type; signal AMult: Path_Type; signal BMult: Path_Type; signal P: Path_Type; begin -- разбор коэффициентов фильтра -- Tbl: for i in 0 to n generate Tbl0: if i = 0 generate Init_P(0) <= (others => '0'); BMult(0) <= (others => '0'); Tbl0LR: if A_coef'left > A_coef'right generate AMult(0) <= A_coef(pw*(n+1)-1 downto pw*n); 164

5 end generate Tbl0LR; Tbl0RL: if A_coef'right >= A_coef'left generate AMult(0) <= A_coef(0 to pw-1); end generate Tbl0RL; end generate Tbl0; TblX: if i /= 0 generate TblXLR: if A_coef'left > A_coef'right generate Init_P(n-i+1) <= Init_Registers(pw*i-1 downto pw*(i-1)); BMult(n-i+1) <= B_coef(pw*i-1 downto pw*(i-1)); AMult(n-i+1) <= A_coef(pw*i-1 downto pw*(i-1)); end generate TblXLR; TblXRL: if A_coef'right >= A_coef'left generate Init_P(i) <= Init_Registers(pw*(i-1) to pw*i-1); BMult(i) <= B_coef(pw*(i-1) to pw*i-1); AMult(i) <= A_coef(pw*i to pw*(i+1)-1); end generate TblXRL; end generate TblX; end generate Tbl; -- реализация цепи элементов задержек -- Path: process (clk) is begin if Rising_Edge(clk) then if Srst = '1' then for i in 1 to n loop P(i) <= Init_P(i); else for i in 1 to n loop P(i) <= P(i-1); end process Path; -- реализация нерекурсивной части -- A: process (P) is variable SumExt: signed(qw downto 0); variable Sum: signed(qw-1 downto 0); variable ProdExt:signed(2*pw-1 downto 0); variable Prod: signed(pw-1 downto 0); begin Sum := (others => '0'); for i in 0 to n loop ProdExt := P(i) * AMult(i); Prod := ProdExt(2*(pw-1) downto pw-1); SumExt := resize(sum,qw+1) + resize(prod,qw+1); if SumExt > resize(amax, qw+1) then Sum := AMax; elsif SumExt < resize(amin, qw+1) then Sum := AMin; else Sum := resize(sumext, qw); Q <= Sum; end process A; -- реализация рекурсивной части -- B: process (D, P) is variable SumExt: signed(pw downto 0); variable Sum: signed(pw-1 downto 0); variable ProdExt:signed(2*pw-1 downto 0); variable Prod: signed(pw-1 downto 0); 165

6 begin Sum := resize(d,pw); for i in n downto 1 loop ProdExt := P(i) * BMult(i); Prod := ProdExt(2*(pw-1) downto pw-1); SumExt := resize(sum,pw+1) + resize(prod,pw+1); if SumExt > resize(bmax, pw+1) then Sum := BMax; elsif SumExt < resize(bmin, pw+1) then Sum := BMin; else Sum := resize(sumext, pw); P(0) <= Sum; end process B; end Parallel_SADD_Line_Chains_RTL; Список использованной литературы 1. Оппенгейм А.В. Цифровая обработка сигналов / А.В. Оппенгейм, Р.В. Шафер; пер. с англ.; под ред. С.Я. Шаца. М.: Связь, с., ил. 2. Суворова Е.А. Проектирование цифровых систем на VHDL / Суворова Е.А., Шейнин Ю.Е. СПб.: БХВ-Петербург, с.: ил. Получено Малахов Валерий Павлович д-р. техн. наук, профессор, академик, зав каф. КС Одесск. нац. политехн. ун-та Мельниченко Александр Юрьевич, магистр Одесск. нац. политехн. ун-та Бровков Владимир Георгиевич, канд. техн. наук, профессор Одесск. нац. политехн. ун-та 166