Files
APS/Other/CSR.md
Andrei Solodovnikov a6bcc2f718 ЛР5. Рефактор методички (#87)
* ЛР5. Рефактор методички

* Apply suggestions from code review

Co-authored-by: Mikhail Popov <gr33nka@icloud.com>

* Замена "разрядности" на "битность" в рисунке

---------

Co-authored-by: Mikhail Popov <gr33nka@icloud.com>
2024-06-27 09:29:55 +03:00

5.6 KiB
Raw Blame History

О регистрах контроля и статуса

Для поддержания работы операционной системы, виртуализации, системы прерывания и тому подобное, в архитектуре RISC-V предусмотрено использование группы регистров, под общим названием Control and Status Registers (CSR), обеспечивающих управление элементами процессора и доступ к статусной информации о системе. С помощью этих регистров реализуются привилегированные режимы работы процессора, хранение указателей на различные программные стеки, статус различных подсистем, регистры для обеспечения работы прерываний и многое другое.

Все регистры имеют уникальные 12-битные адреса, а их роли определены в спецификации на архитектуру RISC-V. В Таблице 1 приводится фрагмент спецификации привилегированной архитектуры[5, стр.10], иллюстрирующая некоторые из регистров. В левом столбце указан 12-битный адрес. Далее указывается, что можно делать с этим регистром и в каком режиме. После идет название, а в правом столбце описание.

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

../../.pic/Labs/lab_10_irq/tab_01.png

Таблица 1. Регистры контроля и состояния машинного (наивысшего) уровня привилегий.

Для работы с CS-регистрами используются специальные SYSTEM-инструкции I-типа (код операции 1110011), хранящие в 12-битном поле imm адрес регистра, к которому будет осуществлен доступ и адреса в регистровом файле откуда будет считан или куда будет записан один из CS-регистров. Вы уже добавляли поддержку этих инструкций во время выполнения лабораторной работы №5 "Основной дешифратор".

opcode func3 Тип Инструкция Описание Операция
1110011 000 I mret Возврат из прерывания PC = mepc
1110011 001 I csrrw rd, csr, rs1 Чтение и Запись CSR rd = csr, csr = rs1
1110011 010 I csrrs rd, csr, rs1 Чтение и Установка бит CSR rd = csr, csr = csr | rs1
1110011 011 I csrrc rd, csr, rs1 Чтение и Очистка бит CSR rd = csr, csr = csr & ~rs1
1110011 101 I csrrwi rd, csr, rs1 Чтение и Запись CSR rd = csr, csr = imm
1110011 110 I csrrsi rd, csr, rs1 Чтение и Установка бит CSR rd = csr, csr = csr | imm
1110011 111 I csrrci rd, csr, rs1 Чтение и Очистка бит CSR rd = csr, csr = csr & ~imm

Таблица 2. Список инструкций для работы с регистрами контроля и статуса.

Для удобства программирования на языке ассемблера RISC-V существуют псевдоинструкции для работы с CS-регистрами.

Псевдоинструкция Инструкция RISC-V Описание Операция
csrr rd, csr csrrs rd, csr, x0 Чтение CSR rd = csr
csrw csr, rs1 csrrw x0, csr, rs1 Запись CSR csr = rs1

Таблица 3. Псевдоинструкции для работы с регистрами контроля и статуса.

Операция логического ИЛИ нулевого регистра с содержимым CS-регистра не меняет его содержимого, поэтому при использовании инструкции csrr происходит только операция чтения. Подобным образом реализована псевдоинструкция csrw.