📄 or1200_defines.v
字号:
// If you plan to run WB:RISC clock fixed to 1:1, disable// both defines//// For WB:RISC 1:2 or 1:1, enable OR1200_CLKDIV_2_SUPPORTED// and use clmode to set ratio//// For WB:RISC 1:4, 1:2 or 1:1, enable both defines and use// clmode to set ratio//`define OR1200_CLKDIV_2_SUPPORTED//`define OR1200_CLKDIV_4_SUPPORTED//// Type of register file RAM//// Memory macro w/ two ports (see or1200_tpram_32x32.v)// `define OR1200_RFRAM_TWOPORT//// Memory macro dual port (see or1200_dpram_32x32.v)`define OR1200_RFRAM_DUALPORT//// Generic (flip-flop based) register file (see or1200_rfram_generic.v)//`define OR1200_RFRAM_GENERIC//// Type of mem2reg aligner to implement.//// Once OR1200_IMPL_MEM2REG2 yielded faster// circuit, however with today tools it will// most probably give you slower circuit.//`define OR1200_IMPL_MEM2REG1//`define OR1200_IMPL_MEM2REG2//// ALUOPs//`define OR1200_ALUOP_WIDTH 4`define OR1200_ALUOP_NOP 4'd4/* Order defined by arith insns that have two source operands both in regs (see binutils/include/opcode/or32.h) */`define OR1200_ALUOP_ADD 4'd0`define OR1200_ALUOP_ADDC 4'd1`define OR1200_ALUOP_SUB 4'd2`define OR1200_ALUOP_AND 4'd3`define OR1200_ALUOP_OR 4'd4`define OR1200_ALUOP_XOR 4'd5`define OR1200_ALUOP_MUL 4'd6`define OR1200_ALUOP_SHROT 4'd8`define OR1200_ALUOP_DIV 4'd9`define OR1200_ALUOP_DIVU 4'd10/* Order not specifically defined. */`define OR1200_ALUOP_IMM 4'd11`define OR1200_ALUOP_MOVHI 4'd12`define OR1200_ALUOP_COMP 4'd13`define OR1200_ALUOP_MTSR 4'd14`define OR1200_ALUOP_MFSR 4'd15//// MACOPs//`define OR1200_MACOP_WIDTH 2`define OR1200_MACOP_NOP 2'b00`define OR1200_MACOP_MAC 2'b01`define OR1200_MACOP_MSB 2'b10//// Shift/rotate ops//`define OR1200_SHROTOP_WIDTH 2`define OR1200_SHROTOP_NOP 2'd0`define OR1200_SHROTOP_SLL 2'd0`define OR1200_SHROTOP_SRL 2'd1`define OR1200_SHROTOP_SRA 2'd2`define OR1200_SHROTOP_ROR 2'd3// Execution cycles per instruction`define OR1200_MULTICYCLE_WIDTH 2`define OR1200_ONE_CYCLE 2'd0`define OR1200_TWO_CYCLES 2'd1// Operand MUX selects`define OR1200_SEL_WIDTH 2`define OR1200_SEL_RF 2'd0`define OR1200_SEL_IMM 2'd1`define OR1200_SEL_EX_FORW 2'd2`define OR1200_SEL_WB_FORW 2'd3//// BRANCHOPs//`define OR1200_BRANCHOP_WIDTH 3`define OR1200_BRANCHOP_NOP 3'd0`define OR1200_BRANCHOP_J 3'd1`define OR1200_BRANCHOP_JR 3'd2`define OR1200_BRANCHOP_BAL 3'd3`define OR1200_BRANCHOP_BF 3'd4`define OR1200_BRANCHOP_BNF 3'd5`define OR1200_BRANCHOP_RFE 3'd6//// LSUOPs//// Bit 0: sign extend// Bits 1-2: 00 doubleword, 01 byte, 10 halfword, 11 singleword// Bit 3: 0 load, 1 store`define OR1200_LSUOP_WIDTH 4`define OR1200_LSUOP_NOP 4'b0000`define OR1200_LSUOP_LBZ 4'b0010`define OR1200_LSUOP_LBS 4'b0011`define OR1200_LSUOP_LHZ 4'b0100`define OR1200_LSUOP_LHS 4'b0101`define OR1200_LSUOP_LWZ 4'b0110`define OR1200_LSUOP_LWS 4'b0111`define OR1200_LSUOP_LD 4'b0001`define OR1200_LSUOP_SD 4'b1000`define OR1200_LSUOP_SB 4'b1010`define OR1200_LSUOP_SH 4'b1100`define OR1200_LSUOP_SW 4'b1110// FETCHOPs`define OR1200_FETCHOP_WIDTH 1`define OR1200_FETCHOP_NOP 1'b0`define OR1200_FETCHOP_LW 1'b1//// Register File Write-Back OPs//// Bit 0: register file write enable// Bits 2-1: write-back mux selects`define OR1200_RFWBOP_WIDTH 3`define OR1200_RFWBOP_NOP 3'b000`define OR1200_RFWBOP_ALU 3'b001`define OR1200_RFWBOP_LSU 3'b011`define OR1200_RFWBOP_SPRS 3'b101`define OR1200_RFWBOP_LR 3'b111// Compare instructions`define OR1200_COP_SFEQ 3'b000`define OR1200_COP_SFNE 3'b001`define OR1200_COP_SFGT 3'b010`define OR1200_COP_SFGE 3'b011`define OR1200_COP_SFLT 3'b100`define OR1200_COP_SFLE 3'b101`define OR1200_COP_X 3'b111`define OR1200_SIGNED_COMPARE 'd3`define OR1200_COMPOP_WIDTH 4//// TAGs for instruction bus//`define OR1200_ITAG_IDLE 4'h0 // idle bus`define OR1200_ITAG_NI 4'h1 // normal insn`define OR1200_ITAG_BE 4'hb // Bus error exception`define OR1200_ITAG_PE 4'hc // Page fault exception`define OR1200_ITAG_TE 4'hd // TLB miss exception//// TAGs for data bus//`define OR1200_DTAG_IDLE 4'h0 // idle bus`define OR1200_DTAG_ND 4'h1 // normal data`define OR1200_DTAG_AE 4'ha // Alignment exception`define OR1200_DTAG_BE 4'hb // Bus error exception`define OR1200_DTAG_PE 4'hc // Page fault exception`define OR1200_DTAG_TE 4'hd // TLB miss exception////////////////////////////////////////////////// ORBIS32 ISA specifics//// SHROT_OP position in machine word`define OR1200_SHROTOP_POS 7:6// ALU instructions multicycle field in machine word`define OR1200_ALUMCYC_POS 9:8//// Instruction opcode groups (basic)//`define OR1200_OR32_J 6'b000000`define OR1200_OR32_JAL 6'b000001`define OR1200_OR32_BNF 6'b000011`define OR1200_OR32_BF 6'b000100`define OR1200_OR32_NOP 6'b000101`define OR1200_OR32_MOVHI 6'b000110`define OR1200_OR32_XSYNC 6'b001000`define OR1200_OR32_RFE 6'b001001/* */`define OR1200_OR32_JR 6'b010001`define OR1200_OR32_JALR 6'b010010`define OR1200_OR32_MACI 6'b010011/* */`define OR1200_OR32_LWZ 6'b100001`define OR1200_OR32_LBZ 6'b100011`define OR1200_OR32_LBS 6'b100100`define OR1200_OR32_LHZ 6'b100101`define OR1200_OR32_LHS 6'b100110`define OR1200_OR32_ADDI 6'b100111`define OR1200_OR32_ADDIC 6'b101000`define OR1200_OR32_ANDI 6'b101001`define OR1200_OR32_ORI 6'b101010`define OR1200_OR32_XORI 6'b101011`define OR1200_OR32_MULI 6'b101100`define OR1200_OR32_MFSPR 6'b101101`define OR1200_OR32_SH_ROTI 6'b101110`define OR1200_OR32_SFXXI 6'b101111/* */`define OR1200_OR32_MTSPR 6'b110000`define OR1200_OR32_MACMSB 6'b110001/* */`define OR1200_OR32_SW 6'b110101`define OR1200_OR32_SB 6'b110110`define OR1200_OR32_SH 6'b110111`define OR1200_OR32_ALU 6'b111000`define OR1200_OR32_SFXX 6'b111001///////////////////////////////////////////////////////// Exceptions////// Exception vectors per OR1K architecture:// 0xP0000100 - reset// 0xP0000200 - bus error// ... etc// where P represents exception prefix.//// Exception vectors can be customized as per// the following formula:// 0xPMMMMNVV - exception N//// P represents exception prefix// MMMM represents middle part that is usually 16 bits// wide and starts with all bits zero// N represents exception N// VV represents length of the individual vector space,// usually it is 8 bits wide and starts with all bits zero////// MMMM and VV parts//// Sum of these two defines needs to be 24// (assuming N and P width are each 4 bits)//`define OR1200_EXCEPT_MMMM 16'h0000`define OR1200_EXCEPT_VV 8'h00//// N part width//`define OR1200_EXCEPT_WIDTH 4//// Definition of exception vectors//// To avoid implementation of a certain exception,// simply comment out corresponding line//`define OR1200_EXCEPT_UNUSED `OR1200_EXCEPT_WIDTH'hf`define OR1200_EXCEPT_TRAP `OR1200_EXCEPT_WIDTH'he`define OR1200_EXCEPT_BREAK `OR1200_EXCEPT_WIDTH'hd`define OR1200_EXCEPT_SYSCALL `OR1200_EXCEPT_WIDTH'hc`define OR1200_EXCEPT_RANGE `OR1200_EXCEPT_WIDTH'hb`define OR1200_EXCEPT_ITLBMISS `OR1200_EXCEPT_WIDTH'ha`define OR1200_EXCEPT_DTLBMISS `OR1200_EXCEPT_WIDTH'h9`define OR1200_EXCEPT_INT `OR1200_EXCEPT_WIDTH'h8`define OR1200_EXCEPT_ILLEGAL `OR1200_EXCEPT_WIDTH'h7`define OR1200_EXCEPT_ALIGN `OR1200_EXCEPT_WIDTH'h6`define OR1200_EXCEPT_TICK `OR1200_EXCEPT_WIDTH'h5`define OR1200_EXCEPT_IPF `OR1200_EXCEPT_WIDTH'h4`define OR1200_EXCEPT_DPF `OR1200_EXCEPT_WIDTH'h3`define OR1200_EXCEPT_BUSERR `OR1200_EXCEPT_WIDTH'h2`define OR1200_EXCEPT_RESET `OR1200_EXCEPT_WIDTH'h1`define OR1200_EXCEPT_NONE `OR1200_EXCEPT_WIDTH'h0///////////////////////////////////////////////////////// SPR groups//// Bits that define the group`define OR1200_SPR_GROUP_BITS 15:11// Width of the group bits`define OR1200_SPR_GROUP_WIDTH 5// Bits that define offset inside the group`define OR1200_SPR_OFS_BITS 10:0// List of groups`define OR1200_SPR_GROUP_SYS 5'd00`define OR1200_SPR_GROUP_DMMU 5'd01`define OR1200_SPR_GROUP_IMMU 5'd02`define OR1200_SPR_GROUP_DC 5'd03`define OR1200_SPR_GROUP_IC 5'd04`define OR1200_SPR_GROUP_MAC 5'd05`define OR1200_SPR_GROUP_DU 5'd06`define OR1200_SPR_GROUP_PM 5'd08`define OR1200_SPR_GROUP_PIC 5'd09`define OR1200_SPR_GROUP_TT 5'd10///////////////////////////////////////////////////////// System group////// System registers//`define OR1200_SPR_CFGR 7'd0`define OR1200_SPR_RF 6'd32 // 1024 >> 5`define OR1200_SPR_NPC 11'd16`define OR1200_SPR_SR 11'd17`define OR1200_SPR_PPC 11'd18`define OR1200_SPR_EPCR 11'd32`define OR1200_SPR_EEAR 11'd48`define OR1200_SPR_ESR 11'd64//// SR bits//`define OR1200_SR_WIDTH 16`define OR1200_SR_SM 0`define OR1200_SR_TEE 1`define OR1200_SR_IEE 2`define OR1200_SR_DCE 3`define OR1200_SR_ICE 4`define OR1200_SR_DME 5`define OR1200_SR_IME 6`define OR1200_SR_LEE 7`define OR1200_SR_CE 8`define OR1200_SR_F 9`define OR1200_SR_CY 10 // Unused`define OR1200_SR_OV 11 // Unused`define OR1200_SR_OVE 12 // Unused`define OR1200_SR_DSX 13 // Unused`define OR1200_SR_EPH 14`define OR1200_SR_FO 15`define OR1200_SR_CID 31:28 // Unimplemented// Bits that define offset inside the group`define OR1200_SPROFS_BITS 10:0///////////////////////////////////////////////////////// Power Management (PM)//// Define it if you want PM implemented`define OR1200_PM_IMPLEMENTED// Bit positions inside PMR (don't change)`define OR1200_PM_PMR_SDF 3:0`define OR1200_PM_PMR_DME 4`define OR1200_PM_PMR_SME 5`define OR1200_PM_PMR_DCGE 6`define OR1200_PM_PMR_UNUSED 31:7// PMR offset inside PM group of registers`define OR1200_PM_OFS_PMR 11'b0// PM group`define OR1200_SPRGRP_PM 5'd8// Define if PMR can be read/written at any address inside PM group`define OR1200_PM_PARTIAL_DECODING// Define if reading PMR is allowed`define OR1200_PM_READREGS// Define if unused PMR bits should be zero`define OR1200_PM_UNUSED_ZERO///////////////////////////////////////////////////////// Debug Unit (DU)//// Define it if you want DU implemented`define OR1200_DU_IMPLEMENTED// Define if you want trace buffer// (for now only available for Xilinx Virtex FPGAs)`ifdef OR1200_ASIC`else`define OR1200_DU_TB_IMPLEMENTED`endif// Address offsets of DU registers inside DU group`define OR1200_DU_OFS_DMR1 11'd16`define OR1200_DU_OFS_DMR2 11'd17`define OR1200_DU_OFS_DSR 11'd20`define OR1200_DU_OFS_DRR 11'd21`define OR1200_DU_OFS_TBADR 11'h0ff`define OR1200_DU_OFS_TBIA 11'h1xx`define OR1200_DU_OFS_TBIM 11'h2xx`define OR1200_DU_OFS_TBAR 11'h3xx`define OR1200_DU_OFS_TBTS 11'h4xx// Position of offset bits inside SPR address`define OR1200_DUOFS_BITS 10:0// Define if you want these DU registers to be implemented`define OR1200_DU_DMR1`define OR1200_DU_DMR2`define OR1200_DU_DSR`define OR1200_DU_DRR// DMR1 bits`define OR1200_DU_DMR1_ST 22// DSR bits`define OR1200_DU_DSR_WIDTH 14`define OR1200_DU_DSR_RSTE 0`define OR1200_DU_DSR_BUSEE 1`define OR1200_DU_DSR_DPFE 2`define OR1200_DU_DSR_IPFE 3`define OR1200_DU_DSR_TTE 4`define OR1200_DU_DSR_AE 5`define OR1200_DU_DSR_IIE 6`define OR1200_DU_DSR_IE 7`define OR1200_DU_DSR_DME 8`define OR1200_DU_DSR_IME 9`define OR1200_DU_DSR_RE 10`define OR1200_DU_DSR_SCE 11`define OR1200_DU_DSR_BE 12`define OR1200_DU_DSR_TE 13// DRR bits`define OR1200_DU_DRR_RSTE 0`define OR1200_DU_DRR_BUSEE 1`define OR1200_DU_DRR_DPFE 2`define OR1200_DU_DRR_IPFE 3`define OR1200_DU_DRR_TTE 4`define OR1200_DU_DRR_AE 5`define OR1200_DU_DRR_IIE 6`define OR1200_DU_DRR_IE 7`define OR1200_DU_DRR_DME 8`define OR1200_DU_DRR_IME 9`define OR1200_DU_DRR_RE 10`define OR1200_DU_DRR_SCE 11`define OR1200_DU_DRR_BE 12`define OR1200_DU_DRR_TE 13// Define if reading DU regs is allowed`define OR1200_DU_READREGS// Define if unused DU registers bits should be zero`define OR1200_DU_UNUSED_ZERO// DU operation commands`define OR1200_DU_OP_READSPR 3'd4`define OR1200_DU_OP_WRITESPR 3'd5// Define if IF/LSU status is not needed by devel i/f`define OR1200_DU_STATUS_UNIMPLEMENTED///////////////////////////////////////////////////////// Programmable Interrupt Controller (PIC)//// Define it if you want PIC implemented`define OR1200_PIC_IMPLEMENTED// Define number of interrupt inputs (2-31)`define OR1200_PIC_INTS 20// Address offsets of PIC registers inside PIC group`define OR1200_PIC_OFS_PICMR 2'd0`define OR1200_PIC_OFS_PICSR 2'd2// Position of offset bits inside SPR address`define OR1200_PICOFS_BITS 1:0// Define if you want these PIC registers to be implemented`define OR1200_PIC_PICMR`define OR1200_PIC_PICSR// Define if reading PIC registers is allowed`define OR1200_PIC_READREGS// Define if unused PIC register bits should be zero`define OR1200_PIC_UNUSED_ZERO///////////////////////////////////////////////////////// Tick Timer (TT)//// Define it if you want TT implemented`define OR1200_TT_IMPLEMENTED// Address offsets of TT registers inside TT group`define OR1200_TT_OFS_TTMR 1'd0`define OR1200_TT_OFS_TTCR 1'd1// Position of offset bits inside SPR group`define OR1200_TTOFS_BITS 0// Define if you want these TT registers to be implemented`define OR1200_TT_TTMR`define OR1200_TT_TTCR// TTMR bits`define OR1200_TT_TTMR_TP 27:0`define OR1200_TT_TTMR_IP 28`define OR1200_TT_TTMR_IE 29
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -