From 8407eed06ff364ed7b70b9a11a3afc5376599f82 Mon Sep 17 00:00:00 2001 From: ShinyMiraidon Date: Tue, 7 Nov 2023 14:31:28 -0500 Subject: [PATCH 1/2] add(branch_manager.cpp, Branch_Manager.sv) --- dv/branch_manager.cpp | 23 +++++++++++++++++++++++ rtl/Branch_Manager.sv | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 dv/branch_manager.cpp create mode 100644 rtl/Branch_Manager.sv diff --git a/dv/branch_manager.cpp b/dv/branch_manager.cpp new file mode 100644 index 00000000..e85c8433 --- /dev/null +++ b/dv/branch_manager.cpp @@ -0,0 +1,23 @@ +#include +#include +#include +#include +#include + +TEST_CASE("") { + + VBranch_Manager model; + + //Initialize Module + model.rstn = 1; + model.clk = 0; + model.eval(); + model.rstn_h = 0; + model.eval(); + + + //Test Module + for (int i = 0; i < 1000; i++) { + + } +} \ No newline at end of file diff --git a/rtl/Branch_Manager.sv b/rtl/Branch_Manager.sv new file mode 100644 index 00000000..401fd5f6 --- /dev/null +++ b/rtl/Branch_Manager.sv @@ -0,0 +1,34 @@ +module Branch_Manager ( + input clk, rstn, pred_taken, act_taken + input [WordSize - 1:0] pred_pc, pred_addr + output logic flush + output logic [WordSize - 1:0] npc +); + +logic restart; + +always @ (posedge clk or negedge rstn_h) begin + if (!rstn) begin + restart <= 1; + flush <= 0; + npc <= 0; + end + else begin + if ((pred_taken != act_taken) && !restart) begin + flush <= 1; + case(act_taken) + 0: npc <= pred_pc + 4 + 1: npc <= pred_addr + endcase + end + else begin + flush <= 0; + case(pred_taken) + 0: npc <= pred_pc + 4 + 1: npc <= pred_addr + endcase + end + if (restart) restart <= 0; + end +end +endmodule \ No newline at end of file From 82e97690fdb51590af7ed1714d576048de0758ab Mon Sep 17 00:00:00 2001 From: ShinyMiraidon Date: Thu, 9 Nov 2023 11:51:45 -0500 Subject: [PATCH 2/2] test(branch_manager): Added more to test --- dv/branch_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dv/branch_manager.cpp b/dv/branch_manager.cpp index e85c8433..6cc7391a 100644 --- a/dv/branch_manager.cpp +++ b/dv/branch_manager.cpp @@ -14,7 +14,7 @@ TEST_CASE("") { model.eval(); model.rstn_h = 0; model.eval(); - + //Test Module for (int i = 0; i < 1000; i++) {