diff --git a/xgriscv_datapath.v b/xgriscv_datapath.v index 6ea15816f706e0b81d535fb1e3c3271312ae8acc..a34101759860d9d3bb7942772d6a1a4995319b1e 100644 --- a/xgriscv_datapath.v +++ b/xgriscv_datapath.v @@ -52,12 +52,13 @@ module datapath( //更新pc + wire [`ADDR_SIZE-1:0] base, offset; wire stall = 1'b0; wire [`ADDR_SIZE-1:0] newpc; pcenr pcr(clk, reset, ~stall, newpc, pc); addr_adder pcadder(pc, `ADDR_SIZE'b100, pcplus4); - sl1 pcsft(immout, immoutsft); - addr_adder pcjal(pc, immoutsft, pcbranch); + sl1 pcsft(immout, shftimm); + addr_adder pcjal(base, offset, pcbranch); wire [4:0] shamt; @@ -68,7 +69,9 @@ module datapath( mux3 #(32) mx2(rdata1, 0, pc, alusrca, a); //alu input a mux2 #(5) mx3(rdata2[4:0], instr[24:20], itype, shamt); //alu input shamt mux2 #(32) mx4(pcplus4, pcbranch, pcsrc, newpc);//pc input - mux2 #(32) mx5(wdata, pcplus4, jal, wdata);// wdata input pcplus4 + mux2 #(32) mx5(shftimm, immout, jalr, offset);//sum input b + mux2 #(32) mx6(pc, rdata1, jalr, base);//sum input a + mux2 #(32) mx7(wdata, pcplus4, jal, wdata);//wdata input pcplus4 imm im(iimm, simm, bimm, uimm, jimm, immctrl, immout);