📄 or1200_defines.v
字号:
////// 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//// Default Exception Prefix//// 1'b0 - OR1200_EXCEPT_EPH0_P (0x0000_0000)// 1'b1 - OR1200_EXCEPT_EPH1_P (0xF000_0000)//`define OR1200_SR_EPH_DEF 1'b0///////////////////////////////////////////////////////// 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 HW Breakpoints// (if HW breakpoints are not implemented// only default software trapping is// possible with l.trap insn - this is// however already enough for use// with or32 gdb)////`define OR1200_DU_HWBKPTS// Number of DVR/DCR pairs if HW breakpoints enabled`define OR1200_DU_DVRDCR_PAIRS 8// Define if you want trace buffer//`define OR1200_DU_TB_IMPLEMENTED//// Address offsets of DU registers inside DU group//// To not implement a register, doq not define its address//`ifdef OR1200_DU_HWBKPTS`define OR1200_DU_DVR0 11'd0`define OR1200_DU_DVR1 11'd1`define OR1200_DU_DVR2 11'd2`define OR1200_DU_DVR3 11'd3`define OR1200_DU_DVR4 11'd4`define OR1200_DU_DVR5 11'd5`define OR1200_DU_DVR6 11'd6`define OR1200_DU_DVR7 11'd7`define OR1200_DU_DCR0 11'd8`define OR1200_DU_DCR1 11'd9`define OR1200_DU_DCR2 11'd10`define OR1200_DU_DCR3 11'd11`define OR1200_DU_DCR4 11'd12`define OR1200_DU_DCR5 11'd13`define OR1200_DU_DCR6 11'd14`define OR1200_DU_DCR7 11'd15`endif`define OR1200_DU_DMR1 11'd16`ifdef OR1200_DU_HWBKPTS`define OR1200_DU_DMR2 11'd17`define OR1200_DU_DWCR0 11'd18`define OR1200_DU_DWCR1 11'd19`endif`define OR1200_DU_DSR 11'd20`define OR1200_DU_DRR 11'd21`ifdef OR1200_DU_TB_IMPLEMENTED`define OR1200_DU_TBADR 11'h0ff`define OR1200_DU_TBIA 11'h1xx`define OR1200_DU_TBIM 11'h2xx`define OR1200_DU_TBAR 11'h3xx`define OR1200_DU_TBTS 11'h4xx`endif// Position of offset bits inside SPR address`define OR1200_DUOFS_BITS 10:0// DCR bits`define OR1200_DU_DCR_DP 0`define OR1200_DU_DCR_CC 3:1`define OR1200_DU_DCR_SC 4`define OR1200_DU_DCR_CT 7:5// DMR1 bits`define OR1200_DU_DMR1_CW0 1:0`define OR1200_DU_DMR1_CW1 3:2`define OR1200_DU_DMR1_CW2 5:4`define OR1200_DU_DMR1_CW3 7:6`define OR1200_DU_DMR1_CW4 9:8`define OR1200_DU_DMR1_CW5 11:10`define OR1200_DU_DMR1_CW6 13:12`define OR1200_DU_DMR1_CW7 15:14`define OR1200_DU_DMR1_CW8 17:16`define OR1200_DU_DMR1_CW9 19:18`define OR1200_DU_DMR1_CW10 21:20`define OR1200_DU_DMR1_ST 22`define OR1200_DU_DMR1_BT 23`define OR1200_DU_DMR1_DXFW 24`define OR1200_DU_DMR1_ETE 25// DMR2 bits`define OR1200_DU_DMR2_WCE0 0`define OR1200_DU_DMR2_WCE1 1`define OR1200_DU_DMR2_AWTC 12:2`define OR1200_DU_DMR2_WGB 23:13// DWCR bits`define OR1200_DU_DWCR_COUNT 15:0`define OR1200_DU_DWCR_MATCH 31:16// 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// 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`define OR1200_TT_TTMR_M 31:30// Define if reading TT registers is allowed`define OR1200_TT_READREGS////////////////////////////////////////////////// MAC//`define OR1200_MAC_ADDR 0 // MACLO 0xxxxxxxx1, MACHI 0xxxxxxxx0`define OR1200_MAC_SPR_WE // Define if MACLO/MACHI are SPR writable//// Shift {MACHI,MACLO} into destination register when executing l.macrc//// According to architecture manual there is no shift, so default value is 0.//// However the implementation has deviated in this from the arch manual and had hard coded shift by 28 bits which// is a useful optimization for MP3 decoding (if using libmad fixed point library). Shifts are no longer// default setup, but if you need to remain backward compatible, define your shift bits, which were normally// dest_GPR = {MACHI,MACLO}[59:28]`define OR1200_MAC_SHIFTBY 0 // 0 = According to arch manual, 28 = obsolete backward compatibility////////////////////////////////////////////////// Data MMU (DMMU)////// Address that selects between TLB TR and MR//`define OR1200_DTLB_TM_ADDR 7//// DTLBMR fields//`define OR1200_DTLBMR_V_BITS 0`define OR1200_DTLBMR_CID_BITS 4:1`define OR1200_DTLBMR_RES_BITS 11:5`define OR1200_DTLBMR_VPN_BITS 31:13//// DTLBTR fields//`define OR1200_DTLBTR_CC_BITS 0`define OR1200_DTLBTR_CI_BITS 1`define OR1200_DTLBTR_WBC_BITS 2`define OR1200_DTLBTR_WOM_BITS 3`define OR1200_DTLBTR_A_BITS 4`define OR1200_DTLBTR_D_BITS 5`define OR1200_DTLBTR_URE_BITS 6`define OR1200_DTLBTR_UWE_BITS 7`define OR1200_DTLBTR_SRE_BITS 8`define OR1200_DTLBTR_SWE_BITS 9`define OR1200_DTLBTR_RES_BITS 11:10`define OR1200_DTLBTR_PPN_BITS 31:13//// DTLB configuration//`define OR1200_DMMU_PS 13 // 13 for 8KB page size`define OR1200_DTLB_INDXW 6 // 6 for 64 entry DTLB 7 for 128 entries`define OR1200_DTLB_INDXL `OR1200_DMMU_PS // 13 13`define OR1200_DTLB_INDXH `OR1200_DMMU_PS+`OR1200_DTLB_INDXW-1 // 18 19`define OR1200_DTLB_INDX `OR1200_DTLB_INDXH:`OR1200_DTLB_INDXL // 18:13 19:13`define OR1200_DTLB_TAGW 32-`OR1200_DTLB_INDXW-`OR1200_DMMU_PS // 13 12`define OR1200_DTLB_TAGL `OR1200_DTLB_INDXH+1 // 19 20`define OR1200_DTLB_TAG 31:`OR1200_DTLB_TAGL // 31:19 31:20`define OR1200_DTLBMRW `OR1200_DTLB_TAGW+1 // +1 because of V bit`define OR1200_DTLBTRW 32-`OR1200_DMMU_PS+5 // +5 because of protection bits and CI//// Cache inhibit while DMMU is not enabled/implemented//// cache inhibited 0GB-4GB 1'b1// cache inhibited 0GB-2GB !dcpu_adr_i[31]// cache inhibited 0GB-1GB 2GB-3GB !dcpu_adr_i[30]// cache inhibited 1GB-2GB 3GB-4GB dcpu_adr_i[30]// cache inhibited 2GB-4GB (default) dcpu_adr_i[31]// cached 0GB-4GB 1'b0//`define OR1200_DMMU_CI dcpu_adr_i[31]////////////////////////////////////////////////// Insn MMU (IMMU)////// Address that selects between TLB TR and MR//`define OR1200_ITLB_TM_ADDR 7//// ITLBMR fields//`define OR1200_ITLBMR_V_BITS 0`define OR1200_ITLBMR_CID_BITS 4:1`define OR1200_ITLBMR_RES_BITS 11:5`define OR1200_ITLBMR_VPN_BITS 31:13//// ITLBTR fields//`define OR1200_ITLBTR_CC_BITS 0`define OR1200_ITLBTR_CI_BITS 1`define OR1200_ITLBTR_WBC_BITS 2`define OR1200_ITLBTR_WOM_BITS 3`define OR1200_ITLBTR_A_BITS 4`define OR1200_ITLBTR_D_BITS 5`define OR1200_ITLBTR_SXE_BITS 6`define OR1200_ITLBTR_UXE_BITS 7`define OR1200_ITLBTR_RES_BITS 11:8`define OR1200_ITLBTR_PPN_BITS 31:13//// ITLB configuration//`define OR1200_IMMU_PS 13 // 13 for 8KB page size`define OR1200_ITLB_INDXW 6 // 6 for 64 entry ITLB 7 for 128 entries`define OR1200_ITLB_INDXL `OR1200_IMMU_PS // 13 13`define OR1200_ITLB_INDXH `OR1200_IMMU_PS+`OR1200_ITLB_INDXW-1 // 18 19`define OR1200_ITLB_INDX `OR1200_ITLB_INDXH:`OR1200_ITLB_INDXL // 18:13 19:13`define OR1200_ITLB_TAGW 32-`OR1200_ITLB_INDXW-`OR1200_IMMU_PS // 13 12`define OR1200_ITLB_TAGL `OR1200_ITLB_INDXH+1 // 19 20`define OR1200_ITLB_TAG 31:`OR1200_ITLB_TAGL // 31:19 31:20`define OR1200_ITLBMRW `OR1200_ITLB_TAGW+1 // +1 because of V bit`define OR1200_ITLBTRW 32-`OR1200_IMMU_PS+3 // +3 because of protection bits and CI//// Cache inhibit while IMMU is not enabled/implemented// Note: all combinations that use icpu_adr_i cause async loop//// cache inhibited 0GB-4GB 1'b1// cache inhibited 0GB-2GB !icpu_adr_i[31]// cache inhibited 0GB-1GB 2GB-3GB !icpu_adr_i[30]// cache inhibited 1GB-2GB 3GB-4GB icpu_adr_i[30]// cache inhibited 2GB-4GB (default) icpu_adr_i[31]// cached 0GB-4GB 1'b0//`define OR1200_IMMU_CI 1'b0///////////////////////////////////////////////////// Insn cache (IC)//// 3 for 8 bytes, 4 for 16 bytes etc`define OR1200_ICLS 4//// IC configurations//`ifdef OR1200_IC_1W_512B`define OR1200_ICSIZE 9 // 512`define OR1200_ICINDX `OR1200_ICSIZE-2 // 7`define OR1200_ICINDXH `OR1200_ICSIZE-1 // 8`define OR1200_ICTAGL `OR1200_ICINDXH+1 // 9`define OR1200_ICTAG `OR1200_ICSIZE-`OR1200_ICLS // 5`define OR1200_ICTAG_W 24`endif`ifdef OR1200_IC_1W_4KB`define OR1200_ICSIZE 12 // 4096
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -