summaryrefslogtreecommitdiff
path: root/rtl/core/mmu/format.sv
blob: 83ca3eb4aeeb9e0d1b56d6c8eaa0575b5c4b9f20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
`ifndef CORE_MMU_FORMAT_SV
`define CORE_MMU_FORMAT_SV

typedef logic[17:0] mmu_base;

`define MMU_L1_INDEX     [29:18]
`define MMU_L1_FAULT     2'b00
`define MMU_L1_PAGETABLE 2'b01
`define MMU_L1_SECTION   2'b10

typedef struct packed
{
	logic[31:10] base;
	logic[9:9]   imp;
	logic[8:5]   domain;
	logic[4:2]   sbz;
	logic[1:0]   typ;
} mmu_l1_pagetable;

typedef struct packed
{
	logic[31:20] base;
	logic[19:15] sbz0;
	logic[14:12] tex;
	logic[11:10] ap;
	logic[9:9]   imp;
	logic[8:5]   domain;
	logic[4:4]   sbz1;
	logic[3:3]   c;
	logic[2:2]   b;
	logic[1:0]   typ;
} mmu_l1_section;

`define MMU_SECTION_INDEX [17:0]

`define MMU_L2_INDEX    [17:10]
`define MMU_L2_FAULT    2'b00
`define MMU_L2_LARGE    2'b01
`define MMU_L2_SMALL    2'b10
`define MMU_L2_SMALLEXT 2'b11

typedef struct packed
{
	logic[31:16] base;
	logic[15:15] sbz;
	logic[14:12] tex;
	logic[11:10] ap3;
	logic[9:8]   ap2;
	logic[7:6]   ap1;
	logic[5:4]   ap0;
	logic[3:3]   c;
	logic[2:2]   b;
	logic[1:0]   typ;
} mmu_l2_large;

typedef struct packed
{
	logic[31:12] base;
	logic[11:10] ap3;
	logic[9:8]   ap2;
	logic[7:6]   ap1;
	logic[5:4]   ap0;
	logic[3:3]   c;
	logic[2:2]   b;
	logic[1:0]   typ;
} mmu_l2_small;

//TODO: struct mmu_l2_smallext

`define MMU_LARGE_INDEX [13:0]
`define MMU_SMALL_INDEX [9:0]

`endif