[an error occurred while processing this directive]
Явно в аномалиях такого не описано, но есть много грустного о шифтере, Строчка sr0 = 0; меня насторожила (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Зок Мёдов 14 января 2004 г. 00:20
В ответ на: Опаньки! 2185N Любителям грабель... (Циркулярный массив с размером не равным степени двойки) отправлено Дима_П 12 января 2004 г. 20:47

< sr0 = 0; //!!!! Без такой или подобной команды >
< //не работает!!! NOP не прокатывает :-( >

Вот выдержка из ADSP-218xN Family Anomaly List for Revision 3.1 и 3.2

Shifter Anomaly Issue with LSHIFT, ASHIFT, NORM, EXP, EXPADJ instructions

Anomaly #1:
The shifter result registers, SR1[bits 14, 10, 6, 2], SR0[bits 14, 10, 6, 2], SE[bits 6, 2] and SB[bit 2] can get
the incorrect result when bits 14 or 13 of the shifter input register (SI, AR, SR1, SR0, MR0, MR1 or MR2)
is set to 1. This anomaly has only has been observed when bits 14 or 13 of the input register is shifted to
one of bits 14, 10, 6 or 2 of SR1, SR0, SE or SB. The failure is that the destination bit is cleared instead of
being set to 1.
The destination shifter registers can fail for any of the following shift instructions:
• LSHIFT
• ASHIFT
• NORM
• EXP
• EXPADJ
Example:
SR = LSHIFT AX0 by 1;
No failures have been observed for any other bits of the shifter result registers.
This anomaly applies to silicon revision 3.1 only.

4/24/03
Workaround:
1. This workaround is preliminary and has not been proven to work under all circumstances.
Significant testing to date of this workaround has not shown any known cases that continue to fail.
There is risk that this workaround may not resolve every case of this anomaly.
The following sequence of instructions must be performed exactly in this specific order to avoid
incorrect results of shift instructions in the SR1 or SR0 registers:
ar = 0x0000; /* clear the ar register (make sure to save the contents of ar before this instruction */
af = pass ar; /* executing this instruction will clear the result bus */
nop; /* allow the result bus to be latched at “0” */
*ANY_SHIFTER_INSTRUCTION;* /* perform shift instruction in this instruction slot */
Please note that additional work may be required to preserve register and/or status values that are
affected by this workaround. Characterization of this anomaly shows that there is nothing special
about the use of the AR or AF registers used in the workaround code shown above. Any other
valid xop register such as AX0 can be substituted for all cases where AR is used; also, the AR
register can be substituted for AF.

А вообще, когда-то, какая-то версия VDSP софта (не помню точно какая) линкер давал глюк как раз на кольцевых буферах. И вне зависимости от любого софта адрес кольцевого буфера должен быть выровнен на ближайшую степень двойки в бОльшую сторону. Это должен делать линкер обязательно, иначе будет ... А размер буфера по барабану.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru