X-Git-Url: http://git.joshuawise.com/firearm.git/blobdiff_plain/9a0d0e43d3ed0fc332924698603c7146f8903d95..dbdf315047f239d9483847bdd3f32f037908537b:/Memory.v?ds=sidebyside diff --git a/Memory.v b/Memory.v index c9d080d..bf25447 100644 --- a/Memory.v +++ b/Memory.v @@ -16,6 +16,14 @@ module Memory( output reg [3:0] st_read, input [31:0] st_data, + /* Coprocessor interface */ + output reg cp_req, + input cp_ack, + input cp_busy, + output cp_rnw, /* 1 = read from CP, 0 = write to CP */ + input [31:0] cp_read, + output reg [31:0] cp_write, + /* stage inputs */ input inbubble, input [31:0] pc, @@ -92,6 +100,9 @@ module Memory( next_outbubble = inbubble; outstall = 1'b0; next_regs = regs; + cp_req = 1'b0; + cp_rnw = 1'bx; + cp_write = 32'hxxxxxxxx; offset = prev_offset; next_outcpsr = lsm_state == 3'b010 ? out_cpsr : cpsr; next_lsm_state = lsm_state; @@ -298,6 +309,38 @@ module Memory( default: begin end endcase end + `DECODE_LDCSTC: begin + $display("WARNING: Unimplemented LDCSTC"); + end + `DECODE_CDP: begin + cp_req = 1; + if (cp_busy) begin + outstall = 1; + next_outbubble = 1; + end + if (!cp_ack) begin + /* XXX undefined instruction trap */ + $display("WARNING: Possible CDP undefined instruction"); + end + end + `DECODE_MRCMCR: begin + cp_req = 1; + cp_rnw = insn[20] /* L */; + if (insn[20] == 0 /* store to coprocessor */) + cp_write = op0; + else begin + next_write_reg = 1'b1; + next_write_num = insn[15:12]; + next_write_data = cp_read; + end + if (cp_busy) begin + outstall = 1; + next_outbubble = 1; + end + if (!cp_ack) begin + $display("WARNING: Possible MRCMCR undefined instruction"); + end + end default: begin end endcase end