⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 or1200_defines.v

📁 本人制作的8位CPU,有简单的加减,输入,输出操作,希望大家好用
💻 V
📖 第 1 页 / 共 4 页
字号:
////// 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 + -