double arrow

Программный секвенсор

Основные изменения архитектуры программного секвенсора связаны с использованием двух процессорных элементов в 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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: