Compare commits
	
		
			4 Commits
		
	
	
		
			32848ec396
			...
			8a5fe58d51
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 8a5fe58d51 | |||
| 16cd6d5ff5 | |||
| ee2ded931d | |||
| 95ba5c901a | 
| @@ -142,9 +142,11 @@ else() | |||||||
| endif() | endif() | ||||||
|  |  | ||||||
| foreach(F IN LISTS TGC_SOURCES) | foreach(F IN LISTS TGC_SOURCES) | ||||||
|     string(REGEX REPLACE  ".*/([^/]*)\.cpp"  "\\1" CORE_NAME_LC ${F}) |     if (${F} MATCHES ".*/arch/([^/]*)\.cpp") | ||||||
|     string(TOUPPER ${CORE_NAME_LC} CORE_NAME) |         string(REGEX REPLACE  ".*/([^/]*)\.cpp"  "\\1" CORE_NAME_LC ${F}) | ||||||
|     target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) |         string(TOUPPER ${CORE_NAME_LC} CORE_NAME) | ||||||
|  |         target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) | ||||||
|  |     endif() | ||||||
| endforeach() | endforeach() | ||||||
|  |  | ||||||
| if(WITH_LLVM) | if(WITH_LLVM) | ||||||
| @@ -181,9 +183,11 @@ if(TARGET scc-sysc) | |||||||
|     target_compile_definitions(${PROJECT_NAME} PUBLIC WITH_SYSTEMC) |     target_compile_definitions(${PROJECT_NAME} PUBLIC WITH_SYSTEMC) | ||||||
|     target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) |     target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) | ||||||
|     foreach(F IN LISTS TGC_SOURCES) |     foreach(F IN LISTS TGC_SOURCES) | ||||||
|         string(REGEX REPLACE  ".*/([^/]*)\.cpp"  "\\1" CORE_NAME_LC ${F}) |         if (${F} MATCHES ".*/arch/([^/]*)\.cpp") | ||||||
|         string(TOUPPER ${CORE_NAME_LC} CORE_NAME) |             string(REGEX REPLACE  ".*/([^/]*)\.cpp"  "\\1" CORE_NAME_LC ${F}) | ||||||
|         target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) |             string(TOUPPER ${CORE_NAME_LC} CORE_NAME) | ||||||
|  |             target_compile_definitions(${PROJECT_NAME} PRIVATE CORE_${CORE_NAME}) | ||||||
|  |         endif() | ||||||
|     endforeach() |     endforeach() | ||||||
|     target_link_libraries(${PROJECT_NAME} PUBLIC dbt-rise-tgc scc-sysc) |     target_link_libraries(${PROJECT_NAME} PUBLIC dbt-rise-tgc scc-sysc) | ||||||
|     if(WITH_LLVM) |     if(WITH_LLVM) | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ | |||||||
| def getRegisterSizes(){ | def getRegisterSizes(){ | ||||||
| 	def regs = registers.collect{it.size} | 	def regs = registers.collect{it.size} | ||||||
| 	regs[-1]=64 // correct for NEXT_PC | 	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 |     return regs | ||||||
| } | } | ||||||
| %> | %> | ||||||
|   | |||||||
| @@ -37,7 +37,7 @@ def nativeTypeSize(int size){ | |||||||
| } | } | ||||||
| def getRegisterSizes(){ | def getRegisterSizes(){ | ||||||
|     def regs = registers.collect{nativeTypeSize(it.size)} |     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 |     return regs | ||||||
| } | } | ||||||
| def getRegisterOffsets(){ | 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}; |     constexpr static unsigned FP_REGS_SIZE = ${constants.find {it.name=='FLEN'}?.value?:0}; | ||||||
|  |  | ||||||
|     enum reg_e { |     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; |     using reg_t = uint${addrDataWidth}_t; | ||||||
| @@ -162,6 +162,12 @@ struct ${coreDef.name.toLowerCase()}: public arch_if { | |||||||
|         registers.each { reg -> if(reg.size>0) {%>  |         registers.each { reg -> if(reg.size>0) {%>  | ||||||
|         uint${byteSize(reg.size)}_t ${reg.name} = 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; |     } reg; | ||||||
| #pragma pack(pop) | #pragma pack(pop) | ||||||
|     uint32_t trap_state = 0, pending_trap = 0; |     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_names; | ||||||
| constexpr std::array<const char*, 36>    iss::arch::traits<iss::arch::tgc_c>::reg_aliases; | 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, 43> 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_byte_offsets; | ||||||
|  |  | ||||||
| tgc_c::tgc_c()  = default; | tgc_c::tgc_c()  = default; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -58,7 +58,7 @@ template <> struct traits<tgc_c> { | |||||||
|     constexpr static unsigned FP_REGS_SIZE = 0; |     constexpr static unsigned FP_REGS_SIZE = 0; | ||||||
|  |  | ||||||
|     enum reg_e { |     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; |     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>; |     using phys_addr_t = iss::typed_addr_t<iss::address_type::PHYSICAL>; | ||||||
|  |  | ||||||
|     static constexpr std::array<const uint32_t, 36> reg_bit_widths{ |     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,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{ |     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}}; |         {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); |     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;  |         uint32_t NEXT_PC = 0;  | ||||||
|         uint8_t PRIV = 0;  |         uint8_t PRIV = 0;  | ||||||
|         uint32_t DPC = 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; |     } reg; | ||||||
| #pragma pack(pop) | #pragma pack(pop) | ||||||
|     uint32_t trap_state = 0, pending_trap = 0; |     uint32_t trap_state = 0, pending_trap = 0; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user