forked from intel/device-modeling-language
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RELEASENOTES-1.4.docu
240 lines (238 loc) · 13.1 KB
/
RELEASENOTES-1.4.docu
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
<!--
© 2021 Intel Corporation
SPDX-License-Identifier: MPL-2.0
-->
<rn id="dml-1.4">
<name>DML 1.4</name>
<build-id value="6012"><add-note> Initial release of DML version 1.4. The new
language version is
documented in the <em>DML 1.4 reference manual</em>
document. Some highlights:
<dl>
<dt>Better compilation performance</dt><dd>2-3 times faster
compile for devices with large register banks</dd>
<dt>Improved reset support</dt><dd>The reset mechanism in 1.4
is not hard-coded, and can be adapted to different reset
flows</dd>
<dt>Templates as types</dt><dd>You can pass around references to
banks/registers/fields etc in variables</dd>
<dt>Multiple levels of overrides</dt><dd>Methods and
parameters can be overridden any number of times. In 1.2,
this is often prevented by standard library legacy.</dd>
<dt>Syntax simplification</dt><dd>Many adjustments to improve
readability; for instance, removal of <tt>$</tt> and C-like
method syntax</dd>
<dt>Standard library API simplification</dt><dd>Clearer API,
easier to understand</dd>
<dt>Updated language semantics</dt><dd>More consistent and
well-specified behaviour of method bodies and expressions,
providing more predictable model behaviour</dd>
</dl> </add-note></build-id>
<build-id value="6013"><add-note> Export declarations are now available as
replacements for
<tt>method extern</tt>. </add-note></build-id>
<build-id value="6018"><add-note> The dml12-compatibility.dml library file is
now available.
This file should be included from dml 1.4 files that
use or override templates defined in dml-builtins and
are meant to be backwards-compatible with dml
1.2 devices. </add-note></build-id>
<build-id value="6018"><add-note> Templates can now override <tt>get</tt> or
<tt>set</tt> method
templates and still be inherited by both registers
and fields. </add-note></build-id>
<build-id value="6019"><add-note> Fixed two problems where devices with a
very large number of
registers compiles slowly <bug number="SIMICS-13802"/>
<bug number="SIMICS-13803"/>. </add-note></build-id>
<build-id value="6024"><add-note> The <tt>import</tt> statement has been
changed: If the path
starts with <tt>./</tt> or <tt>../</tt>, the path is now
interpreted relative to the directory of the importing file
<bug number="2209506845"/>. </add-note></build-id>
<build-id value="6024"><add-note> Fixed a problem where parameters defined in
global scope in DML
1.4 (typically auto-converted from a DML 1.2 <tt>constant</tt>)
had to be accessed with <tt>$</tt> when referenced from a
parameter in a DML 1.2 file. </add-note></build-id>
<build-id value="6037"><add-note> The <tt>read_unmapped_bits</tt> and the
<tt>write_unmapped_bits</tt>
methods are now available to be overridden for registers. This can
be used to customize behaviour of registers with fields that do not
cover all register bits. </add-note></build-id>
<build-id value="6037"><add-note> Fixed bug in dml-lib "common.dml" where
<tt>pci_system_error</tt>
could not be called. </add-note></build-id>
<build-id value="6041"><add-note> Fixed a bug that sometimes caused a crash
when calling the default
implementation of a shared method. </add-note></build-id>
<build-id value="6041"><add-note> Fixed a bug that caused unused goto labels
in generated C code. </add-note></build-id>
<build-id value="6041"><add-note> Fixed a bug that caused DMLC to ignore
compile errors in the
right operands of the <tt>&&</tt> and <tt>||</tt>
operators. For instance, in <tt>a && b</tt>,
and <tt>a</tt> resolves to constant false,
and <tt>b</tt> is nowhere defined, then DMLC would
previously silently evaluate the expression to false; now it
will give a proper error message.
Expressions like <tt>cond_is_defined && cond()</tt>, where
<tt>cond_is_defined</tt> is a constant parameter, can be
rewritten as <tt>pred_is_defined #? pred()
#: false</tt>. </add-note></build-id>
<build-id value="6042"><add-note> The <tt>get</tt> and <tt>set</tt> methods
are now overrideable in
bank objects. </add-note></build-id>
<build-id value="6044"><add-note> Fixed a bug in how log group names are
generated. </add-note></build-id>
<build-id value="6046"><add-note> In <tt>switch</tt> statements,
<tt>case</tt> labels are now
permitted inside <tt>#if</tt> blocks
<bug number="14011267833"/>. </add-note></build-id>
<build-id value="6046"><add-note> Fixed an issue where the <tt>++</tt> and
<tt>--</tt> operators could not
be applied to pointers. </add-note></build-id>
<build-id value="6046"><add-note> Added compile warnings when trying to
override a library method
that was called in DML 1.2 but is ignored in
DML 1.4. </add-note></build-id>
<build-id value="6049"><add-note> Obtaining the address of a member of a
layout is now supported
<bug number="SIMICS-15381"/>. </add-note></build-id>
<build-id value="6049"><add-note> DMLC now gives an explicit error message on
name collision
between two members of a <tt>layout</tt> or <tt>bitfields</tt>
<bug number="SIMICS-9088"/>. </add-note></build-id>
<build-id value="6051"><add-note> Fixed issue with passing endian integers as
arguments to shared methods. </add-note></build-id>
<build-id value="6052"><add-note> The <fun>get</fun> method in <tt>bank</tt>
objects is now declared
<tt>throws</tt>; a read outside registers causes an exception
like in DML 1.2, causing the inquiry access to fail. </add-note></build-id>
<build-id value="6052"><add-note> The parameters <tt>partial</tt> and
<tt>overlapping</tt> in banks
are now <tt>true</tt> by default. </add-note></build-id>
<build-id value="6053"><add-note> Field objects now have a <tt>val</tt>
member. This is currently
a bitslice into the field's bits within the parent register's
storage. The .val parameter can be read, and it can be written
using assignment (<tt>=</tt>); however, the operators
<tt>--</tt> and <tt>++</tt> do not work
yet. Also, <tt>.val</tt> cannot be accessed from a shared
method. </add-note></build-id>
<build-id value="6053"><add-note> Fix a bug that caused DMLC to crash in
declarations of field
objects in files with a <tt>bitorder be</tt> declaration
<bug number="SIMINT-1275"/>. </add-note></build-id>
<build-id value="6056"><add-note> DMLC will now give you a better error in
some cases where a
typed template parameter has an initializer that cannot
be evaluated in a static context. </add-note></build-id>
<build-id value="6056"><add-note> The experimental <tt>bank_obj</tt> template
is now available
in the <tt>utility</tt> file,
providing a single shared method <fun>bank_obj</fun> which
returns the bank configuration object of a bank. </add-note></build-id>
<build-id value="6059"><add-note> The formatting of the log message output in
the default
implementation of partial register reads and write has
been improved. </add-note></build-id>
<build-id value="6060"><add-note> You can now access <tt>.len</tt> on lists
and sequences to obtain
the number of elements they contain. This expression is constant
for lists and non-constant for sequences. </add-note></build-id>
<build-id value="6060"><add-note> Reverted a change that allowed DMLC to
provide better error messages
when typed parameters had non-static initializers since it was overly
conservative in some cases. </add-note></build-id>
<build-id value="6061"><add-note> Removed the syntax for goto
labels (<tt>label:</tt>). <tt>goto</tt> statements are already forbidden
in DML 1.4, so goto labels are useless. <tt>case</tt> and <tt>default</tt>
labels in <tt>switch</tt> blocks are still allowed. </add-note></build-id>
<build-id value="6061"><add-note> If the condition of a <tt>while</tt> loop
is statically
evaluated to false, then faulty code in the loop body can now
cause compile errors. Previously the loop body was
silently discarded. </add-note></build-id>
<build-id value="6075"><add-note> Removed incorrect documentation
of the deprecated 'banks' parameter. </add-note></build-id>
<build-id value="6079"><add-note> <tt>session</tt> variable declarations
are no longer permitted within methods marked with
<tt>inline</tt>. </add-note></build-id>
<build-id value="6079"><add-note> <tt>saved</tt> variable
declarations are now available. These can be used to declare
variables that behave similarly to <tt>session</tt> variables,
but that are automatically checkpointed.
<bug number="SIMICS-7031"/>. </add-note></build-id>
<build-id value="6079"><add-note> If a <tt>static</tt> variable is
declared within a method declared under an object array, it will
now result in a separate instance of the variable for each
instance of the containing object.
<bug number="SIMICS-13738"/>. </add-note></build-id>
<build-id value="6079"><add-note> Fixed a bug that caused a crash
in <tt>print-device-regs</tt> and related commands, when
inspecting a function-mapped bank array in a DML 1.4 device
<bug number="1508646546"/>.</add-note></build-id>
<build-id value="6080"><add-note> If a method argument has mismatching
type in an override, then an error will now be
reported <bug number="SIMICS-9337"/>.</add-note></build-id>
<build-id value="6081"><add-note> DMLC will now report errors for
references to undefined type names in some rare cases that
previously were ignored, such as unused typedefs and functions
imported from C using <tt>extern</tt>
<bug number="SIMICS-16187"/>.</add-note></build-id>
<build-id value="6081"><add-note> DMLC will now report an error for
methods in <tt>implement</tt> blocks, if the method's return
type does not match the interface method. Previously, only input
arguments were typechecked in interface
methods</add-note></build-id>
<build-id value="6082"><add-note> The parameter <tt>connect</tt> now
accepts the values <tt>"none"</tt> and <tt>"pseudo"</tt>, just
like attributes and registers do.</add-note></build-id>
<build-id value="6084"><add-note> Added a
template <tt>init_as_subobj</tt> which can be used
on <tt>connect</tt> objects to make it instantiate a subobject
automatically <bug number="SIMICS-16131"/>.</add-note></build-id>
<build-id value="6095"><add-note> Added <tt>saved</tt> variables declared
within templates to the template type.</add-note></build-id>
<build-id value="6095"><add-note> Added parameter <tt>unmapped_offset</tt>
which makes a register unmapped.</add-note></build-id>
<build-id value="6102"><add-note>Fixed typo in documentation
of <tt>miss_pattern_bank</tt> template.</add-note></build-id>
<build-id value="6104"><add-note> Corrected documentation in reference manual
regarding <tt>read_bits</tt> and <tt>write_bits</tt>
methods. </add-note></build-id>
<build-id value="6104"><add-note> An illegal arithmetic operation,
such as a division by zero or negative shift, no longer crashes
the simulation. Instead it is reported as a critical error, and evaluates
to zero <bug number="SIMICS-16639"/>.</add-note></build-id>
<build-id value="6119"><add-note> You can now use the syntax <tt>X then Y</tt>
for the level in log statements to have the first log happen on log level
<tt>X</tt> and subsequent logs happen on level <tt>Y</tt>
<bug number="SIMICS-13513"/>.</add-note></build-id>
<build-id value="6119"><add-note> Fixed an issue where multiple registers
or fields instantiating <tt>read_only</tt> or similar templates from
<tt>utility.dml</tt> would switch log-level at the same time
<bug number="SIMICS-7025"/>.</add-note></build-id>
<build-id value="6123"><add-note> You can now access <tt>.len</tt> on
constant-sized object or value arrays to obtain the number of elements
they contain. These expressions are constant
<bug number="SIMICS-13114"/>.</add-note></build-id>
<build-id value="6127"><add-note> <tt>after</tt> statements now support
cycles as a unit of time <bug number="SIMICS-8798"/>.</add-note>
</build-id>
<build-id value="6129"><add-note> The compiler now explicitly
forbids using the <tt>export</tt> statement on a method with
multiple output parameters.</add-note></build-id>
<build-id value="6129"><add-note> Various improvements to the reference
manual has been made. </add-note></build-id>
<build-id value="6131"><add-note> It is no longer an error to instantiate
a non-existing template from within a dead branch of an `#if` block.
</add-note></build-id>
<build-id value="next"><add-note> Two values of the same template type
can now be compared for equality, and are equal when they
reference the same object <bug number="SIMICS-6998"/>.
The internal representation of values of template types has been changed.
It is no longer allowed to cast such values to integer or pointer types.
</add-note></build-id>
</rn>