OpenCores
URL https://opencores.org/ocsvn/raptor64/raptor64/trunk

Subversion Repositories raptor64

[/] [raptor64/] [trunk/] [rtl/] [verilog/] [Raptor64sc.v] - Diff between revs 29 and 30

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 29 Rev 30
Line 31... Line 31...
`define RESET_VECTOR    64'hFFFF_FFFF_FFFF_FFF0
`define RESET_VECTOR    64'hFFFF_FFFF_FFFF_FFF0
`define NMI_VECTOR              64'hFFFF_FFFF_FFFF_FFE0
`define NMI_VECTOR              64'hFFFF_FFFF_FFFF_FFE0
`define IRQ_VECTOR              64'hFFFF_FFFF_FFFF_FFD0
`define IRQ_VECTOR              64'hFFFF_FFFF_FFFF_FFD0
`define TRAP_VECTOR             64'h0000_0000_0000_0000
`define TRAP_VECTOR             64'h0000_0000_0000_0000
 
 
`define TLBMissPage             52'hFFFF_FFFF_FFFF_F
 
`define ITLB_MissHandler        64'hFFFF_FFFF_FFFF_FFC0
`define ITLB_MissHandler        64'hFFFF_FFFF_FFFF_FFC0
`define DTLB_MissHandler        64'hFFFF_FFFF_FFFF_FFB0
`define DTLB_MissHandler        64'hFFFF_FFFF_FFFF_FFB0
`define BERR_VECTOR             64'hFFFF_FFFF_FFFF_FFA0
 
 
 
`define GEN_TRAP_OFFSET         13'h0200
 
`define DBZ_TRAP_OFFSET         13'h0050
 
`define OFL_TRAP_OFFSET         13'h0070
 
`define PRIV_OFFSET                     13'h0080
 
 
 
`define EX_NON          9'd000
`define EX_NON          9'd000
`define EX_TRAP         9'd32   // Trap exception
`define EX_TRAP         9'd32   // Trap exception
`define EX_IRQ          9'd449  // interrupt
`define EX_IRQ          9'd449  // interrupt
`define EX_DBZ          9'd488  // divide by zero
`define EX_DBZ          9'd488  // divide by zero
Line 54... Line 47...
`define EX_DBERR        9'd508  // Bus Error - load or store or I/O
`define EX_DBERR        9'd508  // Bus Error - load or store or I/O
`define EX_IBERR        9'd509  // Bus Error - instruction fetch
`define EX_IBERR        9'd509  // Bus Error - instruction fetch
`define EX_NMI          9'd510  // non-maskable interrupt
`define EX_NMI          9'd510  // non-maskable interrupt
`define EX_RST          9'd511  // Reset
`define EX_RST          9'd511  // Reset
 
 
`define EXCEPT_Int              5'd00
`include "Raptor64_opcodes.v"
`define EXCEPT_Mod              5'd01   // TLB modification
 
`define EXCEPT_TLBL             5'd02   // TLB exception - load or ifetch
 
`define EXCEPT_TLBS             5'd03   // TLB exception - store
 
`define EXCEPT_AdEL             5'd04   // Address error - load or ifetch
 
`define EXCEPT_AdES             5'd05   // Address error - store
 
`define EXCEPT_IBE              5'd06   // Bus Error - instruction fetch
 
`define EXCEPT_DBE              5'd07   // Bus Error - load or store
 
`define EXCEPT_Sys              5'd08
 
`define EXCEPT_Bp               5'd09
 
`define EXCEPT_RI               5'd10   // reserved instruction
 
`define EXCEPT_CpU              5'd11   // Coprocessor unusable
 
`define EXCEPT_Ov               5'd12   // Integer Overflow
 
`define EXCEPT_Tr               5'd13   // Trap exception
 
// 14-22 Reserved
 
`define EXCEPT_WATCH    5'd23
 
`define EXCEPT_MCheck   5'd24   // Machine check
 
// 25-31 Reserved
 
 
 
 
 
`define MISC    7'd0
 
`define         BRK             7'd0
 
`define         IRQ             7'd1
 
`define         ICACHE_ON       7'd10
 
`define         ICACHE_OFF      7'd11
 
`define         DCACHE_ON       7'd12
 
`define         DCACHE_OFF      7'd13
 
`define     FIP         7'd20
 
`define         SYSJMP  7'd22
 
`define         SYSCALL 7'd23
 
`define         IRET    7'd32
 
`define         ERET    7'd33
 
`define         WAIT    7'd40
 
`define         TLBP    7'd49
 
`define     TLBR        7'd50
 
`define     TLBWI       7'd51
 
`define     TLBWR       7'd52
 
`define         CLI             7'd64
 
`define         SEI             7'd65
 
`define         GRAN    7'd80
 
`define         GRAFD   7'd82
 
`define R               7'd1
 
`define         COM             7'd4
 
`define         NOT             7'd5
 
`define         NEG             7'd6
 
`define         ABS             7'd7
 
`define         SGN             7'd8
 
`define         MOV             7'd9
 
`define         SWAP    7'd13
 
`define         CTLZ    7'd16
 
`define         CTLO    7'd17
 
`define         CTPOP   7'd18
 
`define         SEXT8   7'd19
 
`define         SEXT16  7'd20
 
`define         SEXT32  7'd21
 
`define         SQRT    7'd24
 
`define         REDOR   7'd30
 
`define         REDAND  7'd31
 
`define     MFSPR       7'd40
 
`define     MTSPR       7'd41
 
`define         SR                              6'd00
 
`define         TLBIndex        6'd01
 
`define         TLBRandom               6'd02
 
`define         PageTableAddr   6'd04
 
`define         BadVAddr        6'd08
 
`define         TLBPhysPage0    6'd10
 
`define         TLBPhysPage1    6'd11
 
`define         TLBVirtPage             6'd12
 
`define                 TLBPageMask             6'd13
 
`define                 TLBASID                 6'd14
 
`define         ASID                    6'd15
 
`define                 Wired                   6'd16
 
`define         EP0             6'd17
 
`define         EP1             6'd18
 
`define         EP2             6'd19
 
`define         EP3             6'd20
 
`define         AXC             6'd21
 
`define                 Tick                    6'd22
 
`define                 EPC                             6'd23
 
`define                 CauseCode               6'd24
 
`define                 TBA                             6'd25
 
`define                 NON_ICACHE_SEG  6'd26
 
`define                 FPCR                    6'd32
 
`define                 IPC                             6'd33
 
`define                 RAND                    6'd34
 
`define                 SRANDZ                  6'd35
 
`define                 SRANDW                  6'd36
 
`define                 INSNKEY                 6'd37
 
`define         OMG             7'd50
 
`define         CMG             7'd51
 
`define         OMGI    7'd52
 
`define         CMGI    7'd53
 
`define         EXEC    7'd58
 
`define         MYST    7'd59
 
`define RR      7'd2
 
`define         ADD             7'd2
 
`define         ADDU    7'd3
 
`define         SUB             7'd4
 
`define         SUBU    7'd5
 
`define         CMP             7'd6
 
`define         CMPU    7'd7
 
`define         AND             7'd8
 
`define         OR              7'd9
 
`define         XOR             7'd10
 
`define         ANDC    7'd11
 
`define         NAND    7'd12
 
`define         NOR             7'd13
 
`define         XNOR    7'd14
 
`define         ORC             7'd15
 
`define         MIN             7'd20
 
`define         MAX             7'd21
 
`define         MULU    7'd24
 
`define         MULS    7'd25
 
`define         DIVU    7'd26
 
`define         DIVS    7'd27
 
`define         MOD             7'd28
 
`define         MOVZ    7'd30
 
`define         MOVNZ   7'd31
 
 
 
`define         SHL             7'd40
 
`define         SHRU    7'd41
 
`define         ROL             7'd42
 
`define         ROR             7'd43
 
`define         SHR             7'd44
 
`define         ROLAM   7'd45
 
 
 
`define         NOP             7'd60
 
 
 
`define         SLT             7'd96
 
`define         SLE             7'd97
 
`define         SGT             7'd98
 
`define         SGE             7'd99
 
`define         SLTU    7'd100
 
`define         SLEU    7'd101
 
`define         SGTU    7'd102
 
`define         SGEU    7'd103
 
`define         SEQ             7'd104
 
`define         SNE             7'd105
 
 
 
`define     BCD_ADD     7'd110
 
`define     BCD_SUB 7'd111
 
 
 
`define SHFTI   7'd3
 
`define         SHLI            5'd0
 
`define         SHRUI           5'd1
 
`define         ROLI            5'd2
 
`define         SHRI            5'd3
 
`define         RORI            5'd4
 
`define         ROLAMI          5'd5
 
`define         BFINS           5'd8
 
`define         BFSET           5'd9
 
`define         BFCLR           5'd10
 
`define         BFCHG           5'd11
 
`define ADDI    7'd4
 
`define ADDUI   7'd5
 
`define SUBI    7'd6
 
`define SUBUI   7'd7
 
`define CMPI    7'd8
 
`define CMPUI   7'd9
 
`define ANDI    7'd10
 
`define ORI             7'd11
 
`define XORI    7'd12
 
 
 
`define MULUI   7'd13
 
`define MULSI   7'd14
 
`define DIVUI   7'd15
 
`define DIVSI   7'd16
 
 
 
`define TRAPcc  7'd17
 
`define         TEQ             5'd0
 
`define         TNE             5'd1
 
`define         TLT             5'd2
 
`define         TGE             5'd3
 
`define         TLE             5'd4
 
`define         TGT             5'd5
 
`define         TLTU    5'd6
 
`define         TGEU    5'd7
 
`define         TLEU    5'd8
 
`define         TGTU    5'd9
 
`define         TRAP    5'd10
 
`define         TRN             5'd11
 
`define TRAPcci 7'd18
 
`define         TEQI    5'd0
 
`define         TNEI    5'd1
 
`define         TLTI    5'd2
 
`define         TGEI    5'd3
 
`define         TLEI    5'd4
 
`define         TGTI    5'd5
 
`define         TLTUI   5'd6
 
`define         TGEUI   5'd7
 
`define         TLEUI   5'd8
 
`define         TGTUI   5'd9
 
`define         TRAI    5'd10
 
`define         TRNI    5'd11
 
// SETLO=20 to 23
 
`define SETLO   7'b00101xx
 
`define CALL    7'd24
 
`define JMP             7'd25
 
`define JAL             7'd26
 
`define RET             7'd27
 
// SETLO=28 to 31
 
`define SETHI   7'b00111xx
 
`define LB              7'd32
 
`define LC              7'd33
 
`define LH              7'd34
 
`define LW              7'd35
 
`define LP              7'd36
 
`define LBU             7'd37
 
`define LCU             7'd38
 
`define LHU             7'd39
 
`define LSH             7'd40
 
`define LSW             7'd41
 
`define LF              7'd42
 
`define LFD             7'd43
 
`define LFP             7'd44
 
`define LFDP    7'd45
 
`define LWR             7'd46
 
`define LDONE   7'd47
 
 
 
`define SB              7'd48
 
`define SC              7'd49
 
`define SH              7'd50
 
`define SW              7'd51
 
`define SP              7'd52
 
`define MEMNDX  7'd53
 
`define         LBX             6'd0
 
`define         LCX             6'd1
 
`define         LHX             6'd2
 
`define         LWX             6'd3
 
`define         LPX             6'd4
 
`define         LBUX    6'd5
 
`define         LCUX    6'd6
 
`define         LHUX    6'd7
 
`define         LSHX    6'd8
 
`define         LSWX    6'd9
 
`define         LFX             6'd10
 
`define         LFDX    6'd11
 
`define         LFPX    6'd12
 
`define         LFDPX   6'd13
 
`define         LWRX    6'd14
 
 
 
`define         SBX             6'd16
 
`define         SCX             6'd17
 
`define         SHX             6'd18
 
`define         SWX             6'd19
 
`define         SPX             6'd20
 
`define         SSHX    6'd24
 
`define         SSWX    6'd25
 
`define         SFX             6'd26
 
`define         SFDX    6'd27
 
`define         SFPX    6'd28
 
`define         SFDPX   6'd29
 
`define         SWCX    6'd30
 
 
 
`define         INBX    6'd32
 
`define         INCX    6'd33
 
`define         INHX    6'd34
 
`define         INWX    6'd35
 
`define         INBUX   6'd36
 
`define         INCUX   6'd37
 
`define         INHUX   6'd38
 
`define         OUTBX   6'd40
 
`define         OUTCX   6'd41
 
`define         OUTHX   6'd42
 
`define         OUTWX   6'd43
 
`define         CACHEX  6'd44
 
`define         LEAX    6'd45
 
`define         LMX             6'd46
 
`define         SMX             6'd47
 
 
 
`define SSH             7'd56
 
`define SSW             7'd57
 
`define SF              7'd58
 
`define SFD             7'd59
 
`define SFP             7'd60
 
`define SFDP    7'd61
 
`define SWC             7'd62
 
 
 
`define INB             7'd64
 
`define INCH    7'd65
 
`define INH             7'd66
 
`define INW             7'd67
 
`define INBU    7'd68
 
`define INCU    7'd69
 
`define INHU    7'd70
 
`define OUTB    7'd72
 
`define OUTC    7'd73
 
`define OUTH    7'd74
 
`define OUTW    7'd75
 
`define CACHE   7'd76
 
`define         INVIL   5'd0
 
`define         INVIALL 5'd1
 
`define LEA             7'd77
 
`define LM              7'd78
 
`define SM              7'd79
 
 
 
`define BLTI    7'd80
 
`define BGEI    7'd81
 
`define BLEI    7'd82
 
`define BGTI    7'd83
 
`define BLTUI   7'd84
 
`define BGEUI   7'd85
 
`define BLEUI   7'd86
 
`define BGTUI   7'd87
 
`define BEQI    7'd88
 
`define BNEI    7'd89
 
 
 
`define BTRI    7'd94
 
`define         BLTRI   5'd0
 
`define         BGERI   5'd1
 
`define         BLERI   5'd2
 
`define         BGTRI   5'd3
 
`define         BLTURI  5'd4
 
`define         BGEURI  5'd5
 
`define         BLEURI  5'd6
 
`define         BGTURI  5'd7
 
`define         BEQRI   5'd8
 
`define         BNERI   5'd9
 
`define         BRARI   5'd10
 
`define         BRNRI   5'd11
 
`define         BANDRI  5'd12
 
`define         BORRI   5'd13
 
`define BTRR    7'd95
 
`define         BLT             5'd0
 
`define         BGE             5'd1
 
`define         BLE             5'd2
 
`define         BGT             5'd3
 
`define         BLTU    5'd4
 
`define         BGEU    5'd5
 
`define         BLEU    5'd6
 
`define         BGTU    5'd7
 
`define         BEQ             5'd8
 
`define         BNE             5'd9
 
`define         BRA             5'd10
 
`define         BRN             5'd11
 
`define         BAND    5'd12
 
`define         BOR             5'd13
 
`define         BNR             5'd14
 
`define         LOOP    5'd15
 
`define         BLTR    5'd16
 
`define         BGER    5'd17
 
`define         BLER    5'd18
 
`define         BGTR    5'd19
 
`define         BLTUR   5'd20
 
`define         BGEUR   5'd21
 
`define         BLEUR   5'd22
 
`define         BGTUR   5'd23
 
`define         BEQR    5'd24
 
`define         BNER    5'd25
 
`define         BRAR    5'd26
 
`define         BRNR    5'd27
 
 
 
 
 
`define SLTI    7'd96
 
`define SLEI    7'd97
 
`define SGTI    7'd98
 
`define SGEI    7'd99
 
`define SLTUI   7'd100
 
`define SLEUI   7'd101
 
`define SGTUI   7'd102
 
`define SGEUI   7'd103
 
`define SEQI    7'd104
 
`define SNEI    7'd105
 
 
 
`define FP              7'd108
 
`define FDADD           6'd0
 
`define FDSUB           6'd1
 
`define FDMUL           6'd2
 
`define FDDIV           6'd3
 
`define FDCUN           6'd4
 
`define FDI2F           6'd5
 
`define FDF2I           6'd6
 
`define FDF2D           6'd7
 
`define FDD2F           6'd8
 
`define FDCLT           6'b001100
 
`define FDCEQ           6'b010100
 
`define FDCLE           6'b011100
 
`define FDCGT           6'b100100
 
`define FDCNE           6'b101100
 
`define FDCGE           6'b110100
 
`define FPLOO   7'd109
 
`define FPZL    7'd110
 
`define NOPI    7'd111
 
 
 
`define IMM             3'd7
 
 
 
`define NOP_INSN        42'b1101111_000_00000000_00000000_00000000_00000000
 
 
 
module Raptor64sc(rst_i, clk_i, nmi_i, irq_i, bte_o, cti_o, bl_o,
module Raptor64sc(rst_i, clk_i, nmi_i, irq_i, bte_o, cti_o, bl_o,
        cyc_o, stb_o, ack_i, err_i, we_o, sel_o, rsv_o, adr_o, dat_i, dat_o, sys_adv, sys_adr
        cyc_o, stb_o, ack_i, err_i, we_o, sel_o, rsv_o, adr_o, dat_i, dat_o, sys_adv, sys_adr
);
);
parameter IDLE = 5'd1;
parameter IDLE = 5'd1;
Line 510... Line 117...
reg [1:0] vtno;          // vector table number
reg [1:0] vtno;          // vector table number
reg [1:0] rm;            // fp rounding mode
reg [1:0] rm;            // fp rounding mode
reg FXE;                        // fp exception enable
reg FXE;                        // fp exception enable
wire KernelMode;
wire KernelMode;
wire [31:0] sr = {bu_im,15'd0,im,1'b0,KernelMode,FXE,vtno,10'b0};
wire [31:0] sr = {bu_im,15'd0,im,1'b0,KernelMode,FXE,vtno,10'b0};
reg [41:0] dIR;
reg [41:0] dIR,xIR,m1IR,m2IR,wIR;
reg [41:0] ndIR;
reg [41:0] ndIR;
wire [6:0] dOpcode = dIR[41:35];
wire [6:0] dOpcode = dIR[41:35];
reg [41:0] xIR;
 
reg [63:0] pc;
reg [63:0] pc;
reg [63:0] ErrorEPC,EPC,IPC;
reg [63:0] ErrorEPC,EPC,IPC;
reg [63:0] dpc,m1pc,m2pc,wpc;
reg [63:0] dpc,m1pc,m2pc,wpc;
reg dpcv,xpcv,m1pcv,m2pcv,wpcv; // PC valid indicators
reg dpcv,xpcv,m1pcv,m2pcv,wpcv; // PC valid indicators
reg [63:0] xpc;
reg [63:0] xpc;
Line 571... Line 177...
integer n;
integer n;
reg [63:13] BadVAddr;
reg [63:13] BadVAddr;
reg [63:13] PageTableAddr;
reg [63:13] PageTableAddr;
reg [63:0] errorAddress;
reg [63:0] errorAddress;
 
 
 
wire [6:0] iFunc = insn[6:0];
 
wire [6:0] dFunc = dIR[6:0];
 
wire [5:0] dFunc6 = dIR[5:0];
 
wire [6:0] xFunc = xIR[6:0];
 
wire [5:0] xFunc6 = xIR[5:0];
 
wire [4:0] xFunc5 = xIR[4:0];
 
wire [6:0] iOpcode = insn[41:35];
 
wire [6:0] xOpcode = xIR[41:35];
 
reg [6:0] m1Opcode,m2Opcode,wOpcode;
 
reg [6:0] m1Func,m2Func,wFunc;
 
reg [63:0] m1Data,m2Data,wData,tData;
 
reg [63:0] m2Addr;
 
reg [63:0] tick;
 
reg [63:0] tba;
 
reg [63:0] exception_address,ipc;
 
reg [63:0] a,b,c,imm,m1b;
 
reg prev_ihit;
 
reg rsf;
 
reg [63:5] resv_address;
 
reg dirqf,rirqf,m1irqf,m2irqf,wirqf,tirqf;
 
reg xirqf;
 
reg [8:0] dextype,m1extype,m2extype,wextype,textype,exception_type;
 
reg [8:0] xextype;
 
reg wLdPC,m2LdPC;
 
wire advanceX_edge;
 
reg takb;
 
wire advanceX,advanceM1,advanceW;
 
reg m1IsLoad,m2IsLoad;
 
reg m1IsIO;
 
reg m1IsStore,m2IsStore,wIsStore;
 
 
function [63:0] fnIncPC;
function [63:0] fnIncPC;
input [63:0] fpc;
input [63:0] fpc;
begin
begin
case(fpc[3:2])
case(fpc[3:2])
2'd0:   fnIncPC = {fpc[63:4],4'b0100};
2'd0:   fnIncPC = {fpc[63:4],4'b0100};
Line 590... Line 227...
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// TLB
// TLB
// The TLB contains 64 entries, that are 8 way set associative.
// The TLB contains 64 entries, that are 8 way set associative.
// The TLB is dual ported and shared between the instruction and data streams.
// The TLB is dual ported and shared between the instruction and data streams.
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
 
 
wire unmappedArea = pc[63:52]==12'hFFD || pc[63:52]==12'hFFE || pc[63:52]==12'hFFF;
 
wire unmappedDataArea = ea[63:52]==12'hFFD || ea[63:52]==12'hFFE || ea[63:52]==12'hFFF;
 
wire [63:0] ppc;
wire [63:0] ppc;
wire [63:0] pea;
wire [63:0] pea;
 
wire [63:0] tlbo;
`ifdef TLB
`ifdef TLB
reg [24:13] TLBPageMask;
wire [63:0] TLBVirtPage;
reg [63:13] TLBVirtPage;
wire wTlbp = advanceW && wOpcode==`MISC && wFunc==`TLBP;
reg [63:13] TLBPhysPage0;
wire wTlbrd = advanceW && wOpcode==`MISC && wFunc==`TLBR;
reg [63:13] TLBPhysPage1;
wire wTlbwr = advanceW && wOpcode==`MISC && wFunc==`TLBWR;
reg [7:0] TLBASID;
wire wTlbwi = advanceW && wOpcode==`MISC && wFunc==`TLBWI;
reg TLBG;
wire wMtspr = advanceW && wOpcode==`R && wFunc==`MTSPR;
reg TLBD;
wire xTlbrd = advanceX && xOpcode==`MISC && xFunc==`TLBR;
reg TLBValid;
wire xTlbwr = advanceX && xOpcode==`MISC && xFunc==`TLBWR;
reg [63:0] Index;
wire xTlbwi = advanceX && xOpcode==`MISC && xFunc==`TLBWI;
reg [2:0] Random;
wire ITLBMiss,DTLBMiss;
reg [2:0] Wired;
 
reg [15:0] IMatch,DMatch;
 
 
 
reg [3:0] m;
 
reg [5:0] i;
 
reg [24:13] ITLBPageMask [63:0];
 
reg [63:13] ITLBVirtPage [63:0];
 
reg [63:13] ITLBPhysPage0 [63:0];
 
reg [63:13] ITLBPhysPage1 [63:0];
 
reg [63:0] ITLBG;
 
reg [63:0] ITLBD;
 
reg [7:0] ITLBASID [63:0];
 
reg [15:0] ITLBValid;
 
initial begin
 
        for (n = 0; n < 64; n = n + 1)
 
        begin
 
                ITLBPageMask[n] = 0;
 
                ITLBVirtPage[n] = 0;
 
                ITLBPhysPage0[n] = 0;
 
                ITLBPhysPage1[n] = 0;
 
                ITLBG[n] = 0;
 
                ITLBASID[n] = 0;
 
                ITLBValid[n] = 0;
 
        end
 
end
 
always @*
 
for (n = 0; n < 8; n = n + 1)
 
        IMatch[n] = ((pc[63:13]|ITLBPageMask[{n[2:0],pc[15:13]}])==(ITLBVirtPage[{n[2:0],pc[15:13]}]|ITLBPageMask[{n[2:0],pc[15:13]}])) &&
 
                                ((ITLBASID[{n,pc[15:13]}]==ASID) || ITLBG[{n,pc[15:13]}]) &&
 
                                ITLBValid[{n,pc[15:13]}];
 
always @(IMatch)
 
if (IMatch[0]) m <= 4'd0;
 
else if (IMatch[1]) m <= 4'd1;
 
else if (IMatch[2]) m <= 4'd2;
 
else if (IMatch[3]) m <= 4'd3;
 
else if (IMatch[4]) m <= 4'd4;
 
else if (IMatch[5]) m <= 4'd5;
 
else if (IMatch[6]) m <= 4'd6;
 
else if (IMatch[7]) m <= 4'd7;
 
else m <= 4'd15;
 
 
 
wire ioddpage = |({ITLBPageMask[{m[2:0],pc[15:13]}]+19'd1,13'd0}&pc);
 
wire [63:13] IPFN = ioddpage ? ITLBPhysPage1[{m[2:0],pc[15:13]}] : ITLBPhysPage0[{m[2:0],pc[15:13]}];
 
 
 
wire ITLBMiss = !unmappedArea & m[3];
 
 
 
assign ppc[63:13] = unmappedArea ? pc[63:13] : m[3] ? `TLBMissPage: IPFN;
 
assign ppc[12:0] = pc[12:0];
 
 
 
reg [3:0] q;
 
always @(ea)
 
for (n = 0; n < 7; n = n + 1)
 
        DMatch[n] = ((ea[63:13]|ITLBPageMask[{n,ea[15:13]}])==(ITLBVirtPage[{n,ea[15:13]}]|ITLBPageMask[{n,ea[15:13]}])) &&
 
                                ((ITLBASID[{n,ea[15:13]}]==ASID) || ITLBG[{n,ea[15:13]}]) &&
 
                                ITLBValid[{n,ea[15:13]}];
 
always @(DMatch)
 
if (DMatch[0]) q <= 4'd0;
 
else if (DMatch[1]) q <= 4'd1;
 
else if (DMatch[2]) q <= 4'd2;
 
else if (DMatch[3]) q <= 4'd3;
 
else if (DMatch[4]) q <= 4'd4;
 
else if (DMatch[5]) q <= 4'd5;
 
else if (DMatch[6]) q <= 4'd6;
 
else if (DMatch[7]) q <= 4'd7;
 
else q <= 4'd15;
 
 
 
wire doddpage = |({ITLBPageMask[{q[2:0],ea[15:13]}]+19'd1,13'd0}&ea);
 
wire [63:13] DPFN = doddpage ? ITLBPhysPage1[{q[2:0],ea[15:13]}] : ITLBPhysPage0[{q[2:0],ea[15:13]}];
 
 
 
wire DTLBMiss = !unmappedDataArea & q[3];
Raptor64_TLB u22
 
(
 
        .rst(rst_i),
 
        .clk(clk),
 
        .pc(pc),
 
        .ea(ea),
 
        .ppc(ppc),
 
        .pea(pea),
 
        .m1IsStore(advanceM1 && m1IsStore),
 
        .ASID(ASID),
 
        .wTlbp(wTlbp),
 
        .wTlbrd(wTlbrd),
 
        .wTlbwr(wTlbwr),
 
        .wTlbwi(wTlbwi),
 
        .xTlbrd(xTlbrd),
 
        .xTlbwr(xTlbwr),
 
        .xTlbwi(xTlbwi),
 
        .wr(wMtspr),
 
        .wregno(wIR[12:7]),
 
        .dati(wData),
 
        .xregno(xIR[12:7]),
 
        .dato(tlbo),
 
        .ITLBMiss(ITLBMiss),
 
        .DTLBMiss(DTLBMiss),
 
        .HTLBVirtPage(TLBVirtPage)
 
);
 
 
assign pea[63:13] = unmappedDataArea ? ea[63:13] : q[3] ? `TLBMissPage: DPFN;
 
assign pea[12:0] = ea[12:0];
 
`else
`else
assign ppc = pc;
assign ppc = pc;
assign pea = ea;
assign pea = ea;
`endif
`endif
wire m1UnmappedDataArea = pea[63:13]>=12'hFFD;
 
 
 
wire dram_bus = !pea[63];
wire dram_bus = !pea[63];
wire m2_dram_bus = !m2Addr[63];
wire m2_dram_bus = !m2Addr[63];
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
Line 871... Line 459...
reg [64:0] xData;
reg [64:0] xData;
wire xisCacheElement = (xData[63:52] != 12'hFFD && xData[63:52]!=12'hFFF) && dcache_on;
wire xisCacheElement = (xData[63:52] != 12'hFFD && xData[63:52]!=12'hFFF) && dcache_on;
reg m1IsCacheElement;
reg m1IsCacheElement;
 
 
reg nopI;
reg nopI;
wire [6:0] iFunc = insn[6:0];
 
wire [6:0] dFunc = dIR[6:0];
 
wire [5:0] dFunc6 = dIR[5:0];
 
wire [6:0] xFunc = xIR[6:0];
 
wire [5:0] xFunc6 = xIR[5:0];
 
wire [4:0] xFunc5 = xIR[4:0];
 
wire [6:0] iOpcode = insn[41:35];
 
wire [6:0] xOpcode = xIR[41:35];
 
reg [6:0] m1Opcode,m2Opcode,wOpcode;
 
reg [6:0] m1Func,m2Func;
 
reg [63:0] m1Data,m2Data,wData,tData;
 
reg [63:0] m2Addr;
 
reg [63:0] tick;
 
reg [63:0] tba;
 
reg [63:0] exception_address,ipc;
 
reg [63:0] a,b,c,imm,m1b;
 
reg prev_ihit;
 
reg rsf;
 
reg [63:5] resv_address;
 
reg dirqf,rirqf,m1irqf,m2irqf,wirqf,tirqf;
 
reg xirqf;
 
reg [8:0] dextype,m1extype,m2extype,wextype,textype,exception_type;
 
reg [8:0] xextype;
 
reg wLdPC,m2LdPC;
 
wire advanceX_edge;
 
reg takb;
 
 
 
 
 
 
 
wire [127:0] mult_out;
wire [127:0] mult_out;
wire [63:0] sqrt_out;
wire [63:0] sqrt_out;
Line 1246... Line 808...
        predict_taken = insn[29];
        predict_taken = insn[29];
default:
default:
        predict_taken = 1'd0;
        predict_taken = 1'd0;
endcase
endcase
`else
`else
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Branch history table.
// Branch history table.
// The history table is updated by the EX stage and read in
// The history table is updated by the EX stage and read in
// both the EX and IF stages.
// both the EX and IF stages.
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
reg [2:0] gbl_branch_hist;
wire predict_taken;
reg [1:0] branch_history_table [255:0];
 
wire [7:0] bht_wa = {xpc[5:0],gbl_branch_hist[2:1]};              // write address
 
wire [7:0] bht_ra1 = {xpc[5:0],gbl_branch_hist[2:1]};             // read address (EX stage)
 
wire [7:0] bht_ra2 = {pc[5:0],gbl_branch_hist[2:1]};      // read address (IF stage)
 
wire [1:0] bht_xbits = branch_history_table[bht_ra1];
 
wire [1:0] bht_ibits = branch_history_table[bht_ra2];
 
wire predict_taken = bht_ibits==2'd0 || bht_ibits==2'd1;
 
 
 
wire isxBranchI = (xOpcode==`BEQI || xOpcode==`BNEI ||
 
                                        xOpcode==`BLTI || xOpcode==`BLEI || xOpcode==`BGTI || xOpcode==`BGEI ||
 
                                        xOpcode==`BLTUI || xOpcode==`BLEUI || xOpcode==`BGTUI || xOpcode==`BGEUI)
 
                                ;
 
wire isxBranch = isxBranchI || xOpcode==`TRAPcc || xOpcode==`TRAPcci || xOpcode==`BTRI || xOpcode==`BTRR;
 
 
 
reg [1:0] xbits_new;
 
 
 
always @(takb or bht_xbits)
Raptor64_BranchHistory u6
if (takb) begin
(
        if (bht_xbits != 2'd1)
        .rst(rst_i),
                xbits_new <= bht_xbits + 2'd1;
        .clk(clk),
        else
        .advanceX(advanceX),
                xbits_new <= bht_xbits;
        .xIR(xIR),
end
        .pc(pc),
else begin
        .xpc(xpc),
        if (bht_xbits != 2'd2)
        .takb(takb),
                xbits_new <= bht_xbits - 2'd1;
        .predict_taken(predict_taken)
        else
);
                xbits_new <= bht_xbits;
 
end
 
 
 
// For simulation only, initialize the history table to zeros.
 
// In the real world we don't care.
 
initial begin
 
        for (n = 0; n < 256; n = n + 1)
 
                branch_history_table[n] = 0;
 
end
 
`endif
`endif
 
 
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Evaluate branch conditions.
// Evaluate branch conditions.
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
Line 1369... Line 908...
`BLTUI: takb = ltui;
`BLTUI: takb = ltui;
`BLEUI: takb = ltui|eqi;
`BLEUI: takb = ltui|eqi;
`BGTUI: takb = !(ltui|eqi);
`BGTUI: takb = !(ltui|eqi);
`BGEUI: takb = !ltui;
`BGEUI: takb = !ltui;
`BTRI:
`BTRI:
        case(xIR[24:18])
        case(xIR[24:20])
        `BRA:   takb = 1'b1;
        `BRA:   takb = 1'b1;
        `BRN:   takb = 1'b0;
        `BRN:   takb = 1'b0;
        `BEQ:   takb = eqi;
        `BEQ:   takb = eqi;
        `BNE:   takb = !eqi;
        `BNE:   takb = !eqi;
        `BLT:   takb = lti;
        `BLT:   takb = lti;
Line 1427... Line 966...
cntlo64 u13 (.clk(clk), .i(a),  .o(cntloo) );
cntlo64 u13 (.clk(clk), .i(a),  .o(cntloo) );
 
 
reg [1:0] shftop;
reg [1:0] shftop;
wire [63:0] shfto;
wire [63:0] shfto;
reg [63:0] masko;
reg [63:0] masko;
//wire shl = (xOpcode==`RR && xFunc==`SHL) || (xOpcode==`SHFTI && xFunc==`SHLI);
reg [63:0] bfextd;
//wire shr = (xOpcode==`RR && xFunc==`SHR) || (xOpcode==`SHFTI && xFunc==`SHRI);
 
//wire shru = (xOpcode==`RR && xFunc==`SHRU) || (xOpcode==`SHFTI && xFunc==`SHRUI);
 
//wire rol = (xOpcode==`RR && xFunc==`ROL) || (xOpcode==`SHFTI && xFunc==`ROLI);
 
//wire ror = (xOpcode==`RR && xFunc==`ROR) || (xOpcode==`SHFTI && xFunc==`RORI);
 
//wire rolam = (xOpcode==`RR && xFunc==`ROLAM) || (xOpcode==`SHFTI && xFunc==`ROLAMI);
 
//
 
//always @(shl,shr,shru,rol,ror,rolam)
 
//      if (shl) shftop = 2'b00;
 
//      else if (rol | ror | rolam) shftop = 2'b01;
 
//      else if (shru) shftop = 2'b10;
 
//      else if (shr) shftop = 2'b11;
 
//      else shftop = 2'b01;
 
 
 
wire [127:0] shlxo = {64'd0,a} << b[5:0];
wire [127:0] shlxo = {64'd0,a} << b[5:0];
wire [127:0] shruxo = {a,64'd0} >> b[5:0];
wire [127:0] shruxo = {a,64'd0} >> b[5:0];
wire [63:0] shlo = shlxo[63:0];
wire [63:0] shlo = shlxo[63:0];
wire [63:0] shruo = shruxo[127:64];
wire [63:0] shruo = shruxo[127:64];
wire [63:0] rolo = {shlo[127:64]|shlo[63:0]};
wire [63:0] rolo = {shlxo[127:64]|shlxo[63:0]};
wire [63:0] roro = {shruo[127:64]|shruo[63:0]};
wire [63:0] roro = {shruxo[127:64]|shruxo[63:0]};
wire [63:0] shro = ~(~a >> b[5:0]);
wire [63:0] shro = ~(~a >> b[5:0]);
// generate mask
// generate mask
wire [5:0] mb = xIR[12:7];
wire [5:0] mb = xIR[12:7];
wire [5:0] me = xIR[18:13];
wire [5:0] me = xIR[18:13];
integer nn;
integer nn;
always @(mb or me or nn)
always @(mb or me or nn)
        for (nn = 0; nn < 64; nn = nn + 1)
        for (nn = 0; nn < 64; nn = nn + 1)
                masko[nn] <= (nn >= mb) ^ (nn <= me) ^ (me >= mb);
                masko[nn] <= (nn >= mb) ^ (nn <= me) ^ (me >= mb);
/*
 
shiftAndMask #(64) u15
 
(
 
        .op(shftop),
 
        .oz(1'b0),              // zero the output
 
        .a(a),
 
        .b(b[5:0]),
 
        .mb(xIR[12:7]),
 
        .me(xIR[18:13]),
 
        .o(shfto),
 
        .mo(masko)
 
);
 
 
 
*/
 
always @(xOpcode or xFunc or a or b or imm or as or bs or imms or xpc or
always @(xOpcode or xFunc or a or b or imm or as or bs or imms or xpc or
        sqrt_out or cntlzo or cntloo or tick or ipc or tba or AXC or
        sqrt_out or cntlzo or cntloo or tick or ipc or tba or AXC or
        lt or eq or ltu or mult_out or lti or eqi or ltui or xIR or div_q or div_r or
        lt or eq or ltu or mult_out or lti or eqi or ltui or xIR or div_q or div_r or
        shfto or masko or bcdaddo or bcdsubo or fpLooOut or fpZLOut
        shfto or masko or bcdaddo or bcdsubo or fpLooOut or fpZLOut or
`ifdef TLB
`ifdef TLB
        or Wired or Index or Random or TLBPhysPage0 or TLBPhysPage1 or TLBVirtPage or TLBASID or
        PageTableAddr or BadVAddr or ASID or tlbo or
        PageTableAddr or BadVAddr or ASID or TLBPageMask
 
`endif
`endif
        or ASID or EPC or mutex_gate or IPC or CauseCode or TBA or xAXC or nonICacheSeg or rm or
        ASID or EPC or mutex_gate or IPC or CauseCode or TBA or xAXC or nonICacheSeg or rm or
        rando
        rando
)
)
casex(xOpcode)
casex(xOpcode)
`R:
`R:
        casex(xFunc)
        casex(xFunc)
Line 1513... Line 1025...
                                        ;
                                        ;
        `SEXT8:         xData = {{56{a[7]}},a[7:0]};
        `SEXT8:         xData = {{56{a[7]}},a[7:0]};
        `SEXT16:        xData = {{48{a[15]}},a[15:0]};
        `SEXT16:        xData = {{48{a[15]}},a[15:0]};
        `SEXT32:        xData = {{32{a[31]}},a[31:0]};
        `SEXT32:        xData = {{32{a[31]}},a[31:0]};
 
 
 
        `MTSPR:         xData = a;
        `MFSPR:
        `MFSPR:
                case(xIR[12:7])
                case(xIR[12:7])
`ifdef TLB
`ifdef TLB
                `Wired:                 xData = Wired;
                `TLBWired:              xData = tlbo;
                `TLBIndex:              xData = Index;
                `TLBIndex:              xData = tlbo;
                `TLBRandom:             xData = Random;
                `TLBRandom:             xData = tlbo;
                `TLBPhysPage0:  xData = {TLBPhysPage0,13'd0};
                `TLBPhysPage0:  xData = tlbo;
                `TLBPhysPage1:  xData = {TLBPhysPage1,13'd0};
                `TLBPhysPage1:  xData = tlbo;
                `TLBVirtPage:   xData = {TLBVirtPage,13'd0};
                `TLBVirtPage:   xData = tlbo;
                `TLBPageMask:   xData = {TLBPageMask,13'd0};
                `TLBPageMask:   xData = tlbo;
                `TLBASID:       begin
                `TLBASID:       begin
                                        xData = 65'd0;
                                        xData = 65'd0;
                                        xData[0] = TLBValid;
                                        xData[0] = tlbo[0];
                                        xData[1] = TLBD;
                                        xData[1] = tlbo[1];
                                        xData[2] = TLBG;
                                        xData[2] = tlbo[2];
                                        xData[15:8] = TLBASID;
                                        xData[15:8] = tlbo[15:8];
                                        end
                                        end
                `PageTableAddr: xData = {PageTableAddr,13'd0};
                `PageTableAddr: xData = {PageTableAddr,13'd0};
                `BadVAddr:              xData = {BadVAddr,13'd0};
                `BadVAddr:              xData = {BadVAddr,13'd0};
`endif
`endif
                `ASID:                  xData = ASID;
                `ASID:                  xData = ASID;
Line 1543... Line 1056...
                `TBA:                   xData = TBA;
                `TBA:                   xData = TBA;
                `AXC:                   xData = xAXC;
                `AXC:                   xData = xAXC;
                `NON_ICACHE_SEG:        xData = nonICacheSeg;
                `NON_ICACHE_SEG:        xData = nonICacheSeg;
                `FPCR:                  xData = FPC;
                `FPCR:                  xData = FPC;
                `RAND:                  xData = rando;
                `RAND:                  xData = rando;
                `SRANDZ:                xData = {m_z2,m_z1};
                `SRAND1:                xData = {m_z2,m_z1};
                `SRANDW:                xData = {m_w2,m_w1};
                `SRAND2:                xData = {m_w2,m_w1};
                `INSNKEY:               xData = insnkey;
                `INSNKEY:               xData = insnkey;
                default:        xData = 65'd0;
                default:        xData = 65'd0;
                endcase
                endcase
        `OMG:           xData = mutex_gate[a[5:0]];
        `OMG:           xData = mutex_gate[a[5:0]];
        `CMG:           xData = mutex_gate[a[5:0]];
        `CMG:           xData = mutex_gate[a[5:0]];
Line 1614... Line 1127...
        `ROLAMI:        xData = rolo & masko;
        `ROLAMI:        xData = rolo & masko;
        `BFINS:         begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? rolo[n] : b[n]; xData[64] = 1'b0; end
        `BFINS:         begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? rolo[n] : 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
        `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
 
        `BFEXT:         begin for (n = 0; n < 64; n = n + 1) bfextd[n] = masko[n] ? b[n] : 1'b0; xData = bfextd >> mb; end
        default:        xData = 65'd0;
        default:        xData = 65'd0;
        endcase
        endcase
`BTRR:
`BTRR:
        case(xFunc5)
        case(xFunc5)
        `LOOP:  xData = b - 64'd1;
        `LOOP:  xData = b - 64'd1;
Line 1656... Line 1170...
                xData = a + imm;
                xData = a + imm;
`SW,`SH,`SC,`SB,`SWC,`SF,`SFD,`SP,`SFP,`SFDP:
`SW,`SH,`SC,`SB,`SWC,`SF,`SFD,`SP,`SFP,`SFDP:
                xData = a + imm;
                xData = a + imm;
`MEMNDX:
`MEMNDX:
                xData = a + b + imm;
                xData = a + b + imm;
`SM:    xData = a + {popcnt36(xIR[31:0]),3'b000};
`SM:    xData = a + {popcnt36(xIR[31:0]),3'b000}-64'd8;
`LM:    xData = a + {popcnt36(xIR[31:0]),3'b000};
`LM:    xData = a + {popcnt36(xIR[31:0]),3'b000}-64'd8;
`TRAPcc:        xData = fnIncPC(xpc);
`TRAPcc:        xData = fnIncPC(xpc);
`TRAPcci:       xData = fnIncPC(xpc);
`TRAPcci:       xData = fnIncPC(xpc);
`CALL:          xData = fnIncPC(xpc);
`CALL:          xData = fnIncPC(xpc);
`JAL:           xData = xpc + {xIR[29:25],2'b00};
`JAL:           xData = xpc + {xIR[29:25],2'b00};
`RET:   xData = a + imm;
`RET:   xData = a + imm;
Line 1747... Line 1261...
wire xIsIO =
wire xIsIO =
        xIsIn ||
        xIsIn ||
        xOpcode==`OUTW || xOpcode==`OUTH || xOpcode==`OUTC || xOpcode==`OUTB
        xOpcode==`OUTW || xOpcode==`OUTH || xOpcode==`OUTC || xOpcode==`OUTB
        ;
        ;
 
 
reg m1IsLoad,m2IsLoad;
 
reg m1IsIO;
 
reg m1IsStore,m2IsStore,wIsStore;
 
 
 
 
 
wire xIsFPLoo = xOpcode==`FPLOO;
wire xIsFPLoo = xOpcode==`FPLOO;
wire xIsFP = xOpcode==`FP;
wire xIsFP = xOpcode==`FP;
wire xneedBus = xIsIO;
wire xneedBus = xIsIO;
wire m1needBus = (m1IsLoad & !m1IsCacheElement) || m1IsStore || m1IsIO;
wire m1needBus = (m1IsLoad & !m1IsCacheElement) || m1IsStore || m1IsIO;
Line 1771... Line 1281...
                                ( m1IsLoad & m1IsCacheElement & (m2IsStore|wIsStore))   // wait for a preceding store to complete
                                ( m1IsLoad & m1IsCacheElement & (m2IsStore|wIsStore))   // wait for a preceding store to complete
                                ;
                                ;
wire StallM2 =  icaccess|dcaccess;
wire StallM2 =  icaccess|dcaccess;
 
 
wire advanceT = !resetA;
wire advanceT = !resetA;
wire advanceW = advanceT;
assign advanceW = advanceT;
wire advanceM2 = advanceW &&
wire advanceM2 = advanceW &&
                                        ((m2IsLoad || m2IsStore) ? (ack_i|err_i) : 1'b1) &&
                                        ((m2IsLoad || m2IsStore) ? (ack_i|err_i) : 1'b1) &&
                                        !StallM2
                                        !StallM2
                                        ;
                                        ;
wire advanceM1 = advanceM2 &
assign advanceM1 = advanceM2 &
                                        (m1IsIO ? (ack_i|err_i) : 1'b1) &
                                        (m1IsIO ? (ack_i|err_i) : 1'b1) &
                                        ((m1IsLoad & m1IsCacheElement) ? dhit : 1'b1) &
                                        ((m1IsLoad & m1IsCacheElement) ? dhit : 1'b1) &
                                        !StallM1
                                        !StallM1
                                        ;
                                        ;
wire advanceX = advanceM1 & (
assign advanceX = advanceM1 & (
                                        xIsSqrt ? sqrt_done :
                                        xIsSqrt ? sqrt_done :
                                        xIsMult ? mult_done :
                                        xIsMult ? mult_done :
                                        xIsDiv ? div_done :
                                        xIsDiv ? div_done :
                                        xIsFPLoo ? fpLooDone :
                                        xIsFPLoo ? fpLooDone :
                                        xIsFP ? fltdone :
                                        xIsFP ? fltdone :
Line 1895... Line 1405...
                else
                else
                        ndIR[31] <= 1'b0;
                        ndIR[31] <= 1'b0;
        end
        end
end
end
 
 
 
reg m1clkoff,m2clkoff,m3clkoff,m4clkoff,wclkoff;
 
reg dFip,xFip,m1Fip,m2Fip,m3Fip,m4Fip,wFip;
 
reg cyc1;
 
 
//---------------------------------------------------------
//---------------------------------------------------------
// Register file.
// Register file.
//---------------------------------------------------------
//---------------------------------------------------------
 
 
syncRam512x64_1rw3r u5
wire [63:0] nxt_a, nxt_b, nxt_c;
 
 
 
Raptor64_regfile u5
(
(
        .wrst(1'b0),
        .clk(clk),
        .wclk(clk),
        .advanceR(advanceR),
        .wce(advanceW),
        .advanceW(advanceW),
        .we(1'b1),
        .dRa(dRa),
        .wadr(wRt),
        .dRb(dRb),
        .i(wData),
        .dRc(dRc),
        .wo(),
        .dpc(dpc),
 
        .xRt(xRt),
        .rrsta(1'b0),
        .m1Rt(m1Rt),
        .rclka(~clk),
        .m2Rt(m2Rt),
        .rcea(advanceR),
        .wRt(wRt),
        .radra(dRa),
        .tRt(tRt),
        .roa(rfoa),
        .xData(xData[63:0]),
 
        .m1Data(m1Data),
        .rrstb(1'b0),
        .m2Data(m2Data),
        .rclkb(~clk),
        .wData(wData),
        .rceb(advanceR),
        .tData(tData),
        .radrb(dRb),
        .nxt_a(nxt_a),
        .rob(rfob),
        .nxt_b(nxt_b),
 
        .nxt_c(nxt_c)
        .rrstc(1'b0),
 
        .rclkc(~clk),
 
        .rcec(advanceR),
 
        .radrc(dRc),
 
        .roc(rfoc)
 
);
);
 
 
 
 
reg m1clkoff,m2clkoff,m3clkoff,m4clkoff,wclkoff;
 
reg dFip,xFip,m1Fip,m2Fip,m3Fip,m4Fip,wFip;
 
reg cyc1;
 
 
 
reg [63:0] nxt_a;
 
always @(dRa or xData or m1Data or m2Data or wData or tData or rfoa)
 
        casex(dRa)
 
        9'bxxxx00000:   nxt_a <= 64'd0;
 
        xRt:    nxt_a <= xData;
 
        m1Rt:   nxt_a <= m1Data;
 
        m2Rt:   nxt_a <= m2Data;
 
        wRt:    nxt_a <= wData;
 
        tRt:    nxt_a <= tData;
 
        default:        nxt_a <= rfoa;
 
        endcase
 
 
 
reg [63:0] nxt_b;
 
always @(dRb or xData or m1Data or m2Data or wData or tData or rfob)
 
        casex(dRb)
 
        9'bxxxx00000:   nxt_b <= 64'd0;
 
        xRt:    nxt_b <= xData;
 
        m1Rt:   nxt_b <= m1Data;
 
        m2Rt:   nxt_b <= m2Data;
 
        wRt:    nxt_b <= wData;
 
        tRt:    nxt_b <= tData;
 
        default:        nxt_b <= rfob;
 
        endcase
 
 
 
reg [63:0] nxt_c;
 
always @(dRc or xData or m1Data or m2Data or wData or tData or rfoc)
 
        casex(dRc)
 
        9'bxxxx00000:   nxt_c <= 64'd0;
 
        xRt:    nxt_c <= xData;
 
        m1Rt:   nxt_c <= m1Data;
 
        m2Rt:   nxt_c <= m2Data;
 
        wRt:    nxt_c <= wData;
 
        tRt:    nxt_c <= tData;
 
        default:        nxt_c <= rfoc;
 
        endcase
 
 
 
always @(posedge clk)
always @(posedge clk)
if (rst_i) begin
if (rst_i) begin
        bte_o <= 2'b00;
        bte_o <= 2'b00;
        cti_o <= 3'b000;
        cti_o <= 3'b000;
        cyc_o <= 1'b0;
        cyc_o <= 1'b0;
Line 2038... Line 1508...
        a <= 64'd0;
        a <= 64'd0;
        b <= 64'd0;
        b <= 64'd0;
        imm <= 64'd0;
        imm <= 64'd0;
        xRt <= 9'd0;
        xRt <= 9'd0;
        clk_en <= 1'b1;
        clk_en <= 1'b1;
`ifdef TLB
 
        Random <= 4'hF;
 
        Wired <= 4'd0;
 
`endif
 
        StatusEXL <= 1'b1;
        StatusEXL <= 1'b1;
        StatusHWI <= 1'b0;
        StatusHWI <= 1'b0;
        resetA <= 1'b1;
        resetA <= 1'b1;
        mutex_gate <= 64'h0;
        mutex_gate <= 64'h0;
`ifndef BRANCH_PREDICTION_SIMPLE
 
        gbl_branch_hist <= 3'b000;
 
`endif
 
        dcache_on <= 1'b0;
        dcache_on <= 1'b0;
        ICacheOn <= 1'b0;
        ICacheOn <= 1'b0;
        ibuftag0 <= 64'h0;
        ibuftag0 <= 64'h0;
        ibuftag1 <= 64'h0;
        ibuftag1 <= 64'h0;
        m1IsCacheElement <= 1'b0;
        m1IsCacheElement <= 1'b0;
Line 2083... Line 1546...
                dtinit <= 1'b0;
                dtinit <= 1'b0;
                resetA <= 1'b0;
                resetA <= 1'b0;
        end
        end
end
end
 
 
`ifdef TLB
 
if (Random==Wired)
 
        Random <= 3'd7;
 
else
 
        Random <= Random - 3'd1;
 
`endif
 
 
 
tick <= tick + 64'd1;
tick <= tick + 64'd1;
 
 
prev_nmi <= nmi_i;
prev_nmi <= nmi_i;
if (!prev_nmi & nmi_i)
if (!prev_nmi & nmi_i)
        nmi_edge <= 1'b1;
        nmi_edge <= 1'b1;
Line 2173... Line 1629...
//---------------------------------------------------------
//---------------------------------------------------------
// MEMORY:
// MEMORY:
//---------------------------------------------------------
//---------------------------------------------------------
if (advanceM2) begin
if (advanceM2) begin
        wIsStore <= m2IsStore;
        wIsStore <= m2IsStore;
 
        wIR <= m2IR;
        wOpcode <= m2Opcode;
        wOpcode <= m2Opcode;
 
        wFunc <= m2Func;
        wData <= m2Data;
        wData <= m2Data;
        whwxtype <= m2hwxtype;
        whwxtype <= m2hwxtype;
        wextype <= (m2IsLoad|m2IsStore)&err_i ? `EX_DBERR : m2extype;
        wextype <= (m2IsLoad|m2IsStore)&err_i ? `EX_DBERR : m2extype;
        if (m2extype==`EX_IRQ)
        if (m2extype==`EX_IRQ)
                $display("m2extype=IRQ");
                $display("m2extype=IRQ");
Line 2315... Line 1773...
// finished in this stage. We switch the opcode to 'NOPI'
// finished in this stage. We switch the opcode to 'NOPI'
// to cause the pipeline to advance as if a NOPs were
// to cause the pipeline to advance as if a NOPs were
// present.
// present.
//---------------------------------------------------------
//---------------------------------------------------------
if (advanceM1) begin
if (advanceM1) begin
 
        m2IR <= m1IR;
        m2Opcode <= m1Opcode;
        m2Opcode <= m1Opcode;
        m2Func <= m1Func;
        m2Func <= m1Func;
        m2IsLoad <= m1IsLoad;
        m2IsLoad <= m1IsLoad;
        m2IsStore <= m1IsStore;
        m2IsStore <= m1IsStore;
        m2IsCnt <= m1IsCnt;
        m2IsCnt <= m1IsCnt;
Line 2369... Line 1828...
                                        m2IsLoad <= 1'b0;
                                        m2IsLoad <= 1'b0;
                                        m2Opcode <= `NOPI;
                                        m2Opcode <= `NOPI;
                                        m2Data <= {cdat[63:2],2'b00};
                                        m2Data <= {cdat[63:2],2'b00};
                                end
                                end
                                end
                                end
`ifdef TLB
 
                        `TLBP:
 
                                begin
 
                                        Index[63] <= ~|DMatch;
 
                                end
 
                        `TLBR:
 
                                begin
 
                                        TLBPageMask <= ITLBPageMask[i];
 
                                        TLBVirtPage <= ITLBVirtPage[i];
 
                                        TLBPhysPage0 <= ITLBPhysPage0[i];
 
                                        TLBPhysPage1 <= ITLBPhysPage1[i];
 
                                        TLBASID <= ITLBASID[i];
 
                                        TLBG <= ITLBG[i];
 
                                        TLBD <= ITLBD[i];
 
                                        TLBValid <= ITLBValid[i];
 
                                end
 
                        `TLBWI,`TLBWR:
 
                                begin
 
                                        ITLBValid[i] <= TLBValid;
 
                                        ITLBVirtPage[i] <= TLBVirtPage;
 
                                        ITLBPhysPage0[i] <= TLBPhysPage0;
 
                                        ITLBPhysPage1[i] <= TLBPhysPage1;
 
                                        ITLBPageMask[i] <= TLBPageMask;
 
                                        ITLBASID[i] <= TLBASID;
 
                                        ITLBD[i] <= TLBD;
 
                                        ITLBG[i] <= TLBG;
 
                                end
 
`endif
 
                        endcase
                        endcase
                `INW:
                `INW:
                        begin
                        begin
                                cyc_o <= 1'b0;
                                cyc_o <= 1'b0;
                                stb_o <= 1'b0;
                                stb_o <= 1'b0;
Line 2678... Line 2109...
                `SW,`SM,`SFD,`SSW,`SP,`SFDP:
                `SW,`SM,`SFD,`SSW,`SP,`SFDP:
                        begin
                        begin
                                $display("SW/SM");
                                $display("SW/SM");
                                m2Addr <= {pea[63:3],3'b000};
                                m2Addr <= {pea[63:3],3'b000};
                                wrhit <= dhit;
                                wrhit <= dhit;
`ifdef TLB
 
                                if (!m1UnmappedDataArea & !q[3])
 
                                        ITLBD[{q[2:0],pea[15:13]}] <= 1'b1;
 
`endif
 
`ifdef ADDRESS_RESERVATION
`ifdef ADDRESS_RESERVATION
                                if (resv_address==pea[63:5])
                                if (resv_address==pea[63:5])
                                        resv_address <= 59'd0;
                                        resv_address <= 59'd0;
`endif
`endif
                                cyc_o <= 1'b1;
                                cyc_o <= 1'b1;
Line 2698... Line 2125...
 
 
                `SH,`SF,`SSH,`SFP:
                `SH,`SF,`SSH,`SFP:
                        begin
                        begin
                                wrhit <= dhit;
                                wrhit <= dhit;
                                m2Addr <= {pea[63:2],2'b00};
                                m2Addr <= {pea[63:2],2'b00};
`ifdef TLB
 
                                if (!m1UnmappedDataArea & !q[3])
 
                                        ITLBD[{q[2:0],pea[15:13]}] <= 1'b1;
 
`endif
 
`ifdef ADDRESS_RESERVATION
`ifdef ADDRESS_RESERVATION
                                if (resv_address==pea[63:5])
                                if (resv_address==pea[63:5])
                                        resv_address <= 59'd0;
                                        resv_address <= 59'd0;
`endif
`endif
                                cyc_o <= 1'b1;
                                cyc_o <= 1'b1;
Line 2719... Line 2142...
                `SC:
                `SC:
                        begin
                        begin
                                $display("Storing char to %h, ea=%h",pea,ea);
                                $display("Storing char to %h, ea=%h",pea,ea);
                                wrhit <= dhit;
                                wrhit <= dhit;
                                m2Addr <= {pea[63:2],2'b00};
                                m2Addr <= {pea[63:2],2'b00};
`ifdef TLB
 
                                if (!m1UnmappedDataArea & !q[3])
 
                                        ITLBD[{q[2:0],pea[15:13]}] <= 1'b1;
 
`endif
 
`ifdef ADDRESS_RESERVATION
`ifdef ADDRESS_RESERVATION
                                if (resv_address==pea[63:5])
                                if (resv_address==pea[63:5])
                                        resv_address <= 59'd0;
                                        resv_address <= 59'd0;
`endif
`endif
                                cyc_o <= 1'b1;
                                cyc_o <= 1'b1;
Line 2748... Line 2167...
                                m2Addr <= {pea[63:2],2'b00};
                                m2Addr <= {pea[63:2],2'b00};
`ifdef ADDRESS_RESERVATION
`ifdef ADDRESS_RESERVATION
                                if (resv_address==pea[63:5])
                                if (resv_address==pea[63:5])
                                        resv_address <= 59'd0;
                                        resv_address <= 59'd0;
`endif
`endif
`ifdef TLB
 
                                if (!m1UnmappedDataArea & !q[3])
 
                                        ITLBD[{q[2:0],pea[15:13]}] <= 1'b1;
 
`endif
 
                                cyc_o <= 1'b1;
                                cyc_o <= 1'b1;
                                stb_o <= 1'b1;
                                stb_o <= 1'b1;
                                we_o <= 1'b1;
                                we_o <= 1'b1;
                                case(pea[2:0])
                                case(pea[2:0])
                                3'b000: sel_o <= 8'b00000001;
                                3'b000: sel_o <= 8'b00000001;
Line 2774... Line 2189...
`ifdef ADDRESS_RESERVATION
`ifdef ADDRESS_RESERVATION
                `SWC:
                `SWC:
                        begin
                        begin
                                rsf <= 1'b0;
                                rsf <= 1'b0;
                                if (resv_address==pea[63:5]) begin
                                if (resv_address==pea[63:5]) begin
`ifdef TLB
 
                                        if (!m1UnmappedDataArea & !q[3])
 
                                                ITLBD[{q[2:0],pea[15:13]}] <= 1'b1;
 
`endif
 
                                        wrhit <= dhit;
                                        wrhit <= dhit;
                                        m2Addr <= {pea[63:3],3'b00};
                                        m2Addr <= {pea[63:3],3'b00};
                                        cyc_o <= 1'b1;
                                        cyc_o <= 1'b1;
                                        stb_o <= 1'b1;
                                        stb_o <= 1'b1;
                                        we_o <= 1'b1;
                                        we_o <= 1'b1;
Line 2803... Line 2214...
// EXECUTE:
// EXECUTE:
// - perform datapath operation
// - perform datapath operation
// - perform virtual to physical address translation.
// - perform virtual to physical address translation.
//---------------------------------------------------------
//---------------------------------------------------------
if (advanceX) begin
if (advanceX) begin
 
        m1IR <= xIR;
        m1hwxtype <= xhwxtype;
        m1hwxtype <= xhwxtype;
        m1Fip <= xFip;
        m1Fip <= xFip;
        m1extype <= xextype;
        m1extype <= xextype;
        if (xextype==`EX_IRQ)
        if (xextype==`EX_IRQ)
                $display("xextype=IRQ");
                $display("xextype=IRQ");
Line 2866... Line 2278...
                                begin
                                begin
                                ea <= {TBA[63:12],xIR[15:7],3'b000};
                                ea <= {TBA[63:12],xIR[15:7],3'b000};
                                end
                                end
`ifdef TLB
`ifdef TLB
                `TLBP:  ea <= TLBVirtPage;
                `TLBP:  ea <= TLBVirtPage;
                `TLBR,`TLBWI:
 
                        begin
 
                                i <= {Index[2:0],TLBVirtPage[15:13]};
 
                        end
 
                `TLBWR:
 
                        begin
 
                                i <= {Random,TLBVirtPage[15:13]};
 
                        end
 
`endif
`endif
                default:        ;
                default:        ;
                endcase
                endcase
        `R:
        `R:
                case(xFunc)
                case(xFunc)
                `MTSPR:
                `MTSPR:
                        case(xIR[12:7])
                        case(xIR[12:7])
`ifdef TLB
`ifdef TLB
                        `Wired:                 Wired <= a[2:0];
 
                        `TLBIndex:              Index <= a[2:0];
 
                        `TLBVirtPage:   TLBVirtPage <= a[63:13];
 
                        `TLBPhysPage0:  TLBPhysPage0 <= a[63:13];
 
                        `TLBPhysPage1:  TLBPhysPage1 <= a[63:13];
 
                        `TLBPageMask:   TLBPageMask <= a[24:13];
 
                        `TLBASID:               begin
 
                                                        TLBValid <= a[0];
 
                                                        TLBD <= a[1];
 
                                                        TLBG <= a[2];
 
                                                        TLBASID <= a[15:8];
 
                                                        end
 
                        `PageTableAddr: PageTableAddr <= a[63:13];
                        `PageTableAddr: PageTableAddr <= a[63:13];
                        `BadVAddr:              BadVAddr <= a[63:13];
                        `BadVAddr:              BadVAddr <= a[63:13];
`endif
`endif
                        `ASID:                  ASID <= a[7:0];
                        `ASID:                  ASID <= a[7:0];
                        `EPC:                   EPC <= a;
                        `EPC:                   EPC <= a;
                        `TBA:                   TBA <= {a[63:12],12'h000};
                        `TBA:                   TBA <= {a[63:12],12'h000};
                        `AXC:                   AXC <= a[3:0];
                        `AXC:                   AXC <= a[3:0];
                        `NON_ICACHE_SEG:        nonICacheSeg <= a[63:32];
                        `NON_ICACHE_SEG:        nonICacheSeg <= a[63:32];
                        `FPCR:                  rm <= a[31:30];
                        `FPCR:                  rm <= a[31:30];
                        `IPC:                   IPC <= a;
                        `IPC:                   IPC <= a;
                        `SRANDZ:                begin
                        `SRAND1:                begin
                                                        m_z1 <= a[31:0];
                                                        m_z1 <= a[31:0];
                                                        m_z2 <= a[63:32];
                                                        m_z2 <= a[63:32];
                                                        end
                                                        end
                        `SRANDW:                begin
                        `SRAND2:                begin
                                                        m_w1 <= a[31:0];
                                                        m_w1 <= a[31:0];
                                                        m_w2 <= a[63:32];
                                                        m_w2 <= a[63:32];
                                                        end
                                                        end
                        `INSNKEY:               insnkey <= a[41:0];
                        `INSNKEY:               insnkey <= a[41:0];
                        default:        ;
                        default:        ;
Line 3101... Line 2493...
                                end
                                end
                default:        ;
                default:        ;
                endcase
                endcase
        end
        end
`endif
`endif
`ifndef BRANCH_PREDICTION_SIMPLE
 
        // Update the branch history
 
        if (isxBranch) begin
 
                gbl_branch_hist <= {gbl_branch_hist,takb};
 
                branch_history_table[bht_wa] <= xbits_new;
 
        end
 
`endif
 
end
end
 
 
//---------------------------------------------------------
//---------------------------------------------------------
// RFETCH:
// RFETCH:
// Register fetch stage
// Register fetch stage
Line 3372... Line 2757...
                if ((iOpcode==`SP || iOpcode==`LP || iOpcode==`SFP || iOpcode==`LFP || iOpcode==`SFDP || iOpcode==`LFDP) && !insn[25])
                if ((iOpcode==`SP || iOpcode==`LP || iOpcode==`SFP || iOpcode==`LFP || iOpcode==`SFDP || iOpcode==`LFDP) && !insn[25])
                        ;
                        ;
                else if ((iOpcode==`LM || iOpcode==`SM) && insn[31:0]!=32'd0)
                else if ((iOpcode==`LM || iOpcode==`SM) && insn[31:0]!=32'd0)
                        ;
                        ;
                else begin
                else begin
                        if (pc!=64'd3)
                        if (pc!=64'hC)
                                pc <= fnIncPC(pc);
                                pc <= fnIncPC(pc);
                end
                end
                case(iOpcode)
                case(iOpcode)
                `MISC:
                `MISC:
                        case(iFunc)
                        case(iFunc)
Line 3472... Line 2857...
                                dpcv <= 1'b0;
                                dpcv <= 1'b0;
                        end
                        end
                `SYSJMP:
                `SYSJMP:
                        begin
                        begin
                                StatusEXL <= 1'b1;
                                StatusEXL <= 1'b1;
                                pc <= 64'd3;
                                pc <= 64'hC;
                                dIR <= `NOP_INSN;
                                dIR <= `NOP_INSN;
                                xIR <= `NOP_INSN;
                                xIR <= `NOP_INSN;
                                xRt <= 9'd0;
                                xRt <= 9'd0;
                                xpcv <= 1'b0;
                                xpcv <= 1'b0;
                                dpcv <= 1'b0;
                                dpcv <= 1'b0;
                        end
                        end
                `SYSCALL:
                `SYSCALL:
                        begin
                        begin
                                StatusEXL <= 1'b1;
                                StatusEXL <= 1'b1;
                                EPC <= fnIncPC(xpc);
                                EPC <= fnIncPC(xpc);
                                pc <= 64'd3;
                                pc <= 64'hC;
                                dIR <= `NOP_INSN;
                                dIR <= `NOP_INSN;
                                xIR <= `NOP_INSN;
                                xIR <= `NOP_INSN;
                                xRt <= 9'd0;
                                xRt <= 9'd0;
                                xpcv <= 1'b0;
                                xpcv <= 1'b0;
                                dpcv <= 1'b0;
                                dpcv <= 1'b0;
Line 3645... Line 3030...
        `TRAPcc,`TRAPcci:
        `TRAPcc,`TRAPcci:
                if (takb) begin
                if (takb) begin
                        StatusEXL <= 1'b1;
                        StatusEXL <= 1'b1;
                        CauseCode <= `EX_TRAP;
                        CauseCode <= `EX_TRAP;
                        xextype <= `EX_TRAP;
                        xextype <= `EX_TRAP;
                        pc <= 64'd3;
                        pc <= 64'hC;
                        dIR <= `NOP_INSN;
                        dIR <= `NOP_INSN;
                        xIR <= `NOP_INSN;
                        xIR <= `NOP_INSN;
                        xRt <= 9'd0;
                        xRt <= 9'd0;
                        xpcv <= 1'b0;
                        xpcv <= 1'b0;
                        dpcv <= 1'b0;
                        dpcv <= 1'b0;
Line 3660... Line 3045...
        if (dbz_error) begin
        if (dbz_error) begin
                $display("Divide by zero error");
                $display("Divide by zero error");
                CauseCode <= `EX_DBZ;
                CauseCode <= `EX_DBZ;
                xextype <= `EX_DBZ;
                xextype <= `EX_DBZ;
                StatusEXL <= 1'b1;
                StatusEXL <= 1'b1;
                pc <= 64'd3;
                pc <= 64'hC;
                dIR <= `NOP_INSN;
                dIR <= `NOP_INSN;
                xIR <= `NOP_INSN;
                xIR <= `NOP_INSN;
                xRt <= 9'd0;
                xRt <= 9'd0;
                xpcv <= 1'b0;
                xpcv <= 1'b0;
                dpcv <= 1'b0;
                dpcv <= 1'b0;
Line 3672... Line 3057...
        else if (ovr_error) begin
        else if (ovr_error) begin
                $display("Overflow error");
                $display("Overflow error");
                CauseCode <= `EX_OFL;
                CauseCode <= `EX_OFL;
                xextype <= `EX_OFL;
                xextype <= `EX_OFL;
                StatusEXL <= 1'b1;
                StatusEXL <= 1'b1;
                pc <= 64'd3;
                pc <= 64'hC;
                dIR <= `NOP_INSN;
                dIR <= `NOP_INSN;
                xIR <= `NOP_INSN;
                xIR <= `NOP_INSN;
                xRt <= 9'd0;
                xRt <= 9'd0;
                xpcv <= 1'b0;
                xpcv <= 1'b0;
                dpcv <= 1'b0;
                dpcv <= 1'b0;
Line 3684... Line 3069...
        else if (priv_violation) begin
        else if (priv_violation) begin
                $display("Priviledge violation");
                $display("Priviledge violation");
                CauseCode <= `EX_PRIV;
                CauseCode <= `EX_PRIV;
                xextype <= `EX_PRIV;
                xextype <= `EX_PRIV;
                StatusEXL <= 1'b1;
                StatusEXL <= 1'b1;
                pc <= 64'd3;
                pc <= 64'hC;
                dIR <= `NOP_INSN;
                dIR <= `NOP_INSN;
                xIR <= `NOP_INSN;
                xIR <= `NOP_INSN;
                xRt <= 9'd0;
                xRt <= 9'd0;
                xpcv <= 1'b0;
                xpcv <= 1'b0;
                dpcv <= 1'b0;
                dpcv <= 1'b0;
Line 3753... Line 3138...
                end
                end
        `EX_NMI,`EX_IRQ,`EX_DBERR:
        `EX_NMI,`EX_IRQ,`EX_DBERR:
                begin
                begin
                $display("Stuffing SYSJMP");
                $display("Stuffing SYSJMP");
                xIR <= {`MISC,19'd0,wextype,`SYSJMP};
                xIR <= {`MISC,19'd0,wextype,`SYSJMP};
                pc <= 64'd3;
                pc <= 64'hC;
                case(1'b1)
                case(1'b1)
                wpcv:   IPC <= wpc;
                wpcv:   IPC <= wpc;
                m2pcv:  IPC <= m2pc;
                m2pcv:  IPC <= m2pc;
                m1pcv:  IPC <= m1pc;
                m1pcv:  IPC <= m1pc;
                xpcv:   IPC <= xpc;
                xpcv:   IPC <= xpc;
Line 3766... Line 3151...
                endcase
                endcase
                end
                end
        `EX_OFL,`EX_DBZ,`EX_PRIV,`EX_TRAP:
        `EX_OFL,`EX_DBZ,`EX_PRIV,`EX_TRAP:
                begin
                begin
                xIR <= {`MISC,19'd0,wextype,`SYSJMP};
                xIR <= {`MISC,19'd0,wextype,`SYSJMP};
                pc <= 64'd3;
                pc <= 64'hC;
                EPC <= fnIncPC(wpc);
                EPC <= fnIncPC(wpc);
                end
                end
        default:
        default:
                begin
                begin
                xIR <= {`MISC,19'd0,wextype,`SYSJMP};
                xIR <= {`MISC,19'd0,wextype,`SYSJMP};
                pc <= 64'd3;
                pc <= 64'hC;
                EPC <= fnIncPC(wpc);
                EPC <= fnIncPC(wpc);
                end
                end
        endcase
        endcase
        if (wLdPC) begin
        if (wLdPC) begin
                $display("Loading PC");
                $display("Loading PC");

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.