Rocket core risc-v, загрузка и сохранение по адресу памяти, не проходящему через

Я использую RISC-V, ракетное ядро. Я хочу сделать некоторые основные операции чтения / записи по заданному адресу. Запустил все тестовые наборы, доступные в тестовом комплекте. Все тесты проходят (включая ld и store). Теперь напишите простой c testcase для загрузки по определенному адресу, скомпилируйте и запустите testcase. Тестовый случай не проходит.

int main ()
{
      *((volatile unsigned int*)0x8000F000)  = 0x600D600D;
}

Сгенерировал код asm для того же самого и вставил код в testcase, доступный в testsuite. Тем не менее тестовый сценарий не проходит. Команда c2object riscv64-unknown-elf-gcc -DENTROPY=18590 -static -mcmodel=medany -fvisibility=hidden -nostdlib -nostartfiles -I./../env/p -I./macros/scalar -T./../env/p/link.ld mem_wr_tc.c -o mem_wr_tc.o

Объект для сборки riscv64-unknown-elf-objdump --disassemble-all --dasseassemble-zeroes --section=.text --section=.text.startup --section=.text.init --section=.data mem_wr_tc.o > mem_wr_tc.asm

Кто-нибудь пробовал базовый магазин \ загрузить (прочитать \ написать) по конкретному адресу.

подскажите пожалуйста, что может пойти не так.

1 ответ

Вот пара вещей, которые вы должны сделать:

1) Посмотрите на разборку, чтобы убедиться, что программа соответствует вашим ожиданиям. Похоже, что вы пытаетесь собрать программу "голое железо", поэтому для разборки вам потребуется правильный стартовый код по соответствующим физическим адресам.

2) Попробуйте свою программу в spike (пошаговом режиме) и убедитесь, что ваша программа работает правильно.

3) Посмотрите на стандартный выход ракеты, который скажет вам, что он делает каждый цикл.

4) Проанализируйте карту памяти ракеты-чипа, чтобы убедиться, что вы пишете по правильному физическому адресу.

5) проанализируйте сигнал VCD, чтобы увидеть, что делает ракета, когда она пытается выполнить операции с вашей памятью по этому конкретному адресу.

Другие вопросы по тегам