Line 1... |
Line 1... |
// ============================================================================
|
// ============================================================================
|
// __
|
// __
|
// \\__/ o\ (C) 2013,2015 Robert Finch, Stratford
|
// \\__/ o\ (C) 2013-2016 Robert Finch, Stratford
|
// \ __ / All rights reserved.
|
// \ __ / All rights reserved.
|
// \/_// robfinch<remove>@finitron.ca
|
// \/_// robfinch<remove>@finitron.ca
|
// ||
|
// ||
|
//
|
//
|
// This source file is free software: you can redistribute it and/or modify
|
// This source file is free software: you can redistribute it and/or modify
|
Line 24... |
Line 24... |
// ============================================================================
|
// ============================================================================
|
//
|
//
|
`ifndef THOR_DEFINES
|
`ifndef THOR_DEFINES
|
`define THOR_DEFINES 1'b1
|
`define THOR_DEFINES 1'b1
|
|
|
`define SIMULATION 1'b1
|
//`define SIMULATION 1'b1
|
`define SEGMENTATION 1'b1
|
//`define SEGMENTATION 1'b1
|
|
//`define VECTOROPS 1'b1
|
//`define SEGLIMITS 1'b1
|
//`define SEGLIMITS 1'b1
|
//`define STACKOPS 1'b1
|
//`define STACKOPS 1'b1
|
//`define UNLINKOP 1'b1
|
//`define UNLINKOP 1'b1
|
//`define BITFIELDOPS 1'b1
|
//`define BITFIELDOPS 1'b1
|
//`define FLOATING_POINT 1'b1
|
//`define FLOATING_POINT 1'b1
|
Line 66... |
Line 67... |
`define _8ADDU 6'h0A
|
`define _8ADDU 6'h0A
|
`define _16ADDU 6'h0B
|
`define _16ADDU 6'h0B
|
`define MIN 6'h10
|
`define MIN 6'h10
|
`define MAX 6'h11
|
`define MAX 6'h11
|
`define MOD 6'h13
|
`define MOD 6'h13
|
`define CHK 6'h14
|
`define CHKX 6'h14
|
|
`define CHK 6'h15
|
`define MODU 6'h17
|
`define MODU 6'h17
|
`define R2 8'h41
|
`define R2 8'h41
|
`define CPUID 4'h0
|
`define CPUID 4'h0
|
`define REDOR 4'h1 // reduction or
|
`define REDOR 4'h1 // reduction or
|
`define REDAND 4'h2 // reduction and
|
`define REDAND 4'h2 // reduction and
|
Line 82... |
Line 84... |
`define PNAND 6'd3
|
`define PNAND 6'd3
|
`define PNOR 6'd4
|
`define PNOR 6'd4
|
`define PENOR 6'd5
|
`define PENOR 6'd5
|
`define PANDC 6'd6
|
`define PANDC 6'd6
|
`define PORC 6'd7
|
`define PORC 6'd7
|
|
`define CHKI 8'h45
|
`define BITI 8'h46
|
`define BITI 8'h46
|
`define ADDUIS 8'h47
|
`define ADDUIS 8'h47
|
`define ADDI 8'h48
|
`define ADDI 8'h48
|
`define SUBI 8'h49
|
`define SUBI 8'h49
|
`define MULI 8'h4A
|
`define MULI 8'h4A
|
Line 105... |
Line 108... |
`define ORC 6'h7
|
`define ORC 6'h7
|
`define MLO 8'h51
|
`define MLO 8'h51
|
`define ANDI 8'h53
|
`define ANDI 8'h53
|
`define ORI 8'h54
|
`define ORI 8'h54
|
`define EORI 8'h55
|
`define EORI 8'h55
|
|
`define VR 8'h56
|
|
`define VEX 6'h0
|
|
`define VEINS 6'h1
|
|
`define VSHLV 6'h2
|
|
`define VSHRV 6'h3
|
|
`define VFLT2INT 6'h4
|
|
`define VINT2FLT 6'h5
|
|
`define VBITS2V 6'h6
|
|
`define VRR 8'h57
|
|
`define VADD 5'h00
|
|
`define VSUB 5'h01
|
|
`define VMUL 5'h02
|
|
`define VDIV 5'h03
|
|
`define VSCALE 5'h05
|
|
`define VCMP 5'h06
|
|
`define VAND 5'h08
|
|
`define VOR 5'h09
|
|
`define VEOR 5'h0A
|
|
`define VADDL 5'h10
|
|
`define VSUBL 5'h11
|
|
`define VMULL 5'h12
|
|
`define VDIVL 5'h13
|
|
`define VSCALEL 5'h15
|
|
`define VCMPL 5'h16
|
|
`define VANDL 5'h18
|
|
`define VORL 5'h19
|
|
`define VEORL 5'h1A
|
|
|
`define SHIFT 8'h58
|
`define SHIFT 8'h58
|
`define SHL 6'h00
|
`define SHL 6'h00
|
`define SHR 6'h01
|
`define SHR 6'h01
|
`define SHLU 6'h02
|
`define SHLU 6'h02
|
Line 119... |
Line 149... |
`define SHRI 6'h11
|
`define SHRI 6'h11
|
`define SHLUI 6'h12
|
`define SHLUI 6'h12
|
`define SHRUI 6'h13
|
`define SHRUI 6'h13
|
`define ROLI 6'h14
|
`define ROLI 6'h14
|
`define RORI 6'h15
|
`define RORI 6'h15
|
|
`define VMAC 8'h5A
|
`define MODI 8'h5B
|
`define MODI 8'h5B
|
`define CHKI 8'h5D
|
`define CHKXI 8'h5D
|
`define MODUI 8'h5F
|
`define MODUI 8'h5F
|
|
|
`define LLA 8'h6A // compute linear address
|
`define LLA 8'h6A // compute linear address
|
`define _2ADDUI 8'h6B
|
`define _2ADDUI 8'h6B
|
`define _4ADDUI 8'h6C
|
`define _4ADDUI 8'h6C
|
Line 256... |
Line 287... |
`define LHX 8'hB4
|
`define LHX 8'hB4
|
`define LHUX 8'hB5
|
`define LHUX 8'hB5
|
`define LWX 8'hB6
|
`define LWX 8'hB6
|
`define JMPIX 8'hB7
|
`define JMPIX 8'hB7
|
`define LLAX 8'hB8
|
`define LLAX 8'hB8
|
|
`define LV 8'hBD
|
|
`define LVWS 8'hBE
|
|
`define LVX 8'hBF
|
|
|
`define SBX 8'hC0
|
`define SBX 8'hC0
|
`define SCX 8'hC1
|
`define SCX 8'hC1
|
`define SHX 8'hC2
|
`define SHX 8'hC2
|
`define SWX 8'hC3
|
`define SWX 8'hC3
|
Line 268... |
Line 302... |
`define PUSH 8'hC8
|
`define PUSH 8'hC8
|
`define PEA 8'hC9
|
`define PEA 8'hC9
|
`define POP 8'hCA
|
`define POP 8'hCA
|
`define LINK 8'hCB
|
`define LINK 8'hCB
|
`define UNLINK 8'hCC
|
`define UNLINK 8'hCC
|
|
`define SV 8'hCD
|
|
`define SVWS 8'hCE
|
|
`define SVX 8'hCF
|
|
|
`define TLB 8'hF0
|
`define TLB 8'hF0
|
`define TLB_NOP 4'd0
|
`define TLB_NOP 4'd0
|
`define TLB_P 4'd1
|
`define TLB_P 4'd1
|
`define TLB_RD 4'd2
|
`define TLB_RD 4'd2
|
Line 308... |
Line 345... |
`define MEMSB 8'hF8 // synchronization barrier
|
`define MEMSB 8'hF8 // synchronization barrier
|
`define MEMDB 8'hF9 // data barrier
|
`define MEMDB 8'hF9 // data barrier
|
`define CLI 8'hFA
|
`define CLI 8'hFA
|
`define SEI 8'hFB
|
`define SEI 8'hFB
|
`define RTD 8'hFC
|
`define RTD 8'hFC
|
|
`define RTF 8'hFD
|
|
`define JSF 8'hFE
|
`define IMM 8'hFF
|
`define IMM 8'hFF
|
|
|
`define PREDC 3:0
|
`define PREDC 3:0
|
`define PREDR 7:4
|
`define PREDR 7:4
|
`define OPCODE 15:8
|
`define OPCODE 15:8
|
`define RA 21:16
|
`define RA 21:16
|
`define RB 27:22
|
`define RB 27:22
|
`define INSTRUCTION_RA 21:16
|
`define INSTRUCTION_RA 21:16
|
`define INSTRUCTION_RB 27:22
|
`define INSTRUCTION_RB 27:22
|
`define INSTRUCTION_RC 33:28
|
`define INSTRUCTION_RC 33:28
|
|
`define INSTRUCTION_RD 39:34
|
|
|
`define XTBL 4'd12
|
`define XTBL 4'd12
|
`define EPC 4'd13
|
`define EPC 4'd13
|
`define IPC 4'd14
|
`define IPC 4'd14
|
|
|
// Special Registers
|
// Special Registers
|
`define PREGS 6'h0x
|
`define PREGS 6'h0x
|
`define CREGS 6'h1x
|
`define CREGS 6'h1x
|
`define SREGS 6'h2x
|
`define SREGS 6'h2x
|
`define PREGS_ALL 6'h30
|
`define USP 6'h31
|
`define TICK 6'h32
|
`define TICK 6'h32
|
`define LCTR 6'h33
|
`define LCTR 6'h33
|
`define ASID 6'h36
|
`define PREGS_ALL 6'd52
|
`define SR 6'h37
|
`define ASID 6'd53
|
`define FPSCR 6'h38
|
`define VL 6'd54
|
|
`define SR 6'h55
|
|
`define FPSCR 6'd56
|
|
`define ARG1 6'd58
|
`define CLK_THROTTLE 6'h3F
|
`define CLK_THROTTLE 6'h3F
|
|
|
// exception types:
|
// exception types:
|
`define EXC_NONE 4'd0
|
`define EXC_NONE 4'd0
|
`define EXC_HALT 4'd1
|
`define EXC_HALT 4'd1
|
Line 350... |
Line 393... |
`define EXC_DBZ 4'd9 // divide by zero
|
`define EXC_DBZ 4'd9 // divide by zero
|
`define EXC_FLT 4'd10 // floating point exception
|
`define EXC_FLT 4'd10 // floating point exception
|
`define EXC_DBG 4'd11
|
`define EXC_DBG 4'd11
|
`define EXC_PRIV 4'd12
|
`define EXC_PRIV 4'd12
|
`define EXC_CHK 4'd13
|
`define EXC_CHK 4'd13
|
|
`define EXC_SEGLD 4'd14
|
|
|
|
`define EX_NONE 9'd000
|
|
`define EX_CHK 9'd239
|
|
`define EX_DBZ 9'd241
|
|
`define EX_FP 9'd242
|
|
`define EX_DBG 9'd243
|
|
`define EX_SEGV 9'd244
|
|
`define EX_PRIV 9'd245
|
|
`define EX_TLBMISS 9'd248
|
|
`define EX_DBE 9'd251
|
|
`define EX_SEGLD 9'd256
|
|
|
//
|
//
|
// define PANIC types
|
// define PANIC types
|
//
|
//
|
`define PANIC_NONE 4'd0
|
`define PANIC_NONE 4'd0
|
`define PANIC_FETCHBUFBEQ 4'd1
|
`define PANIC_FETCHBUFBEQ 4'd1
|