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

 
 
> 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
Ответов
SM
сообщение Mar 21 2007, 13:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Просимулил... Не прояснилось. Вот код полностью:
Код
        .cpl_off
        .c54cm_off
        .arms_off
        
        .global start

        .sect   ".vectors"
                
vecs:    .ivec    begin,USE_RETA
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
        .ivec    iret1
                
        .text                            
                
start:    
        bset    intm
        mov    #vecs>>8,mmap(@IVPD)
        mov    #vecs>>8,mmap(@IVPH)

        rpt        #5
        nop
        
        reset          
        
halt:        b    halt


begin:;        nop    ; !!!!!!!!!!!
        call    test
        b        begin

test:
    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



iret1:        reti


Вся непонятка в том, что сталл зависит от NOP'а перед CALL. Если его нет - stall. Если он есть - сталла не стало. Из идей, почему так - есть предположение, что IBQ имеет какое-то кривое состояние, зависящее от состояния внутренних указателей, или еще х.з. чего-то там в нем, которое показывается как 64/64, и требует немедленной очистки IBQ, приводящей к этому stall'у. При этом четко видно, что в состоянии 64/64 там уже напрефетчено все вплоть до reti, т.е. на самом деле далеко не 64, а значительно меньше. Но вот что это за состояние, и как в него не попадать, я думаю может сказать только аффтар этого чудо-префетчера, а до меня суть не доходит (несмотря на то, что сам не так давно сделал очень похожий блок префетчера для своего микропроцессора)
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
- - Warlord   Stall происходит потому что по непонятным причинам...   Mar 20 2007, 16:17
- - 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
- - 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 Текстовая версия Сейчас: 20th June 2025 - 06:32
Рейтинг@Mail.ru


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