Регистровый файл: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 10: Строка 10:
Регистровые файлы содержат по одной строке слов на каждый порт, по одной битовой линии на бит слова для каждого порта чтения и по две битовые линии на бит слова для каждого порта записи. Также каждая ячейка должна иметь входы питания Vdd и земли Vss. Следовательно, с увеличением количества портов площадь, требуемая под разводку<!-- wire pitch area --> растет квадратично, а площадь, занимаемая транзисторами — линейно. В какой-то момент, возможно, будет более оптимально по площади или по задержкам иметь несколько регистровых файлов с дублирующейся информацией и половиной портов чтения в каждом, чем один большой регистровый файл сразу со всеми портами чтения.
Регистровые файлы содержат по одной строке слов на каждый порт, по одной битовой линии на бит слова для каждого порта чтения и по две битовые линии на бит слова для каждого порта записи. Также каждая ячейка должна иметь входы питания Vdd и земли Vss. Следовательно, с увеличением количества портов площадь, требуемая под разводку<!-- wire pitch area --> растет квадратично, а площадь, занимаемая транзисторами — линейно. В какой-то момент, возможно, будет более оптимально по площади или по задержкам иметь несколько регистровых файлов с дублирующейся информацией и половиной портов чтения в каждом, чем один большой регистровый файл сразу со всеми портами чтения.


Например регистровый файл в целочисленном АЛУ микропроцессора [[MIPS]] [[R8000]], имеющий 9 портов чтения, 4 порта записи, содержащий 32 64хбитных регистра и реализованный на [[техпроцесс]]е 0.7 мкм, имеет такие размеры, что хорошо различим невооруженным глазом даже на расстоянии порядка 30 см.
Например регистровый файл в целочисленном АЛУ микропроцессора [[MIPS R8000]], имеющий 9 портов чтения, 4 порта записи, содержащий 32 64хбитных регистра и реализованный на [[техпроцесс]]е 0.7 мкм, имеет такие размеры, что хорошо различим невооруженным глазом даже на расстоянии порядка 30 см.


=== Декодер ===
=== Декодер ===


* Декодер обычно разделен на предекодер и decoder proper.
* Декодер обычно разделён на предекодер и decoder proper.
* Декодер является последовательностью элементов И (AND-gate), которые выставляют линии слов.
* Декодер является последовательностью элементов И (AND-gate), которые выставляют линии слов.
* Для каждого порта чтения или записи требуется один декодер. К примеру, если файл имеет 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 -->
* Для каждого порта чтения или записи требуется один декодер. К примеру, если файл имеет 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 -->
Строка 23: Строка 23:


Базовая схема битовой ячейки:
Базовая схема битовой ячейки:
* Состояние хранится в паре [[Инвертор_(логический_элемент)|инвертор]]ов.
* Состояние хранится в паре [[Инвертор_(логический_элемент)|инверторов]].
* Чтение происходит через транзистор NMOS на битовую линию (транзистор открывается линией слов данного порта)
* Чтение происходит через транзистор NMOS на битовую линию (транзистор открывается линией слов данного порта)
* Данные записываются замыканием одной или другой стороны на землю через два NMOS транзистора.
* Данные записываются замыканием одной или другой стороны на землю через два NMOS транзистора.
Строка 35: Строка 35:


Возможно множество улучшений:
Возможно множество улучшений:
*Совместное использование линий между ячейками, например Vdd и Vss
* Совместное использование линий между ячейками, например Vdd и Vss
*Линии чтения часто предзаряжаются до некоторого уровня между Vdd и Vss
* Линии чтения часто предзаряжаются до некоторого уровня между Vdd и Vss


Строка 55: Строка 55:
Во многих реализациях регистровых файлов нет специальной защиты от попыток записи в одну и те же ячейку сразу из нескольких портов записи. Вместо этого, аппаратура планирования инструкций должна гарантировать что на каждом такте не более одной инструкции будет производить запись в любую ячейку. Если же запланировано несколько инструкций, пишущих в одну ячейку, то только одна из них должна иметь включенной линию «write enable» (разрешение записи).
Во многих реализациях регистровых файлов нет специальной защиты от попыток записи в одну и те же ячейку сразу из нескольких портов записи. Вместо этого, аппаратура планирования инструкций должна гарантировать что на каждом такте не более одной инструкции будет производить запись в любую ячейку. Если же запланировано несколько инструкций, пишущих в одну ячейку, то только одна из них должна иметь включенной линию «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.



Версия от 21:13, 24 июля 2010

Регистровый файл (register file) — модуль микропроцессора (CPU), содержащий в себе реализацию регистров процессора. Современные регистровый файлы, используемые в СБИС обычно реализованы как многопортовый массив быстрой статической памяти SRAM. Такие массивы SRAM отличаются явным разделением портов чтения и записи, тогда как классическая многопортовая SRAM обычно позволяет как читать так и записывать через любой порт.

Система команд микропроцессора (архитектура) практически всегда определяет набор регистров, которые будут хранить данные для обработки функциональными устройствами чипа. В простейших процессорах такие архитектурные регистры отображаются один-в-один в физический регистровый файл. В более сложных ЦПУ используется переименование регистров (register renaming), которое позволяет динамически изменять соответствие между аппаратными и архитектурными регистрами во время исполнения.

Реализация

Традиционно регистровый файл реализуется как массив запоминающих ячеек, считываемый вертикально. Слова расположены в горизонтальных строках (word lines), и при чтении ячейки выдают свое значение на вертикальные битовые линии (word lines). В нижней части эти линии подключены к усилителям, которые преобразуют сигналы с ячеек, ослабленные при передаче, в булевые сигналы полной амплитуды. В левой части расположены декодеры, активирующие строку, соответствующую заказанному регистру или регистрам. Большие регистровые файлы иногда организуются как мозаика из нескольких отраженных и повернутых более простых регистровых файлов.

Регистровые файлы содержат по одной строке слов на каждый порт, по одной битовой линии на бит слова для каждого порта чтения и по две битовые линии на бит слова для каждого порта записи. Также каждая ячейка должна иметь входы питания Vdd и земли Vss. Следовательно, с увеличением количества портов площадь, требуемая под разводку растет квадратично, а площадь, занимаемая транзисторами — линейно. В какой-то момент, возможно, будет более оптимально по площади или по задержкам иметь несколько регистровых файлов с дублирующейся информацией и половиной портов чтения в каждом, чем один большой регистровый файл сразу со всеми портами чтения.

Например регистровый файл в целочисленном АЛУ микропроцессора MIPS R8000, имеющий 9 портов чтения, 4 порта записи, содержащий 32 64хбитных регистра и реализованный на техпроцессе 0.7 мкм, имеет такие размеры, что хорошо различим невооруженным глазом даже на расстоянии порядка 30 см.

Декодер

  • Декодер обычно разделён на предекодер и decoder proper.
  • Декодер является последовательностью элементов И (AND-gate), которые выставляют линии слов.
  • Для каждого порта чтения или записи требуется один декодер. К примеру, если файл имеет 4 порта чтения и 2 порта, в нем будет 6 линий слов в каждой ячейке памяти в массиве и 6 элементов И (AND-gate) на каждый ряд в декодере.

Массив

Типичный регистровый файл с 3 портами, в котором возможно одновременное чтение из 2 регистров и запись в 1 регистр, состоит из ячеек похожих на изображенную.

Базовая схема битовой ячейки:

  • Состояние хранится в паре инверторов.
  • Чтение происходит через транзистор NMOS на битовую линию (транзистор открывается линией слов данного порта)
  • Данные записываются замыканием одной или другой стороны на землю через два NMOS транзистора.

Итак, каждый порт чтения требует один дополнительный транзистор на каждую ячейку, порт записи требует 4 транзистора.


Микроархитектура

Во многих реализациях регистровых файлов нет специальной защиты от попыток записи в одну и те же ячейку сразу из нескольких портов записи. Вместо этого, аппаратура планирования инструкций должна гарантировать что на каждом такте не более одной инструкции будет производить запись в любую ячейку. Если же запланировано несколько инструкций, пишущих в одну ячейку, то только одна из них должна иметь включенной линию «write enable» (разрешение записи).

Пара встречно включенных инверторов требует некоторого времени для стабилизации состояния после начала операции записи, в течение которого чтение из ячейки либо будет более долгим либо вернет мусор. Поэтому во многих реализациях вводятся проходные (bypass) мультиплексоры, которые могут замыкать записываемые данные непосредственно на порты чтения, когда происходит одновременные запись и чтение в один регистр. Эти проходные мультиплексоры часто являются лишь одной из частей более сложной сети байпасов, которая пересылает результаты непосредственно между различными функциональными устройствами процессора, без ожидания их записи в регистры. (То есть если на данном такте одно ФУ требует на входе данные, являющиеся выходом другого ФУ на предыдущем такте, они могут быть пересланы по байпасу, а не через запись и чтение в регистровый файл, которые могут потребовать несколько тактов. Чтение происходит из байпасов, запись же в регистр происходит одновременно с работой первого ФУ.)

Примечания

Ссылки

См. также