Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПС для АТП (ЛЕК).doc
Скачиваний:
33
Добавлен:
26.09.2019
Размер:
2.38 Mб
Скачать

10.2.3.Пересылки из одной области памяти в другую

TMS320С2х наделен командами, выполняющими пересылки блоков данных и кодов команд. Эти функции выгодно сочетаются с возможностью изменять конфигурацию блоков RAM, расположенных на кристалле.

Команда BLKD перемещает блок внутри памяти данных, а BLKP - блок из памяти программ в память данных. Эти команды перемещают блоки информации как из внутренней RAM, так и из внешней памяти. Наиболее эффективно применять эти команды совместно с командами RPT/RPTK.

Команда DMOV (переместить данные) полезна при выполнении алгоритмов, которые осуществляют операцию задержки, таких, как свертка и цифровая фильтрация, в которых данные проходят через временное окно. DMOV может непрерывно выполнятся сквозь блоки B0, B1 и B2, однако вне внутренней RAM эта функция не работает.

Выполнение команды DMOV в пределах внутренней RAM, на кристалле подобно выполнению эквивалентной команды для TMS32010. DMOV позволяет копировать данные из одной ячейки памяти в другую, имеющую больший адрес, и одновременно, в том же командном цикле, выполнять операции над содержимым адресуемой ячейки. В этом же командном цикле может выполнятся обработка в ARAU, если использован режим косвенной адресации. Команды MACD (умножить и сохранить с перемещением данных) и LTD (загрузить T-регистр, сохранить предыдущее произведение и переместить данные) используют функцию перемещения данных.

Команды TBLR/TBLW позволяют передавать одно слово информации между памятью программ и памятью данных и наоборот. TBLR позволяет считать слово из памяти программ (внутренней ROM или внешней RAM/ROM) в ОЗУ данных. TBLW используется для записи одного слова из внутренней памяти данных (RAM) во внешнее ОЗУ программ.

10.3.Центральное арифметико-логическое устройство (calu)

Центральное арифметико-логическое устройство (CALU) содержит 16 -разрядный масштабирующий регистр сдвига, 1616 параллельный умножитель, 32-разрядное арифметико-логическое устройство (ALU), 32-разрядный аккумулятор и несколько дополнительных сдвиговых регистров, расположенных как на выходе из умножителя, так и на выходе из аккумулятора.

Любая операция ALU выполняется в следующей последовательности:

  1. Данные захватываются из RAM на шину данных,

  2. Данные проходят через масштабирующий сдвиговый регистр и через ALU, в котором выполняются арифметические операции,

  3. Результат передается в аккумулятор.

Один вход в ALU всегда соединен с выходом аккумулятора, а второй может получать информацию либо из регистра произведения (PR) умножителя, либо загружаться из памяти через масштабирующий сдвиговый регистр.

Масштабирующий сдвиговый режим

Масштабирующий сдвиговый регистр имеет 16-разрядный вход с шины данных и 32-разрядный выход в ALU (Рис. 3-7). Сдвиговый регистр выполняет левый сдвиг на 0-16 бит, как указано в команде. При этом младшие разряды заполняются нулями, старшие разряды заполняются либо нулями либо расширением знака, в зависимости от состояния бита SXM (режим расширения знака) в регистре состояния ST0.

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

Арифметико-логическое устройство (ALU) и аккумулятор (ACC)

32-разрядный ALU и аккумулятор TMS320С2х выполняют широкий спектр арифметических и логических операций, большинство из которых выполняются в течение одного командного цикла. Результат любой операции, выполняемой в ALU, помещается в аккумулятор. Данные, которые подаются на обработку в ALU, могут быть предварительно сдвинуты в сдвиговом регистре.

На один из входов ALU всегда подается содержимое аккумулятора, а другой вход может быть соединен либо с регистром произведения (PR) умножителя либо с выходом масштабирующего сдвигового регистра.

32-разрядный аккумулятор разделен на два 16-разрядных сегмента для удобства при сохранении его в памяти данных: ACCH (аккумулятор старший) и ACCL (аккумулятор младший). Дополнительный сдвиговый регистр, соединенный с выходом аккумулятора обеспечивает левый сдвиг на 0, 1 или 4 разряда. Этот сдвиг осуществляется прежде, чем поместить данные на шину памяти для их хранения. При этом содержимое аккумулятора не изменяется.

TMS320C2x поддерживает операции с плавающей точкой для вычислений, требующих большой динамический диапазон. Команда нормализации (NORM) нормализует числа с фиксированной точкой, находящиеся в аккумуляторе, путем выполнения левого сдвига. Команда LACT (загрузить аккумулятор со сдвигом, указываемым Т – регистром) денормализует числа с плавающей точкой с помощью арифметического левого сдвига мантиссы через входной масштабирующий сдвиговый регистр. Количество сдвигов в этом случае - это значение порядка, определяемое четырьмя младшими разрядами Т-регистра (TR). Команды ADDT и SUBT (прибавить к/вычесть из аккумулятора со сдвигом, заданным в Т-регистре) также позволяют обрабатывать числа с 16-разрядной мантиссой и 4-разрядным порядком.

Режим насыщения при переполнении может быть запрограммирован при помощи команд SOVM/ROVM (установить/сбросить режим насыщения). Если аккумулятор находится в режиме насыщения при переполнении и произошло переполнение, флаг переполнения устанавливается и аккумулятор загружается наибольшим положительным (>7FFFFFFF) или отрицательным (>80000000) числом, в зависимости от знака переполнения. Если режим насыщения не установлен (бит OVM сброшен), переполненный результат загружается в аккумулятор без изменений.

TMS320C2x выполняет команды ветвления, в зависимости от состояния ALU. Команда BACC (перейти по адресу, расположенному в аккумуляторе) позволяет вычислять адрес перехода. Команды BIT/BITT, не изменяя содержимого аккумулятора, позволяют определять значение конкретных разрядов в любом слове памяти данных.

Аккумулятор TMS320C25 снабжен битом переноса CY, который устанавливается или сбрасывается в зависимости от операций выполняемых процессором. Бит переноса позволяет более эффективно выполнять умножение, сложение и вычитание. Также он удобен при работе с переполнениями. Бит переноса изменяется при выполнении большинства арифметических команд, а также команд сдвига и циклического сдвига аккумулятора. Но он не изменяется при загрузке аккумулятора, логических операциях, или при других неарифметических или управляющих операциях. Он также не изменяется при выполнении команд умножения MPY, MPYK и MPYU, но изменяется командами MAC и MACD.

# - у TMS32020 отсутствует. # # - на TMS320C25 выполняет сдвиг влево на 0 - 7 разрядов, а на TMS32020 - сдвиг влево на 0, 1 или 4 разряда.

Рис. 10.2. Центральное арифметико-логическое устройство (CALU).

Умножитель, T- и P-регистры

TMS320С2х поддерживает аппаратный 16  16 умножитель, работающий с величинами в дополнительном коде, который вычисляет 32-разрядное произведение за один командный цикл. Частью умножителя являются следующие два регистра:

  • 16-разрядный временный регистр (TR) хранит один из сомножителей,

  • 32-разрядный регистр произведения (PR) хранит произведение.

Обычно команда LT (загрузить T-регистр). загружая TR с шины данных, обеспечивает один из сомножителей, а команда MPY (умножить) обеспечивает другой сомножитель, также выбирая его с шины данных. Умножение может также выполняться с использованием непосредственного операнда. В любом случае произведение вычисляется за два командных цикла.

Две команды умножения с накоплением (MAC и MACD) полностью используют вычислительные возможности умножителя, позволяя оба сомножителя захватывать одновременно через шины команд и данных. Использование команд MAC и MACD с командами повторения RPT и RPTK позволяет выполнять операции умножения/сохранения за один командный цикл. Заметим что команда DMOV, входящая в команду MAСD, не работает с адресами внешней памяти данных. На TMS32020 множимое и множитель должны размещаться в разных блоках внутренней памяти RAM. На TMS320C25 команды MAC и MACD могут выбирать операнды как из внутренней, так и из внешней памяти и использовать одну и ту же область внутреннего блока RAM. Команды SQRA (возвести в квадрат/сложить) и SQRS (возвести в квадрат/вычесть) передают одно и то же значение с шины данных на оба входа умножителя для вычисления квадрата.

Команда MPYU на TMS320C25 выполняет беззнаковое умножение, которое имеет важное значение при выполнении команд повышенной точности. Беззнаковое содержимое T-регистра умножается на беззнаковое содержимое адресуемой ячейки памяти, результат помещается в P-регистр. Это позволяет операнды, имеющие длину более 16-ти разрядов, поместить в две ячейки памяти и, обрабатывая их раздельно, получать произведения длиной более 32-х разрядов. После перемножения двух 16-разрядных чисел в дополнительном коде получится 32-разрядное произведение, которое размещается в 32-разрядном регистре произведения (PR). Содержимое PR может затем быть передано в ALU без изменений либо с предварительным сдвигом.

Возможны четыре режима сдвига произведения (PM). Поле PM в регистре состояния ST1 определяет режим сдвига, как показано в таблице 3-3:

Таблица 3-3. Режимы сдвига произведения (PM)

Содержимое PM

Режим сдвига

00

Нет сдвига

01

Левый сдвиг на 1 разряд

10

Левый сдвиг на 4 разряда

11

Правый сдвиг на 6 разрядов

Левые сдвиги полезны для операций с дробными числами и для выравнивания дробных произведений. Например, произведение двух нормализованных 16-разрядных чисел или двух чисел в формате Q15 содержит два знаковых разряда, один из которых избыточный. Левый сдвиг на 1 бит удалит этот дополнительный бит, прежде чем передаст произведение в ALU. После этого результат окажется в том же формате, что и сомножители. Еще пример. Произведение 16-разрядного нормированного числа в дополнительном коде или числа в формате Q15 с 13-разрядной константой в дополнительном коде имеет пять знаковых бит. Это может случиться при использовании команды MPYK. Левый сдвиг на 4 разряда правильно выровняет произведение прежде, чем передаст его в ALU. Использование правого сдвига позволяет выполнить подряд 128 команд умножения с накоплением не опасаясь переполнения аккумулятора. Сдвиги могут быть запрещены при работе с целыми числами или при операциях, требующих 32-разрядной точности. Это позволяет сохранить совместимость с системой команд TMS32010.

Использование правого сдвига на 6 разрядов позволяет выполнять до 128 последовательных умножений с одновременным накоплением произведений в аккумуляторе. Этот сдвиг предохраняет от возможного переполнения аккумулятора. Заметим, что в данном случае правый сдвиг всегда выполняется с расширением знака не зависимо от состояния бита SXM.

Четыре младших значащих бита T-регистра (TR) определяют также переменный сдвиг через масштабирующий сдвиговый регистр для команд LACT/ADDT/SUBT (загрузить/прибавить к/вычесть из аккумулятора со сдвигом, указанном в TR). Эти команды используются при операциях с плавающей точкой, в которых числа должны быть предварительно денормализованы, т.е. представлены в формате с фиксированной точкой. Команда тестирования бита (BITT) позволяет проверить один бит в слове данных, номер которого указывается содержимым четырех младших разрядов TR.