реклама на сайте
подробности

 
 
> IBQ stalls на С55x, или как их избежать
Warlord
сообщение Mar 19 2007, 16:50
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874



О том как работает fetch конвейер в мануалах TI написано скупо и поверхностно. Буфер IB наполняется со скоростью 4 байта, а опустошается 1-6 байт. Смотрю в Pipeline Stall Analyzer по ходу программы IB начинает опустошаться и возникает IBQ stall причем никакими страшными 5 и 6 байтными командами и вызовами и циклами не пахнет. Отсюда возникают вопросы: При каких условиях перестает наполняться очередь и при каких вознобновляется. Вот для примера кусочек кода:
Код
_func
    NOP_16 || NOP
    NOP_16 || NOP_16
    NOP_16 || NOP
    NOP_16 || NOP
    NOP_16 || NOP
    NOP_16 || NOP_16
    NOP_16
    NOP_16 || NOP
    NOP_16
    NOP_16 || NOP
    NOP_16 || NOP_16
    NOP_16 || NOP
    NOP_16 || NOP_16
    NOP_16 || NOP_16
    NOP_16 || NOP_16
    RET

В процессе выполнения последние 2 инструкции перед RET оказываются отсеченными IBQ stall. Почему? Никаких видимых препятствий для наполнения буфера нет.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Warlord
сообщение Mar 20 2007, 16:17
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 23-09-05
Из: Москва
Пользователь №: 8 874



Stall происходит потому что по непонятным причинам опустошается IB и нечего подавать на фазу D. Это случается еще до попадания в фазу D инструкции RET.

На скриншоте два stall-а, первый из которых - непонятный(фаза AC2), а второй - это происходит принудительная очистка конвеера перед возвратом из функции.
Цитата
в описании фазы D сказано, что она читает 6 байт из IBQ. А не "up to 6". Точно также как и сказано, что IBQ читает по 32 бита, а отправляет в декодер пакетами по 48

Одно совпадает точно - IB наполняется с постоянной скоростью 4 байта или не наполняется вовсе.
Если команды - одиночные NOP-ы, то видно что IB опустошается не 6 байтами, а как и следовало ожидать по 1 байту. Мануал магически говорит:
Цитата
Instructions stored in the IBQ are dispatched to
the execution pipeline in 48-bit packets and consumed by the decode (D)
phase of the pipeline at a rate that depends on the length of the instruction being
decoded.
Вообще говоря, работа плагина как-то не вяжется с описанием работы конвеера, так та пачка(по сути преддекодированая инструкция), что д.поступить в D куда-то из IBQ пропадает, и IBQ уменьшается ровно на размер этой пачки. Иногда размер IBQ становится равным 64/64, хотя видно, что очередь пуста... Хоть в TI support пиши, чтоб объяснили...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Warlord   IBQ stalls на С55x   Mar 19 2007, 16:50
- - SM   А в реальной жизни оно как? В смысле не в симулято...   Mar 19 2007, 20:10
- - Warlord   Жизнь совпадает с симулятором - 32 такта, включая ...   Mar 20 2007, 10:11
|- - SM   Цитата(Warlord @ Mar 20 2007, 10:11) Жизн...   Mar 20 2007, 14:31
- - SM   Вообще-то на экране нет сталла в AC2. А случаем не...   Mar 20 2007, 16:27
- - Warlord   Опечатался со stall-ом в AC2. Рис.1 буфер пуст, ...   Mar 20 2007, 17:41
- - SM   64/64 это наверное бага симулятора, а сколько чего...   Mar 20 2007, 17:58
- - Warlord   Запустил CCS 3.1 где плаг версии 3.0. Тут нескольк...   Mar 21 2007, 10:27
- - SM   Просимулил... Не прояснилось. Вот код полностью: К...   Mar 21 2007, 13:32
- - Warlord   присутствие NOP-а отодвигает начало функции на бай...   Mar 21 2007, 14:57
|- - SM   Цитата(Warlord @ Mar 21 2007, 14:57) а ко...   Mar 21 2007, 15:32
- - Warlord   Согласен, 64 байта в буфере - это косяк, тут без с...   Mar 21 2007, 16:37
- - SM   Цитата(Warlord @ Mar 21 2007, 16:37) т.е....   Mar 21 2007, 16:56


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th August 2025 - 12:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.04348 секунд с 7
ELECTRONIX ©2004-2016