Регистровый файл: различия между версиями
[отпатрулированная версия] | [отпатрулированная версия] |
EmausBot (обсуждение | вклад) м Перемещение 7 интервики-ссылок в Викиданные (d:Q180944) |
|||
(не показано 11 промежуточных версий 9 участников) | |||
Строка 1: | Строка 1: | ||
'''Регистровый файл''' ('''register file''') — модуль [[микропроцессор]]а (CPU), содержащий в себе реализацию [[регистры процессора|регистров процессора]]. Современные |
'''Регистровый файл''' ('''register file''') — модуль [[микропроцессор]]а (CPU), содержащий в себе реализацию [[регистры процессора|регистров процессора]]. Современные регистровые файлы, используемые в [[СБИС]], обычно реализованы как многопортовый массив быстрой статической памяти [[SRAM (память)|SRAM]]. Такие массивы SRAM отличаются явным разделением портов чтения и записи, тогда как классическая многопортовая SRAM обычно позволяет как читать, так и записывать через любой порт. |
||
== Связь с архитектурой == |
|||
[[Система команд]] микропроцессора (архитектура) практически всегда определяет набор регистров, которые будут хранить данные для обработки функциональными устройствами чипа. В простейших процессорах такие ''архитектурные регистры'' отображаются один |
[[Система команд]] микропроцессора (архитектура) практически всегда определяет набор регистров, которые будут хранить данные для обработки функциональными устройствами чипа. В простейших процессорах такие ''архитектурные регистры'' отображаются один в один в физический регистровый файл. В более сложных ЦПУ используется [[переименование регистров]] (register renaming), которое позволяет динамически изменять соответствие между аппаратными и архитектурными регистрами во время исполнения. <!-- The register file is part of the [[instruction set architecture|architecture]] and visible to the programmer, as opposed to the concept of transparent [[CPU cache|caches]]. --> |
||
== Реализация == |
== Реализация == |
||
[[Файл:regfile array.png|right]] |
[[Файл:regfile array.png|right]] |
||
Традиционно регистровый файл реализуется как массив запоминающих ячеек, считываемый вертикально. Слова расположены в горизонтальных строках (word lines), и при чтении ячейки выдают |
Традиционно регистровый файл реализуется как массив запоминающих ячеек, считываемый вертикально. Слова расположены в горизонтальных строках (word lines), и при чтении ячейки выдают своё значение на вертикальные битовые линии (Bit lines). В нижней части эти линии подключены к усилителям, которые преобразуют сигналы с ячеек, ослабленные при передаче, в булевые сигналы полной амплитуды. В левой части расположены декодеры, активирующие строку, соответствующую заказанному регистру или регистрам. Большие регистровые файлы иногда организуются как мозаика из нескольких отраженных и повернутых более простых регистровых файлов. |
||
Регистровые файлы содержат по одной строке слов на каждый порт, по одной битовой линии на бит слова для каждого порта чтения и по две битовые линии на бит слова для каждого порта записи. Также каждая ячейка должна иметь входы питания |
Регистровые файлы содержат по одной строке слов на каждый порт, по одной битовой линии на бит слова для каждого порта чтения и по две битовые линии на бит слова для каждого порта записи. Также каждая ячейка должна иметь входы питания V<sub>dd</sub> и земли V<sub>ss</sub>. Следовательно, с увеличением количества портов площадь, требуемая под разводку<!-- wire pitch area -->, растет квадратично, а площадь, занимаемая транзисторами, — линейно. В какой-то момент, возможно, будет более оптимально по площади или по задержкам иметь несколько регистровых файлов с дублирующейся информацией и половиной портов чтения в каждом, чем один большой регистровый файл сразу со всеми портами чтения. |
||
Например, регистровый файл в целочисленном АЛУ микропроцессора [[MIPS (архитектура)|MIPS]] [[R8000]], имеющий 9 портов чтения, 4 порта записи, содержащий 32 64-битных регистра и реализованный на [[техпроцесс]]е 0,7 мкм, имеет такие размеры, что хорошо различим невооруженным глазом даже на расстоянии порядка 30 см. |
Например, регистровый файл в целочисленном АЛУ микропроцессора [[MIPS (архитектура)|MIPS]] [[R8000]], имеющий 9 портов чтения, 4 порта записи, содержащий 32 64-битных регистра и реализованный на [[техпроцесс]]е 0,7 мкм, имеет такие размеры, что хорошо различим невооруженным глазом даже на расстоянии порядка 30 см. |
||
=== Декодер === |
=== Декодер === |
||
* Декодер обычно разделён на предекодер и decoder proper. |
* Декодер обычно разделён на предекодер и decoder proper. |
||
* Декодер является последовательностью элементов И (AND-gate), которые выставляют линии слов. |
* Декодер является последовательностью элементов И (AND-gate), которые выставляют линии слов. |
||
* Для каждого порта чтения или записи требуется один декодер. К примеру, если файл имеет 4 порта чтения и 2 порта, в |
* Для каждого порта чтения или записи требуется один декодер. К примеру, если файл имеет 4 порта чтения и 2 порта, в нём будет 6 линий слов в каждой ячейке памяти в массиве и 6 элементов И (AND-gate) на каждый ряд в декодере. <!-- При этом Note that the decoder has to be pitch matched to the array, which forces those AND gates to be wide and short --> |
||
=== Массив === |
=== Массив === |
||
[[Файл:regfile cell.png|right|frame|Типичный регистровый файл с 3 портами, в котором возможно одновременное чтение из 2 регистров и запись в 1 регистр, состоит из ячеек похожих на изображенную.]] |
[[Файл:regfile cell.png|right|frame|Типичный регистровый файл с 3 портами, в котором возможно одновременное чтение из 2 регистров и запись в 1 регистр, состоит из ячеек, похожих на изображенную.]] |
||
Базовая схема битовой ячейки: |
Базовая схема битовой ячейки: |
||
* Состояние хранится в паре [[Инвертор (логический элемент)|инверторов]]. |
* Состояние хранится в паре [[Инвертор (логический элемент)|инверторов]]. |
||
* Чтение происходит через транзистор NMOS на битовую линию (транзистор открывается линией слов данного порта) |
* Чтение происходит через транзистор NMOS на битовую линию (транзистор открывается линией слов данного порта) |
||
* Данные записываются замыканием одной или другой стороны на землю через два NMOS |
* Данные записываются замыканием одной или другой стороны на землю через два NMOS-транзистора. |
||
Итак, каждый порт чтения требует один дополнительный транзистор на каждую ячейку, порт записи требует 4 транзистора. |
Итак, каждый порт чтения требует один дополнительный транзистор на каждую ячейку, порт записи требует 4 транзистора. |
||
Строка 33: | Строка 33: | ||
Возможно множество улучшений: |
Возможно множество улучшений: |
||
* Совместное использование линий между ячейками, например Vdd и Vss |
* Совместное использование линий между ячейками, например, Vdd и Vss |
||
* Линии чтения часто предзаряжаются до некоторого уровня между Vdd и Vss |
* Линии чтения часто предзаряжаются до некоторого уровня между Vdd и Vss |
||
… |
… |
||
Строка 48: | Строка 48: | ||
</ref> |
</ref> |
||
--> |
--> |
||
== Микроархитектура == |
== Микроархитектура == |
||
⚫ | Во многих реализациях регистровых файлов нет специальной защиты от попыток записи в одну и ту же ячейку сразу из нескольких портов записи. Вместо этого аппаратура планирования инструкций должна гарантировать, что на каждом такте не более одной инструкции будет производить запись в любую ячейку. Если же запланировано несколько инструкций, пишущих в одну ячейку, то только одна из них должна иметь включенной линию «write enable» (разрешение записи). |
||
⚫ | Пара встречно включенных инверторов требует некоторого времени для стабилизации состояния после начала операции записи, в течение которого чтение из ячейки либо будет более долгим, либо вернет мусор. Поэтому во многих реализациях вводятся проходные (bypass) мультиплексоры, которые могут замыкать записываемые данные непосредственно на порты чтения, когда происходят одновременные запись и чтение в один регистр. Эти проходные мультиплексоры часто являются лишь одной из частей более сложной сети байпасов<!-- может стоит заменить на "проходов"? -->, которая пересылает результаты непосредственно между различными функциональными устройствами процессора, без ожидания их записи в регистры (то есть если на данном такте одно ФУ требует на входе данные, являющиеся выходом другого ФУ на предыдущем такте, они могут быть пересланы по байпасу, а не через запись и чтение в регистровый файл, которые могут потребовать несколько тактов. Чтение происходит из байпасов, запись же в регистр происходит одновременно с работой первого ФУ). |
||
⚫ | Во многих реализациях регистровых файлов нет специальной защиты от попыток записи в одну и |
||
⚫ | Пара встречно включенных инверторов требует некоторого времени для стабилизации состояния после начала операции записи, в течение которого чтение из ячейки либо будет более долгим либо вернет мусор. Поэтому во многих реализациях вводятся проходные (bypass) мультиплексоры, которые могут замыкать записываемые данные непосредственно на порты чтения, когда |
||
<!-- |
<!-- |
||
The register file is usually pitch matched to the datapath that it serves. Pitch matching avoids having the many busses passing over the datapath turn corners, which would use a lot of area. But since every unit must have the same bit pitch, every unit in the datapath ends up with the bit pitch forced by the widest unit, which can waste area in the other units. Register files, because they have two wires per bit per write port, and because all the bit lines must contact the silicon at every bit cell, can often set the pitch of a datapath. |
The register file is usually pitch matched to the datapath that it serves. Pitch matching avoids having the many busses passing over the datapath turn corners, which would use a lot of area. But since every unit must have the same bit pitch, every unit in the datapath ends up with the bit pitch forced by the widest unit, which can waste area in the other units. Register files, because they have two wires per bit per write port, and because all the bit lines must contact the silicon at every bit cell, can often set the pitch of a datapath. |
||
Строка 81: | Строка 79: | ||
* [[Иерархия памяти]] |
* [[Иерархия памяти]] |
||
{{ |
{{Технологии CPU}} |
||
[[Категория:Технологии процессоров]] |
[[Категория:Технологии процессоров]] |
Текущая версия от 12:37, 3 декабря 2020
Регистровый файл (register file) — модуль микропроцессора (CPU), содержащий в себе реализацию регистров процессора. Современные регистровые файлы, используемые в СБИС, обычно реализованы как многопортовый массив быстрой статической памяти SRAM. Такие массивы SRAM отличаются явным разделением портов чтения и записи, тогда как классическая многопортовая SRAM обычно позволяет как читать, так и записывать через любой порт.
Связь с архитектурой
[править | править код]Система команд микропроцессора (архитектура) практически всегда определяет набор регистров, которые будут хранить данные для обработки функциональными устройствами чипа. В простейших процессорах такие архитектурные регистры отображаются один в один в физический регистровый файл. В более сложных ЦПУ используется переименование регистров (register renaming), которое позволяет динамически изменять соответствие между аппаратными и архитектурными регистрами во время исполнения.
Реализация
[править | править код]Традиционно регистровый файл реализуется как массив запоминающих ячеек, считываемый вертикально. Слова расположены в горизонтальных строках (word lines), и при чтении ячейки выдают своё значение на вертикальные битовые линии (Bit lines). В нижней части эти линии подключены к усилителям, которые преобразуют сигналы с ячеек, ослабленные при передаче, в булевые сигналы полной амплитуды. В левой части расположены декодеры, активирующие строку, соответствующую заказанному регистру или регистрам. Большие регистровые файлы иногда организуются как мозаика из нескольких отраженных и повернутых более простых регистровых файлов.
Регистровые файлы содержат по одной строке слов на каждый порт, по одной битовой линии на бит слова для каждого порта чтения и по две битовые линии на бит слова для каждого порта записи. Также каждая ячейка должна иметь входы питания Vdd и земли Vss. Следовательно, с увеличением количества портов площадь, требуемая под разводку, растет квадратично, а площадь, занимаемая транзисторами, — линейно. В какой-то момент, возможно, будет более оптимально по площади или по задержкам иметь несколько регистровых файлов с дублирующейся информацией и половиной портов чтения в каждом, чем один большой регистровый файл сразу со всеми портами чтения.
Например, регистровый файл в целочисленном АЛУ микропроцессора MIPS R8000, имеющий 9 портов чтения, 4 порта записи, содержащий 32 64-битных регистра и реализованный на техпроцессе 0,7 мкм, имеет такие размеры, что хорошо различим невооруженным глазом даже на расстоянии порядка 30 см.
Декодер
[править | править код]- Декодер обычно разделён на предекодер и decoder proper.
- Декодер является последовательностью элементов И (AND-gate), которые выставляют линии слов.
- Для каждого порта чтения или записи требуется один декодер. К примеру, если файл имеет 4 порта чтения и 2 порта, в нём будет 6 линий слов в каждой ячейке памяти в массиве и 6 элементов И (AND-gate) на каждый ряд в декодере.
Массив
[править | править код]Базовая схема битовой ячейки:
- Состояние хранится в паре инверторов.
- Чтение происходит через транзистор NMOS на битовую линию (транзистор открывается линией слов данного порта)
- Данные записываются замыканием одной или другой стороны на землю через два NMOS-транзистора.
Итак, каждый порт чтения требует один дополнительный транзистор на каждую ячейку, порт записи требует 4 транзистора.
Микроархитектура
[править | править код]Во многих реализациях регистровых файлов нет специальной защиты от попыток записи в одну и ту же ячейку сразу из нескольких портов записи. Вместо этого аппаратура планирования инструкций должна гарантировать, что на каждом такте не более одной инструкции будет производить запись в любую ячейку. Если же запланировано несколько инструкций, пишущих в одну ячейку, то только одна из них должна иметь включенной линию «write enable» (разрешение записи).
Пара встречно включенных инверторов требует некоторого времени для стабилизации состояния после начала операции записи, в течение которого чтение из ячейки либо будет более долгим, либо вернет мусор. Поэтому во многих реализациях вводятся проходные (bypass) мультиплексоры, которые могут замыкать записываемые данные непосредственно на порты чтения, когда происходят одновременные запись и чтение в один регистр. Эти проходные мультиплексоры часто являются лишь одной из частей более сложной сети байпасов, которая пересылает результаты непосредственно между различными функциональными устройствами процессора, без ожидания их записи в регистры (то есть если на данном такте одно ФУ требует на входе данные, являющиеся выходом другого ФУ на предыдущем такте, они могут быть пересланы по байпасу, а не через запись и чтение в регистровый файл, которые могут потребовать несколько тактов. Чтение происходит из байпасов, запись же в регистр происходит одновременно с работой первого ФУ).
Примечания
[править | править код]Ссылки
[править | править код]- Register file design considerations in dynamically scheduled processors — Farkas, Jouppi, Chow — 1995