IP-блок для реализации функций управления в составе СБИС класса «система на кристалле»
При проектировании современных систем на кристалле широко используются готовые модули (IP-блоки), реализующие достаточно сложные функции преобразования и обработки поступающих данных, межмодульного обмена и обеспечения интерфейса с внешними устройствами. В статье описывается программируемый контроллерный IP-блок, позволяющий выполнять типовые функции управления процессами и объектами. Разработанная синтезируемая модель IP-блока содержит 8-разрядное процессорное ядро, программно совместимое с микроконтроллерами семейства AVR, и базовый набор периферийных модулей: таймеры, параллельные порты, асинхронный последовательный интерфейс. Проведенная верификация модели путем аппаратной реализации на базе ПЛИС типа FPGA подтвердила ее работоспособность и достаточно высокие технические [[характеристики (тактовая частота до 73 МГц)]].
В настоящее время в электронной промышленности наблюдается значительный рост количества проектов, реализуемых в виде систем на кристалле (СнК). По данным компании Gaertner Dataquest, ежегодный объем продаж этих изделий достигает 50—60 млрд. долл., что составляет 20—25% общей стоимости выпускаемых полупроводниковых компонентов.
Эффективность использования СнК, а также проблемы, возникающие при реализации этих проектов, достаточно подробно освещены в периодической и фундаментальной литературе (см., например, [1]). При этом отмечается, что успех в реализации СнК во многом связан с использованием IP-блоков, которые представляют собой готовые модели устройств, реализующих функции процессоров, модулей памяти, таймеров, параллельных и последовательных портов ввода/вывода, контроллеров стандартных интерфейсов (PCI, USB, Ethernet), цифро-аналоговых устройств (ЦАП, АЦП). В отечественной практике такие модели часто называются СФ-блоками (сложно-функциональные блоки).
Используя библиотечный набор IPблоков, можно проектировать СнК, ориентированные на эффективное выполнение определенных задач. Во многих проектах одной из задач, решаемых СнК, является управление объектами в режиме реального времени.
Для выполнения этих функций предлагается контроллерный IP-блок, содержащий 8-разрядное процессорное ядро и базовый набор периферийных модулей.
СТРУКТУРА КОНТРОЛЛЕРНОГО IP-БЛОКА
Реализация функций управления в СнК может быть обеспечена двумяспособами: – разработка специализированного контроллера, выполняющего необходимые функции в соответствии с заданным алгоритмом управления; – формирование на кристалле процессорного ядра с архитектурой одного из перспективных современных микроконтроллеров. Для многих применений более эффективным является второй вариант, который позволяет использовать стандартные средства разработки программного обеспечения для проектируемой СнК. При этом встает задача выбора архитектуры управляющего процессора. В составе современных СнК используются различные типы процессорных IP-блоков, реализующих архитектуру как популярных высокопроизводительных 32-разрядных процессоров (ARM, PowerPC), так и специализированных 8-разрядных процессорных ядер (PicoBlaze компании Xilinx, Nios II Economy компании Altera), ориентированных на формирование в FPGA [2]. Для реализации большого набора алгоритмов управления малой и средней сложности целесообразно использовать 8-разрядные процессоры с RISC-архитектурой, которые занимают небольшую площадь на кристалле и при достаточно высокой производительности потребляют малую мощность. В настоящее время наиболее популярными являются 8-разрядные RISC-микроконтроллеры семейств AVR компании Atmel и PIC компании Microchip. Для этих семейств существует большой набор эффективных средств разработки программного обеспечения, многие из которых предоставляются бесплатно. Микроконтроллеры семейства AVR имеют развитую систему команд и позволяют программисту более эффективно реализовать достаточно сложные алгоритмы управления [3]. Поэтому для разрабатываемого контроллерного IP-блока выбрана архитектура AVR.
Микроконтроллеры AVR содержат на кристалле флэш-память объемом до 128 Кбайт. Однако на реализацию флэш-памяти в составе СнК накладываются технологические ограничения. Поэтому разработанный IP-блок ориентирован на работу с внешней флэш-памятью. В его состав введен контроллер, обеспечивающий интерфейс с серийными микросхемами флэш-памяти.
Структура разработанного контроллерного IP-блока показана на рисунке 1. В его состав входят: 8-разрядное процессорное ядро с архитектурой AVR, контроллер внешней памяти программ (флэш-памяти), внутреннее ОЗУ данных объемом 4 Кбайт, последовательный асинхронный интерфейс — UART, два 8-разрядных таймера-счетчика — Timer/Counter и шесть 8-разрядных параллельных портов — PORTA, PORTB, PORTC, PORTD, PORTE, PORTF. Блок имеет 8 внешних входов прерывания, четыре из которых (nINT3—nINT0) инициируют запрос при поступлении низкого уровня потенциала, а остальные четыре (INT7—INT4) могут программироваться на реализацию запроса при поступлении переднего или заднего фронта импульса или при установке низкого уровня.
ПРОЦЕССОРНОЕ ЯДРО
В контроллерном IP-блоке реализована гарвардская архитектура: для хранения программ и данных предусмотрены отдельные адресные пространства. Физически они также разделены. Регистровая память и ОЗУ емкостью 4 Кбайт располагаются на кристалле контроллера. Для хранения программ используется внешняя флэш-память емкостью 128 Кбайт, для обмена с которой в состав IP-блока включен контроллер флэш-памяти. Распределение адресного пространства памяти показано на рисунке 2.
Процессорное ядро содержит 32 регистра общего назначения R0—R31. Каждый регистр имеет свой адрес в памяти данных и доступен в ее адресном пространстве (0х00—0х1F). Пары регистров R27—R26, R29—R28 и R31—R30 могут использоваться как 16-разрядные индексные регистры X, Y, Z, служащие для косвенно-регистровой адресации ОЗУ. Разработанная версия контроллерного IP-блока реализует систему команд микроконтроллера AtMega128, выполняя 132 команды из 133 (исключением является команда SLEEP, так как разработанная модель IP-блока не реализует режим пониженного энергопотребления). Процессорное ядро имеет в своем составе декодер команд (см. рис. 1), который получает 16-разрядные инструкции из внешней флэш-памяти программ, декодирует их и формирует управляющие сигналы для остальных блоков, обеспечивая выполнение требуемых операций. Арифметические и логические команды, а также команды сравнения выполняются с помощью арифметико-логического устройства. Блок умножения обеспечивает быстрое выполнение умножения 8-разрядных операндов. Команды установки, сброса и проверки битов (команды ветвления) реализуются с помощью битового процессора. RISC-архитектура процессорного ядра позволяет выполнять большинство команд за один машинный такт. ОЗУ данных IP-блока имеет объем 4 Кбайт и доступно по адресам 0х0100—0х10FF. Для обращения к памяти данных используется 8 способов адресации: прямая адресация одного регистра общего назначения, прямая адресация двух регистров общего назначения, прямая адресация регистров ввода/вывода, прямая адресация ОЗУ данных, относительная косвенная адресация, прямая косвенная адресация, косвенная адресация с предекрементом, косвенная адресация с постинкрементом. Пересылка байтов из памяти программ в ОЗУ данных производится с помощью команд LPM и ELPM. При этом используется косвенная адресация через Z-регистр (с дополнительным битом RAMPZ0 для доступа к 128-Кбайт внешней флэш-памяти). Считанный байт помещается в регистр R0. Изменение адреса памяти программ (содержимого программного счетчика PC) осуществляют команды: условный переход (BRxx, где xx — мнемокод условия, например BREQ) и условный пропуск инструкции (SBxx, например, SBRC), относительный переход (RJMP), абсолютный переход (JMP), косвенный переход (IJMP), относительный вызов подпрограммы (RCALL), абсолютный вызов подпрограммы (CALL), косвенный вызов подпрограммы (ICALL), команды возврата из подпрограмм (RET, RETI).
Контроллерный IP-блок содержит 37 служебных регистров, в состав которых входят регистр состояния SREG, регистры 16-разрядного указателя стека SPH:SPL, регистр расширенной адресации к памяти данных RAMPZ, регистры, обеспечивающие обработку прерываний EICR, EIMSK, EIFR, регистры периферийных устройств. Обращение к служебным регистрам обеспечивается с помощью команд загрузки/сохранения LD, LDS, LDD и ST, STS.
К служебным регистрам, имеющим адреса в диапазоне 0х20—0х5F, можно обращаться с помощью команд IN, OUT. Регистр состояния SREG содержит биты: I — разрешения прерываний, T — временный флаг, используемый при выполнении битовых операций, H — флаг полупереноса, S — флаг знака, V — флаг переполнения, N — флаг знака результата, Z — флаг нулевого результата, C — флаг переноса.
Процессорное ядро обрабатывает 15 запросов от различных источников прерываний: 8 внешних запросов и 7 запросов от периферийных блоков. Для каждого из прерываний в памяти программ размещается соответствующий вектор, определяющий начальный адрес программы обслуживания. Внешние прерывания имеют индивидуальные биты разрешения обработки в регистре EIMSK.
Младшие адреса памяти программ используются для хранения векторов прерываний и начального запуска (см. табл. 1). Прерывание с младшим адресом имеет более высокий уровень приоритета: RESET имеет наивысший приоритет, затем INT0, INT1 и т.д. В составе IP-блока имеются два 8-разрядных регистра, обеспечивающих маскирование прерываний: EIMSK (маскирование внешних прерываний) и TIMSK (маскирование прерываний от Timer/Counter). Биты маскирования и разрешения других прерываний находятся в регистрах управления периферийных устройств.
При появлении запроса на прерывание бит глобального разрешения прерываний I в регистре SREG сбрасывается в 0, и все последующие прерывания запрещаются. Программа пользователя может установить бит I в 1, разрешив обработку «вложенных » прерываний. Бит I автоматически устанавливается в 1 после выхода из обработки прерывания по команде RETI. Когда в программный счетчик PC загружается текущий вектор прерывания, флаг, вызвавший данное прерывание, автоматически сбрасывается в 0. Флаги некоторых прерываний также могут быть сброшены путем записи 1 в бит, соответствующий этому флагу. Внешние запросы «прерывания по уровню» nINT3—nINT30 не имеют флага, и состояние запроса длится все время, пока поддерживается соответствующий уровень на внешнем выводе.
ПЕРИФЕРИЙНЫЕ МОДУЛИ
Спроектированный контроллерный IP-блок имеет в своем составе полнодуплексный универсальный синхронный последовательный приемопередатчик — UART. Он содержит генератор синхросигналов с широким диапазоном регулирования частоты обмена, обеспечивает обмен символами с разрядностью 8 или 9 бит (с контрольным битом), реализует контроль переполнения буфера, контроль ошибок формата кадра, контроль наличия шумов на линии, формирует запросы прерывания TX Complete (завершение передачи), TX Data Register Empty (освобождение регистра передатчика), RX Complete (завершение приема). Для работы с модулем UART используются четыре регистра. Установка рабочей частоты производится с помощью регистра UBRR. Регистр управления UCR задает режим работы UART (включение/выключение приемника и передатчика, разрешение прерываний и др.). Регистры данных передатчика и приемника UDR имеют одинаковый адрес доступа. При записи в UDR данные помещаются в регистр передатчика, а при чтении UDR данные выбираются из регистра приемника. Регистр состояния USR, доступный только для чтения, содержит информацию о состоянии UART (биты окончания передачи/приема символа, наличия ошибки приема, освобождения регистра данных UDR передатчика, флаг переполнения при приеме). Два 8-разрядных таймера-счетчика Timer/Counter0 и Timer/Counter2 предназначены для отсчета временных интервалов и реализации периодических прерываний. Каждый счетчик содержит предварительный делитель тактовой частоты Ft, который имеет четыре ступени деления тактовой частоты (на 8, 64, 256 и 1024) для Timer/Counter2 и шесть ступеней деления (на 8, 32, 64, 128, 256 и 1024) для Timer/Counter0. Функционирование таймеров обеспечивается с помощью набора таймерных регистров: TCCR0, TCCR2 — регистры управления, TCNT0, TCNT2 — регистры счетчиков, OCR0, OCR2 — регистры сравнения, TIFR — регистр флагов, TIMSK — регистр маскирования прерываний. Таймеры формируют запрос прерывания в случае совпадения текущего значения счетчика TCNTx с содержимым регистра OCRx или в случае переполнения счетчиков (см. табл. 1). Порты PORTA—PORTF функционируют как двунаправленные параллельные порты. Каждый из них имеет по три регистра — DDRx, PORTx и PINx. Биты регистра PORTx определяют значения сигналов на выводах порта, которые содержимым регистра DDRx сконфигурированы на вывод данных. Направление передачи данных для каждого вывода портов устанавливается индивидуально соответствующими битами регистра DDRx (0 — вход, 1 — выход). Для этого используются команды битовых операций установки и сброса SBI и CBI, с помощью которых задается необходимое содержимое регистров DDRx. Биты регистров PINx отображают текущее значение сигналов на выводах порта, вне зависимости от того, сконфигурированы они на ввод или на вывод данных. Контроллер внешней параллельной флэш-памяти обеспечивает чтение 16-разрядных кодов инструкций из памяти объемом до 128 Кбайт (используется 16-разрядная адресация).
Тактирование обмена с флэшпамятью производится сигналом удвоенной частоты по сравнению с тактовой частотой процессора. Контроллер имеет 16-разрядный выход адреса (биты A16—А1) и 16-разрядный вход данных, а также три выхода управляющих сигналов #RE (Read enable), #CE (Chip enable) и #WE (Write enable). Возможно использование любых модулей флэш-памяти, временные диаграммы которых соответствуют диаграммам микросхем памяти типа Am29LV200 компании AMD.
ВЕРИФИКАЦИЯ И ТЕСТИРОВАНИЕ АППАРАТНЫХ МОДУЛЕЙ
Модель разработанного контроллерного IP-модуля написана на языке Verilog. Таким образом, данная разработка относится к классу синтезируемых (soft) IP-блоков, которые могут быть аппаратно реализованы как с использованием ПЛИС типа FPGA, так и в составе СБИС типа СнК. Для верификации разработанного IP-блока проведена его реализация на базе FPGA фирмы Xilinx. Разработка тестовых образцов контроллерного IP-блока проводилась с использованием стандартного маршрута проектирования [4], который включает следующие основные этапы: определение спецификации проекта, разработка синтезируемого RTL-описания проекта, функциональное моделирование, логический синтез, верификация логического проекта, физическое проектирование, размещение и трассировка, верификация с учетом топологических задержек, финальная верификация проекта. В процессе разработки каждый из модулей, входящих в состав IP-блока (см. рис. 1), а также блок в целом моделировались при помощи программы ModelSim фирмы Mentor Graphics. Реализация, отладка и тестирование IP-блока производились на отладочном модуле DS-KIT-4VLX25LC фирмы Memec, который содержит FPGA типа XC4VLX25-10SF363 фирмы Xilinx. Разработка, синтез, размещение и трассировка IP-блока выполнялись при помощи пакета программ ISE WebPack. Память программ (в синтезированном варианте модели 8 Кбайт) и ОЗУ данных (4 Кбайт) были реализованы с использованием внутренних блоков памяти BRAM, имеющихся в составе данной ПЛИС. Результаты синтеза средствами XST для двух вариантов оптимизации (по быстродействию и площади) представлены в таблице 2, где указано число элементов и блоков, использованных для реализации IP-блока (в скобках указан процент использования соответствующих ресурсов ПЛИС). Анализ полученных данных показывает, что синтез с использованием этих критериев дает достаточно близкие результаты по количеству используемых элементов и блоков (различие 8%). Однако оптимизация по быстродействию обеспечивает существенное увеличение тактовой частоты (на 85%). Максимальная тактовая частота контроллерного IP-блока при реализации на данной ПЛИС составляет 73 МГц. При этом ограничивающим фактором является комбинационная логика блоков декодирования и формирования адреса совместно с блоком 8-битного умножения, задержка в критических цепях которых составляет 13,6 нс. При работе IP-блока в системе с внешней флэш-памятью программ быстродействие будет также зависеть от скорости выборки команд из этой памяти.
ЗАКЛЮЧЕНИЕ
Разработанный контроллерный IP-блок имеет достаточно высокую производительность (40ѕ50 MIPS при тактовой частоте 60 МГц) и требует для реализации относительно небольших аппаратных ресурсов. Синтез и трассировка контроллерного IP-блока средствами САПР Cadence для изготовления по 0,25-мкм КМОП-технологии показали, что площадь, требуемая для его размещения на кристалле, составляет около 1 мм². Поэтому данный IP-блок можно эффективно использовать для выполнения функций управления при проектировании СнК для различных областей применения.
ЛИТЕРАТУРА 1. Немудров В., Мартин Г. Системы на кристалле. Проектирование и развитие//М.: Техносфера, 2004. 2. Шагурин И., Шалтырев В., Волов А. «Большие» FPGA как элементная база для реализации систем на кристалле//Электронные компоненты, 2006, №5, с. 83—88. 3. Евстифеев А.В. Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL//М.: Додэка-XXI, 2004. 4. Зотов В.Ю. Проектирование цифровых устройств на основе ПЛИС фирмы XILINX в САПР WebPack ISE//М.: Горячая линия — Телеком, 2003.