From 277ca60ad206c6d50793448d406b5692333a80f8 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 14 Nov 2023 15:15:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A011.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B1=D0=B5=D0=BD=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/11. Interrupt integration/README.md | 6 +-- .../11. Interrupt integration/irq_program.txt | 39 +++++++++++++++ Labs/11. Interrupt integration/tb_irq_unit.sv | 49 +++++++++++++++++++ 3 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 Labs/11. Interrupt integration/irq_program.txt create mode 100644 Labs/11. Interrupt integration/tb_irq_unit.sv diff --git a/Labs/11. Interrupt integration/README.md b/Labs/11. Interrupt integration/README.md index aa5a372d..fbed0522 100644 --- a/Labs/11. Interrupt integration/README.md +++ b/Labs/11. Interrupt integration/README.md @@ -19,6 +19,6 @@ 1. Интегрируйте модули `csr_controller` и `irq_controller` в модуль `riscv_core`. 1. Обратите внимание, что что в модуле `riscv_core` появились новые входные и выходные сигналы: `irq_req_i` и `irq_ret_o`. Эти сигналы должны быть использованы при подключении `riscv_core` в модуле `riscv_unit`. - 1. На вход `irq_req_i` пока что необходимо подать `32'd0` (в следующей лабораторной это будет изменено). - 2. При подключении сигнала `irq_ret_o` можно ничего не указывать (до следующей лабораторной к нему ничего не будет подключено). -2. После интеграции модулей, проверьте процессорную систему с помощью программы из ЛР10 с помощью предоставленного тестбенча. + 1. Ко входу `irq_req_i` должен быть подключен провод `irq_req`, другой конец которого пока не будет ни к чему подключен (в следующей лабораторной это будет изменено). + 2. К выходу `irq_ret_o` необходимо подключить провод `irq_ret`, который также пока не будет использован. +2. После интеграции модулей, проверьте процессорную систему с помощью [программы](irq_program.txt), текст которой был представлен в ЛР10 с помощью предоставленного [тестбенча](tb_irq.sv). diff --git a/Labs/11. Interrupt integration/irq_program.txt b/Labs/11. Interrupt integration/irq_program.txt new file mode 100644 index 00000000..623a5464 --- /dev/null +++ b/Labs/11. Interrupt integration/irq_program.txt @@ -0,0 +1,39 @@ +00004137 +FFC10113 +00000193 +00100293 +30429073 +04400293 +00028293 +30529073 +000022B7 +FFC28293 +34029073 +00100293 +0051A023 +00000313 +00000393 +00000073 +00000063 +340292F3 +0062A023 +0072A223 +34202373 +100003B7 +01038393 +00731A63 +0001A383 +00338393 +0071A023 +0200006F +00200393 +00731C63 +34102373 +00032383 +00430313 +34131073 +0040006F +0002A303 +0042A383 +340292F3 +30200073 diff --git a/Labs/11. Interrupt integration/tb_irq_unit.sv b/Labs/11. Interrupt integration/tb_irq_unit.sv new file mode 100644 index 00000000..c58bcff7 --- /dev/null +++ b/Labs/11. Interrupt integration/tb_irq_unit.sv @@ -0,0 +1,49 @@ +////////////////////////////////////////////////////////////////////////////////// +// Company: MIET +// Engineer: Andrei Solodovnikov +// +// Create Date: +// Design Name: +// Module Name: tb_riscv_unit +// Project Name: RISCV_practicum +// Target Devices: Nexys A7-100T +// Tool Versions: +// Description: tb for riscv unit with irq support +// +// Dependencies: +// +// Revision: +// Revision 0.01 - File Created +// Additional Comments: +// +////////////////////////////////////////////////////////////////////////////////// + +module tb_irq_unit(); + + reg clk; + reg rst; + + riscv_unit unit( + .clk_i(clk), + .rst_i(rst) + ); + + initial clk = 0; + always #10 clk = ~clk; + initial begin + $display( "\nStart test: \n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop(); + unit.irq_req = 0; + rst = 1; + #20; + rst = 0; + repeat(20)@(posedge clk); + unit.irq_req = 1; + while(unit.irq_ret == 0) begin + @(posedge clk); + end + unit.irq_req = 0; + $display("\n The test is over \n See the internal signals of the module on the waveform \n"); + $finish; + end + +endmodule