Делаем таймер или первый проект на плис. Сделай шаг к плис


Поле, засеянное Массивами Программируемых Калиток

Начинаем курс лекций о том, что такое программируемая логика и как начать ее использовать на благо себя и ближнего своего…

ПЛИС - так ЭТО называется по-русски. П рограммируемая Л огическая И нтегральная С хема.
По-буржуйски это звучит несколько иначе - FPGA - F ield of P rogrammable G ate A rrays. Дословно это переводится как "Поле, засеянное массивами программируемых калиток."
Если быть чуть серьезнее, можно назвать это "Матрица программируемых вентилей"

Что такое вентиль?
Совершенно верно, это в подвале такая хреновина на водопроводной трубе, которую если завинтишь, то весь дом останется без воды. Короче говоря, это то, что может закрываться и открываться.

Так вот, пусть для вас это будет откровением, но каждая микросхема состоит из вентилей. Правда, они не совсем похожи на то, что у вас и у меня в подвале. Но делают они то же самое - открываются и закрываются.

Вентиль - это элементарная составляющая любой цифровой микросхемы.

Даже самый навороченный супермегапроцессор состоит из вентилей. Их в нем много, очень много, просто целое море. Естественно, что в каждой микросхеме вентили соединены определенным образом. Собственно, от того, как они соединены, и зависит функциональность микросхемы.

В обычных микросхемах схема соединения вентилей задается при изготовлении, и в последствии ее изменить уже нельзя.
ПЛИС позволяет нам задавать эту схему самим, и изменять ее как нам заблагорассудится уже при "жизни" микросхемы. Достаточно лишь нарисовать схему на компютере и при помощи программатора прошить ее в микросхему ПЛИС.

Это в-общем.

На самом деле, все гораздо сложнее:) Смотрим на рисунок


Это есть одна макроячейка - Macrocell по-ихнему.
Каждая микросхема ПЛИС состоит из таких вот макроце… макроячеек. Как видно из схемы макроячейки, она состоит из блока Look-Up Table (LUT ) - "Просмотровой таблицы", а также, триггера с синхронными и асинхронными входами и некоторой логики по входам триггера. Программируется, собственно, только LUT. Как видите, у нее 4 входа и один выход. Этот выход может быть подан как непосредственно на выход макроячейки (Q0), так на синхронный вход данных триггера (D).

LUT - это ни что иное как ПЗУ на 16 1-битных ячеек. При подаче на входы LUT (D0…D3) некой комбинации цифровых сигналов, она воспринимает их как адрес и выдает на выход содержимое ячейки по этому адресу.

Вообще, любая схема из логических элементов, у которой 4 входа (или меньше) и один выход, может быть описана таблицей истинности в 16 строк. Например, возьмем вот такую несложную схему, и напишем для нее таблицу истинности:

Таблица истинности описывает логический уровень выхода схемы (Q) для всех возможных комбинаций сигналов на входах (D0…D3). Точно так же в LUT каждой комбинации входных сигналов (читай - каждому адресу ПЗУ) сопоставлен свой выходной сигнал. То есть, в LUT прошивается таблица истинности той схемы, которую мы хотим видеть на его месте. Вот так все просто!

Если схема содержит более 4 входов или более 1 выхода - используются LUT нескольких макроячеек.

clear="all">

Но самое главное - это триггер. Ведь, как вы знаете (а может, еще не знаете), все регистры, счетчики и многие другие элементы цифровой техники состоят именно из триггеров. Так вот, количество макроячеек в микросхеме ПЛИС определяет количество триггеров. И наоборот:) Так что, выбирая микросхему для какого-либо проекта, надо предварительньно прикинуть, сколько триггеров будет в схеме, и брать с запасом…

На рисунке чуть ниже изображена структурная схема микросхем серии EPM7000 фирмы Altera Эта картинка дернута из даташита https://www.altera.com/literature/ds/m7000.pdf Она относится к микросхемам EPM7032, EPM7064, EPM7096. Дык вот, последние две цифры в названии обозначают именно количество макроячеек в микросхеме.


Как видно из схемы, макроячейки объединяются в "блоки логических массивов" (LAB - Logic Array Block).
Эти блоки соединяются между собой через "программируемый массив внутренних соединений" - programmable interconnect array (PIA).
Кроме того, LAB"ы подключаются к выводам микросхемы через блоки управления ввода/вывода (I/O Control Block).

При прошивке, в каждый из блоков "зашивается" своя информация:
- В Макроячейках программируются LUT"ы,
- в PIA зашивается информация о внутренних межблочных соединениях,
- в блоки управления ввода/вывода (I/O Control Block) зашивается информация о подключениях к ногам микросхемы.

По-серьезному, "прошивка" ПЛИС называется "загрузка конфигурации".

А как вы думаете, чем мы будем загружать конфигурацию???
Ну конечно же, старым добрым Байт Бластером! :) Байт бластер - это штука универсальная:) О том, как его сделать, подробнейшим образом я рассказывал вот

Программируемая логическая интегральная схема (ПЛИС , англ. programmable logic device , PLD) - электронный компонент, используемый для создания цифровых интегральных схем. В отличие от обычных цифровых микросхем, логика работы ПЛИС не определяется при изготовлении, а задаётся посредством программирования (проектирования). Для программирования используются программаторы и отладочные среды, позволяющие задать желаемую структуру цифрового устройства в виде принципиальной электрической схемы или программы на специальных языках описания аппаратуры Verilog, VHDL, AHDL и др. Альтернативой ПЛИС являются: базовые матричные кристаллы, требующие заводского производственного процесса для программирования; ASIC - специализированные заказные БИС (большие интегральные схемы), которые при мелкосерийном и единичном производстве существенно дороже; специализированные компьютеры, процессоры (например, цифровой сигнальный процессор) или микроконтроллеры, которые из-за программного способа реализации алгоритмов медленнее ПЛИС. Некоторые производители ПЛИС предлагают программные процессоры для своих ПЛИС, которые могут быть модифицированы под конкретную задачу, а затем встроены в ПЛИС. Тем самым обеспечивается уменьшение места на печатной плате и упрощение проектирования самой ПЛИС.

Программируемые логические интегральные схемы (ПЛИС) появились полтора десятилетия назад как альтернатива программируемым логическим матрицам (ПЛМ). От последних ПЛИС отличаются как по архитектуре, так и по технологии изготовления.

ПЛМ представляет собой матрицу многовходовых (несколько десятков входов) логических элементов с триггерами, в которых перемычками программируются конституанты единиц дизъюнктивных нормальных форм функций этих элементов. Вначале перемычки выполнялись в виде пережигаемых тонких проводников. Теперь перемычки выполняются в виде МОП-транзистора с плавающим затвором, как в электрически перепрограммируемом ПЗУ, т.е. ПЛМ изготовляются по технологии флэш-памяти. Большие ПЛМ (CPLD) отличаются только тем, что несколько ПЛМ собраны на одном кристалле и объединены программируемым полем связей.

ПЛИС представляет собой матрицу маловходовых (от двух до пяти входов) логических элементов, триггеров, отрезков линий связи, соединяемых перемычками из полевых транзисторов. Судя по английскому названию - Field Programmable Gate Array (FPGA) - ПЛИС программируются изменением уровня электрического поля (field) в затворах этих транзисторов. В отличие, например, от LPGA - Laser Programmable Gate Array. Затворы всех "программирующих" полевых транзисторов подключены к выходам триггеров одного длинного сдвигового регистра, который заполняется при программировании ПЛИС. Некоторые из участков этого регистра могут также выполнять роль ячеек ПЗУ.

Прошивка обычно хранится в ПЗУ, стоящем рядом с ПЛИС и после включения питания или по сигналу сброса она автоматически переписывается в программирующий сдвиговый регистр ПЛИС. Этот процесс называется конфигурированием ПЛИС. Так как основу ПЛИС составляют триггеры, хранящие прошивку, то ПЛИС изготавливаются по технологии микросхем статического ОЗУ.

По сравнению с CPLD, ПЛИС выигрывают, во-первых, в неограниченном количестве перепрограммирований, во-вторых, в логической емкости, в том числе в удельной емкости вентилей на цент, в-третьих, в малом энергопотреблении.

Как правило, ПЛИС имеют на два - три порядка большую емкость в числе эквивалентных логических вентилей, чем CPLD и также как статическое ОЗУ, почти не потребляют энергии при отсутствии переключений. Кроме того, у ПЛИС на порядок выше надежность (ниже интенсивность отказов), чем у CPLD.

К недостаткам относят необходимость внешнего ПЗУ прошивки, генератора синхросерии. Но 8-выводовое ПЗУ занимает на плате значительно меньше места, чем сама ПЛИС с многими сотнями выводов. То же касается генератора синхросерии. программирование интегральный электронный

Много сомнений у пользователей возникает с защитой проекта от копирования. Действительно, прошивка ПЛИС хранится во внешнем ПЗУ, содержимое которого просто копируется. Но изменить или расшифровать прошивку, например, для скрытия авторства или восстановления схемы, практически невозможно, так как семантика битов в файле прошивки - секрет фирмы, а неосторожное изменение ее может вывести ПЛИС из строя. Если требуется защита, то загрузку программы выполняют с помощью внешней CPLD, автомат в которой обеспечивает защиту проекта. В ПЛИС новых поколений предусматривается шифрование прошивки, например, с помощью встроенного шифрователя DES с обеспечением сохранения ключа с помощью батарейки.

Программируемые логические интегральные схемы - ПЛИС являются одними из самых перспективных элементов цифровой схемотехники. ПЛИС представляет собой кристалл, на котором расположено большое количество простых логических элементов. Изначально эти элементы не соединены между собой. Соединение элементов (превращение разрозненных элементов в электрическую схему) осуществляется с помощью электронных ключей, расположенных в этом же кристалле. Электронные ключи управляются специальной памятью, в ячейки которой заносится код конфигурации цифровой схемы. Таким образом, записав в память ПЛИС определенные коды, можно собрать цифровое устройство любой степени сложности (это зависит от количества элементов на кристалле и параметров ПЛИС). В отличие от микропроцессоров, в ПЛИС можно организовать алгоритмы цифровой обработки на аппаратном (схемном) уровне. При этом быстродействие цифровой обработки резко возрастает. Достоинствами технологии проектирования устройств на основе ПЛИС являются:

  • · минимальное время разработки схемы (нужно лишь занести в память ПЛИС конфигурационный код);
  • · в отличие от обычных элементов цифровой схемотехники здесь отпадает необходимость в разработке и изготовлении сложных печатных плат;
  • · быстрое преобразование одной конфигурации цифровой схемы в другую (замена кода конфигурации схемы в памяти);
  • · для создания устройств на основе ПЛИС не требуется сложное технологическое производство. ПЛИС конфигурируется с помощью персонального компьютера на столе разработчика. Потому иногда эту технологию называют "фабрикой на столе".

Типичные области применения ПЛИС: цифровая обработка сигналов, пользовательская электроника, системы сбора данных, системы управления, телекоммуникационное оборудование, оборудование для систем беспроводной связи, компьютерное оборудование общего назначения.

Стремясь к достижению высоких технических характеристик и потребительских качеств своей продукции, разработчики электронных устройств используют специализированные ИС (СПИС). Их применение обеспечивает следующие преимущества:

  • - уменьшение габаритов устройства. Применение СПИС позволяет снизить количество ИС, уменьшить размеры печатных плат и тем самым сократить габариты всего устройства;
  • - повышение технических характеристик. Уменьшение количества ИС приводит к повышению системного быстродействия и сокращению потребляемой мощности;
  • - повышение надежности. Так как вероятность ошибки или поломки устройства прямо пропорциональна количеству ИС, надежность устройств, использующих СПИС, значительно возрастает;
  • - обеспечение защиты разработки. Так как скопировать устройство, содержащее СПИС, значительно сложнее (а иногда практически невозможно), чем устройство на стандартных компонентах, применение СПИС позволяет обеспечить авторские права разработчика;
  • - повышение гибкости модификации. Так как модификация СПИС не требует, как правило, переработки остальных узлов, переразводки печатных плат и т.д., возможности отладки и модификации устройства значительно повышаются.

В большинстве случаев в литературе выделяют следующие классы СПИС (ASIC)

  • - программируемые пользователем ИС - ПЛИС (PLD).
  • - масочно-программируемые ИС - базовые матричные кристаллы (БМК) или вентильные матрицы (Gate Arrays).
  • - ИС на стандартных ячейках (Standard Cells).
  • - полностью заказные ИС (Full Custom).

ПЛИС и БМК относятся к категории полузаказных ИС, поскольку внутрисхемная топология частично формируется при производстве самих ИС, а частично программируется в соответствии с требованиями потребителя.

Остальные СПИС являются заказными, т.к. вся топология схемы с учетом требуемых функций разрабатывается при производстве кристаллов.

Классификация СПИС приведена на рисунке, из которого видно, какое направление и раздел СПИС занимает ПЛИС:

Классификация СПИС

Написать эту статью заставили меня товарищи, которые очень хорошо (гораздо лучше меня) разбираются в контроллерах и применяют их везде, где ни попадя. Тем не менее, есть огромная куча приложений, когда применение ПЛИС не только оправдано, но и приводит к значительному упрощению системы и улучшению ее параметров. Сразу оговорюсь: в этой и, возможно, последующих статьях я рассматриваю ПЛИС только фирмы Xilinx не потому, что они мне заплатили, и даже не потому, что они лучше всех, просто исторически сложилось, что работаю я практически только с ними.

Итак, начнем с небольшого количества теории. ПЛИС делятся на две основных группы: CPLD (Complex Programmed Logic Device) и FPGA (Field Programmed Gate Array). CPLD - это обычно ПЛИС класса "эконом", т.е. имеют невысокую цену и довольно скудное количество ресурсов, особенно это заметно на триггерах. FPGA обычно подороже, содержат побольше ресурсов (простой логики - триггеров...) и, самое важное, в последнее время дополнительные "непростые" блоки, как, например, умножители, блоковую память, интерфейсные причиндалы (Ethernet, PCI-express...) и даже процессорные ядра PowerPC. Отдельно можно упомянуть серию Zinq от Xilinx - туда вообще ядра ARM запихали. Главным же отличием FPGA от CPLD является потребность в загрузке конфигурации при включении питания и, соответственно, внешней ПЗУ с конфигурацией. Даже семейство SPARTAN-3AN имеет на борту встроенную ПЗУ-шку, из которой и грузится.

Теперь самое главное: чем ПЛИС отличается от контроллера и когда их применять. Тут всё довольно просто: ПЛИС (берем те, что без наворотов) - это, по сути, мешок логики на одном кристалле, которую можно произвольно соединять: те самые триггеры, AND, OR и тому подобные примитивы, как, например, в серии К155 или 74НС. Контроллер же - это готовый процессор (пусть со скудным количеством команд), встроенная память, шины данных и команд, периферия и т.д. В общем-то говоря, из большой ПЛИС можно сделать маленький контроллер, но эта затея, по крайней мере, глупая. Итак, контроллер заточен под выполнение длинных цепочек команд, их циклического повторения, переключения с одной цепочки на другую и т.д., а ПЛИС заточена под выполнение простых логических операций и, что немаловажно, большого количества сразу (и даже на разных тактовых частотах).

Перейдем от теории к практике. Для начала нам хватит какой-нибудь микросхемы CPLD. Ресурсов мало, но для освоения самое оно. Я возьму XC95288XL в корпусе TQ144 (опять же просто оказалась в наличии), вообще рекомендую взять что-нибудь посвежее, например, из серии CoolRunner 2 . Чтобы получить готовое изделие (пусть даже минимально мигающее светодиодом), нам необходимо: спаять аппаратную часть (тут, я надеюсь, проблем не возникнет, а нюансы я упомяну), "написать" прошивку (в нашем случае, скорее, нарисовать) и зашить прошивку в микросхему. В общем, нам понадобятся софт, генерящий прошивку, и программатор. Софт (Xilinx ISE Webpack) качаем с официального сайта (правда, попросят зарегистрироваться), лицензия Webpack - свободная. Программатор можно сделать по схеме на рис.1 (под LPT-порт) или приобрести заводской USB-шный (в китайских интернет-магазинах встречал по цене порядка 50$, но сам не покупал). Более .

Рис. 1

После того, как мы припаяли ПЛИС на макетную плату, спаяли или купили программатор, скачали и установили пакет ISE Webpack (у меня версия 13.2), запускаем Project Navigator и создаем новый проект. Чтобы создать проект, выбираем File -> New Project, указываем имя проекта и куда его сохранить, также указываем тип исходника TOP-LEVEL (рис.2). Дело в том, что для ПЛИС не обязательно рисовать схему из триггеров и их соединений, можно, например, писать на языках высокого уровня (VHDL, Verilog) и совсем не обязательно в пределах одного проекта использовать что-то одно. Мы же пока используем только Schematic на всех уровнях.


Рис. 2
(рисунок кликабелен для увеличения, откроется в новом окне)

В следующем окошке (рис. 3) выбираем нашу микросхему (остальное поначалу не трогаем); в окне, появившемся после нажатия на кнопку "Next", любуемся на параметры созданного проекта, жмем "Финиш" - и готово: проект создан.


Рис. 3

Теперь надо, собственно, нарисовать схему: правым кликом на окошко с проектом и new sourсe (рис 4.), нарекаем этот исходник именем (это имя нашей схемы, их в проекте может быть много), выбираем опять-таки Schematic, жмем "Next", любуемся на параметры вновь создаваемого файла, жмем "Финиш" и получаем чистую схему.


Рис. 4
(рисунок кликабелен для увеличения, откроется в новом окне)

Начинается самое интересное: на панельке слева (не с самого краю) жмем кнопочку "add symbol" (рис. 5).


Рис. 5
(рисунок кликабелен для увеличения, откроется в новом окне)

И получаем еще левее список символов текущей библиотеки. Как добавлять, создавать, править библиотеки, разберемся потом (по мере необходимости). Сейчас нам важно выбрать необходимый символ. Так в верхнем окошке мы видим некий классификатор - фильтр, которым пользоваться не обязательно (ну зачем же пролистывать всякие триггеры и логические элементы, когда нам нужен счетчик).

Для примера рассмотрим следующую задачу: нужно максимально точно определить время задержки между передними фронтами 2-х импульсов, появляющихся на разных проводах, и слить это значение в контроллер по интерфейсу SPI. Всякое сходство задачи с темой "Повышение рабочей частоты МК" на одном из робототехнических форумов умышленное. Итак, на входе устройства 2 провода для импульсов и 3 провода для SPI контроллера. Добавляем еще вход тактирования (пока мы не знаем на какой частоте, можем только предположить, что не менее 70 МГц). Начинаем рисовать прошивку: нам нужны триггеры-защелки, которые будут "ловить" импульсы, счетчик времени, регистр сдвига (создавать их не надо, они есть библиотечные). Что такое триггеры и счетчики, описывать не буду, надеюсь, читатели "в теме" и проблем не возникнет, в противном случае придется писать еще несколько статей. Получили вот такую схему (рис. 6), как вы видите, необязательно тянуть провод от выхода символа до входа, достаточно просто обозвать цепь. Для обозначения внешних входов и выходов используем кнопку "Add I/O Marker".


Рис. 6
(рисунок кликабелен для увеличения, откроется в новом окне)

Когда схема готова, переходим на вкладку Design, и даблкликаем на Implement Design - начинаются всякие процессы (для начала не важно какие именно - главное, что всё вместе - это процесс перегонки исходника в прошивку). Когда всё отработает, смотрим на эрроры с варнингами: всё, что важно, исправляем, остальное оставляем. Например, не нужны нам выходы СЕО и ТС счетчика и остальные 15 бит параллельного выхода регистра сдвига тоже не нужны, а варнингами ругается. Если ругается эррорами на то, что мы так и хотим, значит, мы хотим чего-то не того. Если нас (и синтезатор) всё устраивает - любуемся дальше на репорты: сколько каких ресурсов израсходовано, какие тактовые частоты доступны... Если опять всё хорошо, то самое время просимулировать схему и убедиться, что она, собственно, работает согласно поставленной задаче. Симуляцию после проверки таймингов я предлагаю проводить по причине того, что иногда для получения нужной тактовой частоты приходится всю схему перетрясти, что, естественно, может сказаться на результате...

Итак, симуляция: на вкладке Design (в левой панельке) выбираем simulation (рис. 7).


Рис. 7
(рисунок кликабелен для увеличения, откроется в новом окне)

Внизу, в процессах, вместо процессов синтеза и разводки появился процесс Simulate Behavioral Model, даблкликаем на него - запускается симулятор, в котором мы видим наши сигналы (не только входные-выходные, но и промежуточные) (рис 8).


Рис. 8
(рисунок кликабелен для увеличения, откроется в новом окне)

Наводим на кнопочки курсор мышки, читаем комментарии к кнопочкам. Устанавливаем время шага симуляции (рис. 9) и начальные значения входных сигналов, сразу же настраиваем тактовые сигналы (не будем же мы каждые 5 нс симулировать и клок переключать).


Рис. 9
(рисунок кликабелен для увеличения, откроется в новом окне)

Шагая по времени путем манипуляций с входами и (при необходимости) с шагом симуляции, получаем временную диаграмму (рис. 10).


Рис. 10
(рисунок кликабелен для увеличения, откроется в новом окне)

Убеждаемся, что всё работает так, как задумано (или отлаживаем схему дальше), и переходим к следующему шагу - распределению выходов и входов по ножкам микросхемы. Для этого добавляем еще один файл-исходник (рис. 11), а именно Implementation Constraints File.


Рис. 11
(рисунок кликабелен для увеличения, откроется в новом окне)

Прописываем "распиновку микросхемы" (рис. 12), здесь же прописываем требования к тактовым частотам. И вот мы дошли до нюанса, связанного с тактовыми сигналами. Дело в том, что сигналы тактирования должны приходить на так называемые глобальные линии - линии, которые проходят через всю микросхему, остальные линии имеют локальный характер и от блока к блоку проходят через коммутационную логику. У микросхемы XC95288XL в корпусе TQ144 таких линий 3, и подключаются они к ногам 30, 32, 38. Остальные сигналы можно подключить к любым ножкам ввода-вывода (I/O).


Рис. 12
(рисунок кликабелен для увеличения, откроется в новом окне)

Снова даблкликаем Implement Design, ждем, читаем замечания на тему варнингов с эррорами и переходим на отчеты по распиновке (рис. 13) и таймингам (рис. 14); убеждаемся в том, что всё нас устраивает, и имеем счастье в виде файла %project_name%.jed.


Рис. 13
(рисунок кликабелен для увеличения, откроется в новом окне)


Рис. 14
(рисунок кликабелен для увеличения, откроется в новом окне)

Файл прошивки готов. Допустим, устройство тоже. Подключаем к ЭВМ JTAG кабель и даблкликаем на Configure Target Device. Запустится утилитка прошивки (Impact.exe), собственно, при изготовлении нескольких устройств для прошивки серии можно ограничиться запуском только ее одной. Создаём новый проект (это проект для программки-прошивалки), разрешаем ей автоматически найти программатор и подключенную микросхему, показываем файл прошивки и жмем Program. Ждем несколько десятков секунд, видим надпись о том, что всё хорошо, - устройство готово.

ВВЕДЕНИЕ

Обычно, когда кто-то видит функционирующую плату, всегда задают одни и те же вопросы: - Это Ардуино? - А как это работает без Ардуино?

Это не микроконтроллер, это даже не процессор, это ПЛИС. ПЛИС - это программируемая логическая интегральная схема , такая микросхема состоит из множества одинаковых блоков или макроячеек, каждый производитель по своему их называет, так у Xilinx это Slices (ломтики) у Altera - LogicElements (логические элементы). Эти блоки относительно простые, они могут выполнять роль нескольких логических элементов, быть маленькой таблицей поиска (LUT), содержать готовый сумматор, умножитель, блок цифровой обработки сигналов (DSP), в общем все что задумает производитель. Пользователь может по своему желанию расположить и настроить эти блоки как ему захочется, реализовав таким образом достаточно сложные цифровые схемы. На ПЛИС можно реализовать хоть микроконтроллер, реализовав например ту же Ардуино или процессор вашей собственной архитектуры, например не регистровый а стековый процессор, даже свою собственную ПЛИС можно реализовать на ПЛИС!

Из доступных бюджетных ПЛИС можно выделить двух основных производителей Altera и Xilinx, с их продукции можно начать свой путь освоения данных технологий. На мой взгляд лучше выбрать чипы компании Altera, так как их среда проектирования стабильно обновляется, а выбрав один популярный чип Xilinx XC3S500E вам придется довольствоваться устаревшей средой ISE 14.7 (хотя и там есть свои плюсы).

В иностранной литературе можно встретить сокращения для ПЛИС: FPGA и CPLD. CPLD (Complex Programmable Logic Device) - чипы с небольшим числом макроячеек, специализированных блоков и малым энергопотреблением. Большой проект не получится синтезировать для такого типа чипов, но и для них находят применение на практике, так у редкого микроконтроллера найдется, скажем 300 ножек. Такие чипы часто применяют в качестве интерфейсных систем, предобработчиков, расширителей ввода-вывода. FPGA (Field-Programmable Gate Array) - программируемая пользователем вентильная матрица (ППВМ), значительно более мощные чипы по сравнению с CPLD, но потребляющие больше энергии и стоящие значительно дороже. Для уменьшения затрат площади кристалла FPGA чипы могут содержать уже готовые функции, такие как блоки цифровой обработки сигналов (DSP блоки), встроенные процессоры, встроенная память. FPGA широко применяются для проверки и верификации проектов, в так называемой докремниевой проверке пригодности, тем самым уменьшая затраты и время перед выходом продукта. FPGA чипы могут быть переконфигурированы практически в любой момент времени, сейчас ведутся разработки, например в Intel, по совмещению архитектур обычного процессора и чипа FPGA. У Xilinx уже есть такие решения - Zynq, но о них мы пока не будет вести речь.

Разговор пойдет о более простых вещах, тем более ко мне в руки попал набор разработчика: Cyclone IV 4 FPGA Core Board и Altera USB Blaster Downloader PLD Development kit за 35$, приобретенный на AliExpress .

1 Демоплата Cyclone IV 4 FPGA Core Board, краткая характеристика

Рис. 1 - Демоплата Cyclone IV 4 FPGA Core Board

На плате (Рис. 1) установлен чип EP4CE6E22C8N, его характеристики:

Вид ресурса Краткое описание Количество
Logic elements (Les) Число логических блоков - ячеек, основная характеристика, по которым мы можем сравнивать «мощность» чипов, любая синтезированная логика будет затрачивать данные блоки 6,272
Embedded memory (Kbits) Встроенной памяти, пока для нас не важная характеристика 270
Embedded 18x18 multipliers Встроенных аппаратных умножителей, очень важный параметр в цифровой обработке сигналов, вся мощь ПЛИС раскрывается, когда несколько умножителей работают параллельно 15
General-purpose PLLs Узлов фазовой автоподстройки частоты, пока не важная характеристика, упрощает синхронизацию устройств, работающих на разных частотах 2
Global Clock Networks Количество частотных доменов, пока не важная характеристика 10
User I/O Banks Число раздельных пользовательских банков ввода-вывода, пока не важная характеристика 8
Maximum user I/O Число пользовательских пинов ввода-вывода, мы можем подключить любые устройства, как например к Ардуино 91

На плате установлено:

  1. Флэш память – при подаче питания ПЛИС будет сконфигурирована в реализацию во флеш памяти. Вы можете синтезировать свой проект и записать в эту флэш
  2. Кварц 25 Мгц – генератор опорной тактовой частоты, именно на этой частоте будут работать все наши проекты, наша ПЛИС может поддерживать до 10 таких каналов.
  3. Светодиоды – 10, кнопки – 2.
  4. Пины ввода-вывода 61 + 2 земля, 1 не соединен. Можно подключить разнообразные устройства. ЦАП-АЦП, акселерометры и гироскопы, символьный и графические дисплеи, как и у Ардуино.
  5. Питание через USB, или внешнее 5В.

В комплекте также идет программатор JTAG, Altera USB Blaster.

2. Среда Quartus II и наш первый проект

Для работы с данной ПЛИС нам нужно скачать официальную среду разработки - Quartus II Web Edition , она бесплатная. Заходим на официальный сайт http://dl.altera.com/15.0/?edition=web , на момент написания версия 15.0 самая новая, если вышла новее, скачиваем ее.

Выбираем:


Рис. 2 - выбираем необходимые продукты Altera

И жмем кнопку скачать (Download Selected Files). После чего нам предложат зарегистрироваться, регистрируемся, скачиваем и устанавливаем.

Создадим свой первый проект.

Запускаем Quartus, выбираем главное меню File -> New Project Wizard, появляется окно введения, жмем next. Далее нужно указать каталог для проекта и его имя, третье поля – имя верхнего модуля, попозже увидите, что это. Выбираем папку, куда хотим сохранить проект и придумываем имя, у меня test1.


Рис. 3 - окно мастра нового проекта

Жмем next, у нас спрашивают, пустой проект (empty project) или шаблон (Project template). Оставляем пустой, next. Дальше нас просят добавить существующие файлы, у нас ничего нет, поскольку мы только начинаем свой путь, жмем next.

Далее нам необходимо выбрать наш чип, это можно сделать в любое время. Выбираем как на рисунке, Family – Cyclone IV E, specific device selected in “Available devices” и выбираем наш чип EP4CE6E22C8N, он в самом начале. Если у вас другой, найдите свой, это важно . Жмем next.


Рис. 4 -

Появится окно - выбора средств проектирования, отладки, пока это пропускаем, нажимаем next и затем finish.


Рис. 5 - Окно « Assinments-Deice »

В окне выбираем пункт «Unused pins». Эта настройка определяет, что будет с неподключенными пинами. Это может быть важно, в своем проекте вы вряд ли используете все пины, а не подключенные могут быть на деле соединены с землей или питанием (ну мало ли, кто разводил плату). Если вы подадите единичку на заземленный пин, то он сгорит, поэтому нужно внимательно следить за этим.

По умолчанию неиспользуемые пины «As input tri-stated with weak pull-up» (пины для ввода, находятся в третьем состоянии с высоким импедансом, со слабой подтяжкой по питанию), можно оставить или выбрать «As input tri-stated». Про подтягивающий резистор можете прочитать на википедии https://ru.wikipedia.org/wiki/Подтягивающий_резистор . В цифровой технике может быть три состояния, логическая единица – это напряжение питания или высокий уровень, логический ноль – это когда вывод подключен к земле или низкий уровень и высокоимпедансное состояние. Высокоимпедансное состояние - это когда пин имеет очень высокое сопротивление и практически не влияет на провод, к которому подключен, такое состояние нужно, например, при организации шин, когда множество устройств подключены к одному проводу и не активные устройства не мешают работе.


Рис. 6 - Окно « Device and Pin Options » , Unused Pins

Подключаем это все в «Assignment Editor»


Рис. 7 - Вызов « Assignment Editor » из меню или панели

В появившемся окне делаем как у меня, ну или если совсем правильно, то согласно схеме вашей платы.


Рис. 8 - Assinement Editor

В колонке «To» вписываем имя входа или выхода. В колонке «Assignment Name» выбираем «Location». В колонке «Value» номер контакта микросхемы, согласно схемы платы (у меня номера пинов написаны прямо на плате).

Также нужно указать, что делать с кнопками, которые одной ногой подключены к земле, а другой ко входу чипа. При нажатии на ноге будет низкий уровень, а вот без нажатия, непонятно, нога чипа будет просто висеть в воздухе, что очень плохо. Нужно подтянуть к питанию вход чипа либо резистором на плате, либо боле элегантным способом в «Assignments Editor». В колонке «Assignment Name» выбираем «Weak Pull Up resistor» для группы key* (группа обозначается через звездочку).


Рис. 9 - Assignment Editor

Далее нужно создать описание модуля верхнего уровня, который будет работать непосредственно с ножками чипа, все остальные модули будут работать только с ним. В главном меню жмем New, и выбираем "Design Files-> Block Diagram/Schematic File".


Рис. 10 - Диалог новых файлов

В открывшемся окне выбираем инструмент «Pin Tool» и располагаем вход и выход (пины ввода и вывода) на диаграмме. Переименовываем вход как key, выход как led и соединяем их проводником. Сохраняем и нажимаем "Start Compilation".


Рис. 11 - Окно графического описания, выделены Pin Tool и Start Compilation

После компиляции у нас возникли предупреждения, пока игнорируем их, они касаются неподключенных пинов, отсутствия тактового сигнала и описания для «Timing Analyzer».

Подключаем демоплату и программатор, выбираем инструмент «Programmer». В окне должно значиться «USB-Blaster », если нет то нажимаем «Hardware Setup» и пытаемся разобраться почему нет, скорее всего не установлены драйвера, смотрим в устройства Windows, ищем неопределенные устройства, может с кабелем проблема. Если все хорошо нажимаем «Auto Detect» и выбираем наш чип.


Рис. 12 - Окно Programmer

Нажимаем двойным щелчком мыши в поле «File» и выбираем файл для записи на ПЛИС (находиться в папке output_files нашего проекта), ставим галочку в поле «Program / Configure», и нажимаем кнопку «Start».


Рис. 13 - Окно Programmer, наш чип уже сконфигурирован

Поздравляю с первой конфигурацией ПЛИС! Диод D1 должен светиться, при нажатии key1 должен гаснуть (так как кнопка замыкает ножку с землей), далее мы с этим что-нибудь сделаем)

6. ПРОГРАММИРУЕМЫЕ ЛОГИЧЕСКИЕ ИНТЕГРАЛЬНЫЕ СХЕМЫ (ПЛИС)

Программируемая логическая интегральная схема (ПЛИС, Programmable Logic Device, PLD) - электронный компонент,

используемый для создания цифровых интегральных схем. В отличие от обычных цифровых микросхем, логика работы ПЛИС не определяется при изготовлении, а задаётся посредствомпрограммирования (проектирования).

История развития ПЛИС начинается с программируемых постоянных запоминающих устройств (PROM – Programmable Read Only Memory). Первое время PROM использовались исключительно для хранения данных, позже их стали применять для реализации логических функций. Для реализации систем булевых функций с большим числом переменных были разработаны программируемые логические массивы ПЛМ (PLA – Programmable Logic Array) – наиболее традиционный тип ПЛИС, имеющий программируемые матрицы «И» и «ИЛИ». Примерами таких ПЛИС могут служить отечественные схемы K556PT1, PT2, PT21.

Построение PLA основано на том, что любая комбинационная функция может быть представлена в виде логической суммы (операция ИЛИ) логических произведений (операций И). Схема, реализующая комбинационную функцию, представлена на рис. 6.1.

Рис. 6.1. Схема построения PLA

Недостаток такой архитектуры - слабое использование ресурсов программируемой матрицы «ИЛИ», поэтому дальнейшее развитие получили микросхемы, построенные по архитектуре программируемой матричной логики (PAL - Programmable Array Logic) - это ПЛИС, имеющие программируемую матрицу «И» и фиксированную матрицу «ИЛИ» (рис. 6.2). К этому классу относятся большинство современных ПЛИС небольшой степени интеграции. В качестве примеров можно привести отечественные ИС КМ1556ХП4, ХП6, ХП8, ХЛ8, ранние разработки (середина-конец 1980-х годов) ПЛИС фирм INTEL, ALTERA, AMD, LATTICE и др.

Рис. 6.2. Схема построения PAL

Совершенствование ПЛИС привело к появлению программируемой макрологики. Они содержат единственную программируемую матрицу «И- НЕ» или «ИЛИ-НЕ», но за счёт многочисленных инверсных обратных связей способны формировать сложные логические функции. К этому классу относятся, например, ПЛИС PLHS501 и PLHS502 фирмы SIGNETICS, имеющие матрицу «И-НЕ», а также схема XL78C800 фирмы EXEL, основанная на матрице «ИЛИ-НЕ».

Вышеперечисленные архитектуры ПЛИС содержат небольшое число ячеек. К настоящему времени они морально устарели и применяются для реализации относительно простых устройств, для которых не существует готовых ИС средней степени интеграции. Для реализации алгоритмов цифровой обработки сигналов они непригодны.

Дальнейшее усовершенствование технологии производства привело к возможности реализации на одном кристалле нескольких PAL, объединенных программируемыми соединениями. Подобные архитектуры получили название сложных (комплексных) программируемых логических

ПРОГРАММИРУЕМЫЕ ЛОГИЧЕСКИЕ

ИНТЕГРАЛЬНЫЕ CХЕМЫ

устройств (CPLD – Complex Programmable Logic Device) – это ПЛИС,

Рис. 6.3. Схема макроячейки CPLD

Микросхемы этого типа могут быть использованы для создания нестандартных АЛУ, дешифраторов, мультиплексоров и др., т.е. таких устройств, где требуется логические функции многих переменных и небольшое количество триггеров. ПЛИС типа CPLD, как правило, имеют высокую степень интеграции (до 10000 эквивалентных вентилей, до 256 макроячеек).

К этому классу относятся ПЛИС семейства MAX фирмы ALTERA, семейства XC9500 и CoolRunner фирмы XILINX, а также большое число микросхем других производителей (Atmel, Vantis, Lucent и др.).

Другой тип архитектуры ПЛИС – программируемые вентильные матрицы (FPGA – Field Programmable Gate Array Logic), состоящие из конфигурируемых логических блоков (КЛБ) и коммутирующих путей – программируемых матриц соединений (рис. 6.4). Конфигурируемые логические блоки таких ПЛИС состоят из одного или нескольких относительно простых логических элементов, в основе которых лежит таблица перекодировки (LUT – Look-up table), программируемые мультиплексоры, триггер, а также цепи управления. Характерными для FPGA-архитектур являются блоки ввода/вывода (IOB – input/output blocks),

позволяющие реализовать двунаправленный ввод/вывод, третье состояние и т. п.

Рис. 6.4. Структура FPGA

Таких простых элементов может быть достаточно много, например, у современных ПЛИС ёмкостью 1 млн. вентилей и более число логических элементов достигает нескольких десятков тысяч. За счёт такого большого числа логических элементов они содержат значительное число триггеров, а также некоторые семейства ПЛИС имеют встроенные реконфигурируемые модули памяти. Это делает ПЛИС данной архитектуры весьма удобным средством реализации алгоритмов цифровой обработки сигналов, основными операциями в которых являются перемножение, умножение на константу, суммирование и задержка сигнала.

К FPGA классу относятся ПЛИС семейства Spartan, Virtex фирмы

XILINX; Fusion, M1 и M7 Fusion и др. фирмы ACTEL, а также семейства Cyclone, Stratix фирмы ALTERA, ПЛИС фирм Atmel и Vantis.

6.1. Особенности программирования ПЛИС

Конфигурационные данные для CPLD хранятся в энергонезависимой памяти внутри ПЛИС, поэтому нет необходимости их

ЦИФРОВЫЕ УСТРОЙСТВА И МИКРОПРОЦЕССОРЫ. ЧАСТЬ 2

ПРОГРАММИРУЕМЫЕ ЛОГИЧЕСКИЕ

ИНТЕГРАЛЬНЫЕ CХЕМЫ

перепрограммировать при включении. Программа для конфигурации FPGA хранится в распределённой энергозависимой оперативной памяти микросхемы, которая при выключении питания стирается, поэтому файл конфигурации хранится во внешней памяти, и при включении питания файл конфигурации загружается в память ПЛИС. Для хранения файла конфигурации используются, как правило, перепрограммируемое ПЗУ

(EPRM, EEPROM или FLASH).

При работе в подобных системах конфигурация схемы, которая должна быть получена «внутри» ПЛИС или алгоритм ее работы задается либо на текстовом языке описаний: VDHL (V ery high speed integrated circuitsH ardwareD escriptionL anguage – язык описания аппаратуры высокоскоростных интегральных схем), Verilog, ADHL (A lteraH ardwareD escriptionL anguage), напоминающем язык программирования высокого уровня (например Си); либо в графическом редакторе (в виде электрической схемы); либо при помощи блок-схем алгоритмов или графа состояний. Далее, все этапы работы, включая программирование или загрузку ПЛИС, выполняет автоматизированная система проектирования. Такие системы выпускают как все ведущие производители ПЛИС

(www.actel.com) ACTEL, (www.altera.com) ALTERA, (www.xilinx.com) XILINX, так и другие компании.

7. ЦИФРО-АНАЛОГОВЫЕ И

7.1 Принципы построения цифро-аналоговых преобразователей

Цифро-аналоговый преобразователь (ЦАП) представляет собой устройство для преобразования числовых кодов в эквивалентные им значения напряжения или тока. Схемы ЦАП строятся с использованием как цифровых, так и аналоговых элементов (операционных усилителей, ключей, резистивных матриц и т.п.). Большинство ЦАП, выполненных в виде интегральных схем, представляют собой устройства параллельного типа. Их работа основана на суммировании токов, величины которых пропорциональны весовым коэффициентам разрядов входного кода.

Схема 4-разрядного ЦАП приведена на рис. 7.1.

Рис. 7.1. Принцип построения схемы ЦАП

Она включает в себя резистивную матрицу, источник опорного напряжения U R , операционный усилитель и переключателиS 0 − S 3 .

Сопротивления резисторов матрицы таковы, что протекающие через резисторы токи соответствуют весовым коэффициентам разрядов числа

D = d 3 d 2 d 1 d 0 . Положение контактов переключателей зависит от значенийd i . Еслиd i = 0 , то ток, протекающий через резистор матрицы под действием опорного напряженияU R , замыкается на общий провод.

При d i = 1 ток резистора черезS i . течет к схеме суммирования

токов, выполненной на операционном усилителе с параллельной обратной связью по напряжению. Узел суммирования имеет практически нулевой

ЦИФРОВЫЕ УСТРОЙСТВА И МИКРОПРОЦЕССОРЫ. ЧАСТЬ 2

ЦИФРО-АНАЛОГОВЫЕ И

АНАЛОГО-ЦИФРОВЫЕ ПРЕОБРАЗОВАТЕЛИ

потенциал относительно общего провода, поэтому выходное напряжение можно записать следующим образом:

U 0= − R R 0 U R (2 3 d 3+ 2 2 d 2+ 2 1 d 1+ 2 0 d 0) .

Для увеличения разрядности ЦАП необходимо добавить соответствующее количество резисторов и переключателей.

Изготовление высокоточных резисторов для матриц сопряжено с трудностями, особенно в случае многоразрядных ЦАП (значения сопротивлений резисторов находятся в широком диапазоне - от R до

R 2 n − 1 , но требования к абсолютной точности установления

сопротивлений одинаковы для всех резисторов). Поэтому часто используют матрицу сопротивлений типа R − 2R (рис. 7.2).

Рис. 7.2. ЦАП с матрицей типа R – 2R

Весовые коэффициенты ступеней задаются последовательным делением опорного напряжения. Коэффициент ослабления каждой ступени матрицы равен двум. Выходное напряжение ЦАП равно:

U 0=− 16 R 0 R U R (2 3 d 3+ 2 2 d 2+ 2 1 d 1+ 2 0 d 0) .

В качестве электронных переключателей в схемах ЦАП часто используют МОП-транзисторы (рис.7.3). Находят применение также токовые ключи на биполярных транзисторах.

Рис. 7.3. 4-разрядный ЦАП:

а – фрагмент схемы с МОП-ключами, б – УГО

Примеры ИС:

К572ПА1 - 10-разрядный ЦАП. ИС содержит прецизионную матрицу типаR − 2R , ключи на МОП-транзисторах, входные усилителиинверторы, а также резистор для цепи обратной связи операционного усилителя. Для преобразования суммарного тока в напряжение необходимо подключение операционного усилителя. Требуется также внешний источник опорного напряжения.

ЦИФРОВЫЕ УСТРОЙСТВА И МИКРОПРОЦЕССОРЫ. ЧАСТЬ 2

ЦИФРО-АНАЛОГОВЫЕ И

АНАЛОГО-ЦИФРОВЫЕ ПРЕОБРАЗОВАТЕЛИ

7.2. Принципы построения аналого-цифровых преобразователей

Аналого-цифровой преобразователь (АЦП) представляет собой устройство для преобразования напряжения в соответствующий ему числовой код. Операции, выполняемые в процессе аналого-цифрового преобразования, описаны во введении . Ниже рассматриваются только схемотехнические аспекты построения АЦП.

По способу преобразования можно разделить АЦП на параллельные

и последовательные.

В параллельных АЦП входное напряжение одновременно сравнивается со всеми пороговыми уровнями шкалы квантования (рис. В.1. ). В результате сравнения находится ближайший уровень квантования, номер которого с помощью шифратора выражается в двоичном коде. Схема, представляющая собой 3-разрядный параллельный АЦП, показана на рис. 7.4. Источник опорного напряжения и набор резисторов позволяют сформировать напряжения, равные пороговым уровням.

Опорное напряжение в (2n -1) = 7 раз превышает значение шага квантованияU S . Если, например, входное напряжение находится в

диапазон от (4+ 1 2 ) U S до,(5+ 1 2 ) U S оно должно быть представлено

уровнем квантования, равным 5U S , и, соответственно, двоичным кодом 101. Формирование выходного кода происходит следующим образом. При заданном значенииU I на выходах шести компараторов устанавливаются

интервал дискретизации, выходные сигналы компараторов заносятся в регистр. Для формирования кода номера уровня квантования используется приоритетный шифратор. Выходной код шифратора определяется активизированным входом с наивысшим номером (в рассматриваемом

примере это X 5 ).

Рис. 7.4. Параллельный АЦП: а – схема, б - УГО

Пример ИС :

К1107ПВ1 - 6-разрядный параллельный АЦП. ИС изготавливается по биполярной технологии. Максимальная частота дискретизации - 20 МГц.

В последовательных АЦП входное напряжение последовательно уравновешивается набором (суммой) эталонов, значения которых кратны шагу квантования. Разновидностью таких преобразователей является АЦП

ЦИФРОВЫЕ УСТРОЙСТВА И МИКРОПРОЦЕССОРЫ. ЧАСТЬ 2

ЦИФРО-АНАЛОГОВЫЕ И

АНАЛОГО-ЦИФРОВЫЕ ПРЕОБРАЗОВАТЕЛИ

последовательного счета. Его работа основана на подсчете числа суммирований шага квантования, необходимого для получения значения входного напряжения. Схема АЦП последовательного счета показана на рис. 7.5. Она состоит из n -разрядного реверсивного счетчика, компаратора иn -разрядного цифро-аналогового преобразователя, включенного в цепи обратной связи.

Рис. 7.5. АЦП последовательного счета

С помощью компаратора сравниваются входное напряжение U I и выходное напряжение ЦАПU O . ЕслиU I > U O , то на выходе компаратора единичный уровень и счетчик работает в режиме суммирования тактовых импульсовC . Благодаря этому напряжениеU O стремится кU I . Когда они сравниваются,n -разрядный выходной кодD будет представлять входное напряжение АЦП. ЕслиU I < U O то счетчик работает в вычитающем режиме. Таким образом, напряжениеU O , а следовательно, и выходной код, отслеживают выходное напряжениеU I Для того, чтобы

предотвратить колебания сигнала реверсирования U /D после завершения процесса отслеживания, можно дополнить схему АЦП устройством

блокировки счетчика при U I − U O < U S 2 .

Схема АЦП, показанного на рис. 7.5, очень проста. Но при скачках входного напряжения процесс отслеживания может занять до 2n тактов (периодов импульсовC ). Ускорение преобразования достигается в АЦП поразрядного взвешивания. Его схема похожа на схему рис. 7.5, только счетчик заменяется регистром с устройством управления. Работа АЦП поразрядного взвешивания происходит следующим образом. Сначала все разряды регистра устанавливаются в нулевое состояние. Затем в старший разряд регистра вводится 1. При этом на выходе ЦАП

устанавливается напряжение U O = 2n − 1 U S , равное половине всего2 n − 2) ,

то d n − 2 = 1

Если нет,

d n − 2 = 0 .

После n

этапов процесс уравновешивания заканчивается и на выходе регистра устанавливается кодовая комбинация, представляющая входное напряжение АЦП. Для того, чтобы во время преобразования напряжение

U I не изменялось, на входы компаратора ставится схема выборкихранения.

Известны и другие последовательные АЦП, например, АЦП, работающие по методу интегрирования.

Примеры ИС :

К572ПВ1 - 12-разрядный АЦП поразрядного взвешивания. ИС изготавливается по КМОП-технологии. Используется с внешним операционными усилителями и источником опорного напряжения. Типовое время преобразования - 110 мксек.

К1113ПВ1 - 10-разрядный АЦП поразрядного взвешивания. ИС изготавливается по биполярной технологии и содержит все функциональные узлы АЦП, включая источник опорного напряжения и генератор тактовых импульсов. Выходные каскады выполнены по схеме с тремя состояниями. Время преобразования - не более 30 мксек.

Сопоставляя параллельные и последовательные АЦП, можно отметить следующее. Параллельные АЦП являются схемами быстродействующими, но их реализация требует больших аппаратурных затрат (6-разрядный АЦП содержит 64 компаратора). АЦП последовательного счета имеют самую простую схему, но работают сравнительно с низкочастотными напряжениями. АЦП поразрядного взвешивания занимают по показателям сложности и быстродействию промежуточное положение. Сочетание схем параллельных и последовательных АЦП позволяет построить большое число вариантов преобразователей с различными параметрами и разнообразными функциональными возможностями.

ЦИФРОВЫЕ УСТРОЙСТВА И МИКРОПРОЦЕССОРЫ. ЧАСТЬ 2

ЛИТЕРАТУРА

ЛИТЕРАТУРА

1. Гласман К.Ф., Покопцева М.Н. Цифровые устройства и микропроцессоры. Учебное пособие для студентов специальности 210312 «Аудиовизуальная техника». Часть 1. – СПб.: СПбГУКиТ, 2008.

2. Новиков Ю.В. Основы цифровой схемотехники. Базовые элементы и схемы. Методы проектирования. – М.: Мир, 2001.

3. Новиков Ю., Скоробогатов П. Основы микропроцессорной техники: Курс лекций. – М.: ИНТУИТ.РУ, 2003.

4. Белов А. Самоучитель по микропроцессорной технике. – М.: Наука и техника, 2003.

5. Новожилов О.П. Основы цифровой техники: Учебное пособие. – М.: Радио Софт, 2004.

6. Угрюмов Е. Цифровая схемотехника от логического элемента до перспективных БИС/СБИС с программируемыми структурами. – СПб.: БХВ – Петербург, 2004.

7. Бойко В. Схемотехника электронных систем. Цифровые устройства.

– СПб.: БХВ – Петербург, 2004.

8. Бойко В. Схемотехника электронных систем. Микропроцессоры и микроконтроллеры. – БХВ – Петербург, 2004.

9. Нарышкин А.К. Цифровые устройства и микропроцессоры. – М.: Изд. центр «Академия», 2004.

10. Уилкинсон Б. Основы проектирования цифровых схем. – Киев.: Вильямс, 2004.

11. Фрике К. Вводный курс цифровой электроники. – М.: Техносфера, 2004.

12. Опадчий Ю.А. Аналоговая и цифровая электроника. Учебник для ВУЗов. – М.: Горячая линия – Телеком, 2005.

13. Точчи Р. Уидмер Н. Цифровые системы. Теория и практика. – Киев.: Вильямс, 2004.

14. Алексеева Л.А., Буль М.П., Гласман К.Ф., Покопцева М.Н.. Методические указания по выполнению лабораторных работ для студентов специальности 201400 «Аудиовизуальная техника» по курсу «Цифровые устройства и микропроцессоры». – СПб.: СПбГУКиТ, 2002.