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