Форум программистов, компьютерный форум, киберфорум
Max Dark
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Yeti Project / RISC-V Virtual machine

Запись от Max Dark размещена 16.12.2024 в 17:09
Показов 2434 Комментарии 4
Метки bash, c, risc-v, virtual machine

YetiVM - расширяемый execution environment.

* GitLab - YetiVM
* GitHub - YetiVM
* Тема в "Бетатестировние"

Описание:

В качестве bytecode используется подмножество инструкций из RISC-V ISA.

По сути является библиотекой, которую можно встраивать в Ваше ПО.
Позволяет использовать любой компилируемый ЯП для создания расширений.

Основные возможности:

* вывод листинга (disasm)
* создание своих syscall

На данный момент поддерживаются:

* rv32i - основные инструкции(кроме CSR/fence - там сейчас просто заглушки)
* rv32m - целочисленная математика

Реализована загрузка кода из *.hex файлов

Для компиляции проекта потребуется:

* поддержка C++20 (тестировалось на gcc-13/clang-18)
* CMake (>= 3.20)
* GTest/GMock, опционально, используется для тестирования
* riscv64-unknown-elf-gcc/riscv64-unknown-elf-binutils - опционально, для сборки примеров

Сейчас можно собрать и запустить программы на Си/Ассемблере.
Библиотеки текущей системой сборки проекта не поддерживаются.

Минимальная программа на Си:
C
1
2
3
// main.c
void _start()
{}
добавление в CMake
Bash
1
2
3
4
5
6
7
8
9
# сборка с генерацией BIN и HEX файлов
riscv_add_executable(app BIN HEX
        # скрипт для компоновщика
        LINK_SCRIPT basic_vm.ld
        # список исходников. может содержать asm и/или c
        SOURCES main.c
        # вспомогательные функции для запуска программы
        startup.c
)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 4
Комментарии
  1. Старый комментарий
    Аватар для Max Dark
    Прогнал тесты из RISC-V Architecture Test

    Успешно пройдены:
    * rv32i_m/I
    * rv32i_m/M

    Так же можно назвать ожидаемым поведением, то что оно выбрасывает исключения на тестах из набора rv32i_m/privilege

    UPD: поторопился

    Срабатывает ассерт:
    Code
    1
    2
    3
    4
    5
    
    0000097c lui       t4, 40000000                 0         0         0  40000000         0         0
    00000980 sltiu     a7, t4, 4087          feffffff  40000000         1         0  40000000         1
    00000984 sw        a7, sp, 12            fffffff7    40104c         0  fffffff7    40104c         0
    00000988 addi      gp, zero, 1                  1         0         0         1         0         0
    0000098c beq       gp, a7, 80                   0         1         0         0         1         0
    Запись от Max Dark размещена 20.12.2024 в 20:41 Max Dark вне форума
  2. Старый комментарий
    Аватар для Max Dark
    SLTI (set less than immediate) places the value 1 in register rd if register rs1 is less than the sign-
    extended immediate when both are treated as signed numbers, else 0 is written to rd. SLTIU is similar
    but compares the values as unsigned numbers (i.e., the immediate is first sign-extended to XLEN bits
    then treated as an unsigned number). Note, SLTIU rd, rs1, 1 sets rd to 1 if rs1 equals zero, otherwise
    sets rd to 0 (assembler pseudoinstruction SEQZ rd, rs).
    Хм. Вот оно как...
    Опять невнимательность подводит...

    С умножением проблемы тоже есть ...
    На обработку mulh* жалуется...
    Запись от Max Dark размещена 20.12.2024 в 23:18 Max Dark вне форума
  3. Старый комментарий
    Аватар для Max Dark
    Проект переехал на GitFlic
    GitLab/GitHub остаются в качестве зеркал.
    Pull-request принимаются к рассмотрению на всех площадках

    "Йети" - мифическое существо.

    YetiVM - виртуальная машина для эмуляции выдуманного процессора, похожего на настоящий)
    Запись от Max Dark размещена 31.03.2025 в 20:57 Max Dark вне форума
  4. Старый комментарий
    Аватар для Max Dark
    release/v0.0.5

    Добавлены обработчики для инструкций, работающих с CSR

    * csrrw[i] - "CSR read and write"
    * csrrs[i] - "CSR read and set bits"
    * csrrc[i] - "CSR read and clear bits"

    Изменен интерфейс VM:
    метод control() заменен на control_get/control_set

    В basic_vm эти методы сейчас выбрасывают исключение "не реализовано"
    Запись от Max Dark размещена 05.04.2025 в 04:22 Max Dark вне форума
 
Новые блоги и статьи
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru