Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++ — страница 30 из 43

Устройство сдвига именуется как Shifter и обеспечивает полный набор сдвиговых функций для 16-разрядных операндов, результатом которых является 32-разрядное слово данных. К числу сдвиговых функций относятся арифметические сдвиги, логические сдвиги и нормализация. Кроме того, shifter позволяет вычислить порядок (экспоненту) числа и порядок для целого массива (блока) чисел. Эти базовые функции могут быть объединены для быстрого преобразования любого формата чисел, в том числе и чисел с плавающей точкой.

Структура устройства сдвига

На рис. 16.1 представлена структурная схема устройства сдвига. Shifter включает в себя следующие основные блоки: массив сдвига, логику OR/PASS (ИЛИ/ПЕРЕДАЧА), детектор порядка и логику сравнения порядка.

Рис. 16.1. Структурная схема устройства сдвига

Массив сдвига состоит из шестнадцати 32-разрядных регистров. Он принимает 16-разрядные данные и в одном цикле может поместить их в любой позиции 32-разрядного поля вывода, начиная с данных, полностью сдвинутых влево, и кончая данными, полностью сдвинутыми вправо, за один цикл. Это дает 49 вариантов возможных размещений 16-разрядных входных данных в 32- разрядном поле вывода, как показано в табл. 16.1.


Таблица 16.1 Варианты возможных размещений 16-разрядных входных данных в 32-разрядном поле вывода

NРазряды
313029282726252423222120191817161514131211109876543210
1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX15
3XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1514
17XXXXXXXXXXXXXXXX1514131211109876543210
18XXXXXXXXXXXXXXX1514131211109876543210X
331514131211109876543210XXXXXXXXXXXXXXXX
3414131211109876543210XXXXXXXXXXXXXXXXX
4710XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
480XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
49XXXXXXXXXXXXXXXXXXXXXXXXXXXXZXXX

Размещение 16 входных разрядов определяется кодом управления «С» и сигналом ссылки HI/LO. Код управления «С» является 8-битным значением, которое указывает направление сдвига и число разрядов, на которое необходимо будет сдвинуть данные.

Положительные значения кода управления указывают на сдвиг данных влево, а отрицательные на сдвиг вправо. Код управления может быть взят из регистра экспоненты SE или непосредственно из инструкции команды. Сигнал ссылки HI/LO определяет начальную точку сдвига. В состоянии HI все сдвиги производятся относительно регистра SR1 (старшей половины выходных данных), а в состоянии LO все сдвиги производятся относительно регистра SR0 (младшей половины выходных данных). В табл. 16.2 показаны все возможные комбинации сдвигов данных для сигналов ссылки LO и HI.


Таблица 16.2 Возможные комбинации сдвигов данных для сигналов ссылки L0 и HI

Управляющий код для сигнала сдвигаВыходное значение массива сдвига
HILO
+16…+127+32…+12700000000000000000000000000000000
+15+31R0000000000000000000000000000000
+14+30PR000000000000000000000000000000
+13+29NPR00000000000000000000000000000
+12+28MNPR0000000000000000000000000000
+11+27LMNPR000000000000000000000000000
+10+26KLMNPR00000000000000000000000000
+9+25JKLMNPR0000000000000000000000000
+8+24IJKLMNPR000000000000000000000000
+7+23HIJKLMNPR00000000000000000000000
+6+22GHIJKLMNPR0000000000000000000000
+5+21FGHIJKLMNPR000000000000000000000
+4+20EFGHIJKLMNPR00000000000000000000
+3+19DEFGHIJKLMNPR0000000000000000000
+2+18CDEFGHIJKLMNPR000000000000000000
+1+17BCDEFGHIGKLMNPR00000000000000000
0+16ABCDEFGHIJKLMNPR0000000000000000
-1+15XABCDEFGHIJKLMNPR000000000000000
-2+14XXABCDEFGHIJKLMNPR00000000000000
-3+13XXXABCDEFGHIJKLMNPR0000000000000
-4+12XXXXABCDEFGHIJKLMNPR000000000000
-5+11ХХХХХАВСDEFGHIJKLMNPR00000000000
-6+10ХХХХХХАВCDEFGHIJKLMNPR0000000000
-7+9XXXXXXXABCDEFGHIJKLMNPR000000000
-8+8XXXXXXXXABCDEFGHIJKLMNPR00000000
-9+7XXXXXXXXXABCDEFGHIJKLMNPR0000000
-10+6XXXXXXXXXXABCDEFGHIJKLMNPR000000
-11+5XXXXXXXXXXXABCDEFGHIJKLMNPR00000
-12+4XXXXXXXXXXXXABCDEFGHIJKLMNPR0000
-13+3XXXXXXXXХХХХХАВСDEFGHIJKLMNPR000
-14+2XXXXXXXXХХХХХХАВCDEFGHIJKLMNPR00
-15+1XXXXXXXXХХХХХХХАBCDEFGHIJKLMNPR0
-160