aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFlavian Kaufmann <flavian@flaviankaufmann.ch>2024-05-07 21:27:21 +0200
committerFlavian Kaufmann <flavian@flaviankaufmann.ch>2024-05-07 21:27:21 +0200
commit9a357b3ad679751bc7a9ce85adbc303130211226 (patch)
tree9898c449a53ff3caa0ae4620a1078c3a8268cbd0 /src
parentda9b25591e8b4d1c05a2ac84bb40b5cb5e3a86c5 (diff)
downloadriscv_cpu-9a357b3ad679751bc7a9ce85adbc303130211226.tar.gz
riscv_cpu-9a357b3ad679751bc7a9ce85adbc303130211226.zip
alu equal
Diffstat (limited to 'src')
-rw-r--r--src/alu.v4
-rw-r--r--src/control_unit.v7
-rw-r--r--src/cpu.v5
3 files changed, 14 insertions, 2 deletions
diff --git a/src/alu.v b/src/alu.v
index 6962129..6f9251c 100644
--- a/src/alu.v
+++ b/src/alu.v
@@ -2,7 +2,8 @@ module alu (
input [31:0] a, b,
input [3:0] op,
output reg [31:0] result,
- output zero
+ output zero,
+ output equal
);
wire [31:0] arithmetic_result, logic_result, shift_result;
@@ -38,5 +39,6 @@ always @ (*) begin
end
assign zero = result == 32'b0;
+assign equal = a == b;
endmodule
diff --git a/src/control_unit.v b/src/control_unit.v
index 5d18f7a..a0d398a 100644
--- a/src/control_unit.v
+++ b/src/control_unit.v
@@ -4,6 +4,7 @@ module control_unit (
input [2:0] funct3,
input [6:0] funct7,
input alu_zero,
+ input alu_equal,
output pc_we,
output mem_addr_src,
output mem_we,
@@ -60,6 +61,12 @@ always @ (*) begin
s10_beq: next_state <= s00_fetch;
endcase
end
+
+wire branch;
+wire pc_update;
+
+assign pc_we = (alu_zero & branch) | pc_update;
+
/*
always @ (*) begin
case(state)
diff --git a/src/cpu.v b/src/cpu.v
index 6e72c6b..c6f9f9e 100644
--- a/src/cpu.v
+++ b/src/cpu.v
@@ -11,6 +11,7 @@ wire pc_we;
wire instr_we;
wire rf_we;
wire alu_zero;
+wire alu_equal;
wire [3:0] alu_op;
wire [1:0] alu_a_src;
wire [1:0] alu_b_src;
@@ -23,6 +24,7 @@ control_unit cu (
.funct3(funct3),
.funct7(funct7),
.alu_zero(alu_zero),
+ .alu_equal(alu_equal),
.pc_we(pc_we),
.mem_addr_src(mem_addr_src),
.mem_we(mem_we),
@@ -153,7 +155,8 @@ alu alu (
.b(b),
.op(alu_op),
.result(alu_result),
- .zero(alu_zero)
+ .zero(alu_zero),
+ .equal(alu_equal)
);
reg [31:0] result_buf;