Разработка устройств на основе цифровых сигнальных процессоров фирмы Analog Devices с использованием Visual DSP++
Шрифт:
Таблица 16.1 Варианты возможных размещений 16-разрядных входных данных в 32-разрядном поле вывода
N | Разряды | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
1 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
2 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | 15 |
3 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | 15 | 14 |
… | ||||||||||||||||||||||||||||||||
17 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
18 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | X |
… | ||||||||||||||||||||||||||||||||
33 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
34 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
… | ||||||||||||||||||||||||||||||||
47 | 1 | 0 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
48 | 0 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X |
49 | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | X | Z | X | X | X |
Размещение 16
Положительные значения кода управления указывают на сдвиг данных влево, а отрицательные на сдвиг вправо. Код управления может быть взят из регистра экспоненты SE или непосредственно из инструкции команды. Сигнал ссылки HI/LO определяет начальную точку сдвига. В состоянии HI все сдвиги производятся относительно регистра SR1 (старшей половины выходных данных), а в состоянии LO все сдвиги производятся относительно регистра SR0 (младшей половины выходных данных). В табл. 16.2 показаны все возможные комбинации сдвигов данных для сигналов ссылки LO и HI.
Таблица 16.2 Возможные комбинации сдвигов данных для сигналов ссылки L0 и HI
Управляющий код для сигнала сдвига | Выходное значение массива сдвига | ||||
---|---|---|---|---|---|
HI | LO | ||||
+16…+127 | +32…+127 | 00000000 | 00000000 | 00000000 | 00000000 |
+15 | +31 | R0000000 | 00000000 | 00000000 | 00000000 |
+14 | +30 | PR000000 | 00000000 | 00000000 | 00000000 |
+13 | +29 | NPR00000 | 00000000 | 00000000 | 00000000 |
+12 | +28 | MNPR0000 | 00000000 | 00000000 | 00000000 |
+11 | +27 | LMNPR000 | 00000000 | 00000000 | 00000000 |
+10 | +26 | KLMNPR00 | 00000000 | 00000000 | 00000000 |
+9 | +25 | JKLMNPR0 | 00000000 | 00000000 | 00000000 |
+8 | +24 | IJKLMNPR | 00000000 | 00000000 | 00000000 |
+7 | +23 | HIJKLMNP | R0000000 | 00000000 | 00000000 |
+6 | +22 | GHIJKLMN | PR000000 | 00000000 | 00000000 |
+5 | +21 | FGHIJKLM | NPR00000 | 00000000 | 00000000 |
+4 | +20 | EFGHIJKL | MNPR0000 | 00000000 | 00000000 |
+3 | +19 | DEFGHIJK | LMNPR000 | 00000000 | 00000000 |
+2 | +18 | CDEFGHIJ | KLMNPR00 | 00000000 | 00000000 |
+1 | +17 | BCDEFGHI | GKLMNPR0 | 00000000 | 00000000 |
0 | +16 | ABCDEFGH | IJKLMNPR | 00000000 | 00000000 |
– 1 | +15 | XABCDEFG | HIJKLMNP | R0000000 | 00000000 |
– 2 | +14 | XXABCDEF | GHIJKLMN | PR000000 | 00000000 |
– 3 | +13 | XXXABCDE | FGHIJKLM | NPR00000 | 00000000 |
– 4 | +12 | XXXXABCD | EFGHIJKL | MNPR0000 | 00000000 |
– 5 | +11 | ХХХХХАВС | DEFGHIJK | LMNPR000 | 00000000 |
– 6 | +10 | ХХХХХХАВ | CDEFGHIJ | KLMNPR00 | 00000000 |
– 7 | +9 | XXXXXXXA | BCDEFGHI | JKLMNPR0 | 00000000 |
– 8 | +8 | XXXXXXXX | ABCDEFGH | IJKLMNPR | 00000000 |
– 9 | +7 | XXXXXXXX | XABCDEFG | HIJKLMNP | R0000000 |
– 10 | +6 | XXXXXXXX | XXABCDEF | GHIJKLMN | PR000000 |
– 11 | +5 | XXXXXXXX | XXXABCDE | FGHIJKLM | NPR00000 |
– 12 | +4 | XXXXXXXX | XXXXABCD | EFGHIJKL | MNPR0000 |
– 13 | +3 | XXXXXXXX | ХХХХХАВС | DEFGHIJK | LMNPR000 |
– 14 | +2 | XXXXXXXX | ХХХХХХАВ | CDEFGHIJ | KLMNPR00 |
– 15 | +1 | XXXXXXXX | ХХХХХХХА | BCDEFGHI | JKLMNPR0 |
– 16 | 0 | XXXXXXXX | ХХХХХХХХ | ABCDEFGH | IJKLMNPR |
– 17 | – 1 | XXXXXXXX | ХХХХХХХХ | XABCDEFG | HIJKLMNP |
– 18 | – 2 | XXXXXXXX | ХХХХХХХХ | XXABCDEF | GHIJKLMN |
– 19 | – 3 | XXXXXXXX | ХХХХХХХХ | XXXABCDE | FGHIJKLM |
– 20 | – 4 | XXXXXXXX | ХХХХХХХХ | XXXXABCD | EFGHIJKL |
– 21 | – 5 | XXXXXXXX | ХХХХХХХХ | ХХХХХАВС | DEFGHIJK |
– 22 | – 6 | XXXXXXXX | ХХХХХХХХ | ХХХХХХАВ | CDEFGHIJ |
– 23 | – 7 | XXXXXXXX | ХХХХХХХХ | XXXXXXXA | BCDEFGHI |
– 24 | – 8 | XXXXXXXX | ХХХХХХХХ | XXXXXXXX | ABCDEFGH |
– 25 | – 9 | XXXXXXXX | ХХХХХХХХ | XXXXXXXX | XABCDEFG |
– 26 | – 10 | XXXXXXXX | ХХХХХХХХ | XXXXXXXX | XXABCDEF |
– 27 | – 11 | XXXXXXXX | ХХХХХХХХ | XXXXXXXX | XXXABCDE |
– 28 | – 12 | XXXXXXXX | ХХХХХХХХ | XXXXXXXX | XXXXABCD |
– 29 | – 13 | XXXXXXXX | ХХХХХХХХ | XXXXXXXX | ХХХХХАВС |
– 30 | – 14 | XXXXXXXX | ХХХХХХХХ | XXXXXXXX | ХХХХХХАВ |
– 31 | – 15 | XXXXXXXX | ХХХХХХХХ | XXXXXXXX | ХХХХХХХА |
– 32…-128 | – 16…-128 | XXXXXXXX | ХХХХХХХХ | XXXXXXXX | ХХХХХХХХ |
Массив
сдвига и связанная с ним логика OR/PASS находятся в окружении набора регистров. Входной регистр SI (Shifter Input) содержит данные для массива сдвига и детектора порядка. Разрядность регистра SI составляет 16 бит.Этот регистр записывается с DMD-шины. В качестве входных регистров для массива сдвига и детектора порядка могут служить регистры AR, SR или MR, подключенные через R-шину. Выходной 32-разрядный регистр SR (Shifter Result) разделен на два 16- разрядных регистра SR0 и SR1. Загрузка данных в эти регистры может производиться с DMD-шины, а результат выводится на R-шину или DMD-шину. Регистр SR подключен к блоку OR/PASS логики для проведения сдвигов двойной точности.
Регистр SE (Shifter Exponent) состоит из 8 разрядов и содержит порядок во время нормализации и денормализации данных. Он доступен через 8 младших разрядов DMD-шины. Его формат 8.0 в дополнительном коде.
Регистр SB (Shifter Block) используется в блочных операциях для чисел с плавающей точкой. Его значение определяет сдвиг для нормализации чисел в блоке данных, т.е. значение, на которое должен произойти сдвиг для нормализации самого большого числа в блоке данных. Разрядность регистра SB составляет 5 бит. Он доступен через 5 младших разрядов DMD-шины. Его формат 5.0 в дополнительном коде.
При чтении регистров SE и SB на DMD-шину числа автоматически дополняются знаковыми битами до 16-разрядного значения. Любой из регистров SI, SE, SR может быть прочитан или записан в одном и том же цикле.
Shifter также имеет банк теневых регистров SI, SE, SR и SB. Выбор банка регистров производится установкой нулевого бита регистра режима MSTAT процессора.
Устройство сдвига заполняет все биты 32-разрядного результата правее сдвига нулями, а левее сдвига битом расширения. Бит расширения может принимать значение знакового бита, бита флага АС из регистра ASTAT или нулевое значение, в зависимости от выполняемой инструкции.
Логика OR/PASS позволяет правильно комбинировать сдвинутые секции числа с двойной точностью. При выборе инструкции PASS результат массива сдвигов загружается в регистр SR без изменения. При выборе инструкции OR результат массива сдвигов подвергается операции «ЛОГИЧЕСКОЕ ИЛИ» с предыдущим значением регистра SR и после этого вновь помещается в SR.
Детектор порядка вычисляет степень из входного операнда устройства сдвига. Входное значение для него интерпретируется в зависимости от одного из трех режимов, в котором он работает.