diff options
| author | Alejandro Soto <alejandro@34project.org> | 2022-12-10 19:36:38 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2022-12-10 19:36:38 -0600 |
| commit | 8026947ecdf9b023c3720b26bf257bf46f7a2805 (patch) | |
| tree | 8b2fbd0beb29c575730a76b010e8aa35977d5417 /rtl/core/cp15/cp15.sv | |
| parent | 02f76bae32e295bf1da04e38dfa12dfbc5832aec (diff) | |
Implement rest of cp15 registers
Diffstat (limited to 'rtl/core/cp15/cp15.sv')
| -rw-r--r-- | rtl/core/cp15/cp15.sv | 94 |
1 files changed, 88 insertions, 6 deletions
diff --git a/rtl/core/cp15/cp15.sv b/rtl/core/cp15/cp15.sv index 907576a..f924c21 100644 --- a/rtl/core/cp15/cp15.sv +++ b/rtl/core/cp15/cp15.sv @@ -13,15 +13,15 @@ module core_cp15 ); logic load; - reg_num crm; + reg_num crn, crm; cp_opcode op1, op2; + assign {crn, crm} = {dec.crn, dec.crm}; + assign {op1, op2} = {dec.op1, dec.op2}; assign load = dec.load; - assign crm = dec.crm; - assign op1 = dec.op1; - assign op2 = dec.op2; - word read_cpuid; + word read_cpuid, read_syscfg, read_ttbr, read_domain, + read_far, read_fsr, read_cache_lockdown, read_tlb_lockdown; core_cp15_cpuid cpuid ( @@ -29,11 +29,93 @@ module core_cp15 .* ); + core_cp15_syscfg syscfg + ( + .read(read_syscfg), + .transfer(transfer && crn == `CP15_CRN_SYSCFG), + .* + ); + + core_cp15_ttbr ttbr + ( + .read(read_ttbr), + .transfer(transfer && crn == `CP15_CRN_TTBR), + .* + ); + + core_cp15_domain domain + ( + .read(read_domain), + .transfer(transfer && crn == `CP15_CRN_DOMAIN), + .* + ); + + core_cp15_far far + ( + .read(read_far), + .transfer(transfer && crn == `CP15_CRN_FAR), + .* + ); + + core_cp15_far fsr + ( + .read(read_fsr), + .transfer(transfer && crn == `CP15_CRN_FSR), + .* + ); + + core_cp15_cache cache + ( + .transfer(transfer && crn == `CP15_CRN_CACHE), + .* + ); + + core_cp15_tlb tlb + ( + .transfer(transfer && crn == `CP15_CRN_TLB), + .* + ); + + core_cp15_cache_lockdown cache_lockdown + ( + .read(read_cache_lockdown), + .transfer(transfer && crn == `CP15_CRN_CACHE_LCK), + .* + ); + + core_cp15_tlb_lockdown tlb_lockdown + ( + .read(read_tlb_lockdown), + .transfer(transfer && crn == `CP15_CRN_TLB_LCK), + .* + ); + always_comb - unique case(dec.crn) + unique case(crn) `CP15_CRN_CPUID: read = read_cpuid; + `CP15_CRN_SYSCFG: + read = read_syscfg; + + `CP15_CRN_TTBR: + read = read_ttbr; + + `CP15_CRN_DOMAIN: + read = read_domain; + + `CP15_CRN_FAR: + read = read_far; + + `CP15_CRN_FSR: + read = read_fsr; + + `CP15_CRN_CACHE_LCK: + read = read_cache_lockdown; + + `CP15_CRN_TLB_LCK: + read = read_tlb_lockdown; + default: read = {$bits(read){1'bx}}; endcase |
