Разработка сигнального микропроцессора для реализации КИХ-фильтров с децимацией
Положения теории сигнальных микропроцессоров и КИХ-фильтров. Программируемая логическая интегральная схема (ПЛИС) и языки описания аппаратуры. Классификация ПЛИС, цифровая фильтрация. Цифровые процессоры обработки сигналов. Методы реализации КИХ-фильтров.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.04.2017 |
Размер файла | 2,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
(14)
Очевидно, что c помощью простейших операций удалось преобразовать исходный фильтр к предыдущему виду. Изобразим его схему:
Рисунок 14 - Эквивалентная схема КИХ-фильтра второго вида
2.1.3 Третий вид КИХ-фильтров
Рисунок 15 - Схема КИХ-фильтра третьего вида
Данный КИХ-фильтр состоит из трех блоков задержки, четырех умножителей с коэффициентами k, т, n, p, трех сумматоров, а также двух блоков децимации D = 1.
Аналогично предыдущему случаю постараемся вычислить разностное уравнение для данного фильтра.
Пусть на вход схемы в момент времени t поступает значение ai. На выходе 1 сумматора после блока децимации D, двух умножителей с коэффициентами k и n и блока задержки имеем:
На выходе второго сумматора в этот момент имеем:
Тогда на выходе третьего сумматора, т.е. на выходе схемы имеем:
(15)
Приведем схему КИХ-фильтра, которому соответствует данное разностное уравнение:
Рисунок 16 - Эквивалентная схема КИХ-фильтра третьего вида
Итак, в данном разделе приведены те виды фильтров, которые будут реализованы на базе разрабатываемого ЦСП. Для каждого вида выведены разностные уравнения, описывающие связь между входным и выходным сигналами фильтра.
2.2 Проектирование КИХ-фильтров в базисе ПЛИС фирмы Altera
Одной из распространённых операций цифровой обработки сигналов является фильтрация, для реализации которой могут быть использованы:
· программно-аппаратные ресурсы цифровых сигнальных процессоров;
· ПЛИС по архитектуре FPGA;
· различные операционные устройства: регистры, умножители, сумматоры и соответствующее управляющее устройство;
· программная реализация с использованием высокоуровневых языков.
Использование особенностей архитектуры ПЛИС FPGA позволяет проектировать компактные и быстрые КИХ-фильтры с использованием распределённой арифметики.
В состав мегафункции "Mega Wizard Plug-In Manger" САПР ПЛИС "Quartus II", входит утилита "FIR Compiler II v12.1", использование которой позволяет быстро спроектировать цифровой КИХ-фильтр исходя из заданных параметров. Быстрота и малая трудоемкость расчетов делает данное программное обеспечение незаменимым при проектировании КИХ-фильтров в базисе ПЛИС фирмы Altera.
Приведем несколько примеров реализации КИХ-фильтров с помощью данной утилиты, с целью оценки зависимости количества задействованных логических элементов ПЛИС от порядка разрабатываемого фильтра.
В качестве примера будем создавать КИХ-фильтры 64, 128 и 256 порядков со следующими характеристиками: Fсреза = 40 Гц, Fдискр = 400 Гц.
Замечание. В рассматриваемых примерах нас интересует исключительно количество элементов кристалла ПЛИС, задействованных для реализации КИХ-фильтра.
Опишем процесс создания КИХ-фильтра 64 порядка.
При запуске "FIR Compiler II v12.1" появляется окно управления утилитой.
Рисунок 17 - Окно управления утилитой "FIR Compiler II v12.1"
Реализация КИХ-фильтра с помощью данной утилиты происходит в 3 этапа. Во-первых, необходимо задать характеристики фильтра в пункте меню "Filter Specification".
Приведем основные настраиваемые параметры:
· Параметр "Filter Type" - задает тип создаваемого фильтра. Есть возможность задания обычного фильтра, фильтра с децимацией и фильтра с интерполяцией.
· "Interpolation Factor" - задает значение интерполяции. Для обычного фильтра значение интерполяции равно единице.
· "Decimation Factor" - задает значение децимации. Для обычного фильтра значение децимации равно единице.
Также в данном меню есть возможность настройки значений коэффициентов импульсной характеристики.
Параметр "Coefficient Data Type" предоставляет возможность задания знакового или беззнакового вида представления коэффициентов импульсной характеристики, а в пункте меню "Coefficient Bit Width" можно задать количество знаков после запятой. Здесь же можно увидеть значения импульсной характеристики КИХ-фильтра и его АЧХ.
В следующем пункте меню "Input/Output Options" происходит задание типов входных и выходных данных. Здесь же есть возможность задание ширины входной шины данных. Значение ширины выходной шины вычисляется автоматически.
Пункт меню "Implementation Options" дает возможность настройки основных параметров работы схемы. Например, здесь можно настроить характеристики тактового генератора.
По окончанию процесса настройки фильтра начинается процесс его создания, за ходом которого можно наблюдать в отдельном окне. В случае успешного создания фильтра выводится надпись "Generation Successfull".
После окончания процесса создания фильтра проведем компиляцию проекта, по окончанию которого будет выведена статистика, где отражается количество задействованных логических элементов. Отметим, что данный проект тестовый и содержит лишь один КИХ-фильтр, в то время как для решения конкретных задач возникает необходимость реализации целой цепочки фильтров, а также ряда сопутствующих блоков.
Рисунок 18 - Статистика, задействованных ЛЭ для реализации КИХ-фильтра 64 порядка
Для реализации проекта, включающего в себя один КИХ-фильтра 64 порядка, с помощью стандартной утилиты "FIR Compiler II v12.1" было задействовано 3 482 логических ячейки ПЛИС.
Далее приведем статистику, отражающую количество логических элементов, задействованных для реализации КИХ-фильтра 128 порядка.
Рисунок 19 - Статистика, задействованных ЛЭ для реализации КИХ-фильтра 128 порядка
Видно, что для реализации фильтра порядка 128, необходимо в два раза больше логических элементов по сравнению с реализацией КИХ-фильтра порядка 64.
Для реализации КИХ-фильтра 256-го порядка с помощью данной утилиты понадобилось уже 12 900 логических элементов.
Рисунок 20 - Статистика, задействованных ЛЭ для реализации КИХ-фильтра 256 порядка
Поясним полученные результаты.
Аппаратная реализация КИХ-фильтров связана с большими ресурсными затратами, вызванными многократно выполняемой операцией умножения. Система проектирования Quartus II, используемая для разработки устройств на основе ПЛИС фирмы Altera, включает библиотеку стандартных подпрограмм, предназначенных для выполнения основных математических операций. В частности, для реализации операции умножения используют подпрограмму lpm_mult. Эта подпрограмма позволяет синтезировать схему устройства, реализующего на аппаратном уровне умножитель двух двоичных чисел заданной разрядности. Очевидно, что чем больше разрядность сомножителей, тем сложнее устройство и при его реализации расходуются большие аппаратные ресурсы ПЛИС и возрастает время вычисления. Поэтому проблема сокращения аппаратных затрат и времени вычисления является весьма важной [9].
Проанализировав традиционную схему КИХ-фильтра (рисунок 12) и его разностное уравнение можно заметить, что количество используемых в данной схеме умножителей равно количеству коэффициентов импульсной характеристики. А значит при увеличении порядка фильтра будет пропорционально увеличиваться и количество задействованных умножителей. Это приводит к тому, что для создания сколь более реальной схемы, использующей фильтры высоких порядков (порядка 150 - 200), требуются все более мощные ПЛИС с большим количеством логических элементов на кристалле, что ведет в свою очередь к необоснованному удорожанию проекта.
В качестве решения проблемы сокращения аппаратных затрат ПЛИС в данном дипломном проекте выдвигается идея реализации ЦСП с одним умножителем. Такой подход позволит минимизировать количество логических элементов на кристалле для решения задачи построения КИХ-фильтров, что особенно актуально для реализации фильтров высоких порядков.
3. Разработка сигнального микропроцессора для реализации ких-фильтров с децимацией
3.1 Макетное проектирование на языке высокого уровня
Перед началом работы по созданию электронной схемы на языке описания аппаратуры Verilog HDL, с целью апробации метода функционирования ЦСП, а также для проектирования детальной архитектуры проекта - прежде всего общей структуры проекта, было проведено макетное проектирование на языке высокого уровня. В качестве инструментария разработки был выбран кроссплатформенный Фреймворк на языке программирования C++ - Qt версии 5.7.
Приведем ниже (рисунок 21) блок-схему создаваемой в рамках макетирования программы, а также проиллюстрируем назначение функциональных блоков данной схемы. Ознакомиться с полным кодом программы можно в пункте "Приложение А" данной работы.
Рисунок 21 - Блок-схема работы макета ЦСП
Как видно из блок-схемы, программа имеет простую структуру, состоит из одного исполняемого файла и ее функционал реализован всего тремя функциями: функцией "main", функцией "load" и функцией "process". В процессе написания программы учитывалась дальнейшая трансляция на язык описания аппаратуры, поэтому ее архитектура во многом использует подходы, используемые в Verilog HDL.
Изначально для построения цепочки КИХ-фильтров с децимацией был определен язык машинных кодов создаваемого процессора, состоящий из четырех команд:
· LOOK_WCOUNT <ЗНАЧЕНИЕ>;
· LOOK_SCOUNT <ЗНАЧЕНИЕ>;
· KOEFF <ЗНАЧЕНИЕ>;
· RETURN.
Команда LOOK_WCOUNT <ЗНАЧЕНИЕ> задает значение преддецимации. Так, если значение децимации равно N, то из исходной последовательности отсчетов a0, a1, a2, … будет браться каждый N-й отсчет. Также с этой команды начинается описание каждого нового КИХ-фильтра в цепочке.
Команда LOOK_SCOUNT <ЗНАЧЕНИЕ> задает значение постдецимации.
Команда KOEFF <ЗНАЧЕНИЕ> задает значение коэффициентов разностного уравнения, описывающего КИХ-фильтр, т.е. по сути коэффициенты импульсной характеристики. Если в фильтре используется m умножителей, то необходимо использовать m команд KOEFF <ЗНАЧЕНИЕ>, следующих друг за другом.
RETURN - последняя команда, которая ставится после задания всей цепочки КИХ-фильтров и сигнализирует о конце процесса конфигурации.
Отметим, что описание фильтров должно происходить с помощью использования приведенных выше команд в строгом порядке. Вначале конфигурации каждого нового фильтра должна стоять команда LOOK_WCOUNT <ЗНАЧЕНИЕ>, за ней должна идти LOOK_SCOUNT <ЗНАЧЕНИЕ>, а затем одна или несколько команд KOEFF <ЗНАЧЕНИЕ>. Команда RETURN ставится в самом конце после описания всех необходимых фильтров, составляющих цепочку.
Для того, чтобы сохранить понятную структуру программы на языке C++, было решено использовать эти команды и в процессе макетного проектирования. Вначале исполняемого файла, до функции "main", с помощью директивы #define создаются макросы, задающие необходимые для функционирования микропроцессора команды.
Затем создается структура "Command", содержащая префикс команды и ее значение, а далее происходит создание необходимых для функционирования программы блоков данных и регистров:
· "datas" - блок данных, отвечающий за хранение результирующих данных;
· "koeffs" - блок данных, отвечающий за хранение коэффициентов фильтров;
· "wcounts" - регистры, отвечающие за хранение счетчиков записи;
· "scounts" - регистры, отвечающие за хранение счетчиков старта;
· "wcountsinit" - регистры записи;
· "scountsinit" - регистры старта;
· "sizes" - регистры размеров;
· "queues" - регистры очередей;
· "subs" - регистр, отвечающий за хранение количества подпрограмм.
Необходимо отметить, что на этапе макетного проектирования нет принципиальной разницы между блоками данных и регистрами. Практически все эти объекты, за исключением регистра "subs", реализованы в виде контейнеров QVector, инициализированных данными типа int. Регистр "subs" же представлен переменной типа int. Различия в терминологии введены ради дальнейшей трансляции программного кода на язык описания аппаратуры, где реализация будет существенно отличаться.
В самом начале функции "main" происходит задание конфигурации цепочки КИХ-фильтров, а затем вызов функции "load", в процессе выполнения которой происходит чтение всех загруженных команд и поэтапная инициализация приведенных выше блоков данных и регистров.
В процессе выполнения подпрограммы создается несколько регистров, данные с которых будут использоваться в качестве адресов для обращения к ранее созданным блокам данных и регистрам:
· "nr" - регистр, отвечающий ха хранения номера подпрограммы;
· "dr" - регистр, отвечающий за хранение указателя на адрес обращения к блокам данных "datas" и "koeffs".
Регистры, отвечающие за хранение счетчиков записи и счетчиков старта, изначально инициализируются нулями. В регистры записи и старта заносятся значения исходя из кода программы на языке машинных кодов.
Блок данных, отвечающий за хранение результирующих данных, изначально также инициализируется нулями, а в блок данных, отвечающий за хранение коэффициентов фильтров заносятся действительные значения фильтров. В процессе выполнения данной функции происходит инициализация регистра "subs", куда заносится действительное количество подпрограмм.
После окончания выполнения функции "load" ход программы снова продолжается в функции "main", где происходит инициализация входных данных, которые будут поступать на вход цепочки КИХ-фильтров. В качестве примера входные данные в программе представлены в виде массива, содержащего последовательность чисел от 1 до 20. В реальности входные данные будут представлены в виде внешнего оцифрованного сигнала.
Далее элементы входной последовательности по очереди передаются на вход функции "process", которая по сути и представляет собой реализацию цифрового сигнального микропроцессора. В отличие от рассмотренных выше функций "main" и "load" ход выполнения функции "process" "нетривиален".
В ее начале происходит создание дополнительных регистров, используемых лишь в этой функции:
· "rr" - регистр, предназначенный для хранения результата фильтрации;
· "dr" - регистр, используемый для адресации к блоку данных с коэффициентами фильтров;
· "nr" - регистр, используемый для хранения номера подпрограммы;
· "ar" - регистр, используемый для хранения адреса подпрограммы.
Регистры "dr" и "nr" изначально инициализируются нулями.
Замечание. Структура данной функции также продумывалась с учетом ее дальнейшей трансляции на Verilog, где предполагалось использование конечного автомата. Так, в зависимости от рассматриваемого состояния, необходимо совершать определённые операции с содержимым блоков данных и регистров. В качестве состояний должны были выступать команды, которые используются для построения КИХ-фильтров. Однако приближенный анализ показал, что данных команд недостаточно для реализации конечного функционала, в связи с чем было решено добавить несколько дополнительных состояний: начальное состояния BEGIN_STATE и состояние записи данных WR_STATE. Именно с этим связано использование директивы #define внутри функции "process" для создания дополнительных макросов. В качестве начального состояния соответственно выступает состояние BEGIN_STATE.
Затем в процессе выполнения функции "process" начинается цикл обработки команд. Подобно тому, как это предполагается делать на языке описания аппаратуры с помощью конечного автомата, здесь обработка команд также происходит по "состояниям". Благодаря тому, что ранее был установлен единый порядок следования команд для описания КИХ-фильтров, можно сохранить линейную структуру цикла обработки команд без дополнительных проверок на соответствие обрабатываемого "состояния" действительно загруженным командам.
После начального состояния BEGIN_STATE идет безусловный переход на состояние LOOK_WCOUNT.
В состоянии LOOK_WCOUNT происходит обращение к "wcounts" по адресу номера подпрограммы и дальнейшая проверка данных, лежащих в регистре по этому адресу. Если проверяемое значение больше нуля, то оно декрементируется и выполнение функции "process" прекращается. Далее в функции "main" происходит вызов функции "process" уже со следующим значением входных данных. В случае, если проверяемое значение регистра "wcounts" равно нулю, то в него копируются данные, лежащие в регистрах записи "wcountsinit" по адресу номера подпрограммы, и идет переход на состояние записи WR_STATE.
Этот процесс требует дополнительных объяснений. Так как команда LOOK_WCOUNT задает значение децимации, то прекращение работы функции "process" с рядом входных значений фактически означает их отбрасывание. И лишь, когда данные, лежащие в регистре "wcounts" по адресу номера подпрограммы, равны нулю - входное значение будет пропущено далее "по конвейеру" для обрабатывания следующими командами.
В состоянии WR_STATE происходит запись данных из регистра "rr" в блок данных "datas". Для определения адреса, по которому будет происходить запись, используются данные с регистров "queues" по адресу номера подпрограммы.
Регистры очередей "queues" хранят адреса значений, которые будут обрабатываться следующими, для каждой подпрограммы. Поэтому после записи данных в "datas" происходит смещение очереди: содержимое регистров "queues" либо декрементируется, либо, если вся очередь была пройдена, в них записывается адрес последнего для данной подпрограммы значения. Затем содержимое регистра "rr" обнуляется и происходит безусловный переход на состояние LOOK_SCOUNT.
Ход выполнения программы в состоянии LOOK_SCOUNT очень похож на процесс ее выполнения в состоянии LOOK_WCOUNT. Здесь происходит обращение к "scounts" по адресу номера подпрограммы. Если проверяемое значение больше нуля, то оно декрементируется и выполнение функции прекращается. Далее происходит вызов функции "process" из функции "main" уже с новыми входными данными. В случае же, если проверяемое в LOOK_SCOUNT значение равно нулю, то в него копируются данные, лежащие в регистрах записи "scountsinit" по адресу номера подпрограммы, и идет переход на состояние KOEFF.
Таким образом можно говорить, что команда LOOK_SCOUNT также реализует некий вид децимации, а именно постдецимацию.
Основная задача программы в состоянии KOEFF - перемножение данных из двух блоков: "koeffs" и "datas" с последующим суммированием результата с содержимым регистра "rr". В качестве параметра, используемого для адресации к блоку "koeffs", выступают данные регистра "dr". Однако адресация к "datas" происходит сложнее: логика программы построена таким образом, что значению, лежащему в "koeffs" всегда соответствует значение из "datas". Однако в связи со смещением очереди, адрес записи к "datas" постоянно "плавает", поэтому для его вычисления необходимы дополнительные действия, которые приведены в приложении с исходным кодом программы (Приложение А).
После перемножения данных происходит выбор следующего состояния выполнения программы: если обрабатываемая подпрограмма последняя, то происходит переход на конечное состояние RETURN. В противном случае происходит переход на состояние LOOK_WCOUNT для начала работы следующего фильтра в последовательности. В состоянии RETURN происходит также выдача результирующих данных из регистра "rr" на выход программы.
Более подробно проследить логику программы можно, ознакомившись с листингом исходного кода в пункте Приложение А данной дипломной работы.
Итак, в процессе выполнения данного этапа проекта была разработана архитектура цифрового сигнального микропроцессора для реализации КИХ-фильтров с децимацией, также был продуман функционал основных блоков данных и регистров, был определен язык машинных кодов. На основании результатов данного этапа была сформирована схема устройства микропроцессора (см. Приложение Б)
На данной схеме вся архитектура ЦСП разделена на три основных функциональных блока: Загрузчик, Блок регистров, включающий в себя все необходимые для работы ЦСП блоки данных и регистров, а также Конвейер - блок, занимающийся обработкой команд ЦСП.
Загрузчик получает сигнал записи, а также команды на языке машинных кодов от внешнего устройства. Затем распределяет данные команды по функциональным блокам микропроцессора, производя тем самым необходимую начальную инициализацию.
Регистры и блоки данных на схеме структурно не вынесены в отдельную группу, однако функционально составляют собой Блок регистров. Данный функциональный блок включает в себя все используемые в программе блоки данных и регистры.
Конвейер - блок обработки команд микропроцессора. Получает внешний оцифрованный сигнал - внешние данные напрямую из внешнего устройства. С выхода конвейера получаем выходные данные после обработки всей последовательности фильтров.
Также на схеме вынесен в отдельный блок умножитель. На этапе макетного проектирования данная особенность ЦСП не была отражена, однако является основной для аппаратной реализации на языке описания аппаратуры.
По окончанию выполнения данного этапа работы были достигнуты следующие результаты:
· сформулирована общая логика работы сигнального микропроцессора;
· определен язык машинных кодов ЦСП;
· продуманы основные составные части ЦСП: блоки данных и регистры;
· реализована схема архитектуры устройства ЦСП;
· получен рабочий макет ЦСП.
3.2 Примеры реализации КИХ-фильтров с помощью макета ЦСП
Ранее отмечалось (пункт 2.1) что КИХ-фильтр описывается разностным уравнением вида:
где P - порядок фильтра, (n) - входной сигнал, y (n) - выходной сигнал, а bi - коэффициенты импульсной характеристики.
Приведем примеры реализации КИХ-фильтров с помощью макета ЦСП, а также докажем работоспособность разработанного подхода.
Пример 1. Реализовать КИХ-фильтр следующего вида:
Рисунок 22 - Структура КИХ-фильтра к реализации
Для описания фильтра с помощью разработанной программы необходимо знать:
· значение децимации на входе;
· значение децимации на выходе;
· коэффициенты импульсной характеристики.
Значение децимации на входе равно D1, а на выходе - D2. Также при рассмотрении фильтров данного вида в главе 2 отмечалось, что коэффициенты импульсной характеристики для разностного уравнения совпадают с коэффициентами фильтра.
Приведем пример его реализации на языке машинных кодов разработанного нами макета ЦСП.
LOOK_WCOUNT <D1>
LOOK_SCOUNT <D2>
KOEFF <n>
KOEFF <p>
KOEFF <q>
RETURN
Работоспособность данного макета ЦСП проще всего доказать математически, рассмотрев частный случай реализации данного фильтра и сопоставив результаты компьютерного моделирования результатам, полученном аналитически.
Пусть D1 = 1, D2 = 0, n = 1, p = 2, q = 3, тогда реализация фильтра на языке машинных кодов будет иметь вид:
LOOK_WCOUNT 1
LOOK_SCOUNT 0
KOEFF 1
KOEFF 2
KOEFF 3
RETURN
Рассмотрим ход работы такого фильтра при условии потактовой подачи на вход последовательности xi = [1 … 5], при условии прохождения первого значения без децимации.
В начальный момент времени на вход схемы поступает x1 = 1. Данное значение умножается на n = 1, а затем поступает на выход. В результате на выходе первого такта работы схемы имеем y1 = 1.
Так как на входе схемы стоит дециматор на 1, то на вход поступать будет каждый второй отсчет, поэтому x2 = 2 "отбрасывается". Следующим обрабатываемым значением будет x3 = 3. На входе первого сумматора будем иметь произведение x3 на n = 1, а также произведение предыдущего значения схемы x1 на p = 2. В итоге на выход схемы имеем y3 = 5.
Следующим в схему поступает x5 = 5. На выходе первого сумматора имеем 5 * 1 + 3 * 2 = 11. А на выходе второго сумматора и, соответственно, на выходе схемы, 11 + 1 * 3 = 14.
В итоге приведем разностное уравнение для данного фильтра для случая подачи на вход схемы последнего значения их входной последовательности xi = [1 … 5]:
А также представим результаты работы макета ЦСП:
Рисунок 23 - Результат работы макета ЦСП
На рисунке 23 представлен результат работы макета ЦСП для разных входных значений последовательности. Так, для значения x1 = 1, результат работы равен 1, для x3 = 3, результат работы равен 5, для x5 = 5, результат работы равен 14.
Таким образом можно говорить, что результаты расчета данного фильтра с помощью созданного макета ЦСП полностью соответствует результатам, полученным аналитически.
Пример 2. Реализовать КИХ-фильтр следующего вида:
Рисунок 24 - Пример КИХ-фильтра к реализации
Ранее при рассмотрении фильтров данного вида в главе 2 отмечалось, что разностное уравнения для данного вида фильтров имеет вид:
Приведем также эквивалентную схему данного фильтра:
Рисунок 25 - Преобразованный КИХ-фильтр
Очевидно, что коэффициенты данного фильтра имеют значения: 1, k+m, m*k.
Реализовать данный фильтр на базе созданного макета ЦСП языке машинных кодов можно следующим образом:
LOOK_WCOUNT D1
LOOK_SCOUNT 0
KOEFF 1
KOEFF k + m
KOEFF k * m
RETURN
Пример 3. Реализовать КИХ-фильтр следующего вида:
Рисунок 26 - Пример КИХ-фильтра к реализации
Ранее при рассмотрении фильтров данного вида в главе 2 отмечалось, что разностное уравнения для данного вида фильтров имеет вид:
Приведем схему КИХ-фильтра, которому соответствует данное разностное уравнение:
Рисунок 27 - Преобразованный КИХ-фильтр
Очевидно, что коэффициенты данного фильтра имеют значения: k, m+n, p.
Реализовать данный фильтр на базе созданного макета ЦСП языке машинных кодов можно следующим образом:
LOOK_WCOUNT 1
LOOK_SCOUNT 0
KOEFF k
KOEFF m + n
KOEFF p
RETURN
Таким образом мы проиллюстрировали, что функционала, реализованного на С++ макета цифрового сигнального микропроцессора, достаточно для реализации КИХ-фильтров приведенных выше видов. А значит можно утверждать, что данный подход построения архитектуры ЦСП, а также логику его работы, можно использовать в качестве основы реализации на языке описания аппаратуры Verilog.
3.3 Реализация микропроцессора на языке описания аппаратуры Verilog
Создание схем с помощью языков описания аппаратуры, в частности с использованием Verilog, связано с описанием простейших функциональных блоков, называемых модулями, и их последующим использованием в различных частях итоговой схемы, где они выполняют различные функции. Несколько небольших модулей могут быть объединены в один для реализации конечного функционала. Так, основываясь на функциональных блоках, необходимость наличия которых была установлена на этапе макетирования, созданная схема разделяется на модули, каждый из которых реализует конечный функционал:
· модуль "Loader", реализующий функционал "загрузчика";
· модуль "Conveyor", реализующий функционал "конвейера";
· модуль "DR", реализующий функционал регистров "dr";
· модуль "NR", реализующий функционал регистров "nr";
· модуль "SIZES", реализующий функционал регистров "sizes";
· модуль "QUEUES", реализующий функционал регистров "queues";
· модуль "SCounts_Init", реализующий функционал регистров "scountsinit";
· модуль "WCounts_Init", реализующий функционал регистров "wcountsinit";
· модуль "SCounts", реализующий функционал регистров "scounts";
· модуль "WCounts", реализующий функционал регистров "wcounts";
· модуль "Subs", реализующий функционал регистров "subs";
· модуль "Koeffs RAM", реализующий функционал блока данных "koeffs";
· модуль "Datas RAM", реализующий функционал блока данных "datas".
В данном разделе опишем режимы работы созданной схемы, а также приведем основные моменты реализации микропроцессора на языке описания аппаратуры Verilog. С итоговой схемой разработанного ЦСП можно ознакомиться в пункте "Приложение В" данного дипломного проекта.
Функционирование схемы начинается с этапа ее инициализации. На данном этапе с внешнего устройства происходит запись кодов команд, задающих параметры последовательности фильтров, в модули "Koeffs RAM" и "Datas RAM". Все регистры же инициализируются начальными значениями, которые были определены на этапе макетирования.
Затем начинается основной этап работы схемы - обработка команд. По окончанию выполнения данного этапа на выход схемы ЦСП O_DATA выдается результат фильтрации.
Замечание. Перед началом описания модулей схемы отметим, что все тактируемые элементы подключены к одному тактовому генератору.
На этапе макетирования была разработана архитектура ЦСП, а также определено функциональное назначение основных блоков данных и регистров, входящих в его состав, поэтому работа над созданием микропроцессора началась с реализации именно этих составных частей.
Анализ исходного кода разработанного макета показывает, что ряд регистров обладает схожим функционалом, а значит могут быть реализованы единожды в виде отдельного схемотехнического решения с его последующим использованием в различных частях итоговой схемы.
3.3.1 Реализация модуля "CounterWithInit"
Регистры "dr" и "nr" по сути реализуют одни и те же функции: в ходе работы макета ЦСП их содержимое инициализируется нулями и инкрементируется. Реализовать такой функционал на языке описания аппаратуры достаточно просто.
Рассмотрим модуль "CounterWithInit". Кроме входа с тактового генератора I_CLK, данный модуль обладает также: входом сигнала инкрементации I_INC, и входом сигнала инициализации I_INIT, а также выходом O_DATA. Ширина шины выхода задается с помощью параметра и может быть различным в зависимости от роли функционального блока в работе схемы. Также параметром передается значение инициализации. Приведем схему данного модуля:
Рисунок 28 - Модуль "CounterWithInit"
Схемотехнически данный модуль выполнен в виде регистра D-триггеров, а также двух мультиплексоров, необходимых для выбора входного сигнала. Если сигнал поступает на вход I_INIT, то регистр O_DATA в данном случае реализации инициализируется нулем. Если сигнал поступает на вход I_INС, то данный модуль начинает функционировать как счетчик, прибавляя на каждом такте работы единицу к выходному значению.
3.3.2 Реализация модуля "RegRam"
Регистры "wcounts", "scounts", "wcountsinit", "scountsinit", "sizes", "queues" также обладают одним и тем же функционалом: в режиме записи позволяют записывать в них данные по определенному адресу, а также получать данные, лежащие по определённому адресу, в режиме чтения. Т.е. по сути функционально напоминают память типа RAM.
Известно, что Quartus (среда для проектирования и отладки проектов на СБИС Altera) позволяет с помощью стандартных методов создавать готовые схемотехнические решения типа RAM объемом заданным пользователем. Однако из-за специфики функционирования RAM использовать ее для реализации данных регистров не оправдано. Дело в том, что процессы записи и чтения данных в автоматически созданный блок RAM занимают по одному такту. И если для записи значений этот такт действительно необходим, то продолжительность чтения данных из памяти в один такт существенно снижает скорость работы ЦСП. Именно поэтому было решено реализовать аналог RAM с использованием регистров хранения на базе D-триггеров для записи значений и простой комбинационной схемы на мультиплексорах для чтения значений по заданному адресу.
Модуль "RegRAM" состоит из двух функциональных частей: модуля "RegRAMWriteStoreModule" и модуля "RegRAMReadModule".
"RegRAMWriteStoreModule", помимо входа для подключения генератора тактовых импульсов I_CLK, обладает также адресным входом I_ADDRESS, входом данных I_DATA и входом для получения сигнала записи I_WREN. Размер шины данных задается параметром, и может быть различным в зависимости от роли функционального блока в работе схемы. Также в качестве параметра передается максимальное количество слов, которое способна вместить память, исходя из чего с помощью стандартной функции $clog2 (<ЗНАЧЕНИЕ>) (логарифм по основанию 2 с округлением вверх) вычисляется размер шины адреса. Также данный модуль обладает единственным выходом O_DUMP, размер шины которого равен произведению ширины шины данных на количество слов. Схемотехнически данный модуль выполнен в виде регистра D-триггеров, куда записываются значения, подаваемые на вход данных, а также целой "сети" мультиплексоров, служащих для определения адресов (номеров D-триггера) для записываемых значений.
"RegRAMReadModule" представляет собой комбинационную схему, предназначенную для получения данных из "RegRAMWriteStoreModule". Данный модуль обладает входом I_DUMP, куда подключен модуль "RegRAMWriteStoreModule", а также адресным входом I_ADDRESS, в зависимости от данных на котором происходит подключение входных ножек к выходным. Размер шины адреса вычисляется аналогично предыдущему модулю. Выход модуля O_DATA имеет размер ширины шины данных.
На рисунке 29 приведена схема устройства модуля "RegRAM", а на рисунке 30 - схема реализации модуля "RegRAMReadModule". Изобразить внутреннее устройство модуля "RegRAMWriteStoreModule" не представляется возможным в виду большого размера схемы.
Рисунок 29 - Модуль "RegRAM"
Рисунок 30 - Модуль "RegRAMReadModule"
3.3.3 Реализация модуля "RegRamWith2Ports"
Анализируя приведенную в Приложении Б блочную схему устройства ЦСП, можно заметить, что данные в ряд регистров, а именно в "wcounts", "scounts", "queues", записываются не только из загрузчика, но и из конвейера. Т.е. в режиме инициализации схемы в качестве шин адреса и данных, а также сигнала записи выступают сигналы с одних блоков, а в режиме обработки команд - другие. Таким образом возникла необходимость в реализации мультиплексоров выбора входящих сигналов. Данная задача была решена созданием нового модуля "RegRamWith2Ports". Приведем схему данного модуля:
Рисунок 31 - Модуль "RegRamWith2Ports"
Он состоит из трех мультиплексоров, подключенным ко входам модуля "RegRAM": мультиплексора шины адреса, мультиплексора шины данных, а также мультиплексора сигнала записи. В качестве управляющего сигнала выступает сигнал записи внешнего устройства, который дается только в режиме инициализации схемы.
3.3.4 Реализация модуля типа "RAM"
Рассмотрим далее реализацию модулей "Koeffs RAM" и "Datas RAM". На этапе описания процесса макетирования мы отмечали, что нет никакой принципиальной разницы в реализации блоков данных и регистров на языке высокого уровня и, что разница в терминологии введена в угоду реализации данных составных частей ЦСП на языке описания аппаратуры. Поясним данное утверждение.
Ранее отмечалось, что функционально регистры напоминают блоки памяти типа RAM. Однако из-за ограничений по скорости работы ЦСП использовать модули RAM для реализации регистров нецелесообразно.
Анализ исходного кода макета ЦСП показывает, что в процессе работы схемы нет необходимости в частом обращении к блокам данных "datas" и "koeffs". Именно поэтому для аппаратной реализации данных блоков были выбраны автоматически-созданные модули RAM, схема которых приведена на рисунке 32:
Рисунок 32 - Модуль типа "RAM"
Данный модуль обладает рядом неиспользуемых ножек, которые были подключены автоматически самой системой. К используемым нами относятся входы: "clock0", "wren_a", "data_a", "address_a", а также выход "q_a". Размер шин адреса и данных, как и объем памяти (максимальное количество слов, которые может вместить RAM) задаются пользователем на этапе создания модуля. Однако есть возможность вручную исправить код описания данного модуля, реализовав возможность задания данных величин параметрами, что и было сделано. Внутренне устройство данного модуля имеет сложную автоматически-сгенерированную структуру (см. Рисунок 33) и описание его работы приводить не будем.
Рисунок 33 - Внутреннее устройство модуля типа "RAM"
3.3.5 Реализация модуля "RamWuth2Port"
Аналогично регистрам "wcounts", "scounts" и "queues" в блок данных "datas" записываются значения как из загрузчика, так и из конвейера (см. Приложение Б). Для возможности подключения различных входных сигналов был создан модуль "RamWith2Ports", функционал которого аналогичен "RegRamWith2Ports".
Рисунок 34 - Модуль "RamWith2Port"
3.3.6 Реализация модуля "Subs"
Модуль "Subs" реализует функционал регистра "subs", который отвечает за хранение количества подпрограмм. Функционал данного модуля ограничивается возможностью записи в него значения с последующей возможностью считывания. На схемном уровне данный модуль выполнен в виде простого регистра из D-триггеров.
Рисунок 35 - Модуль "Subs"
Далее приведем описание оставшихся двух модулей: "Loader" и "Conveyor".
3.3.7 Реализация модуля "Loader"
Ознакомиться со схемой устройства модуля "Loader" можно в пункте "Приложении Г" данного дипломного проекта.
Данный модуль обладает следующими входами:
· I_PC_LOOK - вход, на который передаются с внешнего устройств данные команд LOOK_WCOUNT и LOOK_SCOUNT для записи в модули "WCountsInit" и "SCountsInit";
· I_PC_KOEFF - вход, на который передаются с внешнего устройства данные команд KOEFF, для записи в модуль "KoeffsRAM";
· I_PC_CODE - вход, на который с внешнего устройства передаются коды команд;
· I_PC_WRITEMODE - вход, на который подается сигнал режима записи. Данный сигнал находится в состоянии логической единицы до окончания записи;
· I_CLK - вход подключенный к тактовому генератору;
· I_PC_ENBL - вход, на который подается строб-сигнал от внешнего устройства.
Также модуль обладает рядом выходов, с наименованием которых можно ознакомиться в пункте "Приложении Г" данного дипломного проекта. Здесь приведем лишь их функциональное назначение.
Выходы данного модуля можно разделить на три группы:
1. Выходы, к которым подключены шины данных (O_WCOUNTS_INIT_DATA, O_SCOUNTS_INIT_DATA и др.).
2. Выходы, к которым подключены сигналы, разрешающие запись в модули (O_SIZES_ENBL, O_SCOUNTS_ENBL, O_WCOUNTS_ENBL и др.).
3. Выходы, к которым подключены сигналы инициализации и инкрементации модулей (O_DR_INC, O_NR_INC).
Отметим, что каждой шине данных соответствует свой сигнал типа "ENBL" (например, O_SIZES_DATA - O_SIZES_ENBL и тд), и все пары таких выходов подключены к соответствующим модулям в блоке регистров. По сути, в сочетании с единым для всей схемы сигналом I_CLK, такой подход означает, что соединение модулей из блока регистров с модулем "Loader" происходит с помощью последовательного интерфейса SPI. И основная задача загрузчика - своевременно давать сигналы, разрешающие запись значений в модули из блока регистров и сигналы инициализации и инкрементации модулей.
Кроме стандартных логических элементов "Loader" включает в себя модуль "CounterWithInit" на базе которого здесь реализован служебный регистр "SubSize", который необходим для вычисления размера подпрограммы, с последующей передачей этого значения на выход O_SIZES_DATA и записью данного значения в регистр "Sizes" по адресу номера подпрограммы.
3.3.8 Реализация модуля "Conveyor"
Модуль "Conveyor" имеет самую сложную структуру, приведем его описание. Ознакомиться со схемой реализации данного модуля можно в пункте "Приложение Д" данного дипломного проекта.
Основное функциональное назначение данного модуля - обработка команд, данные которых хранятся в блоке регистров. А значит для корректного функционирования данного модуля необходима возможность, как чтения данных из элементов блока регистров, так и записи новых значений в них.
Анализируя блочную схему устройства ЦСП видно, что на чтение конвейер принимает значения с регистров "sizes", "wcounts", "scounts", "queues", "wcountsinit", "scountsinit" и "subs". Запись же значений происходит в регистры "wcounts", "scounts" и блок данных "datas".
Перечислим основные функциональные блоки данного модуля:
· Модуль "State" является конечным автоматом;
· Модуль "DR" реализует функционал регистра "dr";
· Модуль "AR" реализует функционал регистра "ar";
· Модуль "NR" реализует функционал регистра "nr";
· Модуль "RR" реализует функционал регистра "rr";
· Модуль "CommandProcessingSelector" включает в себя комбинационную схему обработки команд;
· Модуль "DatasAddresSelector" включает в себя комбинационную схему выбора адреса для обращения к модулю "Datas" из блока регистров.
Вся обработка команд в конвейере происходит по состояниям конечного автомата "State". Ознакомиться со схемой его переходов можно в пункте "Приложение Д" данного дипломного проекта. В зависимости от текущего состояния выполняются различные действия.
На начальном состоянии BEGIN_STATE происходит загрузка входных данных с входа I_DATA в модуль "RR" и подаются сигналы на входы I_INIT модулей "DR" и "NR". На следующем такте данные модули будут инициализированы заданными начальными значениями (в данном случае нулями). Затем происходит переход на состояние LOOK_WCOUNT.
На состоянии LOOK_WCOUNT происходит сравнение данных на входе I_WCOUNTS с нулем. В случае неравенства с помощью комбинационных схем модуля "CommandProcessing" происходит декрементация данных и "отправление" их на выход O_WCOUNTS с одновременной подачей сигнала O_WCOUNTS_ENBL. На следующем такте работы декрементированное значение будет записано в модуль "WCounts" блока регистров по адресу номера подпрограммы, который берется с выхода O_NR_DATA модуля "Conveyor". Затем происходит переход на состояние BEGIN модуля "State".
В случае равенства данных на входе I_WCOUNTS нулю, с помощью комбинационных схем модуля "CommandProcessing" происходит перенаправление данных с входа I_WCOUNTS_INIT на выход O_WCOUNTS, с одновременной подачей сигнала O_WCOUNTS_ENBL. На следующем такте работы данное значение будет записано в модуль "WCounts" блока регистров по адресу номера подпрограммы, который берется с выхода O_NR_DATA модуля "Conveyor". Затем происходит переход на состояние WR_STATE модуля "State".
В состоянии WR_STATE происходит запись значений модуля "RR" в модуль "DATAS", по адресу, который вычисляется с помощью комбинационных схем модуля "DatasAddresSelector". Результат вычислений подается на выход модуля O_DATAS_ADDR.
Также происходит сравнение данных с входа I_QUEUES с данными с выхода модуля "AR". В случае их равенства на выход O_QUEUES_DATA подается результат работы комбинационной схемы модуля "CommandProcessing", а также дается сигнал O_QUEUES_ENBL. В противном случае происходит декрементация данных с входа I_QUEUES и последующее перенаправление декрементированных значений на выход O_QUEUES_DATA с подачей сигнала O_QUEUES_ENBL.
На этом же состоянии подается сигнал I_INIT на модуль "RR", а затем происходит переход на состояние LOOK_SCOUNT.
Функционирование схемы на состоянии LOOK_SCOUNT напоминает процесс ее работы на состоянии LOOK_WCOUNT. Аналогично происходит сравнение данных на входе I_SCOUNTS с нулем. В случае неравенства с помощью комбинационных схем модуля "CommandProcessing" происходит декрементация данных и "отправление" их на выход O_SCOUNTS с одновременной подачей сигнала O_SCOUNTS_ENBL. На следующем такте работы декрементированное значение будет записано в модуль "SCounts" блока регистров по адресу номера подпрограммы, который берется с выхода O_NR_DATA модуля "Conveyor". Затем происходит переход на состояние BEGIN модуля "State".
В случае равенства данных на входе I_SCOUNTS нулю, с помощью комбинационных схем модуля "CommandProcessing" происходит перенаправление данных с входа I_SCOUNTS_INIT на выход O_SCOUNTS, с одновременной подачей сигнала O_SCOUNTS_ENBL. На следующем такте работы данное значение будет записано в модуль "SCounts" блока регистров по адресу номера подпрограммы, который берется с выхода O_NR_DATA модуля "Conveyor". Затем происходит переход на состояние KOEFF модуля "State".
На данном состоянии модуля "State" происходит операция перемножения данных с модулей "Koeffs RAM" и "Datas RAM" с помощью обращения к вынесенному умножителю.
На этапе описания процесса создания макета ЦСП на языке высокого уровня было указано, что для корректного обращения к блоку данных "datas" на данном состоянии необходимо вычисление величины смещения очереди. В пункте "Приложение А" с исходным кодом макета ЦСП можно найти формулу расчета данной величины. Здесь же опишем аппаратный способ расчета корректного адреса для обращения к модулю "Datas RAM".
Во-первых, необходимо вычислить смещение очереди. Для этого реализуется комбинационная схема с использованием выхода модуля "AR", входов конвейера I_SIZES и I_QUEUES, а также двух сумматоров. Выход полученной комбинационной схемы подается на вход I_Z модуля "DatasAddresSelector", где происходит окончательный расчет адреса для обращения к модулю "Datas RAM".
В данном модуле с помощью цепи мультиплексоров сравнивается разность значений с выходов модулей "DR" и "AR" с величиной на входе I_Z. В случае, если разность меньше, то на выход O_DATAS_ADDR подается результат одной комбинационной схемы, если же разность больше - другой. Проследить логику работы данных комбинационных схем можно в пункте "Приложение Ж", где приведена схема данного модуля.
В итоге на входы умножителя подаются сигналы с выходов модулей "KoeffS RAM" и "Datas RAM", где происходит перемножение величин, а результат, через вход I_MULTIPLIER модуля "Conveyor", поступает на вход I_MULTIPLIER модуля "RR", где суммируется с его содержимым.
На этом же состоянии происходит подача сигнала на вход I_INC модуля "DR".
Следующее состояние программы выбирается исходя из того, есть ли еще коэффициенты фильтров к обработке. В случае работы с последним коэффициентом последнего фильтра происходит переход на состояние RETURN. Если следующая команда для обработки LOOK_WCOUNT <ЗНАЧЕНИЕ>, то происходит переход на состояние LOOK_WCOUNT, а также подается сигнал на вход I_INC модуля "NR". Если же следующая команда обработки KOEFF <ЗНАЧЕНИЕ>, то состояние автомата не меняется.
Состояние RETURN - последнее, и на нем содержимое модуля "RR" подается на выход конвейера O_DATA. Данный выход является результирующим, на него подается результат работы всей схемы.
3.4 Итоговая компиляция проекта
После создания схемы проведем финальную компиляцию полученного проекта для оценки количества задействованных логических элементов ПЛИС и сравним результаты разработанного нами подхода с результатами работы стандартной утилиты "FIR Compiler II v12.1".
Для корректного сравнения результатов проведем компиляцию три раза: выделим размеры блоков данных равным 64, 128 и 256 для хранения значений коэффициентов фильтров 64, 128 и 256 порядка соответственно.
Рисунок 36 - Статистика задействованных ЛЭ для реализации КИХ-фильтра 64 порядка
Рисунок 37 - Статистика задействованных ЛЭ для реализации КИХ-фильтра 128 порядка
Рисунок 38 - Статистика задействованных ЛЭ для реализации КИХ-фильтра 256 порядка
Сведем полученные двумя способами результаты в итоговую таблицу (Таблица 2) и по ее результатам построим график зависимости числа ЛЭ от порядка разрабатываемого фильтра (рисунок 40).
Таблица 2
Порядок КИХ-фильтров |
Количество ЛЭ |
|
64 |
703 |
|
3482 |
||
128 |
764 |
|
6579 |
||
256 |
1047 |
|
12900 |
В данной таблице выделены результаты реализации КИХ-фильтров с помощью разработанного ЦСП. Для более точного определения вида графика числа ЛЭ от порядка реализуемого фильтра с помощью разработанного ЦСП, реализуем также на базе ПЛИС схему для хранения коэффициентов фильтра 512 порядка (рисунок 39).
Рисунок 39 - Статистика задействованных ЛЭ для реализации КИХ-фильтра 512 порядка
Рисунок 40 - График зависимости числа ЛЭ от порядка разрабатываемого фильтра
Анализ результатов, полученных с помощью стандартной утилиты "FIR Compiler II v12.1", демонстрирует линейный рост числа ЛЭ необходимых для реализации КИХ-фильтров, что приводит к задействованию 12 900 ЛЭ ПЛИС в случае создания фильтра 256-го порядка.
По сравнению со стандартной утилитой, разработанный макет ЦСП требует куда меньшее количество ЛЭ ПЛИС для реализации схем КИХ-фильтров. Анализируя приведенный на рисунке 39 график видно, что рост числа ЛЭ имеет нелинейный вид. С ростом порядка реализуемого фильтра увеличивается разница в количестве задействованных ЛЭ.
Таким образом мы наглядно продемонстрировали основное преимущество разработанного подхода реализации КИХ-фильтров высоких порядков на базе реализованного ЦСП.
Замечание. Таких результатов удалось достичь за счет использования лишь одного блока умножителя для реализации всего КИХ-фильтра. Однако, следует отметить, что использование данного подхода актуально в случае, если частота дискретизации входного сигнала меньше частоты работы ПЛИС. Иначе применение разработанного ЦСП для реализации КИХ-фильтров влечет за собой неминуемую потеряю скорости обработки сигналов.
4. Экономическое обоснование
В данном разделе необходимо представить расчет рыночной стоимости и себестоимости разработки [10].
4.1 Расчет трудоемкости НИР
Расчёт трудоемкости выполненных работ по категориям работников, представлены в табличной форме (таблица 3). Перечислены этапы разработки дипломного проекта, исполнители разработки, а также трудоемкость работы.
Таблица 3
№ |
Наименование этапов |
Исполнители |
Трудоемкость, чел-дн. |
|
1 |
Выдача задания на дипломный проект |
руководитель |
1 |
|
2 |
Изучение литературы |
инженер |
5 |
|
3 |
Консультация по выбранной тематике |
консультант |
1 |
|
4 |
Проведение макетного проектирования на языке программирования высокого уровня |
Подобные документы
Цифровая система обработки сигналов. Дискретная и цифровая цепи. Расчёт нерекурсивных и рекурсивных цифровых фильтров общего вида. Схемы и характеристики фильтров с линейной фазой. Методы взвешивания, частотной выборки и билинейного преобразования.
контрольная работа [384,3 K], добавлен 11.09.2015Применение схемы фильтра второго порядка Саллена-Ки при реализации фильтров нижних частот, верхних частот и полосовых. Возможность раздельной регулировки добротности полюсов и частот среза как главное достоинство звеньев фильтров по заданной схеме.
реферат [614,8 K], добавлен 21.08.2015Определение и классификация частотных фильтров. Область применения, преимущества и передаточная функция активных фильтров верхних частот. Методы каскадной и непосредственной реализации функции цепи, резонаторное использование операционных усилителей.
курсовая работа [69,9 K], добавлен 27.08.2010Исследование теоретических основ математического аппарата теории цифровой обработки сигналов. Расчет параметров рекурсивных цифровых фильтров с использованием средств вычислительной техники. Методы проектирования алгоритмов цифровой обработки сигналов.
контрольная работа [572,7 K], добавлен 04.11.2014Особенности синтеза фильтров радиотехнической аппаратуры. Понятие, назначение, применение, типы и принципы проектирования активных фильтров. Анализ проблемы аппроксимации активных фильтров. Общая характеристика и схема фильтра низких частот Баттерворта.
курсовая работа [197,4 K], добавлен 30.11.2010Субполосное кодирование и преобразование Габора. Дискретное косинусное и ортогональное перекрывающееся преобразования. Преимущество преобразования при помощи блоков фильтров перед преобразованием Фурье. Синтез фильтров в трансверсальной реализации.
курсовая работа [2,9 M], добавлен 28.08.2013Общее понятие и классификация сигналов. Цифровая обработка сигналов и виды цифровых фильтров. Сравнение аналогового и цифрового фильтров. Передача сигнала по каналу связи. Процесс преобразования аналогового сигнала в цифровой для передачи по каналу.
контрольная работа [24,6 K], добавлен 19.04.2016Разработка расширителя портов ввода-вывода и особенности его применения. Программируемая логическая интегральная схема CPLD. Плис CoolRunner-II, главные функции. Листинг модулей на языке Verilog. Временная диаграмма, внутреннее содержание модуля.
курсовая работа [1,9 M], добавлен 26.01.2013Понятие и классификация фильтров, их разновидности по типу частотных характеристик, этапы их проектирования. Расчет и реализация пассивных LC-фильтров. Преобразование ФНЧ в ФВЧ. Исследование влияния на АЧХ и ФЧХ при изменении сопротивления нагрузки.
курсовая работа [777,3 K], добавлен 22.12.2013Предпосылки к развитию ПЛИС. Сравнительный анализ ПЛИС, СБИС и микроконтроллеров. Обзор аналогов: компараторы LM311 и LM339, на операционных усилителях, Р300Х, сравнительные устройства. Создание схемы устройства. Сравнение мировых производителей ПЛИС.
курсовая работа [2,0 M], добавлен 11.07.2011