ЛР6. Добавление прототипов модулей

This commit is contained in:
Andrei Solodovnikov
2023-10-06 14:27:15 +03:00
parent 33190117b1
commit bff1cfa565
5 changed files with 148 additions and 2 deletions

View File

@@ -17,11 +17,32 @@
### riscv_core
Рассмотрим микроархитектуру процессорного ядра `riscv_core`.
Рассмотрим микроархитектуру процессорного ядра `riscv_core`. Данный модуль обладает следующим прототипом и микроархитектурой:
```SystemVerilog
module riscv_core (
input logic clk_i,
input logic rst_i,
input logic stall_i,
input logic [31:0] instr_i,
input logic [31:0] mem_rd_i,
output logic [31:0] instr_addr_o,
output logic [31:0] mem_addr_o,
output logic [ 2:0] mem_size_o,
output logic mem_req_o,
output logic mem_we_o,
output logic [31:0] mem_wd_o
);
endmodule
```
![../../.pic/Labs/lab_06_dp/fig_01.drawio.png](../../.pic/Labs/lab_06_dp/fig_01.drawio.png)
В отличие от реализованного ранее процессора с архитектурой Cybercobra, в данном модуле отсутствует память (она подключается извне, а значит у этого модуля должны быть сигналы интерфейса памяти).
В отличие от реализованного ранее процессора с архитектурой CYBERcobra, в данном модуле отсутствует память (она подключается извне, а значит у этого модуля должны быть сигналы интерфейса памяти).
Кроме того, в данной микроархитектуре используется пять различных видов констант (соответствующих определенным типам инструкций).
@@ -37,6 +58,15 @@
После реализации процессорного ядра, к нему необходимо подключить память. Это происходит в модуле `riscv_unit`.
```SystemVerilog
module riscv_unit(
input logic clk_i,
input logic resetn_i
);
endmodule
```
![../../.pic/Labs/lab_06_dp/fig_02.drawio.png](../../.pic/Labs/lab_06_dp/fig_02.drawio.png)
Обратите внимание на регистр `stall`. Этот регистр и будет управлять разрешением на запись в программный счетчик `PC`. Поскольку мы используем блочную память, расположенную прямо в ПЛИС, доступ к ней осуществляется за 1 такт, а значит, что при обращении в память, нам необходимо "отключить" программный счетчик ровно на 1 такт. Если бы использовалась действительно "внешняя" память (например чип DDR3), то вместо этого регистра появилась бы другая логика, выставляющая на вход ядра `stall_i` единицу пока идет обращение в память.