Использование ресурсов ПЛИС Stratix III фирмы Altera
при проектировании микропроцессорных ядер
Андрей СТРОГОНОВ, д. т. н.
andreis@hotmail.ru Сергей ЦЫБИН
chipcec@comch.ru
В работе описывается использование ресурсов ПЛИС Stratix III фирмы Altera при проектировании различных вариантов микропроцессорного ядра, управляющий автомат которого заимствован из работы [1], в САПР Quartus II версии 8.1.
Рассматриваются варианты:
• управляющий автомат [1] и синхронное ПЗУ [2], разработанные на языке VHDL для реализации в базисе ПЛИС APEX20KE (EP20K30ETC144), вариант 1;
• микропроцессорное ядро с системой команд из работы [1] для вычислений с фиксированной запятой в системе MATLAB/Simulink [3, 4], код языка VHDL получен с применением приложения Simulink HDL Coder, вариант 2;
• управляющий автомат [1] и синхронное ПЗУ на язке VHDL [5] в базисе ПЛИС Stratix III EP3SL50F484C2, вариант 3;
• управляющий автомат на языке VHDL [1] и мегафункция синхронного ПЗУ RAM:
1-PORT [5] в базисе ПЛИС Stratix III, вариант 4;
• управляющий автомат, созданный с применением приложения StateFlow системы MATLAB/Simulink, и асинхронное ПЗУ, код языка VHDL получен с применением Simulink HDL Coder [6] в базисе ПЛИС Stratix III EP3SL50F484C2, вариант 5 (табл. 1). Предварительно рассмотрим архитектурные особенности ПЛИС семейства Stratix III. Основой семейства ПЛИС Stratix III являются адаптивные логические блоки (ALM), которые объединяются в логические блоки (logic array block, LAB). Таблица перекодировки (LUT) адаптивного логического блока (Memory LAB) может быть сконфигурирована как 16x2 двухпортовое ОЗУ. Всего 10 таких ALM могут образовать блок двухпортового ОЗУ емкостью 16x20 бит (320 бит конфигурационной памяти). LUT логических блоков (LAB) такой возможностью не обладают. Блоки Memory LAB и LAB сосуществуют парами и подключены к локальным матрицам межсоединений и к строкам и столбцам С4, С12, R4, R20, обладающим различной скоростью распространения сигналов и длиной межсоединений (рис. 1). Локальные матрицы позваляют напрямую подключать соседние блоки LAB, блоки памяти с архитек-
Рис. 1. Фрагмент архитектуры ПЛИС семейства Stratix III
турой TriMatrix, встроенные блоки цифровой обработки сигналов (DSP-блоки) или блоки ввода/вывода. Архитектура межсоединений MultiTrack обеспечивает большую доступность ко всем окружающим LAB с помощью меньшего числа связей, что позволяет увеличить
производительность, снизить энергопотребление и оптимизировать упаковку логики.
ALM обеспечивают эффективное управление логическими функциями, то есть позволяют упаковывать большее число комбинационных и последовательностных логических
Вход для реализации Вход Вход
арифметических операций переноса регистерной цепи
зИагес1_ап1И_т саггу_т гед_с11ат_т
! Ч
■ о : О
У
: £ II
I О.
Выход для реализации Выход Выход
арифметических операций переноса регистерной цепи
з11агес1_агКЬ_01^ саггу_ои1 гед_сЬат_01Л
Рис. 2. Адаптивный логический блок ПЛИС Stratix III
Примечание. ALUT0 и ALUT1 могут быть сконфигурированы как двухпортовое ОЗУ емкостью 16x2 бит
datafO -dataeO -
4-входо вый LUT
datael -datafl -
-входовый
LUT
datafO dataeO datac dataa -
datad -datael -datafl ■
5-входовый
LUT
3-входовый LUT
datafO
dataeO
datac
dataa
datab
datad
datael
datafl
5-входовый
LUT
4-входовый
LUT
com bout 1
comboutO
com bout 1
comboutO
com bout 1
datafO -dataeO -datac -dataa datab -
datael -datafl '
datafO -dataeO -
datafO -dataeO -
dataa -datab -datac -datad -
datael _ datafl -
5-входовый
LUT
5-входовый
LUT
comboutl
6-входовый LUT
Ь-входовыи
LUT
-comboutO
1-ВХОДОВЫИ
LUT
comboutl
Рис. 3. Реализация булевых функций в нормальном режиме работы ALM:
а) двух независимых функций от 4 переменных; б) независимой функции 5 и 3 переменных;
в) функции 5 и 4 переменных с одним общим входом; г) функции 5 и функции 5 переменных с 2 общими входами;
д) функции 6 переменных; е) функции 6 и функции 6 переменных с 4 общими входами
£
л
Рис. 4. Реализация булевой функции 6 переменных в нормальном режиме работы ALM
К глобальным
или локальным матрицам
межсоединений
Вход, доступный для упаковки триггеров, триггер regí не доступен
Рис. 5. Работа ALUT в расширенном режиме
элементов. Каждый блок способен реализовывать различные комбинационные функции на 8-входовой LUT-таблице, которая аппаратно реализуется на двух 4-входовых адаптивных LUT-таблицах, и последовательностную логику на двух программируемых D-триггерах, а также арифметические операции на двух специализируемых сумматорах (рис. 2). С помо-шью такой LUT-таблицы можно реализовать булевы функции от 7, 6 и две независимые функции с меньшим числом переменных. Триггеры reg0 и regí могут быть использованы независимо от LUT-таблиц.
ALM способны работать в различных режимах: нормальный, расширенный LUT-режим, арифметический, общий арифметический и LUT-reg (в этом режиме используются три триггера). В каждом режиме ресурсы ALUT используются различно.
Например, ALM способен реализовать две независимые 4-входовые функции (без общих входов). На рис. 3 показаны примеры реализации функций как без каких-либо общих входов, так и с ними. Нормальный режим работы позволяет обеспечить полную совместимость с 4-входовыми LUT-таблицами предыдущих серий ПЛИС, такими как APEX II, FLEX.
Для реализации булевой функции 6 переменных могут быть использованы входы dataa, datab, datac, datad, а также входы dataeO, datafO или dataeí, datafí (рис. 4). Если используются входы dataeO, datafO, то выход функции регистерный или триггер regO может быть обойден. Если доступны входы dataeí и datafO, то используется выход триггера reg1 или триггер reg1 может быть обойден.
На рис. 5 показан типовой шаблон реализации булевой функции 7 переменных для комбинационной схемы. Неиспользуемый вход datafí доступен для упаковки триггера. Данный шаблон используется для реализации конструкции if-else языка VHDL. Работа ALUT в арифметическом режиме показана на рис. 6. Арифметический режим используется для реализации сумматоров, счетчиков и др. Встроенные сумматоры в ALM могут работать в двух режимах: как два независимых 2-входовых сумматора (арифметический режим) или один как 3-входовый для реализации сложных арифметических операций (общий арифметический режим).
Используемые ресурсы ПЛИС Stratix III EP3SL5OF484C2 и ПЛИС APEX2OKE EP2OK3OETC144 при проектировании микропроцессорных ядер показаны в таблице í. Из анализа таблицы 1 можно сделать выводы, что различные варианты микропроцессорного ядра занимают менее 1% используемых ресурсов ПЛИС и обладают более чем в два раза большей тактовой частотой, чем при реализации в базисе ПЛИС APEX2OKE.
Варианты 1, 3 и 4 наиболее схожи между собой, так как базируются на одном варианте управляющего автомата из работы [1] и задействуют одинаковое количество триггеров
(33 триггера). Вариант 2 (93 триггера) и вариант 5 (59 триггеров) базируются только на системе команд из работы [1] и разработаны с помощью системы MATLAB/Simulink. По числу упакованных элементов комбинационной логики ПЛИС Stratix III превосходят ПЛИС APEX20KE и обеспечивают выигрыш по быстродействию микропроцессорных ядер.
Наиболее скоростной вариант микропроцессорного ядра — вариант 3, а по функциональной сложности, которая обеспечивает ряд преимуществ, таких как поддержка формата с фиксированной запятой и распределенная система управления блоками процессора, — вариант 2. Вариант 2 не использует блоки встроенной памяти.
Вариант 2 из работ [3, 4] с системой команд из работы [1] наиболее близок к архитектуре микропроцессорного ядра PicoBlaze, для реализации в базисе ПЛИС Spartan II, Virtex (рис. 7) и является его упрощенной версией. Вариант 2 состоит из следующих блоков: управляющего автомата (блок CPU_Controller); памяти программ — ПЗУ процессора (блок Memory); АЛУ процессора (блок alu); двух регистров общего назначения (РОН, блоки RegisterA и RegisterB); регистра специального назначения (РСН), выполняющего роль стека (блок PC_Inc); счетчика команд (блок PC); регистра инструкций (блок Instruction_Reg).
Архитектура микропроцессорного ядра PicoBlaze основана на концепции раздельных шин данных и команд (гарвардская, или двухшинная архитектура). Память для хранения данных и память для хранения программы располагаются в разных местах, допуская полное совмещение во времени операций вызова команды из памяти и ее выполнения, что позволяет добиться высокой скорости выполнения операций. Варианты микропроцессорных ядер (варианты 1-5) условно характеризуются одношинной структурой, так как в рассматриваемых вариантах отсутствует возможность подключения памяти данных.
Микропроцессорное ядро PicoBlaze содержит 16 восьмиразрядных регистров, входящих в блок РОН (в варианте 2 их два), 8-разрядное АЛУ, регистр статуса и регистр фиксации флагов при выполнении обработки прерываний (в варианте 2 отсутствуют), программный счетчик, блок управления вводом/выводом (в варианте 2 отсутствует), стек (15 уровней, в варианте 2 стек организован на регистре R), схему управления прерываниями (в варианте 2 отсутствует), блок управления выбором адреса следующей команды (в варианте 2 отсутствует), дешифратор команд и ПЗУ на основе блочной памяти ПЛИС Block SelectRAM, объем которого составляет 256x16 разрядов. Микропроцессорное ядро PicoBlaze задействует 9% логических ресурсов ПЛИС XC2S50E и 2,5% ПЛИС XC2S300E.
Вариант 2 поддерживает лишь несколько команд из 3 групп команд ядра PicoBlaze (всего 6 групп: 1-я группа — команды, управляю-
л >х £ I ■а і
° ч
и
II
VO о.
О Jt
5 І
Рис. 6. Работа ALUT в арифметическом режиме
Таблица 1. Используемые ресурсы ПЛИС Stratix III EP3SL50F484C2 и ПЛИС APEX20KE EP20K30ETC144
ПЛИС Stratix III/ APEX20KE Управляющий автомат и синхронное ПЗУ на языке VHDL ПЛИС APEX20KE EP20K30ETC144 Микропроцессорное ядро для вычислений с фиксированной запятой с применением МА^АВ^^иПпк ПЛИС Б1га11х III ЕР38Ь50Р484С2 Управляющий автомат и синхронное ПЗУ на языке VHDL ПЛиС Stratix III EP3SL50F484C2 Управляющий автомат на языке VHDL и мегафункция синхронного ПЗУ RAM: 1-PORT ПЛИС Бігаїїх III ЕР38Ь50Р484С2 Управляющий автомат, созданный с применением StateFlow МАКАВ^1тиПпк, и асинхронное ПЗУ на языке VHDL ПЛИС Stratix III ЕР38Ь50Р484С2
Вариант 1 2 3 4 5
ALUTs/LUT 116 201 111 106 103
7 входов/4 6/3 5/2 4/1 <3/0 101 9 23 16 0 8 22 45 29 97 0 6 25 49 31 0 22 45 15 24 1 13 29 27 33
Режимы работы ALUTs:
нормальный - 158 94 89 85
расширенный - 8 0 0 1
арифметический - 26 17 17 17
общий арифметический - 9 0 0 0
Регистры ALM/ LC-регистры 33 93 33 33 59
ALM/LC 149 119 61 58 64
Память, бит (1 880 064)/(24 576) 1536 (6%) 0 0 4096 (< 1%) 0
Максимальная тактовая частота, МГц 73,84 318,.57 (Slow 1100 мВ 85C Model) 327,98 (Slow 1100 мВ 85C Model) 245,64 (Slow 1100 мВ 85C Model) 275,33 (Slow 1100 мВ 85C Model)
Входные данные
4-й
IN_PORT[7:0]
Блок регистров общего назначения
sF s7
sE s6
sD s5
sC s4
sB s3
sA s2
s9 si
s8 sO
Блок управления вводом /выводом
Адрес порта ввода/вы вода PORT_ID[7:0] RED_STROBE WRITE_STROBE Выходные данные
-> OUT_PORT[7:0]
Адрес
команды
ADDRESS[7:0]
АЛУ
f л r
ZERO CARRY
Регистр статуса
1 f r
Регистр фиксаций флагов при прерываниях
Рис. 7. Архитектура микропроцессорного ядра PicoBlaze для реализации в базисе ПЛИС Spartan II и Virtex
Рис. 8. Трассировочные ресурсы ПЛИС Stratix III EP3SL50F484C2, задействованные при реализации микропроцессорного ядра по варианту 2
Таблица 2. Формат команды переходов микропроцессорного ядра PicoBlaze
Поле кода операции Поле адреса переходов Мнемоника Выполняемая операция
1 G G G x x G 1 A A A A A A A A JUMP aa Безусловный переход
1 G G 1 G G G 1 A A A A A A A A JUMP Z,aa Переход при условии, что флаг ZERO Flag находится в установленном состоянии
1 G G 1 G 1 G 1 A A A A A A A A JUMP NZ,aa Переход при условии, что флаг ZERO Flag находится в сброшенном состоянии
1 G G 1 1 G G 1 A A A A A A A A JUMP C,aa Переход при условии, что флаг CARRY Flag находится в установленном состоянии
1 G G 1 1 1 G 1 A A A A A A A A JUMP NC,aa Переход при условии, что флаг CARRY Flag находится в сброшенном состоянии
15 1А 13 12 11 1G 9 З 7 6 5 А 3 1 G Номер разряда команды
Таблица 3. Формат команды переходов микропроцессорного ядра (вариант 2)
Поле кода операции Поле адреса переходов Мнемоника Выполняемая операция
G G G G G G G 1 A A A A A A A A JMP Безусловный переход по адресу, заданному младшим байтом команды
G G G G G G 1 G A A A A A A A A JMPZ Переход по адресу, заданному младшим байтом команды, если содержимое регистра А равно нулю
15 13 12 11 1G 9 З 7 6 5 А 3 1 G Номер разряда команды
щие последовательностью выполнения операций в программе, и команды обработки подпрограмм, например, JUMP, CALL, RETURN;
2-я группа — логические команды, например, поразрядное умножение AND; 3-я группа — арифметические команды, например, команда получения суммы двух операндов без учета переноса ADD; 4-я группа — команды сдвига; 5-я группа — команды ввода/вывода; 6-я группа — команды для обслуживания прерываний). Ядро PicoBlaze поддерживает 49 команд, время выполнения команд — постоянное, а варианты 1-5 — только 15, и время выполнения команд у микропроцессорных ядер рассматриваемых вариантов сильно разнится. В таблицах 2 и 3 показан формат команд переходов JUMP ядра PicoBlaze и варианта 2 с системой команд из работы [1]. Ядро PicoBlaze поддерживает 1 безусловную и 3 условных команды переходов. В варианте 2 из-за отсутствия развитого АЛУ (например, не предусмотрены арифметические команды с учетом переноса/заема и др.), регистра статуса и блока
управления выбором следующего адреса поддерживается лишь одна команда перехода с условием — JMPZ.
Трассировочная архитектура MultiTrack, используемая в ПЛИС Stratix III, обеспечивает связь между различными кластерами логических элементов и характеризуется определенным количеством шагов (hop), необходимых для того, чтобы соединить один LAB с другим. Чем меньше количество шагов и предсказуемее модель трассировки, тем выше производительность и легче оптимизация архитектуры с помощью инструментов САПР. Архитектура трассировки межсоединений MultiTrack обеспечивает большую доступность ко всем окружающим LAB с помощью меньшего числа связей, что позволяет увеличить производительность, снизить энергопотребление и оптимизировать упаковку логики. На рис. 8 различными цветами (темно-синий и синий) показано число шагов, требующихся для соединения LAB (сноска) с окружающими LAB для реализации
микропроцессорного ядра по варианту 2. Таким образом, трассировка до всех LAB выполняется за два шага.
Обобщая полученные результаты, можно сделать выводы, что наиболее удачен вариант 2 — микропроцессорное ядро с системой команд из работы [1] для вычислений с фиксированной запятой в системе MATLAB/Simulink [3, 4]. Код языка VHDL микропроцессорного ядра получен с применением приложения Simulink HDL Coder системы MATLAB/Simulink. ■
Литература
1. Тарасов И. Проектирование конфигурируемых процессоров на базе ПЛИС. Часть II // Компоненты и технологии. 2006. № 3.
2. Строгонов А., Буслов А. Проектирование учебного процессора для реализации в базисе ПЛИС с использованием системы MATLAB/Simulink // Компоненты и технологии. 2009. № 5.
3. Строгонов А. Проектирование учебного процессора с фиксированной запятой в системе MATLAB/Simulink // Компоненты и технологии. 2009. № 7.
4. Строгонов А., Буслов А., Давыдов С. Проектирование учебного процессора с фиксированной запятой в САПР Quartus II компании Altera // Компоненты и технологии. 2009. № 11.
5. Строгонов А. В., Цыбин С. А. Использование различных типов памяти при проектировании учебного микропроцессорного ядра для реализации в базисе ПЛИС // Компоненты и технологии. 2009. № 12.
6. Строгонов А. В., Цыбин С. А. Проектирование микропроцессорных ядер с использованием приложения StateFlow системы MATLAB/Simulink // Компоненты и технологии. 2010. № 1.
7. Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС фирмы XILINX. М.: Горячая линия - Телеком, 2006.