Skip to content

Commit 512595c

Browse files
committed
ЛР7. Небольшие дополнения
1 parent 229788c commit 512595c

File tree

1 file changed

+25
-5
lines changed

1 file changed

+25
-5
lines changed

Labs/07. Datapath/README.md

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Лабораторная работа 6 "Тракт данных"
22

3-
Микроархитектуру можно разделить на две части: тракт данных и устройство управления. По тракту данных перемещаются данные (из памяти инструкций, регистрового файла, АЛУ, памяти данных, мультиплексоров), а устройство управления (основной дешифратор команд) получает текущую инструкцию из тракта и в ответ говорит ему как именно выполнить эту инструкцию, то есть управляет тем, как эти данные будут через тракт данных проходить.
3+
Микроархитектуру можно разделить на две части: тракт данных и устройство управления. По тракту данных перемещаются данные (из памяти инструкций, регистрового файла, АЛУ, памяти данных, мультиплексоров), а устройство управления (в нашем случае — декодер инструкций) получает текущую инструкцию из тракта и в ответ говорит ему как именно её выполнить, то есть управляет тем, как эти данные будут через проходить тракт данных.
44

55
## Цель
66

@@ -44,17 +44,32 @@ endmodule
4444

4545
_Рисунок 1. Микроархитектура ядра процессора RISC-V._
4646

47-
В отличие от реализованного ранее процессора с архитектурой CYBERcobra, в данном модуле отсутствует память (она подключается извне, а значит у этого модуля должны быть сигналы интерфейса памяти).
47+
Предложенная микроархитектура похожа на микроархитектуру процессора `CYBERcobra 3000 Pro 2.0` из прошлой лабораторной, имеет схожую структуру, с некоторыми изменениями.
48+
49+
В первую очередь изменились входы и выходы процессора:
50+
51+
- память инструкций вынесена наружу процессора, таким образом, у процессора появляются входы и выходы: `instr_addr_o` и `instr_i`;
52+
- помимо прочего, у модуля появились сигналы интерфейса памяти данных:
53+
- `mem_addr_o` — адрес внешней памяти;
54+
- `mem_req_o` — запрос на обращение во внешнюю память;
55+
- `mem_size_o` — размер данных при обращении в память;
56+
- `mem_we_o` — сигнал разрешения записи во внешнюю память;
57+
- `mem_wd_o` — данные для записи во внешнюю память;
58+
- `mem_rd_i` — считанные из внешней памяти данные;
59+
Эти сигналы используются при выполнении инструкций загрузки (сохранения) информации из (в) памяти данных.
60+
- еще у процессора появился вход `stall_i`, приостанавливающий обновление программного счётчика.
4861

4962
Кроме того, в данной микроархитектуре используется пять различных видов констант (соответствующих определенным типам инструкций).
5063

51-
Константы `I`,`U`,`S` используются для вычисления адресов и значений. Поэтому все эти константы должны быть подключены к АЛУ. А значит теперь, для выбора значения для операндов требуются мультиплексоры, определяющие что именно будет подаваться на АЛУ.
64+
Константы `I`, `U`, `S` используются для вычисления адресов и значений. Поэтому все эти константы должны быть подключены к АЛУ. А значит теперь, для выбора значения для операндов требуются мультиплексоры, определяющие что именно будет подаваться на АЛУ.
5265

5366
Обратите внимание на константу `imm_U`. В отличие от всех остальных констант, она не знакорасширяется, вместо этого к ней приклеивается справа 12 нулевых бит.
5467

68+
Константы `B` и `J` используются для условного и безусловного перехода (в киберкобре для этого использовалась одна константа `offset`).
69+
5570
Программный счетчик (`PC`) теперь также изменяется более сложным образом. Поскольку появился еще один вид безусловного перехода (`jalr`), программный счетчик может не просто увеличиться на значение константы из инструкции, но и получить совершенно новое значение в виде суммы константы и значения из регистрового файла (см. на самый левый мультиплексор схемы). Обратите внимание, что младший бит этой суммы должен быть обнулен — таково требование спецификации.
5671

57-
Поскольку обращение во внешнюю память требует времени, необходимо останавливать программный счетчик, чтобы до конца обращения в память не начались исполняться последующие инструкции. Для этого у программного счетчика появился управляющий сигнал `stall_i`. Программный счетчик может меняться только когда этот сигнал равен нулю (иными словами, инверсия этого сигнала является сигналом `enable` для регистра `PC`).
72+
Поскольку обращение во внешнюю память требует времени, необходимо приостанавливать программный счетчик, чтобы до конца обращения в память не начались исполняться последующие инструкции. Для этого у программного счетчика появился управляющий сигнал `stall_i`. Программный счетчик может меняться только когда этот сигнал равен нулю (иными словами, инверсия этого сигнала является сигналом `enable` для регистра `PC`).
5873

5974
### riscv_unit
6075

@@ -136,6 +151,8 @@ _Рисунок 2. Микроархитектура процессора._
136151
68: jalr x18, 0x4(x15)
137152
```
138153

154+
_Листинг 1. Пример программы на ассемблере._
155+
139156
Теперь в соответствии с кодировкой инструкций переведем программу в машинные коды:
140157

141158
```text
@@ -168,6 +185,8 @@ _Рисунок 2. Микроархитектура процессора._
168185
68: 000000000100 01111 000 10010 1100111 (0x00478967)
169186
```
170187

188+
_Листинг 2. Программа из Листинга 1, представленная в машинных кодах._
189+
171190
Данная программа, представленная в шестнадцатеричном формате находится в файле [program.mem](program.mem).
172191

173192
## Порядок выполнения задания
@@ -187,7 +206,8 @@ _Рисунок 2. Микроархитектура процессора._
187206
3. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
188207
4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня.
189208
5. **Во время симуляции убедитесь, что в логе есть сообщение о завершении теста!**
190-
6. Вполне возможно, что после первого запуска вы столкнетесь с сообщениями о множестве ошибок. Вам необходимо [исследовать](../../Vivado%20Basics/Debug%20manual.md) эти ошибки на временной диаграмме и исправить их в вашем модуле.
209+
6. Как и в случае с проверкой процессора архитектуры CYBERcobra, вам не будет сказано пройден тест или нет. Вы должны сами, такт за тактом проверить что процессор правильно выполняет описанные в _Листинге 1_ инструкции. Для этого, необходимо сперва самостоятельно рассчитать что именно должна сделать данная инструкция, а потом проверить что процессор сделал именно это.
210+
7. Вполне возможно, что после первого запуска вы столкнетесь с сообщениями о множестве ошибок. Вам необходимо [исследовать](../../Vivado%20Basics/Debug%20manual.md) эти ошибки на временной диаграмме и исправить их в вашем модуле.
191211
4. Проверьте работоспособность вашей цифровой схемы в ПЛИС. Для этого:
192212
1. Добавьте файлы из папки [`board files`](https://github.com/MPSU/APS/tree/master/Labs/07.%20Datapath/board%20files) в проект.
193213
1. Файл [nexys_riscv_unit.sv](https://github.com/MPSU/APS/tree/master/Labs/07.%20Datapath/board%20files/nexys_riscv_unit.sv) необходимо добавить в `Design Sources` проекта.

0 commit comments

Comments
 (0)