Во многих приложениях встраиваемых систем широко используются дискретные логические устройства, такие как серия 74HC. Преимущество этих логических устройств заключается в том, что они работают независимо от микроконтроллера и могут реагировать гораздо быстрее, чем программное обеспечение. Однако эти устройства увеличивают стоимость компонентов и требуют больше места на печатной плате.
Для решения этой проблемы многие микроконтроллеры Microchip включают в себя периферийное устройство, называемое CLC (Configurable Logic Cell) в микроконтроллерах PIC® или аналогичное периферийное устройство, называемое CCL (Configurable Custom Logic) в микроконтроллерах AVR®. Оба периферийных устройства реализуют пользовательскую, программно-определяемую логику, которая может выполняться независимо от ЦП. Другими словами, после настройки пользовательской логической функции ее работа не зависит от микроконтроллера.
Однако ограничением этих периферийных устройств является небольшой объем предлагаемой ими логики. Каждое CLC примерно эквивалентно одной таблице поиска (LUT), в то время как каждое CCL объединяет пару независимых таблиц поиска. Эти периферийные устройства являются мощными инструментами для разработки простых логических схем. Они объединяют сигналы и интегрируются с другими аппаратными периферийными устройствами. Например, все примеры подавления дребезга контактов аппаратной кнопки, генерации сигнала с помощью WS2812 и квадратурного декодирования требуют наличия этих периферийных устройств, но на микроконтроллере их всего несколько, что ограничивает сложность приложений.
семейство микроконтроллеров PIC16F13145 был добавлен новый тип логического периферийного устройства, называемый конфигурируемым логическим блоком (CLB) , как показано на рисунке 1. Следует отметить, что CLB не заменяет периферийные устройства CLC или CCL, и устройства могут представлять собой один или несколько CLC/CCL или CLB.

Рисунок 1. Блок-схема CLB. Блок-схема
CLB семейства PIC16F13145 состоит из четырех наборов логических групп, каждая из которых содержит восемь BLE. BLE в каждой логической группе соединены; каждая группа представляет собой два выхода GPIO и опциональное прерывание ЦП. При работе от напряжения 5,5 В типичная задержка распространения сигнала BLE составляет менее 6 нс. Все BLE используют одну и ту же тактовую структуру, источник которой настраивается программно вместе с опциональным делителем тактовой частоты. Блок-схема CLB может использовать один из внутренних источников тактовой частоты микроконтроллера или внешний источник.
Периферийное устройство инициализируется из памяти микроконтроллера и может управлять выводами непосредственно из самой структуры с помощью функции выбора периферийного вывода (PPS). PPS позволяет пользователю переназначать выводы ввода/вывода, используемые аппаратными периферийными устройствами, что значительно повышает гибкость проектирования. Например, если RA1 используется для тактового сигнала SPI, было бы выгоднее использовать RA6, и PPS переназначит этот вывод.
В состав CLB также входят 3-битный аппаратный таймер с декодированными выходами, детектор фронтов входных сигналов и 32-битный выходной регистр для отладки. В более сложных схемах в качестве входов для CLB могут использоваться другие выходы с независимых от ядра периферийных устройств микроконтроллера (CIP).
Поскольку CLB значительно сложнее, чем CLC или CCL, был разработан новый инструмент под названием CLB Synthesizer. CLB Synthesizer предоставляет графический интерфейс для настройки логики, как показано на рисунке 2. В дополнение к примитивной логике, инструмент также поддерживает логические блоки более высокого уровня, которые могут быть предоставлены пользователем или созданы им самим. Взаимодействие
с графическим инструментом в фоновом режиме генерирует модуль Verilog для синтеза. Если разработчик предпочитает писать собственный код Verilog или имеет готовый файл, его можно импортировать непосредственно в инструмент в качестве модуля.

Рисунок 2. Пример синтезатора CLB с фазовой манипуляцией (PSK).
Выход синтезатора CLB представляет собой ассемблерный файл, содержащий битовый поток для настройки CLB и исходный код для конфигурирования CLB в качестве периферийного устройства. Этот инструмент можно запустить через MPLAB® Code Configurator (MCC) или как онлайн-инструмент . MCC — это утилита генерации кода, которая позволяет пользователям настраивать и конфигурировать периферийные устройства микроконтроллера через визуальный интерфейс. После настройки аппаратных периферийных устройств MCC генерирует код инициализации и API устройства.
Во время выполнения битовый поток CLB загружается непосредственно из памяти программы с помощью встроенного оборудования. Одним из преимуществ этого решения является то, что вам нужно изменять конфигурацию CLB только во время выполнения программы, и процесс загрузки можно повторить с другим битовым потоком, хранящимся в памяти устройства.
Для демонстрации функциональности CLB в приложениях был создан ряд примеров использования. Рассмотрим два примера: преобразователь 7-сегментного дисплея и преобразователь SPI в WS2812. Эти примеры представляют собой функциональные блоки, которые можно скопировать и использовать как часть полного решения. Они были разработаны для демонстрации полезности этого периферийного устройства и его вклада в проектирование.
Первый пример — преобразователь 7-сегментного дисплея. 7-сегментными дисплеями можно управлять с помощью обычных выводов ввода/вывода, но стандартная реализация обычно требует программно-определяемой таблицы поиска для преобразования входного числа в правильный выходной шаблон для дисплея. В этой реализации CLB функционирует как аппаратная таблица поиска. Желаемый выходной символ (от 0 до F) загружается в регистр ввода CLB из программного обеспечения. Каждый выходной сегмент дисплея управляется таблицей поиска (LUT), которая сопоставляет входы и выходы.
Этот пример использовался внутри компании для создания новой платы управления для системы синхронизации. Оригинальный пользовательский интерфейс был разработан в 1980-х годах с использованием логики серии 74HC. Благодаря технологии CLB, один 20-контактный микроконтроллер может реализовать логику отображения и клавиатуры на плате, что значительно сокращает перечень необходимых компонентов. На рисунке 3 сравниваются обе технологии.

Рисунок 3. Сравнение оригинальной печатной платы и новой сборки. Этот пример разработан Джошем Бутом.
Ниже показан преобразователь SPI в WS2812. WS2812 — это однопроводной последовательный протокол для управления светодиодными матрицами с использованием широтно-импульсной модуляции. В данном случае аппаратное обеспечение SPI используется в качестве сдвигового регистра для данных, передаваемых на светодиоды, а CLB преобразует SCLK и SDO в требуемый выходной сигнал.
В примере это реализовано с использованием 3-разрядного одноканального счетчика, D-триггера с разрешением и 4-входовой таблицы поиска (LUT), как показано на рисунке 4. Ключ к этому решению заключается в источниках тактовой частоты для SPI и CLB. Тактовая частота SPI удерживается в высоком состоянии в режиме ожидания, меняет состояние по восходящему фронту и работает на выходной частоте WS2812 (800 кГц), в то время как тактовая частота источника CLB в десять раз выше (8 МГц). Когда SCLK переходит в низкое состояние, 3-разрядный счетчик начинает отсчет. Когда счетчик достигает значения 7 (0b111), он останавливается и остается на 0 до следующего низкого периода тактового импульса.
Выходной сигнал счетчика подается на 4-входовую таблицу поиска (LUT) вместе с сохраненной версией выходных данных. Это формирует шаблон выходных данных, который показан на правой стороне рисунка 4. После сброса счетчика его выходной сигнал будет следовать за 0, чтобы завершить цикл. Затем, при необходимости, следующий байт передается по аппаратному SPI, и цикл повторяется.

Рисунок 4. Блок-схема преобразователя SPI в WS2812, разработанного Петре Теодором-Эмилианом.
Оба примера демонстрируют преимущество интеграции дискретной логики в микроконтроллер. Аппаратные периферийные устройства разгружают ЦП от задач, что может улучшить время отклика и энергопотребление, а также уменьшить количество компонентов. Блок-схема позволяет разрабатывать сложные приложения, которые ранее было невозможно реализовать на микроконтроллере. В настоящее время блок-схема используется в семействе микроконтроллеров PIC16F13145и доступна через Microchip Direct или других дистрибьюторов.
Автор: Роберт Перкель, инженер по применению продукции в подразделении 8-битных микроконтроллеров компании Microchip Technology.
Роберт Перкель — инженер по прикладным разработкам в компании Microchip Technology, занимающийся созданием технического контента, такого как примечания к приложениям, статьи и видеоролики. Он также отвечает за анализ сценариев использования периферийных устройств и разработку примеров кода и демонстраций. Перкель учился в Виргинском политехническом институте, где получил степень в области компьютерной инженерии
