Устройство обмена с оперативной памятью системы на кристалле "Эльбрус-S"
Core L2 MAU Эльбрус Chipset 0.13 um 300 MHz Core L2 MAU Memory 100 MHz 1.6/3.2 GB/s
Эльбрус-S Core L2 MAU Chipset Core L2 MAU Chipset Core L2 MAU Chipset Core L2 MAU Chipset 0.09 um 500 MHz Memory 8 GB/s2 GB/s
Задача: Разработка MAU для новой системы с обеспечением максимально возможной эффективности доступа к памяти Требования: Поддержка когерентности Максимальная пропускная способность Минимальное время доступа
Структурная схема CPU MC#1 i/oLink ALink BLink C Chipset ST Buff ST Data LD Buff LD Data KM MAU MC#2
Операция Load Core L2 MAU Chipset Core L2 MAU Chipset Core L2 MAU Chipset Core L2 MAU Chipset Memory
Для завершения LD необходимо: Собрать когерентные ответы Принять данные Взять из LDB сопровождающую информацию и отдать с ней данные в процессор Требования к буферу: Параллельный асинхронный приём данных и когерентных ответов со всех направлений Приоритет данных из кэшей над данными из памяти Максимально быстрая выдача данных в процессор на основе собранной информации Буфер приёма данных и сбора когерентных ответов
Буфер приёма данных и сбора когерентных ответов (принятая схема) 48 4xDW mc0mc1link0link1link2 mem 64 data[63:0] 4 tag 11 cp 6 num coh 69 4x rq in_regs ready release ответ о завершении ackcode 24 когерентные ответы wait приоритет
Пропускная способность Запросы по чтению – 32 или 64 байт за такт (16 или 32 ГБ/с) Приём данных процессором – 32 байт за такт (16 ГБ/с) Приём данных MAU: из памяти – 8 ГБ/с из линков – по 2 ГБ/с из ввода-вывода – 1 ГБ/с на практике - в сумме не более ~12 ГБ/с Лишние запросы нехватка ПСП + доп. задержки в линках Необходима оптимизация работы LDB
LDB CPU MRQ LDB Addrdst03dst47 Chipset LD Data 24
Оптимизация работы LDB «Эльбрус»: Возможность подклеивания заявок: не требующих нового обращения в память (за 4xDW) не требующих тех же DW Задача – добавить возможность подклеивания заявок, запрашивающих пересекающиеся группы DW += LDB
Решение – буфер виртуальных заявок Типы входящих в LDB заявок: обычная – заведение новой строки, запрос в память за 4xDW или 8xDW подклеиваемая – добавление значимостей DW и соотв. DST в имеющуюся строку вторичная – новый тип, заведение новой строки без запроса в память Аппаратная реализация: введение в LDB битов вторичности запросов (для блокирования ухода таких заявок в память) и сигналов заведения вторичных строк буфер вторичных заявок - ссылок на исходные строки LDB для вторичных строк LDB поддержка буфером приёма данных удержания данных на своём выходе по сигналу из буфера вторичных заявок
Схема взаимодействия LDB, буфера приёма данных и буфера вторичных заявок Буфер данных data_out номер первичной строки Буфер вторичных заявок hold LDB информация о заведении номер текущей вторичной строки destination
Задержки в LDB, STB – примерно 3 такта (физические) + ожидание в очереди Буфер приема данных (до оптимизаций): задержка данных на входных регистрах -1-2 для MC, 1-7 для линков, 1-8 для I/O задержка на принятие решения – 1 такт (физическая) ожидание выдачи из-за одновременного возникновения готовности нескольких строк - 0-?
Задержка на входных регистрах Приоритетная схема необходима для избежания переполнения, либо требуется более сложный механизм увеличение задержки и площади Однако не учитывает ни время ожидания, ни готовность по когерентным ответам доп. задержка при интенсивном приходе данных (0-7 тактов) mc0mc1link0link1link2 in_regs приоритет I/O
Решение Байпас значимостей готовностей по данным Внеочередная запись в массив данных Запись «приоритетных» данных на регистр «внеочередного» источника Результат: + Динамика заполнения регистров не меняется + Задержка на регистрах на итоговую задержку не влияет - Данные из массива можно получить только через 3 такта после принятия решения
Временная диаграмма работы буфера приёма данных и сбора когерентных ответов такты ЦП Данные в ЦП Чтение из массива чёт номер строки для выдачи готовность по данным готовность по ответам Внеочередная запись в массив hold и вторичные строки адреса назначения из LDB Адреса назначения в ЦП hold и вторичные строки Потребовался ещё 1 такт задержки данных на выходе буфера. Но ЦП всё равно принимает данные только через 2 такта после адресов. Общая задержка не увеличилась нельзя! регистрыивходырегистрыивходы
Проблема выбора строки из множества готовых Готовность по данным – до 6 строк одновременно Готовность по ответам – до 6 строк одновременно Итого 12 + накопленные ранее. Неадекватный выбор разброс времени доступа Приоритет по номеру: + простота, минимальные задержки и площадь - возможность «зависания» некоторых строк Решение #1 – приоритет по номеру, смещающийся по счётчику (простое). Решение #2 – приоритет по очерёдности поступления запроса (сложное). Оба оказались реализуемыми, тема для отдельного исследования.
Результаты Разработано verilog-описание MAU, удовлетворяющее поставленным требованиям и решающее поставленные задачи Начата отладка и физдизайн