Завершение работы над пакетами

This commit is contained in:
Andrei Solodovnikov
2023-10-07 12:11:27 +03:00
parent bff1cfa565
commit f3500aeb36
4 changed files with 74 additions and 39 deletions

View File

@@ -273,7 +273,7 @@ endmodule
1. В `Design Sources` проекта с предыдущих лаб, создайте `SystemVerilog`-файл `decoder_riscv.sv`.
2. Опишите в нем модуль основного дешифратора с таким же именем и портами, как указано в [задании](#задание).
1. Для удобства дальнейшего описания модуля, рекомендуется сперва создать сигналы `opcode`, `func3`, `func7` и присвоить им соответствующие биты входного сигнала инструкции.
2. При описании модуля вы можете воспользоваться параметрами, объявленными **пакетах** `riscv_pkg`, `csr_pkg`, описанных в файлах [riscv_pkg.sv](riscv_pkg.sv) и [csr_pkg.sv](csr_pkg.sv) соответственно.
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) соответственно.
3. Модуль может быть описан множеством способов: каждый выходной сигнал может быть описан через собственную комбинационную логику в отдельном блоке `case`, однако проще всего будет описать все сигналы через вложенные `case` внутри одного блока `always_comb`.
4. Внутри блока `always_comb` до начала блока `case` можно указать базовые значения для всех выходных сигналов. Это не то же самое, что вариант `default` в блоке `case`. Здесь вы можете описать состояния, которые будут использованы чаще всего, и в этом случае, присваивание сигналу будет выполняться только в том месте, где появится инструкция, требующая значение этого сигнала, отличное от базового.
5. Далее вы можете описать базовый блок `case`, где будет определен тип операции по ее коду.

View File

@@ -1,9 +1,8 @@
package riscv_pkg;
import alu_opcodes_pkg::*;
export alu_opcodes_pkg::*;
import csr_pkg::*;
export csr_pkg::*;
// opcodes
localparam LOAD_OPCODE = 5'b00_000;
localparam MISC_MEM_OPCODE = 5'b00_011;
@@ -41,4 +40,41 @@ localparam WB_EX_RESULT = 2'd0;
localparam WB_LSU_DATA = 2'd1;
localparam WB_CSR_DATA = 2'd2;
/*
Hack that makes nested opcodes be
visible with just one import of
riscv_pkg
*/
export alu_opcodes_pkg::ALU_OP_WIDTH;
export alu_opcodes_pkg::ALU_ADD;
export alu_opcodes_pkg::ALU_SUB;
export alu_opcodes_pkg::ALU_XOR;
export alu_opcodes_pkg::ALU_OR;
export alu_opcodes_pkg::ALU_AND;
export alu_opcodes_pkg::ALU_SRA;
export alu_opcodes_pkg::ALU_SRL;
export alu_opcodes_pkg::ALU_SLL;
export alu_opcodes_pkg::ALU_LTS;
export alu_opcodes_pkg::ALU_LTU;
export alu_opcodes_pkg::ALU_GES;
export alu_opcodes_pkg::ALU_GEU;
export alu_opcodes_pkg::ALU_EQ;
export alu_opcodes_pkg::ALU_NE;
export alu_opcodes_pkg::ALU_SLTS;
export alu_opcodes_pkg::ALU_SLTU;
export csr_pkg::CSR_RW;
export csr_pkg::CSR_RS;
export csr_pkg::CSR_RC;
export csr_pkg::CSR_RWI;
export csr_pkg::CSR_RSI;
export csr_pkg::CSR_RCI;
export csr_pkg::MIE_ADDR;
export csr_pkg::MTVEC_ADDR;
export csr_pkg::MSCRATCH_ADDR;
export csr_pkg::MEPC_ADDR;
export csr_pkg::MCAUSE_ADDR;
endpackage

View File

@@ -22,7 +22,6 @@
module tb_decoder_riscv();
import riscv_pkg::*;
import alu_opcodes_pkg::*;
parameter delay = 4;
parameter cycle = 200; // per one opcode