Line 313... |
Line 313... |
`define BRA 5'd10
|
`define BRA 5'd10
|
`define BRN 5'd11
|
`define BRN 5'd11
|
`define BAND 5'd12
|
`define BAND 5'd12
|
`define BOR 5'd13
|
`define BOR 5'd13
|
`define BNR 5'd14
|
`define BNR 5'd14
|
|
`define LOOP 5'd15
|
`define BLTR 5'd16
|
`define BLTR 5'd16
|
`define BGER 5'd17
|
`define BGER 5'd17
|
`define BLER 5'd18
|
`define BLER 5'd18
|
`define BGTR 5'd19
|
`define BGTR 5'd19
|
`define BLTUR 5'd20
|
`define BLTUR 5'd20
|
Line 1258... |
Line 1259... |
`BFSET: begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? 1'b1 : b[n]; xData[64] = 1'b0; end
|
`BFSET: begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? 1'b1 : b[n]; xData[64] = 1'b0; end
|
`BFCLR: begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? 1'b0 : b[n]; xData[64] = 1'b0; end
|
`BFCLR: begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? 1'b0 : b[n]; xData[64] = 1'b0; end
|
`BFCHG: begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? ~b[n] : b[n]; xData[64] = 1'b0; end
|
`BFCHG: begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? ~b[n] : b[n]; xData[64] = 1'b0; end
|
default: xData = 65'd0;
|
default: xData = 65'd0;
|
endcase
|
endcase
|
|
`BTRR:
|
|
case(xIR[4:0])
|
|
`LOOP: xData = b - 64'd1;
|
|
default: xData = 65'd0;
|
|
endcase
|
`SETLO: xData = imm;
|
`SETLO: xData = imm;
|
`SETHI: xData = {imm[63:32],a[31:0]};
|
`SETHI: xData = {imm[63:32],a[31:0]};
|
`ADDI: xData = a + imm;
|
`ADDI: xData = a + imm;
|
`ADDUI: xData = a + imm;
|
`ADDUI: xData = a + imm;
|
`SUBI: xData = a - imm;
|
`SUBI: xData = a - imm;
|
Line 2691... |
Line 2697... |
casex(dOpcode)
|
casex(dOpcode)
|
`SETLO: xRt <= {dAXC,dRa};
|
`SETLO: xRt <= {dAXC,dRa};
|
`SETHI: xRt <= {dAXC,dRa};
|
`SETHI: xRt <= {dAXC,dRa};
|
`RR: xRt <= {dAXC,dIR[24:20]};
|
`RR: xRt <= {dAXC,dIR[24:20]};
|
`BTRI: xRt <= 9'd0;
|
`BTRI: xRt <= 9'd0;
|
`BTRR: xRt <= 9'd0;
|
`BTRR:
|
|
case(dIR[4:0])
|
|
`LOOP: xRt <= {dAXC,dRb};
|
|
default: xRt <= 9'd0;
|
|
endcase
|
`TRAPcc: xRt <= 9'd0;
|
`TRAPcc: xRt <= 9'd0;
|
`TRAPcci: xRt <= 9'd0;
|
`TRAPcci: xRt <= 9'd0;
|
`JMP: xRt <= 9'd00;
|
`JMP: xRt <= 9'd00;
|
`CALL: xRt <= {dAXC,5'd31};
|
`CALL: xRt <= {dAXC,5'd31};
|
`RET: xRt <= {dAXC,dIR[24:20]};
|
`RET: xRt <= {dAXC,dIR[24:20]};
|
Line 2847... |
Line 2857... |
dbranch_taken <= 1'b1;
|
dbranch_taken <= 1'b1;
|
pc[AXC] <= jmp_tgt;
|
pc[AXC] <= jmp_tgt;
|
end
|
end
|
`BTRR:
|
`BTRR:
|
case(insn[4:0])
|
case(insn[4:0])
|
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR:
|
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR,`LOOP,`BRA:
|
if (predict_taken) begin
|
if (predict_taken) begin
|
$display("Taking predicted branch: %h",{pc_axc[63:4] + {{42{insn[24]}},insn[24:7]},insn[6:5],2'b00});
|
$display("Taking predicted branch: %h",{pc_axc[63:4] + {{42{insn[24]}},insn[24:7]},insn[6:5],2'b00});
|
dbranch_taken <= 1'b1;
|
dbranch_taken <= 1'b1;
|
pc[AXC] <= {pc_axc[63:4] + {{42{insn[24]}},insn[24:7]},insn[6:5],2'b00};
|
pc[AXC] <= {pc_axc[63:4] + {{42{insn[24]}},insn[24:7]},insn[6:5],2'b00};
|
end
|
end
|
Line 2915... |
Line 2925... |
default: ;
|
default: ;
|
endcase
|
endcase
|
`BTRR:
|
`BTRR:
|
case(xIR[4:0])
|
case(xIR[4:0])
|
// BEQ r1,r2,label
|
// BEQ r1,r2,label
|
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR:
|
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR,`BRA,`BRN,`LOOP:
|
if (takb & !xbranch_taken) begin
|
if (takb & !xbranch_taken) begin
|
$display("Taking branch %h",xpc[63:4] + {{42{xIR[24]}},xIR[24:7]});
|
$display("Taking branch %h",xpc[63:4] + {{42{xIR[24]}},xIR[24:7]});
|
pc[xAXC][63:4] <= xpc[63:4] + {{42{xIR[24]}},xIR[24:7]};
|
pc[xAXC][63:4] <= xpc[63:4] + {{42{xIR[24]}},xIR[24:7]};
|
pc[xAXC][3:2] <= xIR[6:5];
|
pc[xAXC][3:2] <= xIR[6:5];
|
if (xAXC==AXC) begin
|
if (xAXC==AXC) begin
|