- •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.5 Регістрове вікно (Register window )
Ефективне використання симулятора пов'язане з регістровим вікном, яке можна відчинити відповідним натисканням миші. Спочатку в кодовому вікні перейдемо до лінії з адресою 0x00000194. Тут міститься інструкція
lw r2, SaveR2(r0)
завантаження слова з комірки пам'яті з базовою адресою SaveR2 та зсувом, що міститься в регістрі r0
[ address = base + offset = SaveR2 + (r0) ],
до призначення, а саме, до регістра r2.
Треба позначити лінію з цією інструкцією точкою зупинки. Зробимо натискання на цій лінії та натиснимо клавішу Ins ( це скорочений варіант вже відомого виклику послідовності Code / Set Breakpoint / OK). Ще одну точку зупинки треба поставити на лінії 0x000001a4 jar r31. Натиском F5 продовжимо виконання програми в автоматичному режимі. Сюрприз! Виникає вікно вводу/виводу, що має назву "The DLX-Standard-I/O window". У цьому вікні курсор миготить після повідомлення "An integer value >1:". Наберіть 20 і натисніть Enter. Симуляційне виконання нашої програми триватиме доти, доки не стане досяжною точка зупинки breakpoint # 2 (OK!).
Схема у вікні the clock cycle diagram window (відчиніть це вікно, якщо потрібно) містить щось нове, а саме, червоні і зелені стріли поміж інструкціями (якщо цього не видно, прокрутіть інформацію у вікні доки не побачите симуляційні цикли з номерами 52, 53, 54, 55 та 56). Червоні стріли позначають вимогу пригальмування конвейєра (stall). Причину пригальмування пояснює лінії, на яку вказує стріла. У випадку, що розглядається, маємо так званий R- Stalls, що виникає за рахунок RAW-небезпеки (Read After Write), а саме, порушення правила про те, що наступна інструкція не має права зчитувати значення операнда з цільового регістру ще до того, як його вмістиме поновлено результатом попередньої інструкції). Зелена стріла символізує використання випереджувального пересилання операнда, що потрібен наступній інструкції ще до того, як формально завершилося виконання цієї попередньої інструкції записом її результату до цільового регістру регістрового файлу.
Вже час перевірити вмістиме регістрів. Відчинемо вікно Register, що може існувати як ікона. В цьому вікні бачимо значення, що зберігаються у регістрах. Звернемо увагу на регістри від R1 до R5. Виконуючи ще один крок симуляції до наступної точки зупинки (F5, OK), бачимо, що деякі значення в регістрах змінилися. Пояснення цьому надає інструкція lw , що завантажує значення з пам'яті до регістрів
Можна виконувати симуляцію в інший спосіб, без використання точок зупинки. В меню головного вікна реалізуємо послідовність дій Execute / Multiple Cycles або одразу натискаємо F8. Виникне вікно, де треба набрати 17 та натиснути Enter. У цьому випадку симуляція триватиме 17 циклів, доки не зупиниться. Зупинка у випадку, що розглядається, не має за мету повне виконання програми обчислення факторіалу.
Зробимо скролінг у вікні the clock cycle diagram доти, доки не побачимо цикли з номерами від 72 до 78, як мінімум. Дві операції з рухомою комою (multd та subd - multiply/subtract double) виконуються на окремих вузлах на сходинці EX конвеєра. Але вони обидві вимагають на опрацювання операндів не одного, а декількох тактів . З вказаної причини наступна після них інструкція (j Fact.Loop) може вибиратися, декодуватися та виконуватися. Але потім повинна пригальмуватися на один цикл, аби дозволити інструкції subd завершити власну MEM-фазу.
