1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-riscv-isa-sim

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Поведение в файле riscv/insns/<new_instruction_name>.h. Изучите другие инструкции в этом каталоге для начала.

  1. Добавьте код операции и маску кода операции в riscv/opcodes.h. Или добавьте его в пакет riscv-opcodes, и он сделает это за вас:
$ cd ../riscv-opcodes
$ vi opcodes       // добавьте строку для новой инструкции
$ make install
  1. Добавьте инструкцию в riscv/riscv.mk.in. Иначе инструкция не будет включена в сборку и будет рассматриваться как незаконная инструкция.

  2. Пересоберите симулятор.

Интерактивный режим отладки

Чтобы вызвать интерактивный режим отладки, запустите spike с параметром -d:

$ spike -d pk hello

Для просмотра содержимого целочисленного регистра (0 — для ядра 0):

: reg 0 a0

Для просмотра содержимого регистра с плавающей точкой:

: fregs 0 ft0

или:

: fregd 0 ft0

в зависимости от того, хотите ли вы распечатать регистр как одинарную или двойную точность.

Чтобы просмотреть содержимое ячейки памяти (физический адрес в шестнадцатеричном формате):

: mem 2020

Чтобы увидеть содержимое памяти с виртуальным адресом (0 для ядра 0):

: mem 0 2020

Вы можете перейти на одну инструкцию вперёд, нажав клавишу Enter. Вы также можете выполнить команду до достижения желаемого равенства:

: until pc 0 2020                   (остановиться, когда pc=2020)
: until reg 0 mie a                 (остановиться, когда регистр mie=0xa)
: until mem 2020 50a9907311096993   (остановиться, когда mem[2020]=50a9907311096993)

Или вы можете выполнять команду, пока равенство истинно:

: while mem 2020 50a9907311096993

Вы можете продолжить выполнение бесконечно:

: r

В любой момент во время выполнения (даже без -d) вы можете войти в интерактивный режим отладки с помощью <control>-<c>.

Чтобы завершить моделирование из режима отладки, нажмите <control>-<c> или:

: q

Отладка с использованием Gdb

Альтернативой интерактивному режиму отладки является подключение с использованием gdb. Поскольку spike пытается имитировать реальное оборудование, вам также понадобится OpenOCD для этого. OpenOCD в настоящее время не знает о преобразовании адресов, поэтому нелегко отлаживать программы, которые запускаются под pk. Мы будем использовать следующую тестовую программу:

char text[] = "Vafgehpgvba frgf jnag gb or serr!";

// Don't use the stack, because sp isn't set up.
volatile int wait = 1;

int main()
{
    while (wait)
        ;

    // Doesn't actually go on the stack, because there are lots of GPRs.
    int i = 0;
    while (text[i]) {
        char lower = text[i] | 32;
        if (lower >= 'a' && lower <= 'm')
            text[i] += 13;
        else if (lower > 'm' && lower <= 'z')
            text[i] -= 13;
        i++;
    }

done:
    while (!wait)
        ;
}

Чтобы отладить эту программу, сначала запустите spike, указав ему прослушивать OpenOCD:

$ spike --rbb-port=9824 -m0x10100000:0x20000 rot13-64
Listening for remote bitbang connection on port 9824.

В отдельной оболочке запустите OpenOCD с соответствующим файлом конфигурации:

adapter driver remote_bitbang
remote_bitbang host localhost
remote_bitbank port 9824

set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0xdeadbeef

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAME

gdb_report_data_abort enable

init
halt

Ещё в одной оболочке начните сеанс отладки gdb:

riscv64-unknown-elf-gdb rot13-64
GNU gdb (GDB) 8.0.50.20170724-git
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO
``` ГАРАНТИЯ, в рамках, разрешённых законом. Для получения подробной информации введите «show copying» и «show warranty».

Этот GDB был настроен как «--host=x86_64-pc-linux-gnu --target=riscv64-unknown-elf». Для получения сведений о конфигурации введите «show configuration».

Инструкции по сообщению об ошибках можно найти здесь:
<http://www.gnu.org/software/gdb/bugs/>.

Руководство по GDB и другие ресурсы документации доступны онлайн по адресу:
<http://www.gnu.org/software/gdb/documentation/>.
Для получения помощи введите «help».
Введите «apropos word», чтобы выполнить поиск команд, связанных со словом «word»...

Чтение символов из rot13-64...готово.
(gdb) target remote localhost:3333
Удаленная отладка с использованием localhost:3333.
0x0000000010010004 в main () в rot13.c:8
8       while (wait)
(gdb) print wait
$1 = 1
(gdb) print wait=0
$2 = 0
(gdb) print text
$3 = "Vafgehpgvba frgf jnag gb or serr!"
(gdb) b done
Точка останова 1 на 0x10110064: файл rot13.c, строка 22.
(gdb) c
Продолжение.
Отключение абстрактных команд записи в CSRs.

Точка останова 1, main () в rot13.c:23
23      while (!wait)
(gdb) print wait
$4 = 0
(gbd) print text
...

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Спайк RISC-V ISA симулятор, он реализовал функциональную модель одного или нескольких RISC-V harts. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-riscv-isa-sim.git
git@api.gitlife.ru:oschina-mirror/mirrors-riscv-isa-sim.git
oschina-mirror
mirrors-riscv-isa-sim
mirrors-riscv-isa-sim
master