Как регистры подключаются к шинам ЦП

Мне интересно, какой тип буферов/методов обычно используется для подключения регистра процессора (триггеры?) к шине процессора (данные/адрес/управление). Поскольку на одной шине много регистров, я знаю, что должен быть какой-то механизм с тремя состояниями, но как указать, какие буферы должны быть плавающими?

Если рассуждать логически, должен быть какой-то бит выбора регистра вместе с битом чтения/записи, который переключает, какой регистр используется и что он делает со значением. Несмотря на то, что это имеет смысл для меня, я не думаю, что практично И каждый ввод регистра с выбором регистра или битом r/w.

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

Ответы (2)

В некоторых технологиях устройств регистры подключаются к шине с помощью выходов с тремя состояниями. Такой подход имеет некоторые преимущества, но, как правило, либо требует наличия некоторого «мертвого времени» между моментом, когда один регистр освобождает шину, и моментом, когда другой регистр начинает управлять ею, либо сопряжен с риском того, что устройство может начать управлять шиной. шина до того, как предыдущее устройство полностью освободит ее.

В других технологиях этого подхода избегают в пользу использования вложенных мультиплексоров. Если есть 64 регистра, которые могут выводить бит шины, устройство может иметь восемь 8-канальных мультиплексоров, каждый из которых принимает входные данные из одного регистра, и еще один 8-канальный мультиплексор, который принимает входные данные из одного из первых восьми. Хотя при этом может использоваться немного больше схем, чем при подходе на основе шины, его преимущество заключается в том, что каждый сигнал в системе будет постоянно управляться только одним устройством.

Хороший ответ; тем не менее, я ищу больше подробностей о том, как будет работать «вывод с тремя состояниями». Они синхронизируют только те регистры, которые должны использовать значение на шине данных (чтобы другие не менялись)? Какие типы микросхем между шиной/регистром используются? Во втором абзаце есть отличная информация, спасибо!
@DaveC - Попробуйте посмотреть схемы / конструкции изготовленных на заказ / домашних TTL-компьютеров, там много полезной информации.
@DaveC: Ожидаемый дизайн будет заключаться в том, что каждый регистр игнорирует шину, за исключением случаев, когда ему нужно либо поместить туда свое содержимое, либо загрузить оттуда свое содержимое. В зависимости от топологии проекта шина может быть плавающей, слабо тянуться вверх или вниз, слабо удерживаться в своем текущем состоянии (что бы это ни было) или активно тянуться вверх или вниз, когда ничто другое не управляет ею. В общем, вентили CMOS потребляют дополнительный ток, когда их входы находятся вблизи середины шины (и шина, которая вообще не управляется, может плавать до напряжения, близкого к середине шины), но...
... несложно спроектировать вентиль CMOS NAND таким образом, чтобы, если один вход был низким, не имело значения, находится ли другой вход в середине шины; Точно так же можно спроектировать вентиль ИЛИ-НЕ так, что если на одном входе высокий уровень, другой не будет иметь значения.

Рассматривали ли вы возможность посмотреть техническое описание детали, которая когда-то использовалась для реализации регистров в ЦП, например, техническое описание 74HC574 ?

Он работает именно так, как вы подозревали:

Один бит выбора регистра (контакт с именем CLK) для записи, который по нарастающему фронту сообщает микросхеме взять данные со своих входных контактов и сохранить их внутри. ЦП, который включает в себя множество этих микросхем, будет синхронизировать только те регистры, которые должны хранить текущее значение на шине данных, и не будет синхронизировать другие регистры, которым необходимо хранить свои внутренние значения.

Другой бит выбора регистра (вывод, иногда называемый «nOE») для ЧТЕНИЯ, который, пока он низкий, указывает микросхеме выводить свои внутренние данные на шину данных.

Файлы регистров внутри FPGA концептуально одинаковы.

как указать, какие буферы должны быть плавающими?

Обычно где-то еще в ЦП находится регистр инструкций (IR). Обычно декодер типа 74HC138 декодирует «исходное поле» из регистра инструкций в набор строк nOE, по одной для каждого регистра. 74HC138 гарантирует, что шиной данных одновременно управляет не более одного регистра, поэтому конфликтов не возникает. 74HC138 удерживает nOE всех остальных регистров на высоком уровне, поэтому их выходные контакты фактически «отсоединены» («тристатированы», «отключены» и т. д.). Я бы не сказал, что их выходные контакты «плавающие» — каждый контакт, подключенный к определенному биту шины данных, управляется высоким или низким уровнем одной микросхемой, выбранной 74HC138.

Подобный демультиплексор декодирует «поле назначения» из регистра команд в набор строк CLK, по одной на каждый регистр, а разработчик ЦП добавляет небольшую дополнительную схему для импульсов часов точно в нужный момент, немного после того, как данные стабилизируется на шине, и незадолго до того , как будет выбран какой-либо другой исходный регистр, данные снова начнут изменяться.

каждый сигнал в системе будет всегда управляться только одним устройством.

Это может сработать. Однако на практике я никогда не видел регистровый файл — на монолитной ИС, или построенный из микросхем TTL, или построенный из еще более простых компонентов — полностью построенный из каскадных мультиплексоров. Те, что я видел, всегда включают где-то хотя бы одну двунаправленную шину с тремя состояниями.

Многие типы программируемой логики не имеют концепции внутренней шины с несколькими драйверами с тремя состояниями. Таким образом, регистровые файлы, построенные на основе такой логики (в отличие от специально созданной схемы регистрового файла, которая часто включается в микросхемы FPGA), обычно основаны на мультиплексировании. Обратите также внимание, что выходные данные синхронного файла регистров на основе мультиплексирования не должны иметь «мертвого интервала» между временем, когда один регистр перестает выводить свои данные, и временем, когда следующий начинает работать. Использование логики с тремя состояниями часто требует либо готовности принять либо мертвое время, либо прерывистую конкуренцию за шину.
Если регистровый файл реализован как обычная структура в монолитной ИС, может быть (часто есть) возможность достаточно хорошо управлять синхронизацией линии включения, чтобы свести к минимуму необходимый мертвый интервал. Кроме того, во многих ситуациях требование бездействия шины между считываниями различных данных может не представлять проблемы. Тем не менее, подход с тремя состояниями требует внимания к определенным аспектам синхронизации, что не будет проблемой при подходе, основанном на мультиплексировании.
@supercat: я хотел бы упомянуть такие регистровые файлы на основе мультиплексирования в книге , которую я помогаю писать. У вас есть ссылки на хорошие примеры? (Должен ли я задать это как независимый вопрос?)