Project

General

Profile

MMU description » History » Version 119

Andrei Tatarnikov, 01/29/2015 03:03 PM

1 24 Alexander Kamkin
h1. MMU Description
2 1 Taya Sergeeva
3 66 Alexander Kamkin
_~By Alexander Kamkin and Taya Sergeeva~_
4 62 Alexander Kamkin
5 63 Alexander Kamkin
{{toc}}
6
7 35 Alexander Kamkin
A _memory management unit_ (_MMU_) is known to be one of the most complex and error-prone components of a modern microprocessor. MicroTESK has a special subsystem, called _MMU subsystem_, intended for (1) specifying memory devices and (2) deriving testing knowledge from such specifications. The subsystem provides unified facilities for describing memory buffers (like _L1_ and _L2 caches_, _translation look-aside buffers_ (_TLBs_), etc.) as well as a means for connecting several buffers into a memory hierarchy.
8 1 Taya Sergeeva
9 72 Alexander Kamkin
h2. Grammar
10 66 Alexander Kamkin
11
<pre>
12 102 Andrei Tatarnikov
startRule
13
    : declaration* EOF!
14 66 Alexander Kamkin
    ;
15 1 Taya Sergeeva
16 102 Andrei Tatarnikov
declaration
17 66 Alexander Kamkin
    : address
18 102 Andrei Tatarnikov
    | segment
19 66 Alexander Kamkin
    | buffer
20 102 Andrei Tatarnikov
    | mmu
21 66 Alexander Kamkin
    ;
22
</pre>
23
24 103 Andrei Tatarnikov
The expression syntax is derived from nML/Sim-nML (see [[Sim-nML Language Reference]]).
25 89 Alexander Kamkin
26 91 Alexander Kamkin
h2. Address Description (address)
27 56 Taya Sergeeva
28 1 Taya Sergeeva
A buffer is accessed by an _address_, which is typically a _bit vector_ of a fixed length (width). Different buffers are allowed to have a common address space (e.g., L1 and L2 are usually both addressed by physical addresses). However, in general case, each buffer has its own domain.
29
30 110 Andrei Tatarnikov
An address space is described using a keyword @address@. The description includes the address type _identifier_ and the address _width_. The latter is specified in brackets. Its value should be non-negative (zero-length addresses are permitted).
31 1 Taya Sergeeva
32 75 Alexander Kamkin
h3. Grammar
33 69 Alexander Kamkin
34
<pre>
35
address
36 104 Andrei Tatarnikov
    : ''address'' addressTypeID ''('' expr '')''
37 69 Alexander Kamkin
    ;
38
</pre>
39
40 111 Andrei Tatarnikov
h3. Examples
41 106 Andrei Tatarnikov
42
<pre>// A 64-bit virtual address (VA).
43
address VA(64)</pre>
44
45
<pre>// A 36-bit physical address (PA).
46
address PA(36)</pre>
47
48 112 Andrei Tatarnikov
h2. Address Space Segment Description (segment)
49 1 Taya Sergeeva
50 112 Andrei Tatarnikov
An address space segment is specified using the @segment@ keyword. A segment is associated with a specific address type. It is possible to specify any number (&ge; 0) of segments (with different names) for one address type. Each segment is characterized by its _identifier_ and _address range_. Different segments should have different names, but address ranges are allowed to overlap, and moreover, to be the same.
51 1 Taya Sergeeva
52 112 Andrei Tatarnikov
h3. Grammar
53 69 Alexander Kamkin
54
<pre>
55 112 Andrei Tatarnikov
segment
56
    : ''segment'' segmentID ''('' argumentID '':'' addressTypeID '')''
57
        ''range'' ''='' ''('' expr '','' expr '')''
58 99 Alexander Kamkin
    ;
59 97 Alexander Kamkin
</pre>
60
61 112 Andrei Tatarnikov
h3. Examples
62 97 Alexander Kamkin
63 1 Taya Sergeeva
<pre>
64 112 Andrei Tatarnikov
segment USEG (va: VA)
65
  range = (0x0000000000000000, 0x000000007fffffff)
66 97 Alexander Kamkin
</pre>
67
68 91 Alexander Kamkin
h2. Buffer Description (buffer)
69 76 Alexander Kamkin
70 115 Andrei Tatarnikov
A buffer is described using a keyword @buffer@. The description specifies a set of parameters, including @ways@, @sets@, @entry@, @index@, @match@ and @policy@. All of the parameters except @index@ (if @sets = 1@) and @policy@ are obligatory.
71 75 Alexander Kamkin
72
h3. Grammar
73 1 Taya Sergeeva
74 75 Alexander Kamkin
<pre>
75 83 Alexander Kamkin
buffer
76 115 Andrei Tatarnikov
    : ''buffer'' bufferTypeID ''('' addressArgID '':'' addressTypeID '')''
77 90 Alexander Kamkin
        (bufferParameter)*
78 75 Alexander Kamkin
    ;
79
80
bufferParameter
81
    : ways
82
    | sets
83 115 Andrei Tatarnikov
    | entry
84 75 Alexander Kamkin
    | index
85
    | match
86
    | policy
87
    ;
88 1 Taya Sergeeva
</pre>
89
90 78 Alexander Kamkin
h3. Buffer Associativity (ways)
91
92 84 Alexander Kamkin
The @ways@ parameter specifies the buffer _associativity_ (the number of lines in a set). The parameter is obligatory; its value should be positive.
93 78 Alexander Kamkin
94 1 Taya Sergeeva
h4. Grammar
95 80 Alexander Kamkin
96
<pre>
97
ways
98
    : ''ways'' ''='' expr
99 1 Taya Sergeeva
    ;
100
</pre>
101
102 80 Alexander Kamkin
h3. Buffer Length (sets)
103 83 Alexander Kamkin
104 84 Alexander Kamkin
The @sets@ parameter specifies the buffer _length_ (the number of sets a cache). The parameter is obligatory; its value should be positive.
105 78 Alexander Kamkin
106 1 Taya Sergeeva
h4. Grammar
107 80 Alexander Kamkin
108
<pre>
109 1 Taya Sergeeva
sets
110 80 Alexander Kamkin
    : ''sets'' ''='' expr
111
    ;
112 1 Taya Sergeeva
</pre>
113
114 116 Andrei Tatarnikov
h3. Buffer Line Format (entry)
115 96 Alexander Kamkin
116 116 Andrei Tatarnikov
The @entry@ parameter specifies the buffer _line format_ (a number of named fields). Any number (&ge; 0) of formats (with different names) can be specified for one buffer.
117 83 Alexander Kamkin
118 82 Alexander Kamkin
A field has three attributes: a name, a width and, optionally, an initial value.
119
120
h4. Grammar
121 1 Taya Sergeeva
122 82 Alexander Kamkin
<pre>
123 83 Alexander Kamkin
format
124 119 Andrei Tatarnikov
    : ''entry'' ''='' ''('' field ('','' field)* '')''
125 82 Alexander Kamkin
    ;
126 1 Taya Sergeeva
127
field
128
    : fieldID '':'' expr (''='' expr)?
129
    ;
130
</pre>
131
132
h3. Buffer Index Function (index)
133 83 Alexander Kamkin
134 84 Alexander Kamkin
The @index@ parameter specifies the _address-to-index function_, which maps an address into the set index. The function may be omitted if the number of sets is @1@.
135 1 Taya Sergeeva
136
h4. Grammar
137
138 83 Alexander Kamkin
<pre>
139 1 Taya Sergeeva
index
140 90 Alexander Kamkin
    : ''index'' ''='' expr
141 83 Alexander Kamkin
    ;
142
</pre>
143 1 Taya Sergeeva
144
h3. Buffer Match Predicate (match)
145 83 Alexander Kamkin
146 84 Alexander Kamkin
The @match@ parameter specifies the _address-line match predicate_, which checks if an address matches a line. The parameter is obligatory.
147 83 Alexander Kamkin
148
h4. Grammar
149 1 Taya Sergeeva
150 83 Alexander Kamkin
<pre>
151
index
152 90 Alexander Kamkin
    : ''match'' ''='' expr
153 1 Taya Sergeeva
    ;
154
</pre>
155 83 Alexander Kamkin
156 1 Taya Sergeeva
h3. Buffer Data Replacement Policy (policy)
157
158 57 Taya Sergeeva
The @policy@ parameters specifies the _data replacement_ (_eviction_) _policy_. The parameter is optional. The list of supported policies includes: @RANDOM@, @FIFO@, @PLRU@ and @LRU@.
159 84 Alexander Kamkin
160 1 Taya Sergeeva
h4. Grammar
161
162
<pre>
163
policy
164
    : ''policy'' ''='' policyID
165 54 Taya Sergeeva
    ;
166
</pre>
167
168 1 Taya Sergeeva
h3. Examples
169
170 84 Alexander Kamkin
<pre>
171 90 Alexander Kamkin
// A 4-way set associative cache (L1) addressed by physical addresses (PA).
172 118 Andrei Tatarnikov
buffer L1(addr: PA)
173 84 Alexander Kamkin
  // The cache associativity.
174 1 Taya Sergeeva
  ways = 4
175 84 Alexander Kamkin
  // The number of sets.
176 90 Alexander Kamkin
  sets = 128
177 1 Taya Sergeeva
  // The line format.
178 118 Andrei Tatarnikov
  entry = (
179 85 Alexander Kamkin
    V    : 1 = 0, // The validity flag (by default, the line is invalid).
180
    TAG  : 24,    // The tag (the <35..12> address bits).
181 1 Taya Sergeeva
    DATA : 256    // The data (4 double words).
182 90 Alexander Kamkin
  )
183
  // The address-to-index function (example: using address fields).
184
  index = addr.INDEX
185
  // The address-line predicate (example: using address bits).
186 101 Alexander Kamkin
  match = addr<35..12> == LINE.TAG
187 1 Taya Sergeeva
  // The data replacement policy (example: using predefined policy LRU - Least Recently Used).
188
  policy = LRU
189 91 Alexander Kamkin
</pre>
190
191
h2. Memory Description (memory)
192
193 92 Alexander Kamkin
A memory is described using a keyword @memory@. The description includes two obligatory parameters @read@ and @write@.
194
195 91 Alexander Kamkin
h3. Grammar
196
197
<pre>
198 1 Taya Sergeeva
memory
199 92 Alexander Kamkin
    : ''memory'' memoryTypeID ''('' addressTypeID addressArgID '')''
200 91 Alexander Kamkin
        (memoryParameter)*
201
    ;
202
203
memoryParameter
204
    : read
205
    | write
206
    ;
207 1 Taya Sergeeva
</pre>
208 91 Alexander Kamkin
209 92 Alexander Kamkin
h3. Memory Read Action (read)
210 1 Taya Sergeeva
211 92 Alexander Kamkin
The @read@ parameter specifies the _read action_, which is a sequence of statements describing how the read operation is to be performed (by means of data transfers between buffers). The parameter is obligatory.
212
213 91 Alexander Kamkin
h4. Grammar
214
215
<pre>
216
read
217
    : ''read'' ''='' ''{'' sequence ''}''
218 1 Taya Sergeeva
    ;
219
</pre>
220
221 92 Alexander Kamkin
h3. Memory Write Action (write)
222
223
The @write@ parameter specifies the _read action_, which is a sequence of statements describing how the write operation is to be performed (by means of data transfers between buffers). The parameter is obligatory.
224 91 Alexander Kamkin
225
h4. Grammar
226
227
<pre>
228
write
229
    : ''write'' ''='' ''{'' sequence ''}''
230
    ;
231
</pre>
232
233
h3. Examples
234
235
<pre>
236 93 Alexander Kamkin
// A memory unit addressed by virtual addresses (VA).
237
memory Memory(VA addr)
238
  // The read action.
239 1 Taya Sergeeva
  read = {
240 93 Alexander Kamkin
    // Some statements.
241
    ...
242 1 Taya Sergeeva
  }
243 93 Alexander Kamkin
  // The write action.
244 1 Taya Sergeeva
  write = {
245 93 Alexander Kamkin
    // Some statements.
246
    ...
247 91 Alexander Kamkin
  }
248 1 Taya Sergeeva
</pre>