Основные изменения архитектуры программного секвенсора связаны с использованием двух процессорных элементов в SIMD-режиме: это усложняет задачу принятия решения о переходе и завершении/продолжении цикла. При выполнении проверок условий анализируются значения флагов в обоих процессорных элементах следующим образом:
Проверка условия при выполнении | Решение о выполнении по результатам проверки условия |
- вычислительной операции | Выполняется в каждом процессорном элементе в зависимости от выполнения условия в данном процессором элементе |
- переходов и циклов | Выполняется программным секвенсором в зависимости от логического И проверки двух условий в обоих процессорных элементах |
- пересылок данных из регистров, имеющих "дополнение", в регистры "с дополнениями" | Пересылка выполняется в каждом PE по отдельности в зависимости от состояния флагов данного процессорного элемента |
- пересылок данных из регистров, не имеющих "дополнений", в регистры "с дополнениями" | Пересылка выполняется в каждом PE по отдельности в зависимости от состояния флагов данного процессорного элемента. Источник данных для явной и неявной пересылок – один и тот же |
- пересылок данных из регистров, имеющих "дополнения", в регистры "без дополнений" | Пересылка выполняется в зависимости от флагов в PEx. Неявных пересылок не происходит |
- операции DAG | Пересылка выполняется для каждого процессорного элемента по отдельности в зависимости от его флагов. Пост-модификация индекса выполняется при выполнении логического ИЛИ условий обоих PE. |
Например:
|
|
If EQ r3=dm(i0,m1); {проверка бита EQ в PEx и PEy}
{если в ASTATx EQ=1, то переслать в r3 из I0}
{если в ASTATy EQ=1, то переслать в s3 из I0+1}
В приведенном примере следует обратить внимание на то, что если условие EQ в PEx не выполняется, то происходит пересылка в регистр s3 процессорного элемtнта PEy значения по адресу (addr+1), а не addr! Независимо от числа переданных слов, модификация индексного регистра выполняется не более одного раза.
Можно сформулировать следующее правило для пересылки данных: для выполнения явной пересылки или вычислительной инструкции проверяется условие в PEx, для выполнения неявной пересылки или вычислительной инструкции – проверяется условие в PEy.
Например:
if EQ S3=dm(I0,M1); {если в ASTATx EQ=1, то переслать в S3 из I0 }
{ если в ASTATy EQ=1, то переслать в R3 из I0+1 }
if EQ R0=R0+1, S2=dm(I0,M1);
{ если в ASTATx EQ=1, то R0=R0+1, S2 = dm(I0) }
{ если в ASTATy EQ=1, то S0=S0+1, R2 = dm(I0+1) }
Поскольку вместо одного регистра статуса может использоваться два, то глубина стека статуса увеличена с 5 до 15 ячеек, при этом сохранение и восстановление регистров ASTATx и ASTATy при обработке внешних прерываний происходит попарно.
|
|
Вследствие изменения архитектуры DMA-контроллера и увеличения числа DMA-каналов с 10 до 14 изменена таблица векторов прерывания и, соответственно, регистры IRPTL, IMASK и IMASKP. Отдельные вектора выделены под все прерывания от последовательных портов, линк-буферов и буферов внешнего порта.
Для отслеживания прерываний от линк-буферов выделен отдельный регистр процессорного ядра LIRPTL, который для каждого линк-буфера содержит биты защелкивания прерывания, маскирования прерывания и указателя временной маски прерывания (т.е. фактически выделенные "мини" регистры IRPTL, IMASK и IMASKP для линк-буферов). В основных же регистрах IRPTL, IMASK и IMASKP осталось только одному "сводному" биту, отражающему суммарное состояние (по логическому ИЛИ по всем линк-буферам: бит LPISUMI. Тем не менее, в таблице векторов прерываний обработчики прерываний от линк-буферов присутствуют.
Таким образом, в отличие от ADSP-21060, где каждому биту регистра IRPTL соответствовал свой обработчик прерывания, в ADSP-21160 при сохранении структуры таблицы векторов прерываний несколько изменилась структура регистров IRPTL/IMASK/IMASKP: теперь чтобы определить, какое прерывание произошло (в частности если сигнал был от линк-буфера), то недостаточно проанализировать значение IRPTL, надо еще просмотреть и биты защелкивания прерываний линков в регистре LIRPTL.
Для анализа того, какой линк-буфер потребовал обработки, анализируются биты в LIRPTL и управление передается на вектор обработки прерывания от линк-буфера с максимальным приоритетом.
Из-за изменения организации памяти (появилось новое пространство длинных 64-разрядных слов) таблица векторов прерываний занимает в ADSP-21160 адреса с 0х40000 по 0х40093 и расположена, как и раньше, в начале пространства нормальных слов.
Также флаги, отражающие значения на линиях FLAGS3-0, вынесены в отдельный регистр FLAGS.