diff options
Diffstat (limited to 'rtl/core/cp15')
| -rw-r--r-- | rtl/core/cp15/cp15.sv | 27 | ||||
| -rw-r--r-- | rtl/core/cp15/cpuid.sv | 18 |
2 files changed, 45 insertions, 0 deletions
diff --git a/rtl/core/cp15/cp15.sv b/rtl/core/cp15/cp15.sv index b31ccb7..3855e13 100644 --- a/rtl/core/cp15/cp15.sv +++ b/rtl/core/cp15/cp15.sv @@ -1,4 +1,5 @@ `include "core/uarch.sv" +`include "core/cp15/map.sv" module core_cp15 ( @@ -10,4 +11,30 @@ module core_cp15 output word read ); + logic load; + reg_num crm; + cp_opcode op1, op2; + + assign load = dec.load; + assign crm = dec.crm; + assign op1 = dec.op1; + assign op2 = dec.op2; + + word read_cpuid; + + core_cp15_cpuid cpuid + ( + .read(read_cpuid), + .* + ); + + always_comb + unique case(dec.crn) + `CP15_CRN_CPUID: + read = read_cpuid; + + default: + read = {$bits(read){1'bx}}; + endcase + endmodule diff --git a/rtl/core/cp15/cpuid.sv b/rtl/core/cp15/cpuid.sv new file mode 100644 index 0000000..fd24631 --- /dev/null +++ b/rtl/core/cp15/cpuid.sv @@ -0,0 +1,18 @@ +`include "core/uarch.sv" +`include "core/cp15/map.sv" + +module core_cp15_cpuid +( + output word read +); + + /* If an <opcode2> value corresponding to an unimplemented or + * reserved ID register is encountered, the System Control + * coprocessor returns the value of the main ID register. + * + * ARM810.pdf, p. 104: Reading from CP15 register 0 returns + * the value 0x4101810x. + */ + assign read = 32'h41018100; + +endmodule |
