summaryrefslogtreecommitdiff
path: root/nqcpu.v
diff options
context:
space:
mode:
authorNick McKinney <nick@kmonkey.net>2016-12-29 15:58:59 -0600
committerNick McKinney <nick@kmonkey.net>2016-12-29 15:58:59 -0600
commitbdf05c2c95d6fe92d5350d31a42f106c5b98c043 (patch)
tree985f21213608520e8b825d8427570603b7c049b0 /nqcpu.v
parent47983fc7710df0f2ab0bf5e27255d9d9e30ad1b7 (diff)
support setting PC for branch and jump instructions
Diffstat (limited to 'nqcpu.v')
-rw-r--r--nqcpu.v17
1 files changed, 14 insertions, 3 deletions
diff --git a/nqcpu.v b/nqcpu.v
index 34935c6..c27c742 100644
--- a/nqcpu.v
+++ b/nqcpu.v
@@ -31,6 +31,9 @@ module nqcpu (
output [15:0] dbg_r7,
output [9:0] dbg_state,
+ output dbg_setPC,
+ output [15:0] dbg_setPCValue,
+
output [1:0] dbg_statusreg
);
@@ -40,7 +43,8 @@ module nqcpu (
pc = 16'h0;
end
- wire fetch_en, decode_en, alu_en, incr_pc;
+ wire fetch_en, decode_en, alu_en, incr_pc, setPC;
+ wire [15:0] setPCValue;
wire fetch_ready;
wire [15:0] fetched_instr;
@@ -58,6 +62,9 @@ module nqcpu (
if(incr_pc) begin
pc <= pc + 16'h2;
end
+ else if (setPC & alu_en) begin
+ pc <= setPCValue;
+ end
end
wire [32:0] ctrl_from_decoder;
@@ -130,6 +137,9 @@ module nqcpu (
.memData_in(16'hDEAD), // read in from memory
//.memData_out(??), // to write out to memory
+ .setPC(setPC),
+ .setPCValue(setPCValue),
+
.control_signals_out(ctrl_from_alu),
.imm_out(imm_from_alu),
.pc_out(pc_from_alu),
@@ -174,6 +184,7 @@ module nqcpu (
.setRegCond(debugSetRegCond)
);
- assign debugPC = pc_from_alu;
-
+ assign debugPC = pc;
+ assign dbg_setPC = setPC;
+ assign dbg_setPCValue = setPCValue;
endmodule