Выпуск #1/2025
А.В. Строгонов, А. Винокуров, А.И. Строгонов, А. Арсентьев
РАЗРАБОТКА МНОГОТАКТНОГО МИКРОПРОЦЕССОРНОГО ЯДРА RISC-V ДЛЯ РЕАЛИЗАЦИИ В БАЗИСЕ ПЛИС CYCLONE V
РАЗРАБОТКА МНОГОТАКТНОГО МИКРОПРОЦЕССОРНОГО ЯДРА RISC-V ДЛЯ РЕАЛИЗАЦИИ В БАЗИСЕ ПЛИС CYCLONE V
Просмотры: 883
DOI: 10.22184/1992-4178.2025.242.1.96.100
В статье рассматриваются вопросы разработки многотактного микропроцессорного ядра RISC-V с управляющим автоматом, созданным с помощью редактора конечных автоматов
(State Machine Editor) в САПР Altera Quartus II для последующей реализации в базисе ПЛИС серии Cyclone V.
В статье рассматриваются вопросы разработки многотактного микропроцессорного ядра RISC-V с управляющим автоматом, созданным с помощью редактора конечных автоматов
(State Machine Editor) в САПР Altera Quartus II для последующей реализации в базисе ПЛИС серии Cyclone V.
Теги: altera quartus ii cad cyclone v fpga risc-v architecture state machine editor архитектура risc-v плис cyclone v редактор конечных автоматов сапр altera quartus ii
Разработка многотактного микропроцессорного ядра RISC-V
для реализации в базисе ПЛИС Cyclone V
А.В. Строгонов, д.т.н., А. Винокуров, к.т.н., А.И. Строгонов, А. Арсентьев, к.т.н.
В девятом номере журнала «ЭЛЕКТРОНИКА: Наука, Технология, Бизнес» за 2024 год был рассмотрен пример реализации однотактного микропроцессорного ядра RISC-V в САПР Altera Quartus II [2].
В продолжение темы развития проектов на базе открытой архитектуры RISC-V в данной статье рассматриваются вопросы разработки многотактного микропроцессорного ядра RISC-V с управляющим автоматом, созданным с помощью редактора конечных автоматов
(State Machine Editor) в САПР Altera Quartus II для последующей реализации в базисе ПЛИС серии Cyclone V.
Преимущество многотактного микропроцессорного ядра RISC-V перед однотактным заключается в том, что выполнение каждой команды происходит в несколько этапов. При этом простые команды выполняются быстрее, чем сложные – например, для выполнения самой медленной команды чтения памяти lw требуется пять, а для команды условного перехода beq уже три этапа. Процессор использует общую память для команд (ПЗУ) и данных (ОЗУ), обращаться к которой можно в одном цикле для получения команды, а в другом – для чтения или записи данных. Кроме того, на разных этапах обработки требуется всего лишь один сумматор.
Рассмотрим особенности реализации проекта многотактного процессорного ядра RISC-V в базисе ПЛИС Cyclone V с применением САПР Altera Quartus II, который был описан в работе [1]. В [1] был представлен пример разработки однотактного процессора с использованием программы Synplify Premier от Synplicity.
В рамках данного проекта была поставлена задача разработать управляющий автомат микропроцессорного ядра RISC-V с помощью редактора конечных автоматов (State Machine Editor) САПР Altera Quartus II и извлечь в автоматическом режиме его VHDL-код. Остальные функциональные блоки микропроцессорного ядра были разработаны на двух языках – SystemVerilog и VHDL. Проектируемый многотактный процессор базируется на однотактном процессоре, коды основных функциональных блоков которого приведены в разделе 7.6.1 работы [1].
Особенностью данного проекта является то, что ПЗУ и ОЗУ микропроцессорного ядра реализованы на блочном ОЗУ ПЛИС размером 128 строк по 32 бита в каждой. Адресное пространство с 0 по 80 строку зарезервировано под тестовую программу (прошивка ПЗУ, текстовый файл riscvtest.txt взят из работы [1]), а с 81 по 127 строку – под ОЗУ данных.
Существует проблема генерации
в САПР Quartus II «правильного» конфигурационного файла из VHDL-кода. В ходе экспериментов было установлено [2], что для ее устранения необходимо между командами вставлять три пустые строки по причине того, что счетчик команд увеличивает свое содержимое на четыре, так как команды в RISC-V являются 4-байтовыми.
Пример 1 демонстрирует инициализацию ПЗУ непосредственно из VHDL-кода (рис. 1). В данном примере используется двоичное представление содержимого памяти команд. Запись в ОЗУ осуществляется синхронно начиная с адреса старше 80, а чтение как памяти программ, так и данных идет в асинхронном режиме. По VHDL-коду ОЗУ САПР генерирует заполненный значениями конфигурационный mif-файл (рис. 2). Как видно из рис. 2, строки с 0 по 80 заполнены кодами программы, а с 81 по 127 строку – нулевыми значениями, для последующих операций с данными.
На рис. 3, 4 представлен проект многотактного процессорного ядра RISCV в САПР Quartus II с использованием различных мегафункций (неархитектурные 32-разрядные регистры и шинные мультиплексоры) для ускорения проектирования. На рис. 5 показана диаграмма состояний управляющего автомата микропроцессорного ядра, созданная с помощью редактора конечных автоматов (State Machine Editor). Схема проекта в точности соответствует рис. 7.44 из работы [1].
Так как многотактный процессор на разных этапах обработки использует один сумматор, то необходимо дополнительно разработать вспомогательную схему для отбора результатов вычислений АЛУ с целью быстро проверить правильность выполнения команд. Это в дальнейшем поможет сравнить значения на выходе АЛУ с результатами вычислений АЛУ однотактного процессора. Ожидаемо, что результаты вычислений АЛУ многотактного и однотактного процессора будут разниться, но все же это поможет исключить ошибки разработки процессорных ядер.
На рис. 6 представлена схема захвата результатов вычисления АЛУ. Схема использует декодирование сигналов ALUSrcA=10 на шине ALUSrcA[1..0] в состояниях MemADR, ExecuteR, Executel, BEQ (рис.7.45 из работы [1]), а в состоянии JAL – сигналов ALUSrcA=01 и ALUSrcB=10 на шинах ALUSrcA[1..0] и ALUSrcB[1..0]. Результаты вычислений АЛУ, захваченные в этих состояниях, можно увидеть на шине ALU[31..0].
Например, наличие на шине ALUSrcA[1..0] комбинации сигналов ALUSrcA[1] & ~ALUSrcA[0] разрешает запись результатов вычислений АЛУ многотактного процессора во вспомогательный 32-разрядный регистр в состояниях MemADR, ExecuteR, Executel, BEQ.
На рис. 7 представлены результаты функционального моделирования многотактного микропроцессорного ядра RISC-V. Информационные потоки микропроцессорного ядра RISC-V показаны на примере выполнения первых двух команд addi (riscvtest.txt) из теста [1] типа I с кодами 00500113 и 00C00193. В правой части рис. 7 показаны переходы по состояниям диаграммы конечного автомата из работы [1], а в нижнем правом углу показаны машинные и ассемблерные коды этих команд. На рис. 8, 9 показаны информационные потоки многотактного и однотактного микропроцессорного ядра RISC-V при прохождении полного теста.
Зеленым цветом (для сравнения работы АЛУ двух микропроцессорных ядер) выделены результаты вычисления АЛУ при выполнении полного теста и отработка команд перехода с возвратом jal и последующего сложения add по метке перехода end. В состоянии JAL тракт данных следующий: PC=ALUOut а ALUOut=PC+4 [1].
По команде jal x3, end (x3=0x44), находящейся в ПЗУ по адресу 40, будет осуществлен переход на метку end с адресом 48 (машинный код команды 00910133) при этом в x3 в регистровом файле будет сохранено значение адреса следующей команды 0x44 (x3=0x44).
По адресу 48 будет выполнена команда add x2, x2, x9, результатом выполнения которой на выходе АЛУ будет число 25 (x2 = 7+18=25). Тест завершают две команды [1]: sw x2, 0x20(x3), по которой по адресу mem[100] в ОЗУ данных сохранится число 25, а по последней команде beq x2, x2, done процессор перейдет в бесконечный цикл (рис. 10). Как показывают рис. 8 и 9, многотактное и однотактное микропроцессорные ядра проходят тест успешно, по адресу 100 (получается сложением чисел 0x44 и 0х20 или 68 и 32 в десятичной форме) в ОЗУ оказывается записанным число 25.
Проект успешно реализуется в ПЛИС серии Cyclone V 5CSXFC6D6F31I7ES – из ресурсов ПЛИС потребовалось 2 534 (6 %) адаптивных логических модуля, 4 449 выделенных триггеров, два блока памяти емкостью 2 048 бит (<1 %). Максимальная тактовая частота синхросигнала fmax CLK (модель Slow 1 100 мВ, 100 °С) составила 67 МГц против
58 МГц для однотактного процессорного ядра в базисе ПЛИС Cyclone V [2]. Как и ожидалось, в результате получили определенный выигрыш в быстродействии.
ЛИТЕРАТУРА
Харрис С.Л., Харрис Д. Цифровая схемотехника и архитектура компьютера RISC-V / Пер. с англ. В.С. Яценкова, А.Ю. Романова; под ред. А.Ю. Романова. М.: ДМК Пресс, 2021. 810 с.
Строгонов А.В., Винокуров А., Строгонов А.И. Пример реализации однотактного процессорного ядра RISC-V в САПР Altera Quartus II // ЭЛЕКТРОНИКА: Наука, Технология, Бизнес. 2024. № 9. С. 70–79.
для реализации в базисе ПЛИС Cyclone V
А.В. Строгонов, д.т.н., А. Винокуров, к.т.н., А.И. Строгонов, А. Арсентьев, к.т.н.
В девятом номере журнала «ЭЛЕКТРОНИКА: Наука, Технология, Бизнес» за 2024 год был рассмотрен пример реализации однотактного микропроцессорного ядра RISC-V в САПР Altera Quartus II [2].
В продолжение темы развития проектов на базе открытой архитектуры RISC-V в данной статье рассматриваются вопросы разработки многотактного микропроцессорного ядра RISC-V с управляющим автоматом, созданным с помощью редактора конечных автоматов
(State Machine Editor) в САПР Altera Quartus II для последующей реализации в базисе ПЛИС серии Cyclone V.
Преимущество многотактного микропроцессорного ядра RISC-V перед однотактным заключается в том, что выполнение каждой команды происходит в несколько этапов. При этом простые команды выполняются быстрее, чем сложные – например, для выполнения самой медленной команды чтения памяти lw требуется пять, а для команды условного перехода beq уже три этапа. Процессор использует общую память для команд (ПЗУ) и данных (ОЗУ), обращаться к которой можно в одном цикле для получения команды, а в другом – для чтения или записи данных. Кроме того, на разных этапах обработки требуется всего лишь один сумматор.
Рассмотрим особенности реализации проекта многотактного процессорного ядра RISC-V в базисе ПЛИС Cyclone V с применением САПР Altera Quartus II, который был описан в работе [1]. В [1] был представлен пример разработки однотактного процессора с использованием программы Synplify Premier от Synplicity.
В рамках данного проекта была поставлена задача разработать управляющий автомат микропроцессорного ядра RISC-V с помощью редактора конечных автоматов (State Machine Editor) САПР Altera Quartus II и извлечь в автоматическом режиме его VHDL-код. Остальные функциональные блоки микропроцессорного ядра были разработаны на двух языках – SystemVerilog и VHDL. Проектируемый многотактный процессор базируется на однотактном процессоре, коды основных функциональных блоков которого приведены в разделе 7.6.1 работы [1].
Особенностью данного проекта является то, что ПЗУ и ОЗУ микропроцессорного ядра реализованы на блочном ОЗУ ПЛИС размером 128 строк по 32 бита в каждой. Адресное пространство с 0 по 80 строку зарезервировано под тестовую программу (прошивка ПЗУ, текстовый файл riscvtest.txt взят из работы [1]), а с 81 по 127 строку – под ОЗУ данных.
Существует проблема генерации
в САПР Quartus II «правильного» конфигурационного файла из VHDL-кода. В ходе экспериментов было установлено [2], что для ее устранения необходимо между командами вставлять три пустые строки по причине того, что счетчик команд увеличивает свое содержимое на четыре, так как команды в RISC-V являются 4-байтовыми.
Пример 1 демонстрирует инициализацию ПЗУ непосредственно из VHDL-кода (рис. 1). В данном примере используется двоичное представление содержимого памяти команд. Запись в ОЗУ осуществляется синхронно начиная с адреса старше 80, а чтение как памяти программ, так и данных идет в асинхронном режиме. По VHDL-коду ОЗУ САПР генерирует заполненный значениями конфигурационный mif-файл (рис. 2). Как видно из рис. 2, строки с 0 по 80 заполнены кодами программы, а с 81 по 127 строку – нулевыми значениями, для последующих операций с данными.
На рис. 3, 4 представлен проект многотактного процессорного ядра RISCV в САПР Quartus II с использованием различных мегафункций (неархитектурные 32-разрядные регистры и шинные мультиплексоры) для ускорения проектирования. На рис. 5 показана диаграмма состояний управляющего автомата микропроцессорного ядра, созданная с помощью редактора конечных автоматов (State Machine Editor). Схема проекта в точности соответствует рис. 7.44 из работы [1].
Так как многотактный процессор на разных этапах обработки использует один сумматор, то необходимо дополнительно разработать вспомогательную схему для отбора результатов вычислений АЛУ с целью быстро проверить правильность выполнения команд. Это в дальнейшем поможет сравнить значения на выходе АЛУ с результатами вычислений АЛУ однотактного процессора. Ожидаемо, что результаты вычислений АЛУ многотактного и однотактного процессора будут разниться, но все же это поможет исключить ошибки разработки процессорных ядер.
На рис. 6 представлена схема захвата результатов вычисления АЛУ. Схема использует декодирование сигналов ALUSrcA=10 на шине ALUSrcA[1..0] в состояниях MemADR, ExecuteR, Executel, BEQ (рис.7.45 из работы [1]), а в состоянии JAL – сигналов ALUSrcA=01 и ALUSrcB=10 на шинах ALUSrcA[1..0] и ALUSrcB[1..0]. Результаты вычислений АЛУ, захваченные в этих состояниях, можно увидеть на шине ALU[31..0].
Например, наличие на шине ALUSrcA[1..0] комбинации сигналов ALUSrcA[1] & ~ALUSrcA[0] разрешает запись результатов вычислений АЛУ многотактного процессора во вспомогательный 32-разрядный регистр в состояниях MemADR, ExecuteR, Executel, BEQ.
На рис. 7 представлены результаты функционального моделирования многотактного микропроцессорного ядра RISC-V. Информационные потоки микропроцессорного ядра RISC-V показаны на примере выполнения первых двух команд addi (riscvtest.txt) из теста [1] типа I с кодами 00500113 и 00C00193. В правой части рис. 7 показаны переходы по состояниям диаграммы конечного автомата из работы [1], а в нижнем правом углу показаны машинные и ассемблерные коды этих команд. На рис. 8, 9 показаны информационные потоки многотактного и однотактного микропроцессорного ядра RISC-V при прохождении полного теста.
Зеленым цветом (для сравнения работы АЛУ двух микропроцессорных ядер) выделены результаты вычисления АЛУ при выполнении полного теста и отработка команд перехода с возвратом jal и последующего сложения add по метке перехода end. В состоянии JAL тракт данных следующий: PC=ALUOut а ALUOut=PC+4 [1].
По команде jal x3, end (x3=0x44), находящейся в ПЗУ по адресу 40, будет осуществлен переход на метку end с адресом 48 (машинный код команды 00910133) при этом в x3 в регистровом файле будет сохранено значение адреса следующей команды 0x44 (x3=0x44).
По адресу 48 будет выполнена команда add x2, x2, x9, результатом выполнения которой на выходе АЛУ будет число 25 (x2 = 7+18=25). Тест завершают две команды [1]: sw x2, 0x20(x3), по которой по адресу mem[100] в ОЗУ данных сохранится число 25, а по последней команде beq x2, x2, done процессор перейдет в бесконечный цикл (рис. 10). Как показывают рис. 8 и 9, многотактное и однотактное микропроцессорные ядра проходят тест успешно, по адресу 100 (получается сложением чисел 0x44 и 0х20 или 68 и 32 в десятичной форме) в ОЗУ оказывается записанным число 25.
Проект успешно реализуется в ПЛИС серии Cyclone V 5CSXFC6D6F31I7ES – из ресурсов ПЛИС потребовалось 2 534 (6 %) адаптивных логических модуля, 4 449 выделенных триггеров, два блока памяти емкостью 2 048 бит (<1 %). Максимальная тактовая частота синхросигнала fmax CLK (модель Slow 1 100 мВ, 100 °С) составила 67 МГц против
58 МГц для однотактного процессорного ядра в базисе ПЛИС Cyclone V [2]. Как и ожидалось, в результате получили определенный выигрыш в быстродействии.
ЛИТЕРАТУРА
Харрис С.Л., Харрис Д. Цифровая схемотехника и архитектура компьютера RISC-V / Пер. с англ. В.С. Яценкова, А.Ю. Романова; под ред. А.Ю. Романова. М.: ДМК Пресс, 2021. 810 с.
Строгонов А.В., Винокуров А., Строгонов А.И. Пример реализации однотактного процессорного ядра RISC-V в САПР Altera Quartus II // ЭЛЕКТРОНИКА: Наука, Технология, Бизнес. 2024. № 9. С. 70–79.
Отзывы читателей
eng




