Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
razrabotka_ustroystv_na_osnove_tsifrovyih_signa...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.57 Mб
Скачать

Часть III. Вычислительные и аппаратные устройства

В этой части книги говорится о вычислительных и аппаратных устройствах сигнального процессора, к которым относятся арифметико-логическое устройство ALU, устройство умножения MAC, устройство сдвига, устройство обмена между шинами, программный автомат, генераторы адресов, таймер и синхронные последовательные порты. Дается описание архитектуры этих устройств и выполняемых с их помощью команд.

Глава 14. Устройство алу

Как уже говорилось ранее, процессор ADSP-2181 содержит три независимых вычислительных устройства (рис. 14.1). К их числу относятся: арифметико-логическое устройство (ALU), умножитель с накопителем (MAC) и устройство сдвига (SHIFTER). Эти устройства работают с 16-разрядными данными и имеют аппаратную поддержку обмена данными, позволяющую обеспечить многопоточность.

Рис. 14.1. Процессор ADSP-2181

Арифметико-логическое устройство выполняет ряд стандартных арифметических и логических команд. MAC выполняет одноцикловые операции умножения, умножения-сложения и умножения-вычитания. SHIFTER осуществляет логические и арифметические сдвиги, нормализацию, денормализацию и операцию получения порядка, а также управление форматом данных, разрешая работу с плавающей точкой.

Вычислительные модули размещаются последовательно друг за другом таким образом, чтобы выход одного мог стать входом другого в следующем цикле. Результаты работы вычислительных устройств собираются на 16-разрядную шину R-BUS.

Все три устройства содержат входные и выходные регистры, которые доступны через 16-разрядную шину данных. Команды, выполняемые в устройствах, берут в качестве операндов данные, находящиеся в регистрах ввода, и после выполнения операции записывают результат в регистры вывода. Регистры являются как бы промежуточным хранилищем между памятью и вычислительной схемой. Шина R-BUS позволяет результату одного вычисления стать операндом для другой операции. Это экономит время благодаря исключению лишних пересылок данных между устройствами и памятью.

Рассмотрим подробнее ALU. Его структурная схема приведена на рис. 14.2.

Рис. 14.2. Структурная схема ALU

Арифметико-логическое устройство является 16-разрядным устройством с двумя 16-разрядными входными портами данных X и Y и одним выходным портом результата R. ALU генерирует шесть сигналов состояния: ноль (AZ), негатив (AN), перенос (AC), переполнение (AV), знак (AS) и частное (AQ). В конце каждого цикла процессора эти сигналы сохраняются в регистре состояния процессора ASTAT. Описание назначения этих сигналов состояния приведено в табл. 14.1.

Таблица 14.1 Описание назначения сигналов состояния

Порт ввода X может принимать данные от двух источников: из блока регистров АХ или с шины результата R-BUS. Шина R-BUS обеспечивает обмен данными между всеми вычислительными устройствами. Блок регистров АХ состоит из двух регистров: AX0 и AX1. Эти регистры подключены к шине памяти данных DMD-BUS. Система команд позволяет читать содержимое регистра АХ и на шину памяти программ PMD-BUS, для этого используется устройство обмена между шинами. Выводы регистров AX0 и AX1 реализованы таким образом, чтобы один из них служил операндом для ALU, а другой в это время мог считываться на шину DMD-BUS.

Порт ввода Y также принимает данные от двух источников: из блока регистров AY и регистра обратной связи AF. Блок регистров AY состоит из двух регистров AY0 и AY1. Эти регистры доступны для чтения и записи с шиной DMD-BUS. Система команд процессора позволяет читать регистры AY0 и AY1 с помощью шины PMD-BUS, но также с использованием устройства обмена между шинами. Выводы регистров AY0 и AY1 реализованы аналогично регистрам AX0 и AX1.

Выход ALU подключен к выходному регистру результата AR и через регистр обратной связи AF на вход ALU через мультиплексор. Регистр AF позволяет результату вычисления использоваться в качестве следующего операнда. Регистр AR имеет выход на шину DMD-BUS и R-BUS. В системе команд предусмотрена возможность чтения регистра AR посредством шины PMD-BUS аналогично двум предыдущим вариантам.

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

Арифметико-логическое устройство имеет альтернативные (теневые) банки регистров AX, AY, AF и AR. На структурной схеме они изображены в виде теней. В конкретный момент времени доступен только один из типов банков. Дополнительный банк может быть использован для автоматического сохранения данных в регистрах ALU при быстром переключении на выполнение подпрограммы. В этом случае экономится время на сохранение текущих данных в памяти процессора.

Выбор главного или альтернативного банка регистров определяется битом 0 регистра режимов процессора MSTAT. Если этот разряд равен 0, то выбран главный банк, если он равен 1, то выбирается дополнительный банк.

Арифметико-логическое устройство выполняет набор стандартных арифметических и логических операций. Из арифметических операций АЛУ выполняет сложение, вычитание, отрицание, инкремент, декремент и вычисление модуля. Эти операции дополнены двумя примитивами деления, с помощью которых возможна реализация цикла многократного деления. Из логических операций АЛУ выполняет логическое сложение (OR), логическое умножение (AND), исключающее ИЛИ (XOR), и логическое отрицание (NOT). Стандартные операции ALU приведены в табл. 14.2.

Таблица 14.2 Стандартные операции ALU

В качестве условных записей операндов X, Y и R ALU, указанных в табл. 14.2, могут выступать следующие регистры:

для X: AX0, АХ1, AR, MR0, MR1, MR2, SR0, SR1;

для Y: AY0, AY1, AF;

для R: AR и AF.

Регистры MR0, MR1, MR2 принадлежат умножителю MAC, а регистры SR0, SR1 устройству сдвига Shifter. Они доступны ALU по шине данных.

С целью обработки чисел с повышенной точностью, в ALU используются сигнал переноса CI (carry-in) и бит переноса AC (ALU carry). Операция сложения с переносом предназначена для сложения старших частей чисел, а операция вычитания с заемом — для их вычитания.

Регистр AR может работать в режиме насыщения. В этом режиме он принимает максимально возможное отрицательное или положительное значение, если операция заканчивается переполнением. Эта функция регистра AR становится возможной при установке в единицу разряда 3 регистра MSTAT. В табл. 14.3 показано содержимое регистра AR ALU в зависимости от флагов регистра состояния ASTAT при включенном, с помощью регистра MSTAT, режиме насыщения.

Таблица 14.3 Содержимое регистра AR ALU в зависимости от флагов регистра состояния

Режим блокировки переполнения ALU разрешается при установке в единицу бита 2 регистра MSTAT. В этом режиме при переполнении ALU разряд AV устанавливается в единицу и при последующих операциях остается в этом состоянии. Таким образом, последующее переполнения уже не генерируются. Бит состояния AV можно очистить непосредственно с DMD шины путем записи в регистр состояния ASTAT нуля.

Арифметико-логическое устройство поддерживает операции деления. Деление осуществляется путем сложения и циклического сдвига чисел с помощью двух специальных примитивов деления DIVS и DIVQ. Команда DIVS вычисляет знаковый бит частного, а DIVQ вычисляет один бит частного. Данные команды применяются для деления знаковых или беззнаковых чисел. Алгоритм деления выполняет либо сложение, либо вычитание, основываясь на знаках делителя и частичного остатка. Остаток при этих операциях недоступен. При этом делитель и делимое должны быть одного типа. Обычная точность деления для 32-разрядного делимого, 16-разрядного делителя и 16-разрядного остатка реализуется за 16 циклов. Делитель может быть сохранен в регистре AX0, АХ1 или в любом регистре результатов R. Старший байт знакового делителя должен находиться либо в регистре AY1, либо в AF, а беззнакового делителя — в регистре AF. Младший байт делителя любого типа должен находиться в AY0. Остаток после деления будет записан в регистр AY0.

Первый из двух примитивов — это команда DIVS (деление-знак). Она предназначена для деления чисел со знаком. Структура операции DIVS показана на рис. 14.3.

Рис. 14.3. Структура операции DIVS

Данная операция вычисляет знаковый бит остатка, выполняя операцию «ИСКЛЮЧАЮЩЕЕ ИЛИ» для знаковых разрядов делителя и делимого.

Регистр AY0 сдвигается на одну позицию таким образом, чтобы знаковый разряд переместился в позицию LSB. Вычисленный знаковый разряд сохраняется в бит AQ регистра состояния. При делении чисел без знака операция DIVS не применяется. В этом случае бит AQ устанавливается в 0. Он показывает, что остаток должен быть положительным.

Второй примитив деления — это команда DIVQ (деление-частное), которая выполняется многократно и генерирует по одному биту частного после очередного выполнения. При простой точности деления чисел без знака команда DIVQ выполняется 16 раз, для такой же точности деления чисел со знаком операция выполняется 15 раз после вычисления знакового разряда с помощью команды DIVS. Операция DIVQ проиллюстрирована на рис. 14.4. DIVQ сдвигает регистр AY0 влево на один разряд так, чтобы новый бит частного оказался в позиции младшего разряда (LSB). Состояние бита AQ, которое генерируется предыдущей операцией, определяет операцию ALU для вычисления частичного результата. Если AQ=1, то ALU добавляет делитель к частичному результату в AF. Если AQ=0, то ALU вычитает делитель из частичного результата в AF. Так же как и в операции DIVS, ALU выводит результат в регистр AF. Формат результата при любом числовом представлении определяется форматом делителя и делимого.

Рис. 14.4. Операция DIVQ

Пусть NL — число разрядов влево и NR — число разрядов вправо от двоичной точки делимого, DL и DR — соответственно то же самое, только для делителя. Тогда частное состоит из NL-DL+1 битов слева от двоичной точки и содержит NR-DR-1 битов справа. Ниже показан пример формата чисел при выполнении операции деления.

Делимое: XXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXX=5 бит NR=27 бит

Делитель: XX.XXXXXXXXXXXXXX=2 бит DR=14 бит

Частное: XXXX.XXXXXXXXXXXX

(NL-DL+1)=4 бит (NR-DR-1)=12 бит

Иногда необходимо некоторое изменение формата делимого и делителя. Например, если оба операнда знаковые и дробные (делимое в формате 1.31, а делитель в формате 1.15), то результат запишется в формате 1.15. Таким образом, для получения правильного результата операции деления необходимо, чтобы делимое было меньше делителя.

Чтобы разделить два целых числа (делимое в формате 32, а делитель в формате 16), необходимо перед делением привести делимое к формату 31, т.е. сдвинуть его влево на один разряд. Если результат не может быть представлен в формате частного, как сказано выше, или когда делитель равен нулю или меньше делимого по абсолютному значению, происходит переполнение.

При реализации алгоритма деления для знаковых операндов делитель должен храниться в AX0 и AX1 или в любом регистре с шины R. Старшее слово делимого может быть загружено в AY1 или AF, и младшее слово делимого загружается в AY0. Чтобы вычислить частное, сначала выполняется команда DIVS, которая вычисляет знак частного, за которой следуют 15 команд DIVQ, для вычисления 15 бит частного. Пример подпрограммы знакового деления с фиксированной точкой показан ниже. Эта подпрограмма берет делитель из регистра AX0, старшее слово делимого из AF и младшее слово делимого из AY0. Частное возвращается в AY0.

.MODULE Sig_Div_FP;

 Входные данные:

  AF = старшее слово делимого

  AY0 = младшее слово делимого

  AX0 = 16-битный делитель

 Выходные данные:

  AY0 = 16-битный результат

 Изменяемые регистры:

  AY0, AF

 Время вычисления=17 циклов

.ENTRY sdivfp;: DIVS AF, AX0; Вычисление знакового битаAX0; DIVQ AX0; DIVQ AX0; Вычисление 15 бит частногоAX0; DIVQ AX0; DIVQ AX0;AX0; DIVQ AX0; DIVQ AX0;AX0; DIVQ AX0; DIVQ AX0;AX0; DIVQ AX0; DIVQ AX0;;

.ENDMOD;

Ниже приводится полный список команд ALU в соответствии с принятыми ранее условными сокращениями. Назначение команд очевидно из их записи и комментариев для некоторых из команд. Команды сложения и сложения с переносом:

[IF cond] |AR| = xop + |yop     |;

          |AF|         |C       |

                       |yop + C |

                       |constant|

Команды вычитания и вычитания с займом:

[IF cond] |AR| = xop - |yop     |;

          |AF|         |yop+С-1 |

                       |constant|

[IF cond] |AR| = yop - |xop     |;

          |AF|         |xop+C-1 |

                       |constant|

Команды логических операций И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ:

[IF cond] |AR| = xop |AND| yop;

          |AF|       |OR |

                     |XOR|

Команды передачи:

[IF cond] |AR| = PASS|xop     |;

          |AF|       |yop     |

                     |constant|

Команды смены знака:

[IF cond] |AR| = - |xop|;

          |AF|     |yop|

Команды логического отрицания HE:

[IF cond] |AR| = NOT |xop|;

          |AF|       |yop|

                     |0  |

Команды вычисления абсолютного значения:

[IF cond] |AR| = ABS |xop|;

          |AF|

Команды инкремента:

[IF cond] |AR| = |yop+1|;

          |AF|

Команды декремента:

[IF cond] |AR| = |yop-1|;

          |AF|

Команды битовых операций:

[IF cond] |AR| = |TSTBIT n xop|; операция логического «И» разряда n с 1

                 |SETBIT n xop|; операция установки разряда n в 1

                 |CLBIT  n xop|; операция установки разряда n в 0

                 |TGBIT  n xop|; операция «ИСКЛЮЧАЮЩЕЕ ИЛИ» бита n с 1

Здесь n могут принимать значения от 0 до 15

Команды поразрядного деления:

[IF cond] |AR| = DIVS yop, xop;

[IF cond] |AR| = DIVQ xop;

Команды тестирования результата:= <ALU>;

Последняя команда выполняет заданную команду АЛУ, устанавливает флаги и сбрасывает значение результата. Она позволяет тестировать значения в регистрах без изменения содержимого AR или AF. Строка <ALU> — это любая безусловная команда АЛУ, кроме DIVS, DIVQ и дополнительных команд АЛУ с константами.

Для всех приведенных выше команд ALU разрешено использовать следующие операнды:: AX0, АХ1, AR, MR0, MR1, MR2, SR0, SR1; yop: AY0, AY1, AF;: 0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32767, -2, -3, -5, -9, -17, -33, -65, -129, -257, -513, -1025, -2049, -4097, -8193, -16385, -32768.

Команда DIVS не может использовать регистр AY0 как оператор yop. Коды условия IF соответствуют кодам, приведенным ранее в табличном виде.

Примеры записи команд:=AX0+AY0+C; /* Присвоить регистру AR значение суммы регистров AX0, AY0

 и переноса*/EQ AR=AX0+AY0+C; /* Выполнение описанной выше операции при условии

 равенства нулю предыдущего результата */=TSTBIT 7 AX; /* Занести в регистр AF значение результата операции

 логического «И» разряда 7 с единицей */

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]