Russian Federation
Russian Federation
The article discusses international experience in the development of processor cores using the example of RISC-V using open source software tools. The use of the Chisel hardware design language in academic research centers abroad is described to create libraries of complex generators of processor cores, caches of various levels, bus interfaces and other functional blocks in the context of systems on a chip (SoC).
processor cores, software tools, functional blocks, efficiency, methodology
В настоящее время за рубежом в академических научных центрах широко используют язык аппаратного конструирования Chisel для создания библиотеки сложных генераторов процессорных ядер, кэшей различных уровней, интерфейсов шин (внутрикристальных межсоединений для соединений и управления функциональными блоками в СнК-разработках) и др.
Rocket Chip - это СнК-генератор разработанный в Калифорнийском университете в Беркли. Rocket Chip имеет открытый исходный код и доступно по лицензии BSD на Github. Rocket Chip поддерживает интеграцию пользовательских ускорителей в виде расширений набора команд, сопроцессоров или полностью независимых новых ядер. Процессорные ядра, сгенерированные Rocket были изготовлены в кремнии и показали способность загружать ОС Linux.
Rocket Chip генерирует процессорные ядра общего назначения, использующие открытый RISC-V ISA, и обеспечивает как генерацию стандартных конвейерных скалярных ядер (Rocket in-order) с очередным, так и ядер c внеочередным исполнением команд (Berkeley Out-of-Order Machine, BOOM). BOOM является суперскалярным ядром RV64G [1].
Chisel (Constructing Hardware in a Scala Embedded Language) - язык описания аппаратуры, надстроенный над Scala, который транслируется в Verilog код. Chisel можно рассматривать как библиотеку для Scala.
Chisel это язык описания аппаратного обеспечения с открытым исходным кодом, используемый для описания цифровых логических схем и схем на уровне регистровых передач (hardware construction language, HCL). Chisel добавляет примитивы аппаратного обеспечения к языку программирования Scala, предоставляя разработчикам возможности современного языка программирования для написания сложных параметризуемых генераторов схем, которые создают синтезируемый Verilog код. Эта методология позволяет создавать повторно используемые компоненты и библиотеки, такие как очередь FIFO и арбитры в стандартной библиотеке Chisel, повышая уровень абстракции в дизайне при сохранении детального контроля.
Scala является преемником Java. Scala более объектно-ориентирован, чем Java, а также обладает возможностями функционального языка. Сочетание двух подходов делает программирование на Scala гибким, повышает эффективность кода и позволяет реализовывать нестандартные решения [2].
Из RTL- описания на Chisel строится аппаратный граф, который, в свою очередь, превращается в промежуточное описание на языке firrtl, а уже после встроенный интерпретатор генерит из firrtl код Verilog или C++.
Verilator имеет аналогичную или лучшую производительность по сравнению с Verilog симуляторами с закрытым исходным кодом (например, Carbon Design Systems Carbonator, Modelsim/Questa, Cadence Incisive/NC-Verilog, Synopsys VCS, VTOC и Pragmatic CVer/CVC).
Симулятор Verilator позволяет преобразовать Verilog модули в C++ классы, которые потом компилируются в обычную исполняемую программу. Что позволяет достичь очень высокой производительности. Verilator, может обрабатывать только синтезируемый Verilog код с учетом архитектурного базиса ПЛИС [3].
Verilator не переводит Verilog HDL напрямую на C ++ или SystemC. Verilator компилирует код пользователя в более быструю оптимизированную модель с разделением на потоки, которая, в свою очередь, помещается в модуль C ++/SystemC. Результатом является скомпилированная модель Verilog, которая выполняется даже в одиночном потоке более чем в 10 раз быстрее, чем standalone SystemC, а в одиночном потоке примерно в 100 раз быстрее, чем интерпретируемые симуляторы Verilog, такие как Icarus - Verilog. Дополнительное 2-10-кратное ускорение может быть получено за счет многопоточности (что дает в общей сложности 200-1000 раз больше по сравнению с интерпретируемыми симуляторами).
Verilator — это инструмент, который компилирует исходные коды Verilog и SystemVerilog в высокооптимизированный (и, возможно, многопоточный) циклически точный код C++ или SystemC. Преобразованные модули можно создавать и использовать в тестовом стенде C++ или SystemC для проверки и/или моделирования [4].
На рис. 1 показан пример экземпляра Rocket Chip. На нем изображены две ячейки (плитки) с процессорными ядрами Rocket и BOOM, которые подключены к 4 рядам кэша (специальный буфер быстрой памяти) L2$, который через интерфейс L2toIO подключен к внешним системам ввода-вывода и памяти с помощью моста TileLink/AXI4. Генерируемые процессорные ядра содержат L1-кэши инструкций и данных (L1I$ и L1D$ ), TLB (буферы быстрого перевода) и FPU (модуль операций с плавающей запятой) с интерфейсами MemIO и HostIO для связи с внешним миром, интерфейс "RoCC", который связывается с подключенными ядрами ускорителей/сопроцессоров.
Рис. 1. Rocket Chip генератор микропроцессорных ядер состоит из следующих подкомпонентов: основной генератор ядер (А); генератор кэша (B); генератор RoCC-совместимого сопроцессора (С); генератор ячеек (D); TileLink –
генератор связей между ячейками (E); периферийные устройства (F)
Генераторы ядер Rocket и BOOM могут включать в себя: дополнительные модули FPU, настраиваемые конвейеры функциональных блоков и настраиваемые предсказатели ветвлений программы; cемейство генераторов кэша и TLB с настраиваемыми размерами, ассоциативностью и политики замены; пользовательский интерфейс сопроцессора RoCС; шаблон генератора ячеек, с учетом когерентности кэшей; генератор связей между плитками (генератор сетей агентов когерентности кэша и связанных с ним контроллеров кэша). Опции конфигурации включают: количество ячеек, политику согласованности, наличие общего резервного хранилища и реализация базовых физических сетей); периферийные устройства: генераторы шин, совместимых с AMBA (AXI, AHB-Lite и APB) и множество конверторов и контроллеров, включая процессор Z-scale.
Rocket Chip представляет собой генератор скалярных ядер RV64G c 5-ступенчатым конвейером (выборка, декодирование, выполнение, память, обратная запись), с модулем управления памятью MMU, которое поддерживает виртуализацию памяти на основе страниц, неблокирующий кэш данных и интерфейс с предсказанием переходов [5].
Предсказание ветвлений программы настраивается и обеспечивается целевым буфером переходов (BTB), таблицей истории переходов (BHT) и стеком адресов возврата (RAS). Доступна поддержка некоторых расширений ISA (M, A, F, D). BOOM поддерживает спекулятивное выполнение ветвлений программы и предсказание переходов, используя BTB, RAS и параметризированный резервный предиктор (BPD).
Некоторые из доступных поддерживаемых предикторов, которые могут быть созданы, включают gshare предиктор (двухуровневая адаптивная схема предсказания ветвлений, с использованием xor, называется gshare) и TAGE предиктор (тегированный геометрический, TAgged Geometric предиктор с размером истории, разновидность которого используется в процессоре с архитектурой Intel Haswell). BOOM использует модуль загрузки/накопления операций с агрессивным планированием. На рис. 2 показан сгенерированный суперскалярный RV64G процессор BROOM.
Rocket Chip реализуется на Xilinx Ultrascale+ FPGA серия Zynq-7000 с использованием инструментов разработки и отладки встраиваемых микропроцессорных систем таких как Parallella и ZedBoard. Реализация ядра RV32I возможна на ПЛИС серии Lattice ICE40. Код написан на SystemVerilog и компилируется при помощи IceStorm.
Китайская академия наук придаёт большое значение созданию экосистем технологий с открытым исходным кодом. В 2018 году был сформирован Китайский альянс RISC-V для развития проектов. Процессор Xiangshan и разработанная к нему ОС Aolai демонстрируют стремление Китая укрепить экосистему RISC-V.
Институт компьютерных технологий китайской академии наук в 2020 г представил проект XiangShan, развивающий высокопроизводительный открытый процессор на базе архитектуры набора команд RISC-V (RV64GC) с использованием программных инструментов с открытым исходным кодом для их проектирования. Наработки проекта открыты под пермиссивной лицензией (лицензии на программное обеспечение, которые практически не ограничивают свободу действий пользователей ПО и разработчиков, работающих с исходным кодом) MulanPSL 2.0.
Рис. 2. Топологическое планирование кристалла суперскалярного RV64G
процессора BROOM, изготовленного на кремниевой фабрике TSMC
по технологии 28 нм
В настоящее время разработаны 3 поколения процессоров (описание аппаратных блоков процессоров RISC-V представлено на языке Chisel). Микропроцессорные ядра проекта XiangShan были реализованы в базисе ПЛИС и проведено их моделирование с использованием Verilog-симулятора Verilator с открытым исходным кодом [6]. В качестве эталонной операционной системы, используемой при тестировании реализации на базе ПЛИС, применяется Debian GNU/Linux.
Компания Alibaba Cloud Intelligence (китайский облачный провайдер) открыла исходные коды, а также соответствующее программное обеспечение и инструменты четырех процессорных ядер RISC-V: XuanTie E902, E906, C906 и C910. Хотя RISC-V является открытым стандартом и существует значительная доля ядер RISC-V с открытым исходным кодом, многие коммерческие ядра RISC-V имеют закрытый исходный код.
На базе этих ядер можно самостоятельно разработать свой процессор (СнК) и начать массовое производство. Открытый доступ к документации ядра процессора облегчает разработку программного обеспечения и портирование необходимых драйверов.
Схемы, описания аппаратных блоков на языке Verilog, симулятор и сопутствующая проектная документация опубликованы на GitHub под лицензией Apache 2.0. Отдельно опубликованы адаптированные для работы с процессорами XuanTie версии компиляторов GCC и LLVM, библиотека Glibc, инструменты Binutils, загрузчик U-Boot, ядро Linux, middleware с интерфейсом OpenSBI (Supervisor Binary Interface), платформа для создания встраиваемых систем на базе Linux Yocto Project. Ядра OpenE902, OpenE906, OpenC906 и OpenC910, доступны на GitHub под лицензией Apache 2.0.
Как видим, многие китайские проекты ставят перед собой задачу разработать процессорные ядра RISC-V ISA с использованием программных инструментов САПР с открытым исходным кодом.
1. Frolov V.A. Issledovanie tehnologii RISC-V / V.A. Frolov, V.A. Galaktionov, V.V. Sanzharov // Trudy ISP RAN, tom 32, vyp. 2, 2020 g., str. 81-98. DOI:https://doi.org/10.15514/ISPRAS–2020–32(2) –7.
2. Harris S.L. Cifrovaya shemotehnika i arhitektura komp'yutera: RISC-V / Sara L. Harris, Devid Harris. // per. s angl. V.S. Yacenkova, A.Yu. Romanova; pod red. A. Yu. Romanova. – M.: DMK Press, 2021. – 810 s.
3. Strogonov A.V. Effektivnyy podhod v razrabotke upravlyayuschih avtomatov mikroprocessornyh yader PLIS /A.V. Strogonov, O.L. Bordyuzha, A.I. Strogonov // Elektronika: Nauka, Tehnologiya, Biznes, 2024. № 1. S. 1-8.
4. Achkasov A.V. Osobennosti proektirovaniya mikroshem, vypolnennyh po gluboko-submikronnym tehnologiyam / A.V. Achkasov, M.V. Solodilov, N.N. Litvinov, P.A. Chubunov, V.K. Zol'nikov, D.V. Shehovcov, O.L. Bordyuzha // Modelirovanie sistem i processov. – 2022. – T. 15, № 4. – S. 7-17.
5. Strogonov A.V. Shemy ochistki konfiguracionnoy pamyati PLIS / A.V. Strogonov, O.I. Orehov, A.S. Plohih, O.L. Bordyuzha // Tverdotel'naya elektronika, mikroelektronika i nanoelektronika. Mezhvuzovskiy sbornik nauchnyh trudov. – Voronezh, 2023. - S. 279-281.
6. Zol'nikov V.K. Obzor programm dlya SAPR submikronnyh SBIS i uchet elektrofizicheskih effektov gluboko submikronnogo urovnya / V.K. Zol'nikov, A.L. Savchenko, A.Yu. Kulay // Modelirovanie sistem i processov. – 2019. – T. 12, № 1. – S. 40-47.