RISC-V исключения против прерываний - PullRequest
0 голосов
/ 06 ноября 2019

Я собираюсь написать свое собственное ядро ​​RV32I с CLINT. Однако есть кое-что, что мне не совсем понятно. По крайней мере, я не мог найти его в документах. Вот что говорит привилегированная спецификация isa для ecall / ebreak:

ECALL и EBREAK приводят к тому, что регистр epc режима привилегий получения устанавливается на адрес самой инструкции ECALL или EBREAK, а не на адресследующая инструкция.

Таким образом, это означает, что установка правильного мепс для mret является ответственностью обработчика SW. Я предполагаю, что это поведение относится и ко всем остальным исключениям.

А как насчет асинхронных прерываний? HW автоматически устанавливает mepc на PC + 4? Из того, что я видел в разных обработчиках SW, кажется, что это так, но я не смог найти его в документации.

Надеюсь, кто-нибудь подскажет мне нужную документацию.

1 Ответ

2 голосов
/ 13 ноября 2019

Раздел 1.6 непривилегированной спецификации RISC-V определяет, что исключения вызываются инструкциями, а прерывания вызываются внешними событиями.

Когда возникает (синхронно) исключение , запускаетсяИнструкция не может быть выполнена правильно. Следовательно, для обратного адреса есть две возможности: либо сама инструкция, либо следующая инструкция. Оба решения имеют смысл. Если это указывает на саму инструкцию, легче определить проблему и реагировать соответственно. Если он указывает на следующую инструкцию, адрес не нужно увеличивать при возврате из обработчика исключений

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

На этом фоне краткое определение в разделе 3.1.15 привилегированной спецификации RISC-V

Когда ловушка переводится в M-режим, mepc записывается с виртуальным адресом инструкции, которая была прервана или столкнулась с исключением.

ясно: mepc указывает на первую незавершенную инструкциюпри возникновении прерывания или инструкции, вызвавшей исключение.

...