aboutsummaryrefslogtreecommitdiff
path: root/src/control_unit.v
diff options
context:
space:
mode:
Diffstat (limited to 'src/control_unit.v')
-rw-r--r--src/control_unit.v18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/control_unit.v b/src/control_unit.v
index d82db2a..7ca2cb2 100644
--- a/src/control_unit.v
+++ b/src/control_unit.v
@@ -26,7 +26,8 @@ parameter s00_fetch = 4'h0,
s07_alu_wb = 4'h7,
s08_execute_i = 4'h8,
s09_jal = 4'h9,
- s10_beq = 4'ha;
+ s10_jalr = 4'ha,
+ s11_beq = 4'hb;
reg [3:0] state, next_state;
@@ -44,7 +45,8 @@ always @ (*) begin
7'b0110011: next_state <= s06_execute_r;
7'b0010011: next_state <= s08_execute_i;
7'b1101111: next_state <= s09_jal;
- 7'b1100011: next_state <= s10_beq;
+ 7'b1100111: next_state <= s10_jalr;
+ 7'b1100011: next_state <= s11_beq;
endcase
s02_mem_addr: case(opcode)
@@ -58,7 +60,8 @@ always @ (*) begin
s07_alu_wb: next_state <= s00_fetch;
s08_execute_i: next_state <= s07_alu_wb;
s09_jal: next_state <= s07_alu_wb;
- s10_beq: next_state <= s00_fetch;
+ s10_jalr: next_state <= s07_alu_wb;
+ s11_beq: next_state <= s00_fetch;
endcase
end
@@ -129,7 +132,14 @@ always @ (*) begin
result_src <= 2'b00;
pc_update = 1'b1;
end
- s10_beq: begin
+ s10_jalr: begin
+ alu_a_src <= 2'b10;
+ alu_b_src <= 2'b01;
+ alu_ctrl <= 2'b00;
+ result_src <= 2'b10;
+ pc_update = 1'b1;
+ end
+ s11_beq: begin
alu_a_src <= 2'b10;
alu_b_src <= 2'b00;
alu_ctrl <= 2'b01;