
- •1. Симулятор WinDlx
- •1.1 Запуск та конфігурування
- •1.2 Завантаження тестових програм
- •1.3 Симулювання
- •1.3.1 Конвеєрне вікно (Pipeline window)
- •1.3.2 Кодове вікно (Code window)
- •1.3.3 Циклове вікно (Clock Cycle window)
- •1.3.4 Вікно точок зупинки ( Breakpoint window)
- •1.3.5 Регістрове вікно (Register window )
- •1.3.6 Вікно статистики (Statistics window)
- •Додаток. Таблиця інструкцій процесора
1.3.3 Циклове вікно (Clock Cycle window)
Інші вікна надають додаткову інформацію про роботу конвеєра. Від моменту старту вони знаходяться у зменшеному стані, тобто виглядають як іконки. Розгортання іконок виконують натисканням мишою за умови, що курсор знаходиться у відповідному місці головного (батьківського) вікна.
Бачимо, що симуляція знаходиться на четвертому циклі. Перша інструкція (машинна команда) опрацьовується на сходинці MEM конвеєра, друга інструкція - на сходинці intEX (integer EX), третя - анульована, а четверта - на вхідній сходинці IF. Щодо третьої інструкції, то зауважимо наступне. Вона завантажилася до конвеєра "поза законом", за "інерцією", завдяки тому, що її попередником виявилася інструкція безумовного переходу. Анулювання третьої інструкції спричинило, як кажуть, бульбашку ("bubble") на конвеєрі (марнування часового інтервалу замість його корисного використання).
Цільова адреса переходу jal має назву "InputUnsigned". Аби визначити конкретне чисельне значення, що відповідає символічному запису адреси, треба викликати опцію Memory з меню головного вікна, а потім - опцію Symbols. Тоді побачимо відповідність символічного і чисельного запису нашої і інших адрес. Отримані значення відповідності можна сортувати за назвами або за чисельними значеннями. Символ "G" після значення адреси позначає глобальну цільову адресу, а символ '^"-локальну. Цільова адреса "InputUnsigned" розташована в модулі "input" , тому вона є глобальною. Завжди треба зачиняти викликане вікно натисканням на позначку ОК.
Натискання на F7 просуває першу інструкцію addi до останньої сходинки конвеєра. Що відбувається в середині конвеєра, можна зрозуміти за допомогою швидкого подвійного натискання мишею на тій лінії кодового вікна, де розташована інструкція addi. Натискання викликає нове вікно, що містить детальну інформацію про мікроподії на кожній сходинці конвеєра, які належать обраній інструкції. Нове вікно, що з'явилося, позначено як "Information about ...". Зачиніть це вікно. Швидке подвійне натискання на лінії з інструкцією movi2fp надає інформацію лише про першу сходинку виконання цієї інструкції з тої причини, що її анулювала наступна інструкція jump. Зачиніть поточне вікно через ОК.
Інформаційне вікно викликають подвійним натисканням миші за умови, що її курсор розташовано або на лінії машинної інструкції в вікні коду, або десь на сходинках конвеєрного вікна.
1.3.4 Вікно точок зупинки ( Breakpoint window)
Ми виконували код (програми) крок за кроком, натискаючи клавішу F7, і спостерігали за порядком вибирання інструкцій (команд) у кодовому (програмному) вікні. Зараз за допомогою кодового вікна побачимо, що треба виконати дві ідентичні інструкції збереження/завантаження (LW - Load Word, SW - Store Word), що завантажують 32-х бітові слова до регістрів. Проте число натисків на клавіші миши в режимі покрокового виконання є занадто великим. Це число можна зменшити через уведення точок зупинки.
Аби увести зупинку, позначимо лінію 0x0000015c в кодовому вікні, де міститься інструкція trap 0x5. Ця інструкція є системним викликом запису на екран. Пересунемо курсор миші на лінію в кодовому вікні з вказаною вище адресою та дамо щигля клавішею миші (колір лінії має інвертуватися). Потім натискаємо на напису Code в меню головного вікна . Оберемо опцію Set Breakpoint за допомогою одноразового натискання. Тут треба бути впевненим, що потрібна інструкція у кодовому вікні вже позначена інвертуванням кольору. Має виникнути нове вікно "Set Breakpoint". Це дозволяє вказати бажану сходинку конвейєра, де призупиниться виконання позначеної у кодовому вікні інструкції. Стандартно обирається сходинка ID. Аби припинити процес встановлення точки зупинки, натискаємо мишкою на OK . Вікно має зачинитися.
Зауважимо, що в кодовому вікні на позначеній нами лінії інвертування кольору зникло. Проте з'явилася позначка-покажчик на точку зупинки, а саме "ID" біля інструкції системного виклику trap 0x5. Ця позначка свідчить про те, що автоматичне виконання програми загальмується на позначеній інструкції на сходинці декодування.
Аби перевірити налаштування точки зупинки треба відчинити вікно Breakpoints. Це вікно містить опис нашої точки зупинки. Точку зупинки можна скасувати. Якщо натиснути мишкою на рядку опису точки, тоді в меню головного вікна має виникнути опція Breakpoints (коли є позначеною лінія з описом точки зупинки). І зараз можна скасувати призначений нами breakpoint. Найшвидший спосіб продовжити виконання нашої програми в автоматичному режимі - це натиснути клавішу F5. Існує стандартний спосіб, а саме, викликати мишкою пункт меню головного вікна Execution / Run чи спрощено - F5. За малий часовий інтервал виникне вікно, що інформує про виконання зупинки у призначеній точці, а саме, "ID-Stage: reached at Breakpoint #1"; це вікно треба зачинити підтвердженням мишею на OK.
Зараз звернемося до вікна Clock Cycle Diagram. Там побачимо, що симуляція призупинилася на циклі 14, а лінія trap 0x5 виглядає так:
Т-stall позначує пригальмування з причини виконання інструкції trap (пастка). Головний мотив, що унаочнено, полягає в скиданні конвеєра DLX за умови виконання trap-інструкції. Це не є найкращим способом перемикання на іншу системну програму з погляду збереження продуктивності. Проте так спрощується робота конвеєра і керування ним. Подію скидання (спорожнення) конвеєра фіксують в інформаційному вікні, що викликають подвійним щиглем умови розташування курсора мишки на рядку з інструкцією, поміченою точкою зупинки в кодовому вікні - "3 stall(s) because of Trap-Pipeline-Clearing!" in the IF stage". Обов'язково зачиніть це вікно щиглем на OK.
Інструкція trap 0x5 видає повідомлення на екран. Це можна перевірити , коли дати щигля на опції Execute / Display DLX-I/O у меню головного вікна. Ясно, що потім треба підтвердити OK у вікні, що відчинилося.