BC/NW 2008, №2 (13): 2.3

 

ОДНОКРИСТАЛЬНАЯ МИКРОПРОЦЕССОРНАЯ СИСТЕМА НА БАЗЕ ПЛИС ТИПА FPGA

 

Войтик Д.В.

 

(Москва, Московский энергетический институт (технический университет), Россия)

 

 

Введение

         В начале 70-х годов фирма Intel выпустила первый коммерческий микропроцессор i4004[1], выполненный в виде одной микросхемы. Сложность реализации микропроцессорной систем (МПС) уменьшилась на порядок по сравнению с МПС, выполненными с использованием микросхем средней интеграции. Но все равно для ее построения необходимо было скомпоновать как минимум 5 микросхем (ROM, RAM и другая периферия). Дальнейшее развитие полупроводниковой электроники и цифровой схемотехники привело к следующему этапу развития интегральных микросхем -  появлению первых систем на кристалле — микроконтроллеров. Первый однокристальный микроконтроллер Intel 8048[2], выпущенный в 1976 году, совмещал в себе все основные узлы МПС. Позднее появилась другая ветвь однокристальных ЭВМ — специализированные  МПС для решения строго определенных задач (интерфейсные, шинные, сетевые, периферийные и другие интеллектуальные контроллеры с жесткой логикой).

         Появление  первых простых программируемых логических интегральных схем (ПЛИС) позволило схемотехникам реализовывать несложные специализированные логические схемы (в том числе конечные автоматы) в одном корпусе. Последующее усложнение внутренней структуры, а также значительное увеличение количества программируемых базовых ячеек ПЛИС позволило использовать их для реализации более сложных схем. Ресурсов современных ПЛИС типа FPGA ( Field Programmable Gate Array ) уже хватает для реализации в них микропроцессоров и даже целых МПС. ПЛИС может быть использована и как платформа для создания прототипов для функционального моделирования систем, которые впоследствии будут реализованы в (С)БИС[3], так и как основа для реализации систем как готовых продуктов. Первый вариант экономически целесообразен для многосерийной продукции, а второй — для среднесерийной и мелкосерийной. Преимущества МПС, реализованных в ПЛИС, над системами, выполненными с помощью множества дискретных микросхем средней и высокой интеграции очевидны: быстродействие, надежность, упрощение конструкции печатных плат и т.п.

Проектирование однокристальных МПС на базе ПЛИС является относительно новой областью. В докладе рассматривается процесс разработки экспериментальной МПС с использованием САПР ISE и EDK XPS фирмы Xilinx[1] , среды разработки ПО Eclipse и ПЛИС типа FPGA Virtex 4 FX фирмы Xilinx[2], а также пример использования спроектированной МПС как цифрового устройства записи и воспроизведения звука (цифровой рекордер). В качестве ЦП используется встроенный в ПЛИСпроцессор PowerPC 405 фирмы IBM. Периферийные устройства были спроектированы и реализованы с использованием стандартных библиотек набора EDK фирмы Xilinx и реализованы на базе  конфигурируемых логических блоков ( КЛБ ), блочной памяти BRAM, конфигурируемых блоков ввода/вывода и других примитивов ПЛИС. Периферийные блоки разрабатывались с помощью языка описания цифровой аппаратуры Verilog[3]. Для расширения функций МПС использовались внешний звуковой контроллер стандарта AC97 и статическая память стандарта ZBT.

         Разработка аппаратной части МПС

         ПЛИС Virtex 4 FX-12 (XC4VFX12-FF668-10C) состоит из двух основных частей — неизменяемой части и конфигурируемой части. Неизменяемая часть — это микропроцессор PowerPC 405 и два Ethernet MAC-контроллера. Конфигурируемая часть состоит из: 12312 КЛБ, 36-ти конфигурируемых двухпортовых блоков статической памяти общей емкостью 648 Кбит , 32-ти блоков цифровой обработки сигналов(XtremeDSP[4]), 4-х DCM ( Digital Clock Manager ), 320-ти конфигурируемых двунаправленных портов ввода/вывода.

         Контроллеры шин, периферийные устройства и память программы были реализованы на базе конфигурируемых ресурсов ПЛИС. В качестве центрального процессора использовался PowerPC 405. Рассмотрим блок-схему МПС, представленную  на рисунке 1. Микропроцессор связан с памятью команд ( которую можно использовать и как память данных ) через шину PLB[5]. PLB – это высокоскоростная шина и к ней обычно подключают устройства, требующие высокой скорости передачи данных. Периферийные устройства подключены к шине OPB[6], которая в свою очередь соединяется с шиной PLB через мост PLB2OPB. У каждой шины – свой арбитр. В системе использовались следующие контроллеры:  RS232_Uart-контроллер портов ввода/вывода (используются для кнопок и светодиодов), GPIO_con - интерфейсный контроллер для звукового кодека,  AC97_con - контроллер внешней статической памяти, EMC_con- контроллер последовательного интерфейса для клавиатуры и мыши PS2_con.

          САПР позволяет разрабатывать систему двумя основными способами: с помощью графического интерфейса и путем прямого редактирования текстового HDL- файла описания системы. При разработке проектируемой МПС был выбран второй вариант, как более удобный (хотя и более трудоемкий). Файл-описатель формируется на специализированном языке описания системы. Этот язык является высокоуровневой надстройкой языка описания цифровой аппаратуры VHDL. Часть описания представлена на листинге 1. Как видно из листинга, описание состоит из двух основных частей: описания внешних портов и описания модулей МПС. Модули – это  контроллеры шин,  процессор,  периферия. Описание каждого модуля состоит из перечня портов, их соединений с внутренними сигналами/шинами системы и установки параметров модуля. У всех модулей, подключаемых к шинам PLB и OPB как управляемое устройство (slave), включая память, определяются два основных параметра: базовый адрес и максимальный адрес диапазона адресации. В программном обеспечении (ПО)  МПС эти адреса используются для доступа к ячейкам памяти и к внутренним регистрам периферийных устройств. Распределение базовых адресов и максимальных адресов для всех устройств формирует карту адресации. Карту можно редактировать как с помощью графических инструментов, так и вручную в файле-описателе МПС.

         После окончания разработки схемы с помощью САПР EDK проект компилируется. Затем МПС можно смоделировать на ПК и проверить функционирование всей системы. После верификации проекта проводится синтез схемы МПС и генерация битового потока для программирования ПЛИС.        После программирования ПЛИС и загрузки программы в память команд МПС можно проверить ее в реальной работе. Для проверки МПС использовался отладочный комплект ML403, состоящий из платы, на которой разведены микросхема ПЛИС, микросхемы памяти , звуковой кодек AC97, кнопки, светодиодные индикаторы, ЖКИ, порты для подключения внешних устройств и т.п. При проектировании аппаратной части МПС возникли сложности с контроллером звукового кодека. С помощью отладчика ПО, было сделано предположение о том, что данные не доходят до регистров контроллера. Предположение подтвердилось — после более подробного изучения документации на мост PLB2OPB выяснилось, что мост был настроен на неправильную трансляцию адресов, т.е. диапазон адресации звукового контроллера не попадал в диапазон адресации моста. Такие проблемы удобнее решать с помощью встраиваемого в ПЛИС  логического анализатора ChipScope.

 

 


Листинг 1.

# Описание портов МПС и соединение их с внутренними сигналами

 PORT sys_clk_in = sys_clk_in, DIR = I, SIGIS = DCMCLK      # порт входного синхросигнала

 PORT sys_rst_in = sys_rst_in, DIR = I                # порт аппаратного сброса

# Описание внешних портов UART и соединение их с внутренними сигналами

 PORT uart_RX = uart_RX, DIR = I        # порт МПС uart_RX подключен к внутреннему сигналу uart_RX

 PORT uart_TX = uart_TX, DIR = O        # порт МПС uart_TX подключен к внутреннему сигналу uart_TX

# …

# Объявление и настройка модуля контролера шины OPB

BEGIN opb_v20                           # начало модуля opb_v20

 PARAMETER INSTANCE = opb_v20_0         # установка параметра – название модуля

 # …

 PORT SYS_Rst = sys_rst                 # соединение портов модуля с внутренними сигналами

 PORT OPB_Clk = sys_clk                 #

 # …

END

# Объявление и настройка модуля UART

BEGIN opb_uartlite

 # …

 PARAMETER C_BAUDRATE = 9600                   # установка параметра – скорость передачи

 PARAMETER C_DATA_BITS = 8              # установка параметра – количество бит во фрейме

 PARAMETER C_USE_PARITY = 0                    # установка параметра – не использовать бит четности

 PARAMETER C_BASEADDR = 0xa0000000             # установка параметра – базовый адрес контроллера

 PARAMETER C_HIGHADDR = 0xa0001FFF             # установка параметра – максимальный адрес контроллера

 BUS_INTERFACE SOPB = opb_v20_0   # шинный интерфейс – OPB и контроллер шины -  opb_v20_0

 PORT OPB_Clk = sys_clk_s         # подключение внутреннего источника синхросигнала

 PORT RX = uart_RX                # порт модуля RX подключен к сигналу uart_RX

 PORT TX = uart_TX                # порт модуля TX подключен к сигналу uart_TX

END

# …

         Разработка программного обеспечения

         Программа разрабатывалась на языке Си с помощью САПР Eclipse и набора компиляторов GNU GCC. САПР EDK XPS генерирует все необходимые заголовочные файлы, в которых определены все адреса устройств и включены макросы для удобства доступа к устройствам МПС. В проектируемой МПС использовалась память двух типов: внутренняя память команд емкостью 64 Кбайта, расположенная в ПЛИС и внешняя статическая память стандарта ZBT емкостью 1 Мбайт для данных. Т.к. диапазон адресов памяти задается при проектировании аппаратной части МПС, то необходимо было сформировать скрипт линковщика для правильной адресации всех переменных в программе. САПР EDK XPS делает это автоматически, исходя из карты адресации файла-описателя МПС, который рассматривался выше.

         В качестве примера использования МПС было разработано ПО - «Цифровой рекордер». Программа может записывать оцифрованный с помощью кодека AC97 звук в статическую память объемом 1 Мбайт и воспроизводить сохраненные данные с помощью того же кодека. Из-за ограничения объема доклада ниже представлена только часть ПО - функция записи звука представлена на листинге 2.

Листинг 2.

void rec_sound() // Запись звука

{

  int j;

  printf ("Record Start\n\r");

  sound_ptr = BASE_AUDIO_ADDR;          // Устанавливаем указатель на адрес массива данных в памяти

  XIo_Out32(AC97_Control, 0x00000003); // очистка FIFO

 

  // пока не заполнен весь массив памяти или не нажата кнопка “Стоп” продолжаем запись

  while ( (sound_ptr < MAX_AUDIO_ADDR) && !isButtonPressed( BTN_STOP ) )

  {

    if (XIo_In32(AC97_FIFO_Status) & 0x0080) printf ("record overrun\n\r"); // переполнение буфера

    while (XIo_In32(AC97_FIFO_Status) & AC97_OutFIFO_Empty) {};    // если внутренний FIFO пустой, то

                                                            // ждем пока не заполнится

    j = Xio_In32(AC97_OutFIFO);   // считываем 4 байта ( 32-разрядное слово ) оцифрованных данных

    XIo_Out32(sound_ptr, j);            // записываем эти данные в память

    sound_ptr = sound_ptr + 4;    // указатель увеличиваем на 4 ( 32 разряда = 4 байта )

  }

  max_ptr = sound_ptr;

}

         Отладка ПО производилась с помощью вышеупомянутой отладочной платы ML403 и встроенного дебаггера  САПР Eclipse. САПР подсоединяется с помощью JTAG интерфейса к ПЛИС и к встроенному в нее процессору. При пошаговой отладке САПР считывает состояние внутренних регистров, значения ячеек памяти и интерактивно показывает текущую строку программы в редакторе кода, соответствующую исполняемым в данный момент машинным инструкциям. Можно изменять значения регистров и ячеек памяти напрямую из САПР. При изменении исходного кода и компиляции «налету» производится загрузка в память скомпилированной программы и перезапуск процессора. Это весьма удобно при выявлении ошибок и узких мест в программе. Производительность процесса отладки повышается на порядок.

         Заключение

         В заключении приведем сравнительный анализ разработки МПС на базе микроконтроллеров популярного семейства ARM9 и на базе ПЛИС типа FPGA архитектуры Virtex4.

Таблица 1.

 

ARM92XT

PowerPC405@Virtex4

Архитектура процессора

RISC

RISC

Производительность, MIPS

до 330 MIPS ( 330 Мгц )

до 700 ( 450 Мгц )

Аппаратная гибкость

-

Высокая

Сложность проектирование при использовании стандартной периферии

Средняя

Средняя

 

Сложность проектирования с использованием специализированной периферии

-

Очень высокая

Временные затраты на освоение технологии

Относительно Средние

Относительно большие

Временные затраты на проектирование окончательной МПС

Относительно средние

Относительно большие

Примерная стоимость отладочных средств ( отладочная плата и необходимое ПО для разработки )

$100-500

$500-2000

Примерная стоимость микросхемы

$20-50

$200-500

        

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

         При проектировании описываемой МПС было затрачено около 40 часов на изучении документации, примерно 20 часов на проектирование аппаратной части МПС, 15 часов на разработку программной части, 5 часов на отладку всей системы.

ЛИТЕРАТУРА

  1. Зотов В.Ю. Проектирование встраиваемых микропроцессорных систем на   основе ПЛИС фирмы Xilinx. – М.: Горячая линия - телеком, 2006 – 520 c.

  2.Virtex-4 User Guide (http://www.xilinx.com/support/documentation/user_guides/ ug070.pdf )

  3. Поляков А. К. Языки VHDL и VERILOG в проектировании цифровой аппаратуры. – М.: СОЛОН-Пресс, 2003 – 320 с.

 



[1]    http://en.wikipedia.org/wiki/4004

[2]    http://home.mnet-online.de/al/mcs-48/mcs-48.pdf

[3]    т.н. ASIC — Application Specific Integrated Circuit

[4]    Каждый такой блок состоит из 18 разрядного умножителя, сумматора и аккумулятора.

[5]    Processor Local Bus – реализация стандартной шины IBM CoreConnect. Подробнее см - http://en.wikipedia.org/wiki/CoreConnect.

[6]    On-Chip Peripheral Bus – универсальная шина фирмы Xilinx, предназначенная для подключения широкого спектра периферийных устройств к процессорам PowerPC и софт-процессору Microblaze. Реализация OPB проще, чем шины PLB и применяется обычно для устройств, не требующих высокой скорости передачи данных.