Регистры и параллельная загрузка
← Все статьи

Регистры и параллельная загрузка

5 мин

Регистр — это просто триггеры с общим тактом

D-триггер хранит один бит; соедините N таких триггеров одним тактовым сигналом — и получится N-битный регистр, защёлкивающий целое слово на каждом такте. Единственное, чего не хватает для практического регистра, — вход разрешения записи (Load), решающий, принимает ли регистр новое значение в этом такте или удерживает текущее.

Разрешение записи через мультиплексор

Самый простой способ добавить разрешение записи триггеру без встроенного входа enable — поставить перед его входом D 2-входовый мультиплексор: при Load=1 мультиплексор пропускает новое значение, при Load=0 он подаёт на вход собственный текущий выход триггера, так что сохранённое значение остаётся на месте, даже когда такт продолжает идти. Блок REG4 в Boolflow — это банк триггеров без такой надстройки: у него четыре входа данных и вход такта, больше ничего, поэтому он загружается по каждому нарастающему фронту. Чтобы он умел удерживать значение, поставьте перед каждым входом данных по одному мультиплексору MUX: выход Q — на вход A, новые данные — на вход B, а Load — на вход выбора S. Четыре мультиплексора — и регистр хранит содержимое, пока Load=0.

DMUXLoadDFFQ

От одного регистра к регистровому файлу

Регистровый файл процессора — это просто несколько таких регистров, разделяющих общие провода входных данных, при этом декодер превращает двоичный адрес регистра ровно в одну активную линию Load — так запись попадает только в адресуемый регистр, а мультиплексор каждого остального регистра продолжает подавать на вход его же собственный выход. При всего двух регистрах достаточно одного вентиля NOT (Load0 = ¬Addr, Load1 = Addr); при большем числе тот же принцип масштабируют блоки Decoder 2:4 или Decoder 3:8 из Boolflow.

Попробуйте сами

Соберите два блока REG4 в редакторе схем, поставив перед входами данных каждого по четыре мультиплексора MUX (Q — на вход A, общая 4-битная шина данных — на вход B), подайте на входы выбора мультиплексоров одного регистра бит адреса напрямую, а другого — через вентиль NOT, и убедитесь, что переключение бита адреса направляет новое значение ровно в один регистр за раз.

Открыть пример регистра с загрузкой →