Информационные магистрали (Шины)
Когда мы собирали простые логические схемы, нам вполне хватало обычных одиночных проводов. Но как только дело доходит до 8-битных чисел, всё усложняется. Чтобы передать всего один байт информации от сумматора к памяти, нужно тянуть сразу 8 проводов. Если делать это поштучно, схема моментально превратится в нечитаемую паутину.
В инженерии эту проблему решают с помощью шин (Bus). Шина — это информационная магистраль, пучок проводов, объединённых в один кабель. В симуляторе шины рисуются более толстыми линиями и передают сразу целое значение — число от 0 до 255. Вместо того чтобы путаться в десятках мелких контактов, ты просто соединяешь два сложных компонента одной толстой линией. Это делает архитектуру процессора чистой, компактной и понятной.
Практический пример. Представь, что нужно передать число 42 из регистра в АЛУ. Без шины пришлось бы тянуть 8 отдельных проводов — бит 0, бит 1, …, бит 7 — и следить, чтобы ни один не перепутался. С шиной ты подключаешь один «толстый» кабель, по которому все 8 битов летят одновременно. В реальном процессоре шина данных — это 32 или 64 параллельных проводника, вытравленных на кремнии в виде микроскопических дорожек.
Что такое байт и почему для него нужно 8 проводов
Один провод умеет передавать только один бит — 0 или 1. А один байт — это 8 бит, и каждый бит должен добраться до получателя одновременно. Поэтому шина из 8 параллельных проводов переносит ровно один байт за раз.
Из 8 битов можно составить 28 = 256 разных комбинаций — от 00000000 до 11111111. Поэтому байт хранит любое целое число от 0 до 255. Восемь проводов — это маленькая «дорога с восемью полосами движения», по которой данные едут не по очереди, а все сразу.
Каждый бит имеет свой вес
Биты в байте не равнозначны. Крайний справа — бит 0 (LSB, least significant bit) — имеет вес 1. Следующий, бит 1, — вес 2. Потом 4, 8, 16, 32, 64 — и, наконец, крайний слева бит 7 (MSB, most significant bit) с весом 128. Значение байта — это сумма весов тех битов, которые равны 1.
Число 42 на шине: пошаговый разбор
Возьмём пример из вступления: число 42. В двоичном виде это 00101010. Посмотрим, как 42 раскладывается по битам:
| Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Вес | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| Значение | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
Разберём по шагам:
1. Смотрим, какие биты выставлены в 1: это биты 5, 3 и 1.
2. Складываем их веса: 32 + 8 + 2 = 42.
3. Проверяем: 42 = 00101010. Всё сходится — одна шина, восемь проводов, и на ней «едет» ровно то число, которое мы хотели передать.
Splitter и Maker: связываем шину с битами
В игре шина — это готовый компонент, но ей нужно уметь обмениваться данными с отдельными битами. Для этого есть два вспомогательных узла.
Splitter (разветвитель) принимает 8-битную шину и разделяет её на 8 отдельных проводов: Bit0 (младший бит, LSB), Bit1, …, Bit7 (старший бит, MSB). Он как бы «расчёсывает» кабель на отдельные жилы.
Maker (сборщик) работает в обратную сторону: принимает 8 отдельных битов и собирает их в одну 8-битную шину. Без этих двух узлов мы не смогли бы ни подать отдельный бит в вентиль, ни передать готовый байт дальше.
Уровень 1.8 «8-битный Сумматор»
На уровне 1.8 тебе предстоит собрать настоящий 8-битный сумматор и получить чип ADDER8. Схема использует шины по полной программе:
1. Два Splitter разбирают входные шины A и B на отдельные биты.
2. Восемь FullAdder складывают биты попарно: младшие с младшими, старшие со старшими.
3. Переносы соединяют сумматоры в цепочку — выход переноса каждого идёт на вход переноса следующего.
4. Один Maker собирает 8 битов суммы обратно в выходную шину.
Все 8 сумматоров считают одновременно: аппаратура работает параллельно, а не по очереди. Единственное, что идёт последовательно, — это перенос, который бежит от младших битов к старшим.
Шины в настоящих процессорах
В реальном компьютере шин несколько. Шина данных переносит сами значения — те самые числа, над которыми работает АЛУ. Шина адреса сообщает памяти, какую ячейку нужно читать или писать, — она «односторонняя», ей управляет только процессор. А шина управления несёт служебные сигналы: Read, Write, Clock, Reset.
Например, чтобы выполнить команду «записать значение в ячейку 100», процессор выставляет 100 на шине адреса, значение — на шине данных и дёргает сигнал Write на шине управления. Три шины, одна операция — и всё это вместе с сумматором из прошлой статьи уже похоже на настоящий процессор.
Частые ошибки
1. Путать порядок битов. Помни: Bit0 — это вес 1, крайний правый бит. Если перепутать выводы Splitter, числа на шине «поедут задом наперёд».
2. Забывать перенос. В цепочке сумматоров каждый перенос обязан дойти до следующего разряда, иначе сумма будет неверной.
Резюме
1. Шина — это 8 параллельных проводов, переносящих один байт (число от 0 до 255).
2. В симуляторе шины рисуются толстыми линиями и позволяют соединять компоненты одним кабелем вместо восьми.
3. Каждый бит имеет вес: бит 0 — 1, бит 7 — 128. Значение байта — сумма весов единичных битов.
4. Splitter разбирает шину на биты, Maker собирает биты в шину.
5. 8-битный сумматор — это 8 FullAdder, соединённых цепочкой переносов; все разряды считают параллельно.
На уровне 1.8 тебе предстоит собрать 8-битный сумматор ADDER8: разобрать две входные шины на биты с помощью Splitter, сложить их восемью FullAdder с цепочкой переносов и собрать результат обратно в шину через Maker. А в следующей статье мы научимся переключать потоки данных — для этого понадобится мультиплексор.