From 0ae15275d34c55859d0a7b55acab132852fc7b71 Mon Sep 17 00:00:00 2001 From: uvok Date: Thu, 22 Jan 2026 19:18:37 +0100 Subject: Implement sub instruction --- eater_cpu/eater_decoder.sv | 21 +++++++++++++++++++++ eater_cpu/eater_types.sv | 8 ++++++++ 2 files changed, 29 insertions(+) diff --git a/eater_cpu/eater_decoder.sv b/eater_cpu/eater_decoder.sv index 5bb8feb..ad0fd52 100644 --- a/eater_cpu/eater_decoder.sv +++ b/eater_cpu/eater_decoder.sv @@ -28,6 +28,7 @@ function CpuState insdep_state; NOP: insdep_state = PC_to_MAR; LDA: insdep_state = LDA_INS_to_MAR; ADD: insdep_state = ADD_INS_to_MAR; + SUB: insdep_state = SUB_INS_to_MAR; OUT: insdep_state = OUT_A_to_OUT; HALT_op: insdep_state = HALT_st; @@ -56,6 +57,10 @@ always @(posedge clk_i) begin ADD_MEM_to_B: next_state = ADD_ALU_to_A; ADD_ALU_to_A: next_state = PC_to_MAR; + SUB_INS_to_MAR: next_state = SUB_MEM_to_B; + SUB_MEM_to_B: next_state = SUB_ALU_to_A; + SUB_ALU_to_A: next_state = PC_to_MAR; + OUT_A_to_OUT: next_state = PC_to_MAR; HALT_st: next_state = HALT_st; @@ -118,6 +123,22 @@ always_comb begin internal_flags.A_in = 1; end + SUB_INS_to_MAR: begin + internal_flags.INS_out = 1; + internal_flags.MAR_in = 1; + end + + SUB_MEM_to_B: begin + internal_flags.RAM_out = 1; + internal_flags.B_in = 1; + end + + SUB_ALU_to_A: begin + internal_flags.ALU_out = 1; + internal_flags.ALU_subtract_nadd = 1; + internal_flags.A_in = 1; + end + OUT_A_to_OUT: begin internal_flags.A_out = 1; internal_flags.OUT_in = 1; diff --git a/eater_cpu/eater_types.sv b/eater_cpu/eater_types.sv index 256f6ca..a39977e 100644 --- a/eater_cpu/eater_types.sv +++ b/eater_cpu/eater_types.sv @@ -32,6 +32,13 @@ typedef enum logic[7:0] { // ADD: c) ALU -> A ADD_ALU_to_A, + // SUB: a) LSB of INStruction into MAR + SUB_INS_to_MAR, + // SUB: b) MEM -> B + SUB_MEM_to_B, + // SUB: c) ALU -> A + SUB_ALU_to_A, + // OUT: A -> OUT OUT_A_to_OUT, @@ -43,6 +50,7 @@ typedef enum logic[3:0] { NOP = 'b0000, LDA = 'b0001, ADD = 'b0010, + SUB = 'b0011, OUT = 'b1110, HALT_op = 'b1111 } eater_instruction; -- cgit v1.2.3