Алтайский государственный университет
Опубликован: 12.07.2010 | Доступ: свободный | Студентов: 1462 / 389 | Оценка: 4.02 / 3.93 | Длительность: 16:32:00
ISBN: 978-5-9963-0349-6
Специальности: Разработчик аппаратуры
Лекция 4:

Многоядерные процессоры с низким энергопотреблением

Система команд. Система команд С18 состоит из 32 базовых инструкций, составляющих язык VentureForth. VentureForth имеет все достоинства языка Форт: экономичность, простота и расширяемость. IntellaSys расширяет возможности VentuerForth добавлением поддержки Forthlet – объектов, которые могут распространяться между ядрами. Список команд с их кратким описанием представлен в таблице 3.

Инструкции имеют длину всего лишь 5 бит, что позволяет упаковывать три или четыре инструкции в одно 18-битное слово. 18-ти битное слово содержит до 4х опкодов (рисунок 4.10), выбираемых слот-селектором и передается на декодер и логику контроля, управляющей функциями ядра. Восемь из 5-ти битовых инструкций могут быть помещены в 3-х битный слот, как последний код операции в слове (3 полных 5-ти битных слота, плюс 3-битный остаток). Таким образом, максимально в оперативной памяти С18 можно разместить 256 команд, что с учетом высокой реентерабельности форт-кода достаточно для реализации многих алгоритмов и прикладных программ.

Слоты в регистре инструкций IW

Рис. 4.10. Слоты в регистре инструкций IW

Типичная последовательность выполнения кода начинается со значения загруженного в программный счетчик и выставленного на шину адреса. Это значение используется двумя способами - выбирает адрес в памяти (в некоторых случаях - порты ввода-вывода) и управляет "инкрементером", который записывает увеличенное значение обратно в счетчик. Выбранное значение подается на шину данных, значение шины фиксируется в регистре IW. Значение в первом слоте подается на блок логики контроля и декодирования, который управляет работой элементов ядра. Также блок имеет логику "предсказания" - если обнаруживается, что ни один из опкодов не использует шину адреса, разрешается выдача значения PC на шину адреса для предварительной выборки следующей команды.

Загрузка литералов (констант/чисел), вызовы, переходы, обращения к памяти и портам требуют операнды. Команда перехода или вызова может иметь 3, 8 или 9-ти битный аргумент. Инструкции-литералы используют 5-битный опкод и 18-битное слово - литерал, который будет помещен на стек.

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

Параллельные порты доступны для чтения/записи либо как коммуникационные порты ядра (как правило UP порт), при этом операции с ними являются блокирующими или при помощи специальных регистров DATA, ADDRESS, в этом случае блокировок не происходит. Параллельные порты могут быть использованы, как для подключения внешней памяти, так и как порты ввода-вывода общего назначения. Подключение внешней памяти будет иметь свою специфику для каждого из процессоров семейства - в SEAforth24 параллельные порты принадлежат одному ядру, в SEAforth40 - двум, и третий управляет контролирующими линиями. Время доступа к параллельным портам менее 5нс.

Таблица 4.3. Список команд процессорного ядра С18
имя нотация описание
call R: -- a вызов подпрограммы
; R: a -- возврат из подпрограммы
jump безусловный переход
;:

R: a1 --a2

p: a2 -- a1

передача управления сопрограмме (примитив для реализации многозадачности)
if D: x -- x переход, если Т=0
-if D: x -- x переход, если чиcло в Т отрицательное (старший бит = 1)
next

R: n -- n-1

R: 0 --
если n<>0, переход по адресу, указанному в поле перехода
unext

R: n -- n-1

R: 0 --
аналогично next, но в пределах одного слова инструкции
@a D: -- x Т=(А). помещает на стек значение, по адресу в регистре А
D: x -- (A)=T. заносит в память по адресу, указанному в А значение с вершины стека
@a+

D: --x

A=A+1
помещает на стек значение, по адресу в регистре А, содержимое регистра инкрементируется
!а+

D: x --

A=A+1
заносит в память по адресу, указанному в А значение с вершины стека, содержимое регистра инкрементируется
@b D: -- x помещает на стек значение, по адресу в регистре B
!b D: x -- заносит в память по адресу, указанному в B значение с вершины стека, содержимое регистра
!р+ D: x -- значение с вершины стека записывается по адресу, указанному в р
@р+ D: -- x помещает на стек число с адреса, указанного в р
. Пустая операция
push

D: x --

R: -- x
переносит число со стека данных на стек возвратов
pop

R: x --

D: -- x
переносит число со стека возвратов на стек данных
dup D: x -- x x дублирует вершину стека
drop D: x -- удаляет значение с вершины стека
over D: x1 x2 -- x1 x2 x1 дублирует второй элемент стека на вершину
а!

D: x --

A = x
переносит значение с вершины стека в регистр а
а@

а=х

D: -- x
копирует значение регистра а на вершину стека
b!

D: x --

b=x
переносит значение с вершины стека в регистр b
not D: x -- not(x) инвертирует вершину стека
and D: x1 x2 -- (x1 and x2) на вершину стека помещается логическое И регистров T и S
xor D: x1 x2 -- (x1 xor x2) на вершину стека помещается побитовое исключающее или регистров T и S
2/ D: x -- x/2 деление вершины стека на 2
2* D: x -- x*2 умножение вершины стека на 2
+ D: x1 x2 -- x1+x2 суммирует вершину и второй элемент стека
+* шаг умножения

По умолчанию, ядра имеющие два вывода, считаются ядрами с последовательными портами, поскольку имеется возможность организовать полнодуплексный режим работы. Ядра с одним выводом относят к портам общего назначения. Ядра с синхронными и асинхронными последовательными портами отличаются только поддерживающими кодами программ в ПЗУ, никаких реальных отличий в устройстве ядер нет.

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

SPI порты реализуются четырьмя линиями ввода-вывода и также имеют программную поддержку в ПЗУ. Код в ПЗУ предусматривает возможность загрузки исполнимого кода из последовательной флэш памяти - высокий уровень на линии spi-in начинает процесс загрузки. В процессе загрузки SPI работает на скорости 150 кбит/с, позволяя использовать относительно дешевые устройства памяти. По окончании загрузки интерфейс может функционировать со скоростью порядка 10 Мбит/с.

Ядра с одиночным выводом могут использовать его как входной либо как выходной однобитовый порт. Данный порт доступен и конфигурируется через регистр IOCS. Время перехода вывода из состояния с высоким импедансом в активное составляет порядка 110-115нс.

АЦП, имеющиеся на некоторых ядрах представляют собой генераторы, управляемые напряжением (ГУН), связанные с 18 разрядными счетчиками. Аналого-цифровое преобразование осуществляется посредством двух последовательных процедур чтения DATA регистра и вычислении скорости работы генератора. Время полного счета для входного напряжения 400мВ - 40 мкс, для 1500мВ - 75 мкс. Выделенными битами в регистре IOCS ядра счетчик может быть запущен или остановлен, на ГУН подано напряжение с внешнего вывода, или напряжения ноля или питания для калибровки. Характеристика напряжение-код ( Vin - ADCcount ) АЦП является нелинейной. Зависимость Vin(ADCcount) можно с некоторой точностью рассматривать как кубическую вида:

Vin(ADCcount)=a0 * (ADCcount -a1)3+a2

При работе АЦП потребляет не более 4,5 мВт. Время, затрачиваемое на чтение данных из АЦП примерно 5-5,1нс.

ЦАП реализован, как набор двоично-взвешенных источников тока и рассчитан на номинальную нагрузку 75Ом при токе 17 мА. Программно доступен через регистр IOCS.

SERDES - специализированные параллельно-последовательные регистры, предназначенные для осуществления коммуникаций между процессорами. Могут передавать 18-разрядные слова (которые в свою очередь могут быть, как данными, так и инструкциями), могут служить генераторами функций. Имеют две двунаправленные линии - данных и тактовую. Направление устанавливается в регистре IOCS ядра, данные записываются по адресу DATA, для контроля прихода/отправки слова используется адрес UP. Тактирование осуществляется от специального осциллятора. Передача идет на скорости порядка 400Мбит/с, на передачу одного слова требуется 19 тактов.

Процессоры SEAforth являются достаточно мощным решением для встраиваемых систем реального времени за счет высокой скорости исполнения команд и высокой степени параллелизма, недоступной многим другим процессорам. Неоспоримым плюсом является низкое энергопотребление, особенно в пересчете на количество операций в секунду. Система команд доведена до определенного минимума, по функциональности и удобству ее можно сравнивать с системой RISC-контроллеров, таких как PIC16xx, z86, z89. Набор периферийных устройств, по сравнению с современными контроллерами, несомненно, мал и сводится в основном к устройствам передачи данных и преобразователям сигнала. Упор сделан на программную эмуляцию необходимой периферии.

Проведем сравнение процессоров SEAforth с наиболее распространенными целочисленными контроллерами различных архитектур [8-14] (Таблица 4.4).

Таблица 4.4. Сравнительные характеристики целочисленных контроллеров
Характеристика AVR (picoPower) AVR32 MSP430 ARM* SEAforth-ядро С18 (суммарно по 24/40 ядрам)
Разрядность 8 32 16 32 18
Производительность, MIPS 20 72-210 8 50-150 700 (18000/26000)
Потребляемая мощность (максимальная), мВт 13,3 7,6 4,9 5,8-48,75 12,6 (302/504)
Потребление в пассивном режиме (энергосберегающем), мкВт 0,06/0,9 9,9 0,22/1,76/70 20-1000 1 (24/40)
Время перехода в активное состояние, мкс 6 0,16 -60 <0,01
Затраты энергии на выполнение операций (средние значения), нДж:
— логические 0,67 0,127 1,8 0,2-3,5 0,018 (0,42/0,7)
— арифметические 0,67 0,127 2 0,2-3,5 0,036 (0,84/1,4)
— умножение 1,33 0,127 1,25 0,2-3,5 1,15** (27,5/46)
— операции с памятью 1,33 0,19 2,4 0,2-3,5 0,064 (1,54/2,56)

* средние по семейству

** программная реализация умножения

Как видно из таблицы 4.4, процессоры SEAforth выигрывают по показателям энергоэффективности в активном режиме, производительности по отдельным ядрам и суммарной производительности. Также большим преимуществом является очень малое время реакции на событие, высокая скорость выдачи данных на внешние выводы — до 90 МГц. Наиболее близки по этим показателям процессорные ядра AVR32 и ARM Cortex-M3 [8-14]. Процессор проигрывает в операциях типа умножение, умножение с накоплением, деление, поскольку они в нем реализованы программными средствами. Также может несколько снизить производительность ограниченный набор команд и необходимость динамической замены кода во время работы приложений. К недостаткам также можно отнести малый размер памяти, небольшой набор периферийных устройств, необходимость подключения внешней памяти для хранения пользовательских программ.

Программное обеспечение включает в себя компилятор-симулятор языка VentureForth, имеющий версии под операционные системы Windows, Mac OS и Linux. Симулятор позволяет производить отладку программ, отслеживать состояние регистров и памяти любого из ядер процессора [5-7]. При отладке программ одновременно отображается состояние всех ядер процессора (отображаются основные регистры ядра), выделяются ядра, находящиеся в активном состоянии.

Сергей Горбунов
Сергей Горбунов

 

прошел курс и сдал экзамен   Многоядерные процессоры   

система сертификат не выдала. почему?