From 15d7b8ee3a03d34c9c07a2b25f718b95cd88affe Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Sun, 22 Oct 2023 20:41:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A06.=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Для проверки реализации stall-а, используется иерархическое подключение. Оно накладывает требования на нейминг нескольких сигналов, однако куда проще наложить требование на название одного контретного модуля. --- Labs/06. Datapath/README.md | 1 + Labs/06. Datapath/tb_riscv_unit.sv | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Labs/06. Datapath/README.md b/Labs/06. Datapath/README.md index b7fd706..16d1ad0 100644 --- a/Labs/06. Datapath/README.md +++ b/Labs/06. Datapath/README.md @@ -176,6 +176,7 @@ endmodule 1. декодер 2. дополнительные мультиплексоры и знакорасширители. 3. Создайте в проекте новый `SystemSystemVerilog`-файл `riscv_unit.sv` и опишите в нем модуль `riscv_unit`, объединяющий ядро процессора (`riscv_core`) с памятями инструкция и данных. + 1. **При создании объекта модуля `riscv_core` в модуле `riscv_unit` вы должны использовать имя сущности `core` (т.е. создать объект в виде: `riscv_core core(...`)** 3. После описания модуля, его необходимо проверить с помощью тестового окружения. 1. Тестовое окружение находится [`здесь`](tb_riscv_unit.sv). 2. Программа, которой необходимо проинициализировать память инструкций находится [`здесь`](program.txt). diff --git a/Labs/06. Datapath/tb_riscv_unit.sv b/Labs/06. Datapath/tb_riscv_unit.sv index e4cce5f..bb3d023 100644 --- a/Labs/06. Datapath/tb_riscv_unit.sv +++ b/Labs/06. Datapath/tb_riscv_unit.sv @@ -42,10 +42,12 @@ module tb_riscv_unit(); end stall_seq: assert property ( - @(posedge clk) - disable iff ( !unit.mem_req ) - $past(unit.mem_req) |-> !$stable(unit.stall) - -)else $error("\n================================================\nThe realisation of the STALL signal is INCORRECT\n================================================\n"); + @(posedge unit.core.clk_i) disable iff ( unit.core.rst_i ) + unit.core.mem_req_o |-> (unit.core.stall_i || $past(unit.core.stall_i)) +)else $error("\nincorrect implementation of stall signal\n"); +stall_seq_fall: assert property ( + @(posedge unit.core.clk_i) disable iff ( unit.core.rst_i ) + (unit.core.stall_i) |=> !unit.core.stall_i +)else $error("\nstall must fall exact one cycle after rising\n"); endmodule