Compare commits
	
		
			4 Commits
		
	
	
		
			32848ec396
			...
			8a5fe58d51
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 8a5fe58d51 | |||
| 16cd6d5ff5 | |||
| ee2ded931d | |||
| 95ba5c901a | 
| @@ -142,9 +142,11 @@ else() | ||||
| endif() | ||||
|  | ||||
| foreach(F IN LISTS TGC_SOURCES) | ||||
|     string(REGEX REPLACE  ".*/([^/]*)\.cpp"  "\\1" CORE_NAME_LC ${F}) | ||||
|     string(TOUPPER ${CORE_NAME_LC} CORE_NAME) | ||||
|     target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) | ||||
|     if (${F} MATCHES ".*/arch/([^/]*)\.cpp") | ||||
|         string(REGEX REPLACE  ".*/([^/]*)\.cpp"  "\\1" CORE_NAME_LC ${F}) | ||||
|         string(TOUPPER ${CORE_NAME_LC} CORE_NAME) | ||||
|         target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) | ||||
|     endif() | ||||
| endforeach() | ||||
|  | ||||
| if(WITH_LLVM) | ||||
| @@ -181,9 +183,11 @@ if(TARGET scc-sysc) | ||||
|     target_compile_definitions(${PROJECT_NAME} PUBLIC WITH_SYSTEMC) | ||||
|     target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) | ||||
|     foreach(F IN LISTS TGC_SOURCES) | ||||
|         string(REGEX REPLACE  ".*/([^/]*)\.cpp"  "\\1" CORE_NAME_LC ${F}) | ||||
|         string(TOUPPER ${CORE_NAME_LC} CORE_NAME) | ||||
|         target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) | ||||
|         if (${F} MATCHES ".*/arch/([^/]*)\.cpp") | ||||
|             string(REGEX REPLACE  ".*/([^/]*)\.cpp"  "\\1" CORE_NAME_LC ${F}) | ||||
|             string(TOUPPER ${CORE_NAME_LC} CORE_NAME) | ||||
|             target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) | ||||
|         endif() | ||||
|     endforeach() | ||||
|     target_link_libraries(${PROJECT_NAME} PUBLIC dbt-rise-tgc scc-sysc) | ||||
|     if(WITH_LLVM) | ||||
|   | ||||
| @@ -33,7 +33,7 @@ | ||||
| def getRegisterSizes(){ | ||||
| 	def regs = registers.collect{it.size} | ||||
| 	regs[-1]=64 // correct for NEXT_PC | ||||
| 	//regs+=[32, 32, 64, 64, 64, 32] // append TRAP_STATE, PENDING_TRAP, ICOUNT, CYCLE, INSTRET, INSTRUCTION | ||||
| 	regs+=[32,32, 64, 64, 64, 32, 32] // append TRAP_STATE, PENDING_TRAP, ICOUNT, CYCLE, INSTRET, INSTRUCTION, LAST_BRANCH | ||||
|     return regs | ||||
| } | ||||
| %> | ||||
|   | ||||
| @@ -37,7 +37,7 @@ def nativeTypeSize(int size){ | ||||
| } | ||||
| def getRegisterSizes(){ | ||||
|     def regs = registers.collect{nativeTypeSize(it.size)} | ||||
|     // regs+=[32,32, 64, 64, 64, 32] // append TRAP_STATE, PENDING_TRAP, ICOUNT, CYCLE, INSTRET, INSTRUCTION | ||||
|     regs+=[32,32, 64, 64, 64, 32, 32] // append TRAP_STATE, PENDING_TRAP, ICOUNT, CYCLE, INSTRET, INSTRUCTION, LAST_BRANCH | ||||
|     return regs | ||||
| } | ||||
| def getRegisterOffsets(){ | ||||
| @@ -91,7 +91,7 @@ template <> struct traits<${coreDef.name.toLowerCase()}> { | ||||
|     constexpr static unsigned FP_REGS_SIZE = ${constants.find {it.name=='FLEN'}?.value?:0}; | ||||
|  | ||||
|     enum reg_e { | ||||
|         ${registers.collect{it.name}.join(', ')}, NUM_REGS | ||||
|         ${registers.collect{it.name}.join(', ')}, NUM_REGS, TRAP_STATE=NUM_REGS, PENDING_TRAP, ICOUNT, CYCLE, INSTRET, INSTRUCTION, LAST_BRANCH | ||||
|     }; | ||||
|  | ||||
|     using reg_t = uint${addrDataWidth}_t; | ||||
| @@ -162,6 +162,12 @@ struct ${coreDef.name.toLowerCase()}: public arch_if { | ||||
|         registers.each { reg -> if(reg.size>0) {%>  | ||||
|         uint${byteSize(reg.size)}_t ${reg.name} = 0;<% | ||||
|         }}%> | ||||
|         uint32_t trap_state = 0, pending_trap = 0; | ||||
|         uint64_t icount = 0; | ||||
|         uint64_t cycle = 0; | ||||
|         uint64_t instret = 0; | ||||
|         uint32_t instruction = 0; | ||||
|         uint32_t last_branch = 0; | ||||
|     } reg; | ||||
| #pragma pack(pop) | ||||
|     uint32_t trap_state = 0, pending_trap = 0; | ||||
|   | ||||
| @@ -41,8 +41,8 @@ using namespace iss::arch; | ||||
|  | ||||
| constexpr std::array<const char*, 36>    iss::arch::traits<iss::arch::tgc_c>::reg_names; | ||||
| constexpr std::array<const char*, 36>    iss::arch::traits<iss::arch::tgc_c>::reg_aliases; | ||||
| constexpr std::array<const uint32_t, 36> iss::arch::traits<iss::arch::tgc_c>::reg_bit_widths; | ||||
| constexpr std::array<const uint32_t, 36> iss::arch::traits<iss::arch::tgc_c>::reg_byte_offsets; | ||||
| constexpr std::array<const uint32_t, 43> iss::arch::traits<iss::arch::tgc_c>::reg_bit_widths; | ||||
| constexpr std::array<const uint32_t, 43> iss::arch::traits<iss::arch::tgc_c>::reg_byte_offsets; | ||||
|  | ||||
| tgc_c::tgc_c()  = default; | ||||
|  | ||||
|   | ||||
| @@ -58,7 +58,7 @@ template <> struct traits<tgc_c> { | ||||
|     constexpr static unsigned FP_REGS_SIZE = 0; | ||||
|  | ||||
|     enum reg_e { | ||||
|         X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29, X30, X31, PC, NEXT_PC, PRIV, DPC, NUM_REGS | ||||
|         X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19, X20, X21, X22, X23, X24, X25, X26, X27, X28, X29, X30, X31, PC, NEXT_PC, PRIV, DPC, NUM_REGS, TRAP_STATE=NUM_REGS, PENDING_TRAP, ICOUNT, CYCLE, INSTRET, INSTRUCTION, LAST_BRANCH | ||||
|     }; | ||||
|  | ||||
|     using reg_t = uint32_t; | ||||
| @@ -71,11 +71,11 @@ template <> struct traits<tgc_c> { | ||||
|  | ||||
|     using phys_addr_t = iss::typed_addr_t<iss::address_type::PHYSICAL>; | ||||
|  | ||||
|     static constexpr std::array<const uint32_t, 36> reg_bit_widths{ | ||||
|         {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,8,32}}; | ||||
|     static constexpr std::array<const uint32_t, 43> reg_bit_widths{ | ||||
|         {32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,8,32,32,32,64,64,64,32,32}}; | ||||
|  | ||||
|     static constexpr std::array<const uint32_t, 36> reg_byte_offsets{ | ||||
|         {0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,137}}; | ||||
|     static constexpr std::array<const uint32_t, 43> reg_byte_offsets{ | ||||
|         {0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,137,141,145,149,157,165,173,177}}; | ||||
|  | ||||
|     static const uint64_t addr_mask = (reg_t(1) << (XLEN - 1)) | ((reg_t(1) << (XLEN - 1)) - 1); | ||||
|  | ||||
| @@ -248,6 +248,12 @@ struct tgc_c: public arch_if { | ||||
|         uint32_t NEXT_PC = 0;  | ||||
|         uint8_t PRIV = 0;  | ||||
|         uint32_t DPC = 0; | ||||
|         uint32_t trap_state = 0, pending_trap = 0; | ||||
|         uint64_t icount = 0; | ||||
|         uint64_t cycle = 0; | ||||
|         uint64_t instret = 0; | ||||
|         uint32_t instruction = 0; | ||||
|         uint32_t last_branch = 0; | ||||
|     } reg; | ||||
| #pragma pack(pop) | ||||
|     uint32_t trap_state = 0, pending_trap = 0; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user