double arrow

Генераторы адресов данных

Регистры генератора адресов данных DAG2 являются 32-х разрядными и способны адресовать тот же объем памяти, что и DAG1. Однако, инструкции по-прежнему должны выбираться из младших 224 ячеек памяти.

Основными дополнительными возможностями DAG во втором поколении SHARC-процессоров являются:

- глобальное разрешение/запрещение круговых буферов (бит CBUFEN в регистре MODE1);

- поддержка режима широковещательной загрузки регистров данных;

- функционирование в SIMD-режиме.

Широковещательный режим загрузки Broadcast Load (вне зависимости от SISD/SIMD-режима) данных предполагает запись одного и того же слова одновременно и в указанный регистр, и в его дополнение в другом процессорном элементе (включается/выключается битами BDCST1 и BDCST9) при использовании косвенной адресации с индексными регистрами I1 и I9 (рис.6). Например, инструкция:

R1 = dm(I1, M0);

приведет к записи одного и того же значения и в регистр R1, и в регистр S1.

Рис.6. Доступ к пространствам нормальных и длинных слов в режиме Broadcast Load

Следует проявлять осторожность при использовании круговых буферов в SIMD-режиме. Понятно, что его длина должна быть обязательно четной, а инкрементацию адреса (значение M-регистра) желательно выбирать равной 2, чтобы обеспечить правильное последовательное считывание/запись значений памяти.

При обмене данными между регистрами DAG и памятью (т.е. при чтении в регистры DAG значений непосредственно из памяти или наоборот), также может возникнуть желание выполнять за один такт не одну, а две пересылки данных по 64-разрядной шине данных. Это возможно при чтении/записи пространства длинных слов (или пространства нормальных слов с модификатором LW). При этом, как всегда при 64-разрядной передаче данных, выполняются явная и неявная пересылки:

- если в инструкции в качестве приемника/источника указан четный DAG-регистр, то он используется в явной пересылке (его "данные" пересылаются по младшим 32 битам шины), а регистр с номером на 1 больше – в неявной пересылке (его "данные" пересылаются по старшим 32 битам шины), например:

I2 = dm(buffer) (LW); { I2 = dm(buffer), I3 = dm(buffer+1) }

- если в инструкции в качестве приемника/источника указан нечетный DAG-регистр, то он используется в явной пересылке (его "данные" пересылаются по младшим 32 битам шины), а регистр с номером на 1 меньше – в неявной пересылке (его "данные" пересылаются по старшим 32 битам шины), например:

I1 = dm(0x28000) (LW); { I1 = dm(buffer), I0 = dm(buffer+1) }

При этом, если используется косвенная адресация, то индексный регистр модифицируется не более одного раза!

I9 = dm(I1,M1) (LW); { I9 = dm(I1), I8 = dm(I1+1), I1 = I1 + M1 }

В случае, если выполняется пересылка данных из пространства длинных слов, то регистры регистрового файла рассматриваются как парные: R0-R1, R2-R3,..., R14-R15. При выполнении пересылки из памяти в R0 (или наоборот) или другой "четный" регистр, следующее слово данных записывается в R1:

R0 = dm(I1,M1); {если I1 указывает на адрес в Long Word, то R0 = dm(I1), R1=dm(I1+1) }

Если в инструкции в качестве приемника/источника указан R1 или другой "нечетный" регистр, то следующее слово данных будет записано/прочитано в/из парный ему регистр R0:

R1 = dm(I1,M1); {если I1 указывает на адрес в Long Word, то R1 = dm(I1), R0=dm(I1+1) }


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



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