mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
Переработка лабораторных работ, связанных с памятью (#89)
* Переработка лабораторных работ, связанных с памятью Существенно переработаны ЛР3 и ЛР7: Из ЛР3 убрано задание реализовать память данных. Эта память использовалась только студентами ИВТ и только в рамках одной лабы. В итоге использовалась готовая память, и ничего не мешает использовать ее с самого начала. Задание по реализации памяти инструкций также претерпело изменения. Теперь код памяти инструкций предоставляется сразу. Это объясняется тем, что код модуля состоит в общем-то из 4х строк, на которые тратится слишком много времени (с учетом добавления тестбенча и проверок). Кроме того, использование готового кода позволяет дать модуль чуть посложнее (с параметризацией размера). По итогу правок, третья лабораторная работа превращается чисто в лабораторную по написанию регистрового файла, что должно положительно сказаться на кривой сложности лаб. После второй лабы происходит слишком резкий скачок в объемах работы. Соответственно, в связи с тем, что память данных больше не делается на третьей лабе, дополнительная ЛР по памяти данных с byte enable необходимо перенести до реализации тракта данных. * ЛР3, 5, 6. Правки из ревью * ЛР7. Добавление иллюстраций
This commit is contained in:
committed by
GitHub
parent
06dc07c03f
commit
85883858ac
@@ -117,7 +117,7 @@ _Таблица 1. Описание портов декодера инструк
|
||||
|
||||
- `mem_req_o` — этот сигнал должен быть выставлен в 1 каждый раз, когда необходимо обратиться к памяти (считать или записать данные);
|
||||
- `mem_we_o` — этот сигнал должен быть выставлен в 1, если необходимо записать данные в память, (0 при чтении);
|
||||
- `mem_size_o`— этот сигнал указывает размер порции данных для передачи (возможные значения этого сигнала указаны в _Таблице 2_). Для удобства использования, данные значения определены в виде параметров в пакете `riscv_pkg`.
|
||||
- `mem_size_o`— этот сигнал указывает размер порции данных для передачи (возможные значения этого сигнала указаны в _Таблице 2_). Для удобства использования, данные значения определены в виде параметров в пакете `decoder_pkg`.
|
||||
|
||||
|Параметр|Значение `mem_size_o`| Пояснение |
|
||||
|--------|---------------------|------------------------------|
|
||||
@@ -218,7 +218,7 @@ _Таблица 4. Описание типов форматов кодирова
|
||||
|
||||
В _Таблице 5_ представлены все опкоды реализуемых нами инструкций. Представленные в ней коды операций 5-битные потому, что 2 младших бита полноценного 7-битного кода операции в реализуемых нами инструкциях должны всегда быть равны `11`. Если это не так, то вся инструкция уже запрещенная и не нуждается в дальнейшем декодировании.
|
||||
|
||||
Для удобства, значения кодов операций определены в виде параметров в пакете riscv_pkg.
|
||||
Для удобства, значения кодов операций определены в виде параметров в пакете `decoder_pkg`.
|
||||
|
||||
|Параметр|Opcode| Описание группы операций | Краткая запись |
|
||||
|--------|------|-------------------------------------------------------------------------------------------------------|------------------------------------|
|
||||
@@ -398,7 +398,7 @@ module decoder_riscv (
|
||||
output logic jalr_o,
|
||||
output logic mret_o
|
||||
);
|
||||
import riscv_pkg::*;
|
||||
import decoder_pkg::*;
|
||||
|
||||
endmodule
|
||||
```
|
||||
@@ -412,7 +412,7 @@ endmodule
|
||||
1. В `Design Sources` проекта с предыдущих лаб, создайте `SystemVerilog`-файл `decoder_riscv.sv`.
|
||||
2. Опишите в нем модуль декодера инструкций с таким же именем и портами, как указано в [задании](#задание).
|
||||
1. Для удобства дальнейшего описания модуля, рекомендуется сперва создать сигналы `opcode`, `func3`, `func7` и присвоить им соответствующие биты входного сигнала инструкции.
|
||||
2. При описании модуля вы можете воспользоваться параметрами, объявленными **пакетах** `riscv_pkg`, `csr_pkg` и `alu_opcodes_pkg`, описанных в файлах [riscv_pkg.sv](riscv_pkg.sv), [csr_pkg.sv](csr_pkg.sv) и [alu_opcodes_pkg.sv](alu_opcodes_pkg.sv) соответственно.
|
||||
2. При описании модуля вы можете воспользоваться параметрами, объявленными **пакетах** `decoder_pkg`, `csr_pkg` и `alu_opcodes_pkg`, описанных в файлах [decoder_pkg.sv](decoder_pkg.sv), [csr_pkg.sv](csr_pkg.sv) и [alu_opcodes_pkg.sv](alu_opcodes_pkg.sv) соответственно.
|
||||
3. Модуль может быть описан множеством способов: каждый выходной сигнал может быть описан через собственную комбинационную логику в отдельном блоке `case`, однако проще всего будет описать все сигналы через вложенные `case` внутри одного блока `always_comb`.
|
||||
4. Внутри блока `always_comb` до начала блока `case` можно указать базовые значения для всех выходных сигналов. Это не то же самое, что вариант `default` в блоке `case`. Здесь вы можете описать состояния, которые будут использованы чаще всего, и в этом случае, присваивание сигналу будет выполняться только в том месте, где появится инструкция, требующая значение этого сигнала, отличное от базового.
|
||||
5. Далее вы можете описать базовый блок `case`, где будет определен тип операции по ее коду.
|
||||
|
@@ -8,7 +8,7 @@
|
||||
See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details.
|
||||
* ------------------------------------------------------------------------------
|
||||
*/
|
||||
package riscv_pkg;
|
||||
package decoder_pkg;
|
||||
|
||||
import alu_opcodes_pkg::*;
|
||||
import csr_pkg::*;
|
||||
@@ -54,7 +54,7 @@ package riscv_pkg;
|
||||
/*
|
||||
Hack that makes nested opcodes be
|
||||
visible with just one import of
|
||||
riscv_pkg
|
||||
decoder_pkg
|
||||
*/
|
||||
|
||||
export alu_opcodes_pkg::ALU_OP_WIDTH;
|
@@ -11,7 +11,7 @@ See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details.
|
||||
|
||||
module tb_decoder_riscv();
|
||||
|
||||
import riscv_pkg::*;
|
||||
import decoder_pkg::*;
|
||||
typedef class riscv_instr;
|
||||
riscv_instr instr = new();
|
||||
|
||||
|
Reference in New Issue
Block a user