А.В. КОМАРОВЦИФРОВЫЕ СИГНАЛЬНЫЕ ПРОЦЕССОРЫОБНИНСК 2003Комаров А.В. Цифровые сигнальные процессоры. – Обнинск, 2003, - 141 с.Настоящее издание является учебным курсом для изучения архитектуры цифровых сигнальных процессоров (и систем на их основе) на примере процессора ADSP-2181. Пособие поддерживает курс Процессоры цифровой обработки сигналов, который обычно читается студентам специальности 22.01 - Вычислительные машины, комплексы, системы и сети. Пособие содержит две главы. В первой главе рассматриваются особенности структурной схемы ADSP-2181, его система команд, а также примеры программирования. Во второй главе рассматриваются методы создания микропроцессорной системы на основе ADSP-2181. Настоящий конспект лекций может быть полезен не только для студентов специальности 22.01, но и для всех желающим познакомиться с основами разработки аппаратных средств и программного обеспечения цифровых сигнальных процессоров. А. Комаров, 2003 г.СОДЕРЖАНИЕАРХИТЕКТУРА ADSP-2181………………………………………. 5 1.1. Описание выводов процессора…………………………………. 5 1.2. Структурная схема ADSP-2181………………………………… 7 1.3. Память программ………………………………………………... 11 1.4. Память данных…………………………………………………... 12 1.5. Функциональная схема ALU …………………………………… 13 1.6. Функциональная схема MAC…………………………………… 15 1.7. Функциональная схема SHIFTER………………………………. 17 1.8. Функциональная схема программного конвейера…………….. 22 1.9. Система прерываний…………………………………………….. 28 1.9.1. Общие сведения…………………………………………….. 28 1.9.2. Последовательность обслуживания прерываний………… 29 1.9.3. Конфигурирование прерываний…………………………… 29 1.10. Регистры состояния и стек…………………………………….. 31 1.11. Передача данных……………………………………………….. 34 1.11.1. Генераторы адресов……………………………………….. 35 1.11.2. Узел обмена данными…………………………………….. 36 1.12. Последовательные порты……………………………………… 37 1.12.1. Общие сведения…………………………………………… 37 1.12.2. Программирование SPORT……………………………….. 40 1.12.3. Пример конфигурирования последовательных портов… 43 1.12.4. Сжатие данных…………………………………………….. 44 1.12.5. Автобуферизация………………………………………….. 45 1.12.6. Пример программирования автобуферизации…………... 46 1.12.7. Многоканальность…………………………….…………... 47 1.13. Таймер…………………………………………………………... 48 1.14. Системный интерфейс…………………………………………. 50 1.14.1. Сигналы синхронизации………………………………….. 51 1.14.2. Внешние прерывания……………………………………... 53 1.14.3. Флажковые биты…………………………………………... 54 1.14.4. Режим энергосбережения…………………………………. 54 1.15. Контроллер прямого доступа к байтовой памяти (BDMA)…. 56 1.15.1. Общие сведения…………………………………………… 56 1.15.2. Регистры управления BDMA……………………………... 57 1.15.3. Функционирование BDMA……………………………….. 57 1.15.4. Загрузка программ с помощью BDMA…………………... 58 1.16. Порт IDMA……………………………………………………... 59 1.16.1. Сигналы IDMA…………………………………………….. 59 1.16.2. Функционирование IDMA………………………………... 60 1.16.3. Загрузка программ с помощью IDMA…………………… 60 1.17. Система команд………………………………………………… 61 1.17.1. Общие сведения…………………………………………… 61 1.17.2. Методы адресации……………………………………….... 62 1.17.3. Условные обозначения……………………………………. 63 1.17.4. Команды пересылки данных……………………………… 64 1.17.5. Команды ALU……………………………………………... 70 1.17.6. Команды MAC…………………………………………….. 79 1.17.7. Команды SHIFTER………………………………………... 82 1.17.8. Команды управления потоком программы……………… 88 1.17.9. Многофункциональные команды………………………… 92 1.17.10. Прочие команды…………………………………………. 98 1.18. Инструментальные средства разработки программного обеспечения……………………………………………………. 101 1.18.1. Инструментальные средства для DOS…………………… 101 1.18.2. Инструментальные средства для WINDOWS…………… 102 1.18.3. Создание проекта в VisualDSP…………………………… 102 1.18.4. Загрузка программы в EZ-KIT Lite………………………. 103 1.19. Примеры программирования в среде VisualDSP…………….. 104 1.19.1. Формирование эхо-сигнала………………………………. 104 1.19.2. Эмуляция интерфейса RS-232……………………………. 112 1.19.3. Эмуляция интерфейса RS-232 (смешанный вариант)…... 1242. АРХИТЕКТУРА СИСТЕМЫ НА ОСНОВЕ ADSP-2181………….. 131 2.1. Структурная схема вычислительной (управляющей) системы на основе ADSP-2181………………………………………………….131 2.2. Цепи синхронизации и запуска процессора…………………….133ПРИЛОЖЕНИЕ 1. ФОРМАТ РЕГИСТРОВ УПРАВЛЕНИЯ………... 134П1.1. System control register………………………………………….. 134 П1.2. Data memory waitstate register…………………………………. 134П1.3. SPORT0 autobuffer control register……………………………. 135П1.4. SPORT0 control register………………………………………... 135П1.5. SPORT1 autobuffer control register……………………………. 136П1.6. SPORT1 control register……………………………………….. 137П1.7. Programmable flags & Composite select control………………. 137П1.8. Programmable flag data………………………………………… 138П1.9. BDMA word count……………………………………………… 138П1.10. BDMA control………………………………………………… 138П1.11. BDMA external address……………………………………….. 139П1.12. BDMA internal address……………………………………….. 139П1.13. IDMA control………………………………………………….. 139П1.14. ICNTL register………………………………………………… 140П1.15. IMASK register………………………………………………... 140П1.16. IFC register……………………………………………………. 140ЛИТЕРАТУРА…………………………………………………………... 141^ 1. АРХИТЕКТУРА ADSP-2181 1.1. Описание выводов процессораУсловное графическое обозначение процессора ADSP2181 приведено на рис. 1.1. На этом рисунке условно не показаны 6 выводов питания (Vdd = +5V), 11 общих выводов (GND), а также 9 сигналов, которые используются только для связи с эмулятором. Стрелки показывают направления передачи сигналов по отношению к процессору, по сути, тип вывода: вход, выход, вход/выход. Перечеркнутая линия является шиной, а рядом стоящая цифра показывает число ее проводников.Рис. 1.1. Условное графическое изображение ADSP-2181Сигналы процессора имеют следующее назначение.ADDR[13:0] – 14-битная шина адреса (ША) адресных пространств памяти программ (ПП), памяти данных (ПД), ввода/вывода и байтовой памяти (БП), см. п. 1.2. ША работает только на выход.DATA[23:0] – 24-битная шина данных (ШД) адресных пространств ПП, ПД, ввода/вывода и БП, см. п. 1.2. ШД работает на выход, когда процессор выводит данные в одно из адресных пространств и на вход, когда процессор вводит данные из одного из адресных пространств.RESET# – входной сигнал начальной установки процессора, см. п. 1.14.1.IRQ2# (Interrupt Request) – входной сигнал запроса прерывания по уровню или по фронту, см. п. 1.9.IRQL0#, IRQL1# (Interrupt Request Level) – входные сигналы запроса прерывания по уровню, см. п. 1.9.IRQE# (Interrupt Request Edge) – входной сигнал запроса прерывания по фронту, см. п. 1.9.BR# (Bus Request) – входной сигнал запроса шины.BG# (Bus Grant) – выходной сигнал подтверждения запроса шины.BGH# (Bus Grant Hung) – выходной сигнал оповещения о том, что процессор, находясь в режиме захвата, завершил все свои внутренние операции и нуждается в шине.^ PMS# (Program Memory Select), DMS# (Data Memory Select), IOMS# (Input/Output Select), BMS# (Byte Memory Select), CMS# (Combine Memory Select) – выходные селектирующие сигналы ПП, ПД, ввода/вывода, БП и комбинированный соответственно, см. п. 2.1.RD# (Read) – выходной сигнал чтения всех видов адресных пространств.^ WR# (Write) – выходной сигнал записи во все виды адресных пространств.MMAP (Memory Map) – входной сигнал выбора карты памяти. Если MMAP = 0, то адреса 0х0000…0x1FFF принадлежат внутренней ПП процессора, а адреса 0x2000…0x3FFF – внешней. В противном случае – наоборот, см. пп. 1.3, 1.14.1, 1.15.4, 1.16.3.BMODE (Boot Mode) – входной сигнал источника загрузки программы. Действителен только при MMAP = 0, когда адреса 0х0000…0x1FFF принадлежат внутренней ПП (см. выше) и необходима загрузка программы. Если это условие выполнено, то при BMODE = 0 источником программы является БП доступная через порт BDMA (см. п. 1.15.4). В противном случае, загрузка программы осуществляется через порт IDMA (см. п. 1.16.3).CLKIN (Clock Input), XTAL (Quartz Crystal Input) – входы хронирующей цепи встроенного генератора тактовых импульсов процессора, см. п. 1.14.1.CLKOUT (Clock Output) – выходной синхросигнал процессора, частота которого в два раза выше частоты входного синхросигнала на входе CLKIN, см. п. 1.14.4.SPORT0, SPORT1 (Serial Port0, 1) – входы/выходы последовательных портов 0 и 1, см. п. 1.12.IRD# (IDMA Read), IWR# (IDMA Write), IS# (IDMA Select), IAL (IDMA Address Latch) – управляющие сигналы доступа к портам контроллера прямого доступа к памяти (КПДП) IDMA, см. п. 1.16.IAD – 16-битная шина адреса/данных КПДП IDMA, см. п. 1.16.IACK# (IDMA Acknowledge) – подтверждение доступа к портам КПДП IDMA, см. п. 1.16.PWD# (Power Down) – перевод процессора в режим энергосбережения (при PWD# = 0) , см. п. 1.14.4.PWDACK (Power Down Acknowledge) – выходной сигнал подтверждения режима энергосбережения, см. п. 1.14.4.FL2:0 – выходные сигналы внутреннего 3-битного параллельного порта процессора (выходные флаги) , см. п. 1.14.3.PF7:0 – программируемые входы/выходы процессора, см. п. 1.14.3.^ 1.2. Структурная схема ADSP-2181Структурную схему процессора можно условно разделить на две части: базовую (общую для всех процессоров ADSP-21хх, рис 1.2.) и периферийную (характерную, в основном, для процессора ADSP-2181, рис. 1.3).Рис. 1.2 показывает, что к базовой части процессора отнесены:внутренние шины PMA BUS, DMA BUS, PMD BUS DMD BUS, I BUS, R BUS;узел обмена данными BUS EXCH(ANGE);вычислительные устройства ALU (арифметико-логическое устройство), MAC (Multiplier/ACcumulator - умножитель/аккумулятор) и SHIFTER (устройство сдвига); ^ генераторы адресов данных DAG1 и DAG2, регистр команд INSTRUCTION REGISTER и программный конвейер PROGRAM SEQUENCER. Внутренние шины обеспечивают пересылку команд из ПП, а также данных из памяти данных в вычислительные устройства и обратно. К ним относятся: шина адреса ПП PMA BUS (Program Memory Address Bus), шина адреса ПД DMA BUS (Data Memory Address Bus), шина данных ПП PMD BUS (Program Memory Data Bus), шина данных ПД DMD BUS (Data Memory Data Bus), шина команд I BUS (Instruction Bus) и шина результатов вычислений R BUS (Result Bus). Можно говорить о наличии у процессора четырех магистралей: ПП PMA, PMD BUS, ПД DMA, DMD BUS, команд I BUS и результатов вычислений R BUS. Наличие множества внутренних магистралей позволяет распараллеливать процесс пересылок команд и данных, в частности, можно совместить во времени вычисление и считывание данных из памяти программ и памяти данных (см. п. 1.17.9). Это позволяет существенно повысить производительность процессора. Магистрали ПП и ПД соединены между собой с помощью узла обмена данными BUS EXCH (см. п. 1.5). Ширина адресных шин (PMA, DMA) – 14 бит, что обеспечивает доступ к 16К ячейкам памяти. Ширина шины данных ПП (PMD, I) – 24 бита по числу бит команды процессора. Все оставшиеся шины (DMD, R) имеют ширину 16 бит, что позволяет обмениваться 16-битными данными за один цикл доступа к ПД. Все вычислительные устройства имеют входные регистры (INP REGS), над содержимым которых они выполняют арифметические операции или операции сдвига. В ALU и MAC к таким регистрам относятся Х- и Y- регистры (см. пп. 1.5, 1.6), а в SHIFTER – S-регистр. Х- и S-регистры подключаются к DMD, а Y-регистры – к PMD, что позволяет одновременно считывать данные из памяти данных в Х-регистры, а из памяти программ – в Y-регистры вычислительных устройств. Результаты арифметических операций и операций сдвига сохраняются в выходных регистрах (OUT REGS) вычислительных устройств, которые связаны с DMD и шиной результатов R. Шина DMD используется для обмена данными с ПД. Шина результатов позволяет использовать результат операции одного вычислительного устройства в качестве операнда в другом вычислительном устройстве без потери времени на сохранение результата операции в ПД. DAG1 и DAG2 используются для реализации косвенной и косвенной автоинкрементной/автодекрементной адресации данных (см. п. 1.11), поскольку среди прочих содержат по четыре регистра указателей.Программный конвейер формирует адреса инструкций для ПП. Он управляет регистром инструкций, который содержит исполняемую в данный момент команду. Команды загружаются в регистр инструкций в течение одного цикла, а исполняются в течение следующего, одновременно с загрузкой следующей инструкции.I BUSРис. 1.3 показывает, что к периферийной части процессора отнесены:мультиплексор шины адреса MUX1;мультиплексор шины данных MUX2;память программ – PROGRAM SRAM;память данных – DATA SRAM;байтовый КПДП – BDMA (Byte DMA Controller);внутренний КПДП – IDMA PORT (Internal DMA PORT);последовательные синхронные порты SERIAL PORT0, 1;таймер – TIMER;узел управления энергосбережением процессора – PDCL (Power Down Control Logic); программируемые входы/выходы – PROG(rammable). I/O; выходы флагов – FLAGS;входы запросов прерываний – INTERRUPTS. Периферийная и базовая части процессора соединяется внутренними шинами I, PMA, DMA, PMD, DMD. На рис. 1.3 их выходы изображены слева. Справа и снизу изображены внешние входы/выходы, которыми процессор соединяется с внешним миром. Для выдачи адреса на внешнюю шину адреса EXTERNAL ADDRESS BUS используется мультиплексор шины адреса MUX1. Если идет обращение к внешнему адресному пространству ПП, то на внешнюю шину адреса попадает код адреса с PMA. Если идет обращение к внешнему адресному пространству ПД, то на внешнюю шину адреса попадает код адреса с DMA. Выводы внешней шины адреса имеют обозначения ADDR[13:0] (см. п. 1.1). Для взаимодействия с внешней шиной данных (ввод команд или ввод/вывод данных) EXTERNAL DATA BUS используется мультиплексор шины данных MUX2. Если идет обращение к внешнему адресному пространству ПП, то код команды с внешней шины данных попадает на PMD. Если идет обращение к внешнему адресному пространству ПД, то внешняя шина данных соединяется с DMD. Выводы внешней шины данных имеют обозначения DATA[23:0] (см. п. 1.1). ПП (см. п. 1.3) используется для хранения программы и данных. Это ОЗУ статического типа (SRAM – Static RAM), поэтому во время сброса процессора обычно осуществляется загрузка программы (см. пп. 1.15.4, 1.16.3). ПД (см. п. 1.4) используется для хранения данных. В ее адресном пространстве располагаются также некоторые регистры специального назначения (РСН, см. пп. П1.1-П1.16). Байтовый КПДП (см. п. 1.15) используется для взаимодействия с БП процессора (ввод программ, ввод/вывод данных). БП подключается к внешней магистрали процессора (внешние шины адреса и данных) с использованием селектирующего сигнала BMS# (см. п. 1.1). В частности, байтовая память может использоваться для хранения программы, которая во время сброса процессора загружается во внутреннюю ПП. Записать данные в БП или считать их оттуда прямо из программы (без использования байтового КПДП) невозможно, поскольку только байтовый КПДП формирует сигнал BMS#. Внутренний КПДП (см. п. 1.16) используется для связи с внешним миром, например, для ввода программы во внутреннюю ПП при сбросе процессора, а также для ввода и вывода данных. Имеет собственную магистраль (см. п. 1.1), в которую входят: шина адреса/данных IAD[15:0] и шина управления IRD#, IWR#, IS#, IAL, IACK#. Поскольку шина адреса данных 16-битная, возможен обмен двухбайтными словами. Последовательные синхронные порты (см. п. 1.12) используются для связи с внешним миром, например, для связи с другим процессором или любым другим последовательным синхронным портом. Связь осуществляется с использованием пяти выводов. По одному из них данные принимаются в регистр REC REG, по другому данные выдаются из регистра TRN REG, оставшиеся выводы используются для формирования управляющих сигналов. На рис. 1.3 условно не показан узел уплотнения данных COMPANDING CIRCUITRY, который связан с последовательными портами. Таймер (см. п. 1.13) используется для формирования промежутков времени заданной длительности. Задание длительности, запуск и останов таймера осуществляется программно. Таймер формирует внутренние запросы на прерывание. Узел управления энергосбережением процессора (см. п. 1.14.4) осуществляет поддержку входного сигнала PWD# и команд процессора IDLE, IDLE(n) (см. п. 1.17.8.з). Один из выходных сигналов узла PWDACK (см. п. 1.1) отражает состояние процессора (обычное или сохранения энергии). Программируемые входы/выходы (см. п. 1.14.3) используется для связи с внешним миром. Каждая из этих линий может быть запрограммирована на ввод или вывод. Имеют обозначения PF7:0 (см. п. 1.1). Выходы флагов (см. п. 1.14.3) используется для связи с внешним миром, например для вывода управляющих сигналов или сигналов состояния. Имеют обозначения FL2:0 (см. п. 1.1). Входы запросов прерываний (см. п. 1.9) служат для ввода внешних сигналов запроса прерываний с различными свойствами IRQ2#, IRQL0#, IRQL1#, IRQE# (см. п. 1.1). 1.3. Память программПП представляет собой ОЗУ объемом 16К х 24. Кроме этого возможно использование 8К х 24 внешней памяти оверлеев. При использовании этой памяти всегда вставляются такты ожидания, число которых определяется содержимым битовой группы PWAIT регистра System Control Register (РСН, расположенный в ПД по адресу 0х3FFF, см. п. П1.1). Организация адресного пространства ПП (рис. 1.4) управляется внешним сигналом MMAP (см. п. 1.1) и содержимым программно доступного РСН PMOVLAY. Как показывает рис.1.4, при MMAP = 0 8К младших адресов принадлежат внутренней оперативной памяти. Это вынуждает при старте процессора (см. п. 1.14.1) производить загрузку программы (см. пп. 1.15.4, 1.16.3), поскольку процессор стартует с нулевого адреса. Старшие 8К адресов с помощью РСН PMOVLAY назначены на внутреннюю (PMOVLAY = 0) или внешнюю (PMOVLAY = 1 или 2) память процессора. Табл. 1.1 показывает выбор номера оверлея с помощью содержимого РСН PMOVLAY. Таблица 1.1 Выбор номера оверлея с помощью содержимого РСН PMOVLAY PMOVLAY Память ADDR13 ADDR[12:0] 0 Внутренняя — — 1 Внешний оверлей 1 0 13 младших битов адреса формируют коды 0х0000…0x3FFF 2 Внешний оверлей 2 1 Тоже самое Табл. 1.1 показывает, что в PMOVLAY хранится номер банка (оверлея) программ, а адресный бит ADDR13 является селектирующим (наряду с PMS# (см. п. 1.1)). Следует проявлять осторожность при использовании оверлейной памяти. Возможно, в ней лучше всего держать подпрограммы, которые вызываются из программы, функционирующей во внутренней ПП.Если MMAP = 1, то 8К младших адресов принадлежат внешней памяти (см. рис. 1.4 б). Обычно, это ПЗУ, поэтому загрузка программы во время старта не нужна. Старшие 8К адресов принадлежат внутренней оперативной памяти, а содержимое PMOVLAY не может отличаться от нуля.1.4. Память данныхПД представляет собой ОЗУ объемом 16352 х 16. Кроме этого возможно использование 8К х 16 внешней памяти оверлеев. При использовании этой памяти всегда вставляются такты ожидания, число которых определяется содержимым битовой группы DWAIT регистра Data Memory Waitstate Register (РСН, расположенный в ПД по адресу 0х3FFE, см. п. П1.2). Организация адресного пространства ПД (рис. 1.5) управляется содержимым программно доступного РСН DMOVLAY. Как показывает рис.1.5, с помощью DMOVLAY можно сменить размещение только младших 8К адресов ПД. Если DMOVLAY = 0, то они назначены на внутреннюю память, а если DMOVLAY = 1 или 2, то – на внешнюю ПД процессора. Табл. 1.2 показывает выбор номера оверлея с помощью содержимого РСН DMOVLAY. Таблица 1.2 Выбор номера оверлея с помощью содержимого РСН DMOVLAY DMOVLAY Память ADDR13 ADDR[12:0] 0 Внутренняя — — 1 Внешний оверлей 1 0 13 младших битов адреса формируют коды 0х0000…0x3FFF 2 Внешний оверлей 2 1 Тоже самое Табл. 1.2 показывает, что в DMOVLAY хранится номер банка (оверлея) данных, а адресный бит ADDR13 является селектирующим (наряду с DMS# (см. п. 1.1)). Старшие 8К адресов всегда принадлежат внутренней оперативной памяти, причем, старшие 32 ячейки используются в качестве РСН (см. пп. П1.1-П1.16).^ 1.5. Функциональная схема ALUОснову ALU (рис. 1.6) составляет собственно ALU, которое выполняет арифметико-логические операции (см. п. 1.17.5) над 16-битными кодами, присутствующими на его Х- и Y- входах. Результат операции появляется на 16-битном выходе R(esult) и может быть запомнен в регистре результата AR (через мультиплексор MUX 4) или в регистре обратной связи AF (Alu Feedback). Кроме этого ALU формирует различные признаки (флаги, см. п. 1.10) результата, в частности: флаг нуля AZ (Alu Zero), флаг отрицательного результата AN (Alu Negative), флаг переноса AC (Alu Carry), флаг переполнения AV (Alu oVerflow), флаг знака Х-операнда AS (Alu Sign), значение бита частного AQ (Alu Quotient). Все флаги сохраняются в регистре арифметического состояния ASTAT (см. п. 1.10). Для выполнения команд, использующих перенос/заем, ALU использует значение флага переноса CI, который хранится в ASTAT. Мультиплексор MUX 2 выбирает значение Х-операнда (хор). Таковым может быть содержимое одного из АХ регистров (АХ0 или АХ1) или код, находящийся на шине результатов R BUS.Поскольку с шиной результата связаны регистры результата всех арифметических устройств, то хор (кроме АХ0, АХ1) могут быть AR, MR0, MR1, MR2 (см. п. 1.6) и SR0, SR1 (см. п. 1.7). АХ регистры связаны с шиной данных ПД (DMD BUS), поэтому в них может быть записан код из ПД и считан – в ПД. Система команд процессора (см. п. 1.17) позволяет чтение содержимого этих регистров в ПП, но это не прямой путь, а через BUS EXCH (см. рис. 1.2). Все АХ регистры двух портовые. Это означает, что в одном регистре находятся данные для ALU, а другой регистр одновременно взаимодействует с DMD BUS, т.е. выполнение команды может быть совмещено с чтением следующего операнда. Мультиплексор MUX 3 выбирает значение Y-операнда (yор). Таковым может быть содержимое одного из АY регистров (АY0 или АY1) или содержимое регистра AF. С помощью мультиплексора MUX 1 АY регистры связаны и с шиной данных ПД (DMD BUS), и с шиной данных ПП (PMD BUS). Поэтому в них может быть записан код из ПД и считан – в ПД, а также записан – из ПП. Система команд процессора (см. п. 1.17) позволяет чтение содержимого этих регистров в ПП, но это не прямой путь, а через BUS EXCH (см. рис. 1.2). Все АY регистры двух портовые. С помощью мультиплексора MUX 4 АR регистр связан с шиной данных ПД (DMD BUS), поэтому в него может быть записан код из ПД и считан – в ПД. Система команд процессора (см. п. 1.17) позволяет чтение содержимого этого регистра в ПП, но это не прямой путь, а через BUS EXCH (см. рис. 1.2). Любой регистр ALU может быть сосчитан и записан в одном и том же машинном цикле. Считывание регистра происходит в начале машинного цикла, в то время как запись – в конце. Это позволяет, например, считать из AR предыдущий результат и записать в него текущий в одном и том же машинном цикле. ALU содержит двойной банк регистров. На рис. 1.6 это отражено тенью. В одно и то же время доступен только один банк регистров. Дополнительный банк регистров может быть использован для быстрого переключения контекста задачи, например, в обработчиках прерываний. При этом не требуется сохранение контекста путем пересылки данных в память, например, в стек, как это делается во многих видах процессоров. Выбор номера банка регистров обеспечивает бит 0 в регистре состояния процессора MSTAT (см. п. 1.10). Если этот бит сброшен, то выбран первый банк регистров, в противном случае – второй.^ 1.6. Функциональная схема МАСОснову MAC (рис. 1.7) составляют умножитель MULTIPLIER и сумматор/вычитатель ADD/SUBTRACT. Умножитель выполняет операции умножения (см. п. 1.17.6) над 16-битными кодами, присутствующими на его Х- и Y- входах. Результат операции (произведение) появляется на 32-битном выходе P(roduct) и подается на один вход сумматора/вычитателя, на второй вход которого подается содержимое регистра результата MR (Mac Result).Регистр результата представляет собой совокупность трех регистров MR2…MR0, первый из которых (MR2) 8-битный, второй и третий – 16-битные. В зависимости от команды (см. п. 1.17.6) сумматор/вычитатель может просто передать произведение в регистры MR1, MR0 (с выходов R1, R0 через мультиплексоры MUX 5, MUX 6), а также может сложить/ вычесть произведение с/из содержимым/содержимого регистра результата MR. Произведение может быть запомнено не только в регистрах результата МR2…MR0 (через мультиплексоры MUX 4…MUX 6), но и в регистре обратной связи МF (Мас Feedback). При этом используется выход R1 сумматора/вычитателя, поскольку – это выход старшего слова произведения. Выход R0 содержит младшее слово произведения (наименее значимое), а выход R2 служит для вывода переносов/заемов, которые могут возникнуть при операциях сложения/вычитания. При появлении переполнения МАС формирует признак MV (Mac oVerflow), который запоминается в регистре ASTAT. Регистры результата MR2…MR0 связаны с шиной результата R BUS, поэтому их содержимое может быть использовано в качестве xop других арифметических устройств (см. пп. 1.5, 1.7). Кроме этого, они могут загружаться не только из сумматора/вычитателя, но и с шины данных ПД (DMD BUS). Через мультиплексор MUX 7 содержимое регистров результата MR2…MR0 также может быть считано на шину данных ПД (DMD BUS). В качестве хор умножителя может выступать содержимое одного из МХ регистров (МХ1 или МХ0) или любого из регистров результата AR, MR2…MR0, SR1, SR0. Выбор хор обеспечивается мультиплексором MUX 2. В качестве yор умножителя может выступать содержимое одного из МY регистров (МY1 или МY0) или регистра обратной связи MF. Выбор yор обеспечивается мультиплексором MUX 3. Регистры МХ1, МХ0 могут загружаться и считываться через шину данных ПД (DMD BUS). Регистры МY1, МY0 могут загружаться и считываться через шину данных ПД (DMD BUS) и загружаться с шины данных ПП (PMD BUS). Выбор шины обеспечивает мультиплексор MUX 1. По свойствам все регистры МАС аналогичны регистрам ALU (см. п. 1.5).^ 1.7. Функциональная схема SHIFTERУстройство сдвига (УС, рис. 1.8) поддерживает выполнение команд арифметического сдвига, логического сдвига и нормализации (см. п. 1.17.7). Кроме этого, УС позволяет извлекать экспоненту числа, а также извлекать общую экспоненту целого блока чисел. Эти функции наиболее полезны при операциях с числами в формате с плавающей точкой. УС может быть разделено на следующие блоки: сдвигатель (SHIFTER ARRAY), блок OR/PASS, детектор экспоненты EXP DET, блок сравнения экспонент COMPARE. Сдвигатель может поместить 16-битный входной код (I) в любое место 32-битного выхода (О). Всего существует 49 размещений входного кода в 32-битном пространстве выходного кода. Размещение (число сдвигов и направление сдвигов) определяются кодом на входе С и сигналом HI/LO сдвигателя.В состав УС входят также регистры: входной (SI – Shifter Input), экспоненты (SE – Shifter Exponent) и блочной экспоненты (Shifter Block). Во входном регистре хранится входной 16-битный код сдвигателя и детектора экспоненты. С помощью DMD-шины можно считать и изменить (записать) содержимое этого регистра. Входным кодом для сдвигателя и детектора экспоненты может быть содержимое AR (см. п. 1.5), SR или MR (см. п. 1.6), поскольку все эти регистры связаны с R-шиной. Выбор производится мультиплексором MUX 2, который управляется кодом команды сдвига (см. п. 1.17.7). Результат сдвига через блок OR/PASS помещается в 32-битный регистр SR (Shifter Result), который разделен на два 16-битных регистра SR0 и SR1. Кроме блока OR/PASS источниками кода для загрузки этих регистров могут быть DMD- и R-шины (через MUX 2, сдвигатель и блок OR/PASS). Выбор источника осуществляют мультиплексоры MUX 5, MUX 6. Выход SR регистра связан с одним из входов блока OR/PASS для реализации операций сдвига двойной точности, а также с DMD-шиной (через мультиплексор MUX 7).. Во время выполнения операций нормализации и денормализации (см. п. 1.17.7) 8-битный регистр SE хранит экспоненту. Экспонента является целым числом со знаком и может быть загружена (и прочитана) через младшие 8 бит DMD-шины. Во время выполнения операций над блоком чисел в формате с плавающей точкой (см. п. 1.17.7) 5-битный регистр SB хранит блочную экспоненту, т. е. число на которое должны быть сдвинуты все числа блока (обычно – это максимальная экспонента блок чисел). Блочная экспонента является целым числом со знаком и может быть загружена (и прочитана) через младшие 5 бит DMD-шины. Когда содержимое регистров SE и SB считывается через DMD-шину, происходит расширение знака до 16 бит. По свойствам все регистры УС аналогичны регистрам ALU (см. п. 1.5). Направление сдвига и число сдвигов определяется управляющим кодом на входе С сдвигателя. Положительное управляющее число определяет сдвиг влево, а отрицательное – вправо. Имеется три источника такого кода: содержимое регистра SE, инвертированное (через инвертор NEG) содержимое регистра SE и непосредственное значение из команды CMD. Выбор источника осуществляется мультиплексором MUX 4. Значение сигнала HI/LO определяет размещение сдвинутого входного кода в 32-битном пространстве выходного кода. В частности, значение HI определяет размещение кода в регистре SR1, а LO – в регистре SR0. Табл. 1.3 показывает значения выходного кода сдвигателя при различных значениях управляющего кода и сигнала HI/LO.Таблица 1.3 Значения выходного кода сдвигателя при различных значениях управляющего кода и сигнала HI/LO Управляющий код Выходной код сдвигателя Активен HI Активен LO 16…127 32…127 00000000 00000000 00000000 00000000 15 31 R0000000 00000000 00000000 00000000 14 30 PR000000 00000000 00000000 00000000 … 2 18 CDEFGHIJ KLMNPR00 00000000 00000000 1 17 BCDEFGHI JKLMNPR0 00000000 00000000 0 16 ABCDEFGH IJKLMNPR 00000000 00000000 -1 15 XABCDEFGH IJKLMNP R0000000 00000000 -2 14 XXABCDEFGH IJKLMN PR000000 00000000 … -30 -14 XXXXXXXX XXXXXXXX XXXXXXXXXXXXXXAB -31 -15 XXXXXXXX XXXXXXXX XXXXXXXXXXXXXXXA -32…-128 -16…-128 XXXXXXXX XXXXXXXX XXXXXXXXXXXXXXXX Примечания к табл. 1.3:ABCDEFGHIJKLMNPR – входной код (совокупность нулей и единиц) сдвигателя;Х – бит распространения.Табл. 1.3 показывает, что сдвигатель заполняет все биты выходного кода, которые находятся справа от входного кода нулями, а слева – битом распространения Х (см. вход Х сдвигателя на рис. 1.8). В зависимости от выполняемой команды (см. п. 1.17.7) есть три источника бита распространения: старший значащий (знаковый) разряд входного кода, бит АС регистра арифметического статуса ASTAT (см. п. 1.10) и нуль. Блок OR/PASS в зависимости от команды (см. п. 1.17.7) либо пропускает выходной код сдвигателя для запоминания в регистре SR (когда опущена опционная часть команд сдвига [SR OR]), либо выполняет операцию логического сложения над выходным кодом сдвигателя и содержимым регистра SR (когда опционная часть команд сдвига [SR OR] присутствует). Опционная часть команд сдвига [SR OR] используется для выполнения сдвигов чисел с двойной точностью (32-битных). Допустим, что регистр SE содержит код 3, а регистр SI - ABCDEFGHIJKLMNPR, который необходимо сдвинуть с двойной точностью. Для этого необходимо сначала сдвинуть входной код относительно старшей части регистра SR, т. е. выполнить команду SR = LSHIFT SI (HI). В результате регистр SR будет содержать следующий код 00000000 00000ABC 00000000 00000000. Далее необходимо выполнить команду SR = SR OR LSHIFT SI (LO), после чего регистр SR будет содержать код 00000000 00000ABC DEFGHIJK LMNPR000. Если опустить во второй команде часть SR OR, то биты АВС заменятся нулями и мы не получим сдвига с двойной точностью. Детектор экспоненты извлекает экспоненту входного кода сдвигателя и помещает ее в регистр SE через мультиплексор MUX 3. В зависимости от команды (см. п. 1.17.7) детектор по разному интерпретирует входной код. В режиме HI входной код интерпретируется как число с одинарной точностью или как старшее слово числа с двойной точностью. Экспонента при этом формируется по следующему правилу: подсчитывается число старших бит с одинаковым значением; получившееся число декрементируется; результат инвертируется. Табл. 1.4 иллюстрирует формирование экспоненты в HI режиме.Таблица 1.4 Формирование экспоненты в HI режиме Входной код сдвигателя Значение экспоненты SNDDDDDD DDDDDDDD 0 SSNDDDDD DDDDDDDD -1 … SSSSSSSS SSSSSSSN -14 SSSSSSSS SSSSSSSS -15 Примечание к табл. 1.4: S – знаковый бит, N – не знаковый бит, D – биты не рассматриваемые детектором экспоненты.В расширенном HI режиме (HIX) входной код интерпретируется как результат операции вычитания (сложения) ALU, которая могла вызвать переполнение. В этом случае при формировании экспоненты учитывается флаг переполнения AV (см. п. 1.17.7). Табл. 1.5 иллюстрирует формирование экспоненты в расширенном HI режиме.Таблица 1.5 Формирование экспоненты в расширенном HI режиме AV Входной код сдвигателя Значение экспоненты 1 DDDDDDDD DDDDDDDD +1 0 SNDDDDDD DDDDDDDD 0 0 SSNDDDDD DDDDDDDD -1 0 … 0 SSSSSSSS SSSSSSSN -14 0 SSSSSSSS SSSSSSSS -15 Табл. 1.5 показывает, что при наличии переполнения (AV = 1) экспонента равна +1. При отсутствии переполнения (AV = 0) экспонента формируется как в обычном HI режиме. В режиме LO входной код интерпретируется как младшее слово числа с двойной точностью. В этом режиме принимается во внимание знак числа, который хранит флаг знака SS (см. п. 1.17.7 и рис. 1.8). Экспонента формируется только, если регистр SE содержит значение –15, т.е. старшее слово числа с двойной точностью содержит все нули или единицы. Табл. 1.6 иллюстрирует формирование экспоненты в LO режиме.Таблица 1.6 Формирование экспоненты в LO режиме SS Входной код сдвигателя Значение экспоненты S NDDDDDDD DDDDDDDD -15 S SNDDDDDD DDDDDDDD -16 S … S SSSSSSSS SSSSSSSN -30 S SSSSSSSS SSSSSSSS -31 Блок сравнения экспонент используется для нахождения максимальной экспоненты массива входных чисел сдвигателя. Для этого блок сравнения сравнивает значение экспоненты, которое присутствует на выходе детектора экспоненты, с содержимым регистра SB. Если выходное значение детектора экспоненты выше, чем содержимое регистра SB, то это значение через мультиплексор MUX 1 записывается в регистр SB. Обычно перед операцией определения максимальной экспоненты (см. п. 1.17.7) в регистр SB записывается число –16 (минимально возможное значение). Очевидно, что после циклической обработки всего массива чисел код максимальной экспоненты может быть считан из регистра SB.1.8. Функциональная схема программного конвейераПрограммный конвейер (рис. 1.9) формирует поток адресов команд, а также обеспечивает гибкое управление выполнением программы. Он допускает последовательное выполнение команд, организацию циклов без потери времени на определение окончания цикла, сложную обработку прерываний, передачу управления и вызовы подпрограмм (условные и безусловные) за один машинный цикл. Программный конвейер поддерживает следующие команды (см. п. 1.17.8) управления выполнением программы: цикла DO UNTIL, передачи управления JUMP, вызова подпрограмм CALL, возврат из подпрограмм RTS, возврат из прерываний RTI и перехода в энергосберегающий режим работы IDLE. Функциональная схема программного конвейера может быть разбита на следующие узлы: узел формирователя следующего адреса, узел программного счетчика и стека программного счетчика, узла счетчика циклов и стека счетчика циклов, узла компаратора циклов и стека компаратора циклов, узла регистров статуса и стека регистров статуса, узла контроллера прерываний.^ Узел формирователя следующего адреса содержит мультиплексор следующего адреса (NEXT ADDRESS MUX) и устройство управления мультиплексором следующего адреса (NEXT ADDRESS SOURCE SELECT). Во время выполнения процессором текущей команды этот узел формирует адрес следующей команды. Этот адрес может поступать от четырех источников: инкрементора (INCREMENT) программного счетчика (PROGRAM COUNTER – PC), РС стека (PC STACK), регистра команд (шина А на рис. 1.9) и контроллера прерываний (INTERRUPT CONTROLLER). Узел формирователя следующего адреса основывает свой выбор на анализе следующих сигналов: кода команды (шина F (Function field – би