+7 (812) 670-9095
Обратная связьEnglish
Главная → Статьи → Системное ПО → UDB. Что же это такое? Часть 4. Datapath ALU
Полезный совет
Создайте именные приглашения или поздравления и даже разошлите их по всей базе данных в несколько действий с помощью Word!Подробнее
Версия для печати

UDB. Что же это такое? Часть 4. Datapath ALU

28 января 2019

Как и обещали в прошлый раз, мы начинаем детальный разбор Арифметико-Логического Устройства (Arithmetic and Logic Unit, ALU), ядро которого состоит из трех независимых 8-битных программируемых функций: арифметического/логического блока, блока регистров сдвига и блока наложения маски.




UDB. Что же это такое? Часть 4. Datapath ALU


21.3.2.4 Datapath ALU


Ядро ALU состоит из трех независимых 8-битных программируемых функций: арифметического/логического блока, блока регистров сдвига и блока наложения маски.


Арифметические и логические операции

Функции АЛУ, выбираемые динамически при помощи конфигурационного ОЗУ, приведены в таблице ниже.

Таблица 21-8. Функции ALU.

Func[2:0] Функция Операция
000 PASS srca
001 INC ++srca
010 DEC --srca
011 ADD srca + srcb
100 SUB srca – srcb
101 XOR srca ^ srcb
110 AND srca & srcb
111 OR srca | srcb

Вход переноса (Carry in)


Carry in используется в арифметических операциях. Как показано в таблице 21-9, для определенных функций существуют значения carry in по умолчанию.


Таблица 21-9. Функции Carry In.

Функции Операция Реализация Carry In по умолчанию
INC ++srca srca + 00h + ci, где ci равно 1
DEC --srca srca + ffh + ci, где ci равно 0
ADD srca + srcb srca + srcb + ci, где ci равно 0
SUB srca — srcb srca + ~srcb + ci, где ci равно 1


В дополнение к этим штатным арифметическим применениям, имеется ещё три варианта для использования переноса. Биты CI SELA и CI SELB задают правила использования входа carry in для каждого такта. ОЗУ динамической конфигурации выбирает конфигурацию A или B в каждом такте. Параметры приведены в таблице 21-10.


Таблица 21-10. Дополнительные функции Carry In.

CI SEL A
CI SEL B
Режим переноса Описание
00 По умолчанию (Default) Арифметический режим по умолчанию, описанный в таблице 21-9.
01 Защелкивание (Registered)

Флаг переноса, который является результатом переноса с предыдущего цикла. Этот режим используется для реализации операций сложения с переносом и вычитания с заниманием.

10 Проброс (Routed)

Перенос генерируется в другом месте и пробрасывается на этот вход. Этот режим можно использовать для реализации управляемых счетчиков.

11 Связывание в цепочки (Chained)

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


Если используется проброс переноса, в ряде функций он используется, как показано в таблице 21-11. Обратите внимание, что для функций декремента и вычитания единицы активный уровень переноса — низкий (инверсный).


Таблица 21-11. Функции трассированного Carry In.

Функция Полярность Carry In Carry In активен Carry In неактивен
INC Прямая ++srca srca
DEC Инверсная --srca srca
ADD Прямая (srca + srcb) +1 srca + srcb
SUB Инверсная (srca – srcb) -1 (srca — srcb)

Выход переноса (Carry Out)

Carry out – опциональный выход Datapath, формируемый на основе статически заданного старшего бита. Значение может быть передано по цепочке на вход переноса в более старший блок. Обратите внимание, что в случае функций декрементирования и вычитания carry out инвертирован.

Таблица 21-12. Функции Carry Out.

Функция Полярность Carry Out Carry Out активен Carry Out неактивен
INC Прямая ++srca == 0 srca
DEC Инверсная --srca == -1 srca
ADD Прямая srca + srcb > 255 srca + srcb
SUB Инверсная srca – srcb < 0 (srca – srcb)

Структура переноса


Параметры carry in и для выбора старшего бита, для выработки carry out показаны на рисунке 21-15. Защелкнутые значения carry out могут быть использованы в качестве carry in для последующих арифметических операций. Эта особенность может быть использована для реализации функций большей разрядности с использованием циклов.


Рисунок 21-15. Операция переноса
Рисунок 21-15. Операция переноса.


Операция сдвига

Операция сдвига происходит независимо от работы ALU, согласно таблице 21-13.

Таблица 21-13. Функции операции сдвига.

Shift [1:0] Функция
00 Пропуск (Pass)
01 Сдвиг влево (Shift Left)
10 Сдвиг вправо (Shift Right)
11 Перестановка нибблов (Nibble Swap)


Выходное значение операции сдвига выдаётся с Datapath. Настройка выходов для сдвига вправо (sor) и влево (sol_msb) выполняется одними и теми же битами. Статический бит конфигурации (SHIFT SEL в регистре CFG15) определяет, какой выход сдвига используется в качестве выхода Datapath. При отсутствии сдвига сигналы sor и sol_msb определяются как LSB и MSB функции ALU, соответственно.

Биты конфигурации SI SELA и SI SELB определяют сдвиг данных для указанной операции. ОЗУ динамической конфигурации выбирает конфигурацию A или B для каждого такта. Вдвигаемые данные используются только при сдвиге влево и вправо, данный вход не используется при пропуске и перестановке нибблов. Выбранные значения и варианты использования относятся как к сдвигу вправо, так и к сдвигу влево и показаны в таблице 21-14.


Таблица 21-14. Функции Shift in

SI SEL A
SI SEL B
Источник вдвигаемых данных Описание
00 По умолчанию/Арифметический (Default/Arithmetic)

По умолчанию, значение бита DEFSI (константа 1 или 0). Однако, если MSB SI взведён, то источником является значение выбранного старшего бита АЛУ (только для сдвигов вправо).

01 Защёлкивание (Registered)

Входное значение для сдвига задается текущим защелкнутым выходным значением сдвига (из предыдущего цикла). Операция сдвига влево использует последнее значение сдвига влево. Операция сдвига вправо использует последнее выходное значение сдвига вправо.

10 Проброс (Routed)

Входные данные для сдвига поступают извне, через трассировочные ресурсы (вход SI).

11 Связывание в цепочки (Chained)

Для входного сдвига влево пробрасывается с выхода правого блока Datapath в цепочке, для входного сдвига вправо — с левого.


Выходные данные при сдвиге влево берутся из бита, заданного как старший. При сдвиге вправо входные данные вталкиваются, начиная с выбранной старшей (MSB) позиции. Выходные данные хоть при сдвиге влево, хоть при сдвиге вправо, защёлкиваются и могут быть использованы на следующем такте. Эту особенность можно использовать для реализации сдвига большей разрядности в множественных циклах.

Рисунок 21-16. Операция сдвига.
Рисунок 21-16. Операция сдвига.


Стоит заметить, что изолированные выбором MSB биты все еще сдвинуты. В показанном примере бит 7 все еще сдвинут в значении sil при сдвиге вправо, а бит 5 сдвинут в бит 4 при сдвиге влево. Выходной (правый или левый) бит изолированной группы будет утерян.


Операция наложения маски ALU


8-битный маскирующий регистр в статическом пространстве конфигурационных регистров UDB определяет операцию наложения маски. В этой операции на выход ALU накладывается маска (операция AND) со значением данного регистра. Типичным использованием операции наложения маски ALU является реализация автономных таймеров и счетчиков с разрешением, кратным степени двойки.


21.3.2.5. Входы Datapath и мультиплексирование (Datapath Inputs and Multiplexing)

Как показано в таблице 21-15, каждый Datapath имеет 9 входов, включая 6 входов от трассирования каналов. К ним относятся адреса конфигурации ОЗУ, FIFO, сигналов управления загрузкой регистров данных, а также сдвига и переноса входов данных.

Таблица 24-15. Входы Datapath.

Вход Описание
RAD2 RAD1 RAD0

Асинхронный адрес в ОЗУ динамической конфигурации. Адресует восемь программируемых пользователем 16-битных слов. Каждое слово содержит управляющие биты Datapath для текущего цикла. Последовательность инструкций может определяться этими адресными входами.

F0LD F1LD

Если взведён в данном цикле, в выбранный FIFO загружаются данные из аккумулятора A0 или A1, либо выходные данные из АЛУ. Источник выбирается при помощи битов конфигурации Fx INSEL[1:0]. Этот вход чувствителен к перепадам. Он дискретизируется с тактовой частотой Datapath; при обнаружении перехода от «0» к «1», загрузка происходит по следующему фронту тактового сигнала.

D0LD D1LD

Если взведён в данном цикле, регистр Dx загружается из связанного с ним FIFO Fx. Этот вход чувствителен к перепадам. Он дискретизируется с тактовой частотой Datapath; при обнаружении перехода от «0» к «1», загрузка происходит по следующему фронту тактового сигнала.

SI Это значение входа данных, которое можно использовать для сдвига вправо или влево.
CI Это значение переноса используется, если управляющий сигнал переноса равен «routed carry».


Как показано на рисунке 21-17, каждый вход имеет мультиплексор 6-в-1, следовательно, все входы взаимозаменяемы. Входы обрабатываются двумя способами: либо по уровню, либо по перепаду. Адрес в ОЗУ динамической конфигурации, а также значения сдвига и данных чувствительны к уровню. FIFO и сигналы загрузки регистров данных чувствительны к перепадам.


Рисунок 21-17. Сигналы входов Datapath.
Рисунок 21-17. Сигналы входов Datapath.


В следующей статье мы перейдем к обзору полезных мелочей.

Источник: http://www.cypress.com/file/123561/download

Автор: Cypress

Теги: PSoC, микроконтроллеры