mirror of
https://github.com/MPSU/APS.git
synced 2025-09-16 17:40:41 +00:00
Обновление пакетов
- parameter заменены на localparam, чтоб Vivado не кидал варнинги; - добавлены недостающие пакеты и указания в методичках.
This commit is contained in:
committed by
Andrei Solodovnikov
parent
6ea395c761
commit
58346759f9
@@ -1,28 +1,28 @@
|
|||||||
package alu_opcodes_pkg;
|
package alu_opcodes_pkg;
|
||||||
parameter ALU_OP_WIDTH = 5;
|
localparam ALU_OP_WIDTH = 5;
|
||||||
|
|
||||||
parameter ALU_ADD = 5'b00000;
|
localparam ALU_ADD = 5'b00000;
|
||||||
parameter ALU_SUB = 5'b01000;
|
localparam ALU_SUB = 5'b01000;
|
||||||
|
|
||||||
parameter ALU_XOR = 5'b00100;
|
localparam ALU_XOR = 5'b00100;
|
||||||
parameter ALU_OR = 5'b00110;
|
localparam ALU_OR = 5'b00110;
|
||||||
parameter ALU_AND = 5'b00111;
|
localparam ALU_AND = 5'b00111;
|
||||||
|
|
||||||
// shifts
|
// shifts
|
||||||
parameter ALU_SRA = 5'b01101;
|
localparam ALU_SRA = 5'b01101;
|
||||||
parameter ALU_SRL = 5'b00101;
|
localparam ALU_SRL = 5'b00101;
|
||||||
parameter ALU_SLL = 5'b00001;
|
localparam ALU_SLL = 5'b00001;
|
||||||
|
|
||||||
// comparisons
|
// comparisons
|
||||||
parameter ALU_LTS = 5'b11100;
|
localparam ALU_LTS = 5'b11100;
|
||||||
parameter ALU_LTU = 5'b11110;
|
localparam ALU_LTU = 5'b11110;
|
||||||
parameter ALU_GES = 5'b11101;
|
localparam ALU_GES = 5'b11101;
|
||||||
parameter ALU_GEU = 5'b11111;
|
localparam ALU_GEU = 5'b11111;
|
||||||
parameter ALU_EQ = 5'b11000;
|
localparam ALU_EQ = 5'b11000;
|
||||||
parameter ALU_NE = 5'b11001;
|
localparam ALU_NE = 5'b11001;
|
||||||
|
|
||||||
// set lower than operations
|
// set lower than operations
|
||||||
parameter ALU_SLTS = 5'b00010;
|
localparam ALU_SLTS = 5'b00010;
|
||||||
parameter ALU_SLTU = 5'b00011;
|
localparam ALU_SLTU = 5'b00011;
|
||||||
|
|
||||||
endpackage
|
endpackage
|
@@ -273,7 +273,7 @@ endmodule
|
|||||||
1. В `Design Sources` проекта с предыдущих лаб, создайте `SystemVerilog`-файл `decoder_riscv.sv`.
|
1. В `Design Sources` проекта с предыдущих лаб, создайте `SystemVerilog`-файл `decoder_riscv.sv`.
|
||||||
2. Опишите в нем модуль основного дешифратора с таким же именем и портами, как указано в [задании](#задание).
|
2. Опишите в нем модуль основного дешифратора с таким же именем и портами, как указано в [задании](#задание).
|
||||||
1. Для удобства дальнейшего описания модуля, рекомендуется сперва создать сигналы `opcode`, `func3`, `func7` и присвоить им соответствующие биты входного сигнала инструкции.
|
1. Для удобства дальнейшего описания модуля, рекомендуется сперва создать сигналы `opcode`, `func3`, `func7` и присвоить им соответствующие биты входного сигнала инструкции.
|
||||||
2. При описании модуля вы можете воспользоваться параметрами, объявленными в файле **пакете** `riscv_pkg`, описанном в файле [riscv_pkg.sv](riscv_pkg.sv).
|
2. При описании модуля вы можете воспользоваться параметрами, объявленными **пакетах** `riscv_pkg`, `csr_pkg`, описанных в файлах [riscv_pkg.sv](riscv_pkg.sv) и [csr_pkg.sv](csr_pkg.sv) соответственно.
|
||||||
3. Модуль может быть описан множеством способов: каждый выходной сигнал может быть описан через собственную комбинационную логику в отдельном блоке `case`, однако проще всего будет описать все сигналы через вложенные `case` внутри одного блока `always_comb`.
|
3. Модуль может быть описан множеством способов: каждый выходной сигнал может быть описан через собственную комбинационную логику в отдельном блоке `case`, однако проще всего будет описать все сигналы через вложенные `case` внутри одного блока `always_comb`.
|
||||||
4. Внутри блока `always_comb` до начала блока `case` можно указать базовые значения для всех выходных сигналов. Это не то же самое, что вариант `default` в блоке `case`. Здесь вы можете описать состояния, которые будут использованы чаще всего, и в этом случае, присваивание сигналу будет выполняться только в том месте, где появится инструкция, требующая значение этого сигнала, отличное от базового.
|
4. Внутри блока `always_comb` до начала блока `case` можно указать базовые значения для всех выходных сигналов. Это не то же самое, что вариант `default` в блоке `case`. Здесь вы можете описать состояния, которые будут использованы чаще всего, и в этом случае, присваивание сигналу будет выполняться только в том месте, где появится инструкция, требующая значение этого сигнала, отличное от базового.
|
||||||
5. Далее вы можете описать базовый блок `case`, где будет определен тип операции по ее коду.
|
5. Далее вы можете описать базовый блок `case`, где будет определен тип операции по ее коду.
|
||||||
|
16
Labs/05. Main decoder/csr_pkg.sv
Normal file
16
Labs/05. Main decoder/csr_pkg.sv
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
package csr_pkg;
|
||||||
|
|
||||||
|
localparam CSR_RW = 3'b001;
|
||||||
|
localparam CSR_RS = 3'b010;
|
||||||
|
localparam CSR_RC = 3'b011;
|
||||||
|
localparam CSR_RWI = 3'b101;
|
||||||
|
localparam CSR_RSI = 3'b110;
|
||||||
|
localparam CSR_RCI = 3'b111;
|
||||||
|
|
||||||
|
localparam MIE_ADDR = 12'h304;
|
||||||
|
localparam MTVEC_ADDR = 12'h305;
|
||||||
|
localparam MSCRATCH_ADDR = 12'h340;
|
||||||
|
localparam MEPC_ADDR = 12'h341;
|
||||||
|
localparam MCAUSE_ADDR = 12'h342;
|
||||||
|
|
||||||
|
endpackage
|
@@ -1,41 +1,44 @@
|
|||||||
package riscv_pkg;
|
package riscv_pkg;
|
||||||
|
|
||||||
import alu_opcodes_pkg::*;
|
import alu_opcodes_pkg::*;
|
||||||
|
export alu_opcodes_pkg::*;
|
||||||
|
import csr_pkg::*;
|
||||||
|
export csr_pkg::*;
|
||||||
// opcodes
|
// opcodes
|
||||||
parameter LOAD_OPCODE = 5'b00_000;
|
localparam LOAD_OPCODE = 5'b00_000;
|
||||||
parameter MISC_MEM_OPCODE = 5'b00_011;
|
localparam MISC_MEM_OPCODE = 5'b00_011;
|
||||||
parameter OP_IMM_OPCODE = 5'b00_100;
|
localparam OP_IMM_OPCODE = 5'b00_100;
|
||||||
parameter AUIPC_OPCODE = 5'b00_101;
|
localparam AUIPC_OPCODE = 5'b00_101;
|
||||||
parameter STORE_OPCODE = 5'b01_000;
|
localparam STORE_OPCODE = 5'b01_000;
|
||||||
parameter OP_OPCODE = 5'b01_100;
|
localparam OP_OPCODE = 5'b01_100;
|
||||||
parameter LUI_OPCODE = 5'b01_101;
|
localparam LUI_OPCODE = 5'b01_101;
|
||||||
parameter BRANCH_OPCODE = 5'b11_000;
|
localparam BRANCH_OPCODE = 5'b11_000;
|
||||||
parameter JALR_OPCODE = 5'b11_001;
|
localparam JALR_OPCODE = 5'b11_001;
|
||||||
parameter JAL_OPCODE = 5'b11_011;
|
localparam JAL_OPCODE = 5'b11_011;
|
||||||
parameter SYSTEM_OPCODE = 5'b11_100;
|
localparam SYSTEM_OPCODE = 5'b11_100;
|
||||||
|
|
||||||
// dmem type load store
|
// dmem type load store
|
||||||
parameter LDST_B = 3'b000;
|
localparam LDST_B = 3'b000;
|
||||||
parameter LDST_H = 3'b001;
|
localparam LDST_H = 3'b001;
|
||||||
parameter LDST_W = 3'b010;
|
localparam LDST_W = 3'b010;
|
||||||
parameter LDST_BU = 3'b100;
|
localparam LDST_BU = 3'b100;
|
||||||
parameter LDST_HU = 3'b101;
|
localparam LDST_HU = 3'b101;
|
||||||
|
|
||||||
// operand a selection
|
// operand a selection
|
||||||
parameter OP_A_RS1 = 2'b00;
|
localparam OP_A_RS1 = 2'b00;
|
||||||
parameter OP_A_CURR_PC = 2'b01;
|
localparam OP_A_CURR_PC = 2'b01;
|
||||||
parameter OP_A_ZERO = 2'b10;
|
localparam OP_A_ZERO = 2'b10;
|
||||||
|
|
||||||
// operand b selection
|
// operand b selection
|
||||||
parameter OP_B_RS2 = 3'b000;
|
localparam OP_B_RS2 = 3'b000;
|
||||||
parameter OP_B_IMM_I = 3'b001;
|
localparam OP_B_IMM_I = 3'b001;
|
||||||
parameter OP_B_IMM_U = 3'b010;
|
localparam OP_B_IMM_U = 3'b010;
|
||||||
parameter OP_B_IMM_S = 3'b011;
|
localparam OP_B_IMM_S = 3'b011;
|
||||||
parameter OP_B_INCR = 3'b100;
|
localparam OP_B_INCR = 3'b100;
|
||||||
|
|
||||||
// writeback source selection
|
// writeback source selection
|
||||||
parameter WB_EX_RESULT = 1'b0;
|
localparam WB_EX_RESULT = 2'd0;
|
||||||
parameter WB_LSU_DATA = 1'b1;
|
localparam WB_LSU_DATA = 2'd1;
|
||||||
|
localparam WB_CSR_DATA = 2'd2;
|
||||||
|
|
||||||
endpackage
|
endpackage
|
||||||
|
16
Labs/10. Interrupt subsystem/csr_pkg.sv
Normal file
16
Labs/10. Interrupt subsystem/csr_pkg.sv
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
package csr_pkg;
|
||||||
|
|
||||||
|
localparam CSR_RW = 3'b001;
|
||||||
|
localparam CSR_RS = 3'b010;
|
||||||
|
localparam CSR_RC = 3'b011;
|
||||||
|
localparam CSR_RWI = 3'b101;
|
||||||
|
localparam CSR_RSI = 3'b110;
|
||||||
|
localparam CSR_RCI = 3'b111;
|
||||||
|
|
||||||
|
localparam MIE_ADDR = 12'h304;
|
||||||
|
localparam MTVEC_ADDR = 12'h305;
|
||||||
|
localparam MSCRATCH_ADDR = 12'h340;
|
||||||
|
localparam MEPC_ADDR = 12'h341;
|
||||||
|
localparam MCAUSE_ADDR = 12'h342;
|
||||||
|
|
||||||
|
endpackage
|
Reference in New Issue
Block a user