Files
exam/Билеты/04 - Микропрограммирование команд. Структура процессора с тремя внутренними шинами(схема). Микрокоманды и микропрограмма. Пример микропрограммы..md
ElectronixTM 0c9a61e05a chore: убрал тег "в процессе", добавил временный тег
тег "доработать" нужен, чтобы показать, что я все еще принимаю критику по этому билету
2025-01-06 01:06:03 +03:00

7.6 KiB
Raw Permalink Blame History

tags, pun
tags pun
служебное/доработать
Пуля, попавшая в школьного учителя, вышла и зашла как положено

Устройство управления

Если вы не помните про то, как микропрограммный автомат связан с устройством управления, перечитайте прошлый билет, а точнее его 03 - Схема процессора (схема). Выполнение команд процессором. Операционные устройства. Типы операционных устройств с магистральной структурой. Устройство управления#^a29a65

Микропрограммирование команд

Есть 2 основных вида микропрограммных автоматов, по названиям которых дается название всему УУ.

!Глава 3. Процессор#^CU-types-list

Первый один раз и на века спаивается производителем (подробнее можно почитать Глава 3. Процессор#^846e1e), его, как понимаете, не покодишь, а вот второй вполне можно.

Я кратко резюмирую написанное Глава 3. Процессор#Микропрограммный автомат с программируемой логикой

Микрокоманды разбивают большую команду (add rax, [rbx + 4 * rcx - 40]) на маленькие шаги, чтобы не приходилось вообще все опкоды реализовывать аппаратно, это позволяло в свое время не слабо экономить на аппаратных частях процессора. Реализация примерно такая:

!Глава 3. Процессор#^struct-image

!Глава 3. Процессор#^f2908e

Структура процессора с 3 шинами

будет еще раз затронута при микропрограммировании, но раз препод расставил вопросы в таком порядке, приведу ее и тут

!Глава 3. Процессор#^b0a065

Запоминать эту радость надо, видимо, наизусть, но попытаюсь облегчить это дело, сдобрив пониманием:

[!comment]- Примечение билетёра о том, почему модель такая, какая она есть Можете не читать это, а просто заучить, я не заставляю

В общем-то здесь просто минимальная модель процессора, какая вообще возможна (и с оговорками). Меньше ее сделать нельзя по двум причинам:

  • На ней будет показываться микропрограммирование, что закрепляет часть элементов
  • Без остальных частей не заведется ни один уважающий себя процессор

Сначала рассмотрим "обрубок АЛУ" как я его называю. Ранее по билетам%%укажи где%% я упоминал, что минимальный процессор должен уметь в операции сложения, сдвига и инверсии. Ну короче вот они все тут и стоят

Любой процессор должен иметь счетчик команд для того, чтобы хотя бы просто идти вперед по списку команд.

Регистр адреса нужен банально как дополнение к счетчику команд, чтобы формировать адреса операндов, без него совсем тяжко

2 регистра нужны, потому что архитектура у нас регистровая, а не стековая или еще какая, поэтому все операции через регистры, а значит регистров как минимум больше одного. Больше двух для целей демонстрации тоже смысла делать не было, вот препод и не нарисовал

Буферный регистр придется запомнить, потому что он нужен во операциях сдвига или подобном, чтобы предотвращать гонки (race condition), когда результат операции может меняться из-за того, что в одном месте ток пришел на 3 наносекунды позже

Константная единица нужна, чтобы можно было при демонстрации прибавить кол к какому-нибудь числу. Теоретически она выплевывает что-то типа 00 \dots 001

Память оставлю без комментариев - мы никуда без оперативы

Касаемо назначения циферок и как это дело микропрограммировать будем рассматривать #Пример микропрограммы

Микрокоманды и микропрограмма

!Глава 3. Процессор#Микрокоманды и микропрограммы

Пример микропрограммы

Тут обращаемся к нашей схеме

!Глава 3. Процессор#^b0a065

И вставлю сюда же чуть более обстоятельные объяснения:

!Глава 3. Процессор#Процессор с тремя внутренними шинами

Теперь я постараюсь объяснить, зачем тут каждый из шагов

Во-первых оставлю отрывок из методички о том, как это объясняет препод:

!Pasted image 20250106002341.png

%%Того, что было написано в методичке маловато для того, чтобы закодить этот алгоритм, поэтому придется реализовать его вам самостоятельно. Ну или пишите - попробую реализовать его, но сейчас как будто бы билетов еще много впереди%%

Теперь что касается строк таблицы (вместо "Регистр 1" и "Регистр 2" буду писать R1, R2):

  1. Подать R1 на BB, подать R2 на AB, выполнить суммирование
  2. Сумму поместить в регистр R1
  3. Снова сложить R1 и R2 (повторяет шаг 1)
  4. Поместить результат сложения в R2
  5. Подать на BB вместо содержимого регистра кучу единиц, а на AB положить R1, инвертировать оба значения и результат сложить
  6. Результат сложения в R1

Тут по идее 3 разных программы:

  1. R1 = R1 + R2
  2. R2 = R1 + R2
  3. R1 = not R1