more work on ALU

This commit is contained in:
Raphael Jacquot 2019-02-10 23:00:06 +01:00
parent 799fc3c327
commit 43dd894888
2 changed files with 21 additions and 4 deletions

View file

@ -30,4 +30,8 @@
next_cycle <= `BUSCMD_NOP; next_cycle <= `BUSCMD_NOP;
decstate <= `DEC_ALU_INIT; decstate <= `DEC_ALU_INIT;
alu_return <= `DEC_START; alu_return <= `DEC_START;
`ifdef SIM
`endif
end end

View file

@ -22,28 +22,41 @@
`ALU_REG_B: B[alu_first*4+:4] <= 0; `ALU_REG_B: B[alu_first*4+:4] <= 0;
`ALU_REG_C: C[alu_first*4+:4] <= 0; `ALU_REG_C: C[alu_first*4+:4] <= 0;
`ALU_REG_D: D[alu_first*4+:4] <= 0; `ALU_REG_D: D[alu_first*4+:4] <= 0;
default: $display("ALU_OP_ZERO register not handled"); default: begin
$display("ALU_OP_ZERO register not handled");
alu_requested_halt <= 1;
end
endcase endcase
alu_first <= (alu_first + 1) & 4'hF; alu_first <= (alu_first + 1) & 4'hF;
end end
`ALU_OP_2CMPL: begin `ALU_OP_2CMPL: begin
case (alu_reg_dest) case (alu_reg_dest)
`ALU_REG_A: {Carry, A[alu_first*4+:4]} <= !alu_src1 + alu_carry; `ALU_REG_A: {Carry, A[alu_first*4+:4]} <= !alu_src1 + alu_carry;
default: $display("ALU_OP_2CMPL register not handled"); default: begin
$display("ALU_OP_2CMPL register not handled");
alu_requested_halt <= 1;
end
endcase endcase
alu_first <= (alu_first + 1) & 4'hF; alu_first <= (alu_first + 1) & 4'hF;
end end
`ALU_OP_1CMPL: begin `ALU_OP_1CMPL: begin
case (alu_reg_dest) case (alu_reg_dest)
`ALU_REG_A: A[alu_first*4+:4] <= ~alu_src1; `ALU_REG_A: A[alu_first*4+:4] <= ~alu_src1;
default: $display("ALU_OP_1CMPL register not handled"); `ALU_REG_C: C[alu_first*4+:4] <= ~alu_src1;
default: begin
$display("ALU_OP_1CMPL register not handled");
alu_requested_halt <= 1;
end
endcase endcase
alu_first <= (alu_first + 1) & 4'hF; alu_first <= (alu_first + 1) & 4'hF;
end end
`ALU_OP_INC: begin `ALU_OP_INC: begin
case (alu_reg_dest) case (alu_reg_dest)
`ALU_REG_D: {Carry, D[alu_first*4+:4]} <= alu_src1 + alu_carry; `ALU_REG_D: {Carry, D[alu_first*4+:4]} <= alu_src1 + alu_carry;
default: $display("ALU_OP_INC register not handled"); default: begin
$display("ALU_OP_INC register not handled");
alu_requested_halt <= 1;
end
endcase endcase
alu_first <= (alu_first + 1) & 4'hF; alu_first <= (alu_first + 1) & 4'hF;
end end