Информационные магистрали (Шины)

Когда мы собирали простые логические схемы, нам вполне хватало обычных одиночных проводов. Но как только дело доходит до 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. Восемь проводов — это маленькая «дорога с восемью полосами движения», по которой данные едут не по очереди, а все сразу.

8 проводов бит 7 бит 6 бит 5 бит 4 бит 3 бит 2 бит 1 бит 0 одна шина Шина 8 бит = 1 байт
Байт — это 8 отдельных проводов; шина сжимает их в одну «магистраль», по которой число передаётся целиком

Каждый бит имеет свой вес

Биты в байте не равнозначны. Крайний справа — бит 0 (LSB, least significant bit) — имеет вес 1. Следующий, бит 1, — вес 2. Потом 4, 8, 16, 32, 64 — и, наконец, крайний слева бит 7 (MSB, most significant bit) с весом 128. Значение байта — это сумма весов тех битов, которые равны 1.

Число 42 на шине: пошаговый разбор

Возьмём пример из вступления: число 42. В двоичном виде это 00101010. Посмотрим, как 42 раскладывается по битам:

Бит76543210
Вес1286432168421
Значение00101010

Разберём по шагам:

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. А в следующей статье мы научимся переключать потоки данных — для этого понадобится мультиплексор.

Попробовать в симуляторе →