Final Ballot Response
Stephen Bailey (sbailey@Synopsys.COM)
Mon, 18 Oct 1999 11:54:35 -0600
This is a multi-part message in MIME format.
------=_NextPart_000_004B_01BF195F.8C29F250
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_004C_01BF195F.8C29F250"
------=_NextPart_001_004C_01BF195F.8C29F250
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
An action item I had from the last SVWG/VASG meeting was to distribute =
an electronic copy of the Final Ballot Response document. It is =
attached. The difference between this version and the previously =
distributed version is that I ensured that the responses were accurate =
with what Paul put in the LRM (previous version had =
suggestions/recommendations/approximate wording) and I also changed =
verbs to past-tense (for example "was changed" instead of "will be =
changed").
-----------------------------------------------------------
Stephen Bailey
Staff Corporate Applications Engineer
Synopsys Inc.
sbailey@synopsys.com
303-588-2001 (voice/mobile)
650-584-4893 (voice)
----------------------------------------------------------
------=_NextPart_001_004C_01BF195F.8C29F250
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
An action item I had from the last =
SVWG/VASG=20
meeting was to distribute an electronic copy of the Final Ballot =
Response=20
document. It is attached. The difference between this =
version and=20
the previously distributed version is that I ensured that the responses =
were=20
accurate with what Paul put in the LRM (previous version had=20
suggestions/recommendations/approximate wording) and I also changed =
verbs to=20
past-tense (for example "was changed" instead of "will be=20
changed").
-----------------------------------------------------------
S=
tephen=20
Bailey
Staff Corporate Applications Engineer
Synopsys Inc.
sbailey@synopsys.com
303-588-=
2001=20
(voice/mobile)
650-584-4893=20
(voice)
----------------------------------------------------------
------=_NextPart_001_004C_01BF195F.8C29F250--
------=_NextPart_000_004B_01BF195F.8C29F250
Content-Type: application/msword;
name="Final_Ballot_Response.rtf"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="Final_Ballot_Response.rtf"
{\rtf1\ansi\ansicpg1252\uc1 =
\deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\p=
anose 02020603050405020304}Times New =
Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose =
020b0604020202020204}Arial;}
{\f3\froman\fcharset2\fprq2{\*\panose =
05050102010706020507}Symbol;}{\f16\fswiss\fcharset0\fprq2{\*\panose =
020b0a04020102020204}Arial Black;}{\f17\froman\fcharset238\fprq2 Times =
New Roman CE;}{\f18\froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f20\froman\fcharset161\fprq2 Times New Roman =
Greek;}{\f21\froman\fcharset162\fprq2 Times New Roman =
Tur;}{\f22\froman\fcharset186\fprq2 Times New Roman =
Baltic;}{\f23\fswiss\fcharset238\fprq2 Arial =
CE;}{\f24\fswiss\fcharset204\fprq2 Arial Cyr;}
{\f26\fswiss\fcharset161\fprq2 Arial =
Greek;}{\f27\fswiss\fcharset162\fprq2 Arial =
Tur;}{\f28\fswiss\fcharset186\fprq2 Arial =
Baltic;}{\f113\fswiss\fcharset238\fprq2 Arial Black =
CE;}{\f114\fswiss\fcharset204\fprq2 Arial Black Cyr;}
{\f116\fswiss\fcharset161\fprq2 Arial Black =
Greek;}{\f117\fswiss\fcharset162\fprq2 Arial Black =
Tur;}{\f118\fswiss\fcharset186\fprq2 Arial Black =
Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green25=
5\blue255;\red0\green255\blue0;
\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red25=
5\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\gree=
n128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\b=
lue0;\red128\green128\blue128;
\red192\green192\blue192;}{\stylesheet{\widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid \snext0 =
Normal;}{\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid \sbasedon0 \snext15 heading =
1;}{
\s2\sl200\slmult0\keep\keepn\widctlpar\adjustright =
\f16\fs20\expnd-2\expndtw-10\kerning28\cgrid \sbasedon0 \snext15 heading =
2;}{\s3\li360\sl180\slmult0\keep\keepn\widctlpar\adjustright =
\f16\fs20\expnd-1\expndtw-5\kerning28\cgrid \sbasedon0 \snext15=20
heading 3;}{\s4\li720\sl180\slmult0\keep\keepn\widctlpar\adjustright =
\f16\fs18\expndtw-2\kerning28\cgrid \sbasedon0 \snext15 heading =
4;}{\s5\li1080\sl180\slmult0\keep\keepn\widctlpar\adjustright =
\f16\fs18\expndtw-2\kerning28\cgrid \sbasedon0 \snext15=20
heading 5;}{\s6\keepn\widctlpar\adjustright =
\b\f1\fs20\expnd-1\expndtw-5\cgrid \sbasedon0 \snext0 heading =
6;}{\*\cs10 \additive Default Paragraph =
Font;}{\s15\qj\sa220\sl180\slmult0\widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid=20
\sbasedon0 \snext15 Body =
Text;}{\s16\sl220\slmult0\keepn\widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid \sbasedon0 \snext16 =
Closing;}{\s17\sl-320\slmult0\keep\widctlpar\box\brdrs\brdrw15\brsp180=20
\pvpg\phpg\posx7344\posy1008\absw3557\abslock1\dxfrtext187\dfrmtxtx187\df=
rmtxty187\nowrap\adjustright \shading10000 =
\f16\fs32\expnd-3\expndtw-15\dn2\cgrid \sbasedon0 \snext17 Company =
Name;}{\s18\li-840\sb400\sa120\sl240\slmult0
\keep\keepn\widctlpar\adjustright =
\f16\fs96\expnd-1\expndtw-5\kerning28\cgrid \sbasedon0 \snext0 Document =
Label;}{\s19\sb220\sa220\sl180\slmult0\keep\widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid \sbasedon15 \snext0 Enclosure;}{
\s20\qj\sl180\slmult0\keep\widctlpar\tqc\tx4320\tqr\tx8640\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid \sbasedon15 \snext20 Header =
Base;}{\s21\qj\sb600\sl180\slmult0\keep\widctlpar\tqc\tx4320\tqr\tx8640\a=
djustright \f1\fs18\expnd-1\expndtw-5\cgrid=20
\sbasedon20 \snext21 =
footer;}{\s22\qj\sa600\sl180\slmult0\keep\widctlpar\tqc\tx4320\tqr\tx8640=
\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid \sbasedon20 \snext22 =
header;}{\s23\sl180\slmult0\keep\keepn\widctlpar\adjustright=20
\f16\fs20\expnd-2\expndtw-10\kerning28\cgrid \sbasedon15 \snext15 =
Heading =
Base;}{\s24\fi-720\li720\sa120\sl180\slmult0\keep\widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid \sbasedon15 \snext24 Message Header;}{
\s25\fi-720\li720\sb220\sa120\sl180\slmult0\keep\widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid \sbasedon24 \snext24 Message Header =
First;}{\*\cs26 \additive \f16\fs18\expnd-2\expndtw-10 Message Header =
Label;}{\s27\fi-720\li720\sa320\sl180\slmult0
\keep\widctlpar\brdrb\brdrs\brdrw15\brsp300 \adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid \sbasedon24 \snext15 Message Header =
Last;}{\s28\li720\widctlpar\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid =
\sbasedon0 \snext28 Normal Indent;}{\*\cs29 \additive=20
\fs18 page =
number;}{\s30\sl200\slmult0\keep\widctlpar\pvpg\phpg\posx1800\posy960\abs=
w5040\abslock1\dxfrtext180\dfrmtxtx180\dfrmtxty0\nowrap\adjustright =
\f1\fs16\expndtw-2\cgrid \sbasedon0 \snext30 Return =
Address;}{\s31\qj\sb660\sl180\slmult0
\keep\keepn\widctlpar\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid =
\sbasedon15 \snext31 =
Signature;}{\s32\sl180\slmult0\keep\keepn\widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid \sbasedon31 \snext0 Signature Job =
Title;}{\s33\sb720\sl180\slmult0
\keep\keepn\widctlpar\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid =
\sbasedon31 \snext32 Signature =
Name;}}{\*\listtable{\list\listtemplateid67698703\listsimple{\listlevel\l=
evelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\le=
veltext
\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname =
;}\listid178011091}{\list\listtemplateid67698703\listsimple{\listlevel\le=
velnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\lev=
eltext\'02\'00.;}{\levelnumbers
\'01;}\fi-360\li360\jclisttab\tx360 }{\listname =
;}\listid351105547}{\list\listtemplateid67698703\listsimple{\listlevel\le=
velnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\lev=
eltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360
\jclisttab\tx360 }{\listname =
;}\listid810169065}{\list\listtemplateid67698689\listsimple{\listlevel\le=
velnfc23\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\le=
veltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 =
\fi-360\li360\jclisttab\tx360 }
{\listname =
;}\listid859784189}{\list\listtemplateid67698703\listsimple{\listlevel\le=
velnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\lev=
eltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 =
}{\listname ;}\listid1043022916
}{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\l=
evelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{=
\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname =
;}\listid1494562399}
{\list\listtemplateid67698703\listsimple{\listlevel\levelnfc0\leveljc0\le=
velfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\=
levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname =
;}\listid1630086530}{\list\listtemplateid67698703
\listsimple{\listlevel\levelnfc0\leveljc0\levelfollow0\levelstartat1\leve=
lspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li3=
60\jclisttab\tx360 }{\listname =
;}\listid1729305359}{\list\listtemplateid67698703\listsimple{\listlevel
\levelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0{\=
leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 =
}{\listname =
;}\listid1851674074}{\list\listtemplateid67698703\listsimple{\listlevel\l=
evelnfc0\leveljc0
\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;=
}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 }{\listname =
;}\listid1861581539}{\list\listtemplateid67698703\listsimple{\listlevel\l=
evelnfc0\leveljc0\levelfollow0\levelstartat1
\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-36=
0\li360\jclisttab\tx360 }{\listname =
;}\listid1918051951}{\list\listtemplateid67698703\listsimple{\listlevel\l=
evelnfc0\leveljc0\levelfollow0\levelstartat1\levelspace0\levelindent0
{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360 =
}{\listname =
;}\listid1926920214}}{\*\listoverridetable{\listoverride\listid1926920214=
\listoverridecount0\ls1}{\listoverride\listid1861581539\listoverridecount=
0\ls2}
{\listoverride\listid859784189\listoverridecount0\ls3}{\listoverride\list=
id1918051951\listoverridecount0\ls4}{\listoverride\listid1851674074\listo=
verridecount0\ls5}{\listoverride\listid1494562399\listoverridecount0\ls6}=
{\listoverride\listid1630086530
\listoverridecount0\ls7}{\listoverride\listid351105547\listoverridecount0=
\ls8}{\listoverride\listid1729305359\listoverridecount0\ls9}{\listoverrid=
e\listid1043022916\listoverridecount0\ls10}{\listoverride\listid810169065=
\listoverridecount0\ls11}
{\listoverride\listid178011091\listoverridecount0\ls12}}{\info{\title =
IEEE 1076a Ballot Response}{\author Stephen A. Bailey}{\operator Stephen =
A. =
Bailey}{\creatim\yr1999\mo10\dy18\hr11\min50}{\revtim\yr1999\mo10\dy18\hr=
11\min50}{\version2}{\edmins0}
{\nofpages1}{\nofwords6491}{\nofchars37001}{\*\company Synopsys =
Inc.}{\nofcharsws45439}{\vern113}}\widowctrl\ftnbj\aenddoc\formshade\view=
kind4\viewscale100\pgbrdrhead\pgbrdrfoot \fet0\sectd =
\linex0\endnhere\sectdefaultcl {\*\pnseclvl1
\pnucrm\pnstart1\pnindent720\pnhang{\pntxta =
.}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta =
.}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta =
.}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta =
)}}{\*\pnseclvl5
\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta =
)}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta =
)}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta =
)}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang
{\pntxtb (}{\pntxta =
)}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta =
)}}\pard\plain =
\s17\qc\sl-320\slmult0\keep\widctlpar\box\brdrs\brdrw15\brsp180=20
\pvpg\phpg\posx7344\posy1008\absw3557\abslock1\dxfrtext187\dfrmtxtx187\df=
rmtxty187\nowrap\adjustright \shading10000 =
\f16\fs32\expnd-3\expndtw-15\dn2\cgrid {IEEE 1076a Ballot Response
\par }\pard\plain =
\s25\fi-720\li720\sb220\sa120\sl180\slmult0\keep\widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid {\b To}{:\tab 1076a Balloting Group
\par }\pard\plain =
\s24\fi-720\li720\sa120\sl180\slmult0\keep\widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid {\b From}{:\tab Stephen Bailey, Chair =
1076a Working Group
\par }{\b Date}{:\tab 4 October 1999
\par }\pard\plain =
\s27\fi-720\li720\sa320\sl180\slmult0\keep\widctlpar\brdrb\brdrs\brdrw15\=
brsp300 \adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {\b RE}{: \tab =
Ballot Response
\par }\pard\plain \widctlpar\adjustright =
\f1\fs20\expnd-1\expndtw-5\cgrid {This memo contains the responses to =
comments raised in the balloting of 1076a. The responses indicate the =
change
s that have been made, if any, to the 1076a draft (D6). None of the =
changes materially change the balloted implementation of shared =
variables. However, some changes do effect the normative nature of the =
standard and, by IEEE policy, requires a recircula
tion ballot. The chair has reviewed with all negative balloters and =
they have all agreed to change their ballots to a positive or =
abstention.
\par=20
\par I would like to thank Paul Menchini who took my first draft on the =
ballot response and turned at least two more i
terations on it as well as implemented the responses in the LRM. I =
would also like to thank the attendees of the FDL Conference VASG =
meeting in Lausanne, Switzerland and the Fall VIUF VASG meeting in =
Orlando, Florida where many of the ballot response iss
ues were debated and final resolutions concretized. In, particular, I =
would like to thank Peter Ashenden, John Willis and Wolfgang Ecker for =
their participation.
\par=20
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {J. Bhasker
\par {\pntext\pard\plain\f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}\ls1\adjustright=20
\f1\fs20\expnd-1\expndtw-5\cgrid {Pg 57, sec 4.3.1.3, note 5: Need to =
include \ldblquote Variable may also appear in protected bodies (as =
shared data).\rdblquote \line \line }{\b Reply}{\line=20
Although the comment is true, the existing text includes this specific =
context. No changes are required.\line=20
\par {\pntext\pard\plain\f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 2.\tab}}\pard =
\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}\ls1\adjustright {
Pg 57, sec 4.3.1.3, note 4: need to delete this note, as this is not =
correct anymore. Counter is a shared variable, so according to pg 56 =
last line in 3}{\super rd}{ para, the type must be a protected type and =
ShortRange is not.\line \line }{\b Reply}{
\line Bhasker is partially correct. The example is wrong. However, it =
should be changed to expose the fact that shared variables are not =
portable a
nd order of access to shared variables are implementation dependent. =
The Note text and Example are reworded as follows:\line \line 4\emdash=20
Since the language guarantees mutual exclusion of accesses to shared =
data, but not the order of access to such data by multiple proc
esses in the same simulation cycle, the use of shared variables can be =
both non-portable and non-deterministic. For example consider the =
following architectures:\line \line }{\b architecture}{ =
UseSharedVariables }{\b of}{ SomeEntity }{\b is}{\line }{
\b subtype}{ ShortRange }{\b is}{ INTEGER }{\b range }{-1 }{\b to}{ =
1;\line }{\b protected type }{ShortRangeProtected }{\b is}{\line =
}{\b procedure}{ Set( V : ShortRange );\line }{\b =
procedure}{ Get( V : }{\b out}{ ShortRange );\line=20
}{\b end protected type}{;\line \line }{\b protected type =
}{ShortRangeProtected }{\b body is}{\line }{\b variable }{Local =
: ShortRange :=3D 0;\line }{\b begin\line \line procedure =
}{Set( V : ShortRange ) }{\b is}{\line }{
\b begin}{\line Local :=3D V;\line }{\b end =
procedure}{ Set;\line \line }{\b procedure }{Get( V : ShortRange =
) }{\b is}{\line }{\b begin\line }{V :=3D =
Local;\line }{\b end procedure }{Get;\line \line=20
}{\b end protected type;\line \line shared variable }{ Counter : =
ShortRangeProtected;\line \line }{\b begin}{\line \line PROC1 : }{\b =
process}{\line }{\b variable }{V : ShortRange;\line }{\b =
begin}{\line Counter.Get( V );
\line Counter.Set( V+1 );\line }{\b wait;\line end =
process}{ PROC1;\line \line PROC2 : }{\b process\line =
variable }{V : ShortRange;}{\b \line begin}{\line =
Counter.Get( V );\line Counter.Set( V-1 );\line=20
}{\b end process }{PROC2;\line \line }{\b end architecture =
}{UseSharedVariables;\line \line In particular, the value of Counter =
after the execution of both processes is not guaranteed to be 0. =
Possible values of Counter could be \endash 1, 0 or 1.
\line=20
\par {\pntext\pard\plain\f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 3.\tab}}\pard =
\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}\ls1\adjustright {
Pg 49, sec 3.5: LRM needs to explain what \ldblquote shared =
data\rdblquote is.\line \line }{\b Reply}{\line=20
On reading section 3.5, we see that we incompletely define a protected =
type. A protected type implements an instantiable region of =
declarations and sequential state
ments. The variables declared within a protected type body constitute =
the shared data. The following sentence has been added to the =
introductory paragraph:\line \line \ldblquote=20
Shared data is a set of variable objects that may be potentially =
accessed as a unit by multiple processes.\rdblquote \line=20
\par {\pntext\pard\plain\f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 4.\tab}}\pard =
\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}\ls1\adjustright {
Pg 163, 12.5, note 2: should be \ldblquote \'85 access the same shared =
variable \'85\rdblquote Not sure what \ldblquote same set of shared =
variables\rdblquote means.\line \line }{\b Reply}{\line=20
The note is correct. The commenter is confused. Deadlock and livelock =
are not possibilities if two or more proc
esses only access one shared variable in common. The potential for =
deadlock and livelock occurs when there is a set of 2 or more shared =
variables that are being accessed by two or more processes in the same =
simulation cycle. These accesses may be indire
c
t. A process A could lock if it is accessing shared variable X which is =
trying to access shared variable Y which is being accessed by process B. =
If there were only one shared variable being accessed (directly or =
indirectly) by a set of 2 or more process
es, then the language semantics guarantee that all processes will get =
access to that shared variable within the same simulation cycle.\line=20
\par {\pntext\pard\plain\f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 5.\tab}}\pard =
\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}\ls1\adjustright {
Pg 57, 4.3.1.3, note 1, variables of protected types are different from =
other variables for ex, note 1 does not apply. We should add a note to =
the effect \ldblquote Variables of protected types cannot be read or =
updated as other variables\rdblquote=20
(need to reword).\line \line }{\b Reply}{\line The note has been =
clarified as follows:\line \line 1\emdash The value of a variable that =
is not a shared variable may be modified \'85\line=20
\par {\pntext\pard\plain\f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 6.\tab}}\pard =
\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}\ls1\adjustright {Pg 56
, 4.3.1.3, LRM does not explain the semantics what \ldblquote =
shared\rdblquote in a shared variable declaration means?\line=20
Any variable can be a protected type (note 6, pg 57). So what is =
special about it being shared? I did not find any semantics for =
\ldblquote shared\rdblquote in chap 12.\line \line }{\b Reply}{\line=20
Note 5 in this section covers what the commenter is calling into =
question. The text of Note 5 has been moved into the normative part of =
this section.\line=20
\par {\pntext\pard\plain\f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 7.\tab}}\pard =
\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}\ls1\adjustright {
Pg 50, 3.5.1, first para needs to be rewritten. \ldblquote \'85 that =
operates atomically and exclusively on a single object of the protected =
type.\rdblquote=20
This is not true. The subprograms operate on the shared data declared =
within the protected type.\line \line }{\b Reply\line }{The LRM wording =
is consistent. Shared variables are objects (see section 4.3.1.3) in =
the same way that a composite
variable or signal is an object. The phrase \ldblquote operates =
atomically\rdblquote=20
means that the subprograms in a protected type interface operate =
indivisibly on the variable(s) declared local to the protected type =
body. That is, once a method begins execution, it must
terminate before any method of the same instance (including the same =
method) can be invoked.\line=20
\par {\pntext\pard\plain\f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 8.\tab}}\pard =
\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}\ls1\adjustright {Following line as well=20
\ldblquote In addition to the (implicit) object of the protected type =
operated on by the subprogram \'85\rdblquote , NOT TRUE. Subprogram is =
not operating on th
e object of the protected type but on the shared data objects declared =
within the protected type. Need to clarify.\line \line }{\b =
Reply}{\line=20
We believe that the LRM is clear that operating on the shared variable =
constitutes operating on the shared data objects declared with
in the protected type for the same reasons that operating on a =
composite-typed object is the same as operating on the scalar elements =
of that object. Hence, no changes are required.\line=20
\par {\pntext\pard\plain\f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 9.\tab}}\pard =
\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls1\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}\ls1\adjustright {
Pg 158, 12.3.1.4, it would be useful to add a note \ldblquote each =
object of a protected type creates an instance of the shared =
objects\rdblquote \line \line }{\b Reply}{\line A note has been added as =
suggested. The exact wording is:\line \line=20
\ldblquote 3\emdash Each object whose type is a protected type creates =
an instance of the shared objects.\rdblquote \line=20
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {Dominique Borrione
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls2\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls2\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {Section 4.3.1.3 =
Variable declarations\line It is said in the added text: \ldblquote The =
base type of the subtype indication of a shared variable declaration =
must be a protected type.\rdblquote \line=20
In the next page, the example of Note 4 is in contradiction with that =
statement since the subtype indication \ldblquote ShortRange\rdblquote =
is not protected. Note 4 should be reworked.\line \line }{\b =
Reply}{\line Agreed. See resolution to J. Bhasker
\rquote s comment #2.\line=20
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 2.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls2\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls2\adjustright {Page 116, last example assignment above section 8.4.1. =
should read (correction in bold): Output_pin <=3D reject 0 ns inertial =
Input_pin after 10 ns, not Input_pin after }{\b 20}{ ns;\line=20
This correction is independent from the current ballot, it is a true =
typing error in the 1076 standard.\line \line }{\b Reply}{\line While we =
agree that this mistake should be fixed, we cannot fix it as part of =
P1076a. To do so would exceed t
he scope of our charter. We will forward this problem to the P1076-1999 =
group for resolution.\line=20
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {Doug Dunlop
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {Pg 20 near top:\line =
Elsewhere we talk about exclusive access to PT \ldblquote =
objects,\rdblquote but this note talks about exclusive access to a =
declarative region. Consider replacing \ldblquote=20
declarative region associated with the protected type\rdblquote with =
\ldblquote protected type object.\rdblquote \line \line }{\b =
Reply}{\line=20
The LRM wording is correct. The context of the note is an impure =
function declared within a protected type body. Within that context, =
the note make
s clear that the rules disallow a pure function to reference anything =
outside of the formal parameters and function-local object declarations. =
Thus a pure function declared in a protected type body may not =
reference the object declarations within the pro
tected type body.\line=20
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 2.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright {Pg 24 near middle\line Consider phrasing this rule =
concerning subprograms containing wait statements using \ldblquote =
must\rdblquote or \ldblquote shall\rdblquote rather than \ldblquote =
may.\rdblquote=20
I think this fits better with IEEE practices and probably the rest of =
the document. Same comment applies to Pg 28, near middle and near the =
top of Pg 50.\line \line }{\b Reply}{\line Agreed, all 3 locations have =
been changed.\line=20
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 3.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright {Pg 45 near middle:\line Review need for \ldblquote it =
may not have a subelement that is a \'85 protected type.\rdblquote =
Section 3.2 seems to effectively disallow PTs as a subelements of =
composites. Can\rquote=20
t the Pg 45 wording in this regard by eliminated? Same comment Pg 47 =
near middle. Also \ldblquote or contain\rdblquote in the note at the =
top of Pg 51. See also change on Pg 54. See also change near bottom of =
Pg 59. I hope we don\rquote t but if w
e need all this wording to cover PT subelements everywhere, check the Pg =
93 box.\line \line }{\b Reply}{\line=20
We believe the LRM wording to be correct in these areas. We are =
uncertain as to why review is needed for the quoted passage. It seems =
that the commentor is bringing o
ur attention to a possible redundancy between various LRM passages, but =
this assumption is uncertain.\line=20
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 4.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright {Pg 50 near top;\line In \ldblquote \'85 return type of =
the function may not be of an access type or \'85\rdblquote \line Why is =
the second \ldblquote of\rdblquote there?\line \line }{\b Reply}{\line =
Because \ldblquote type\rdblquote=20
in this context is a short hand for type-mark. The type-mark may =
denote a subtype of a protected type. The intent of the wording is to =
cover all cases.\line=20
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 5.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright {Pg 50 near middle:\line The signature for \ldblquote =
add\rdblquote in the example seems to violate the rule on Pg 21 that =
the mode of a PT parameter must be INOUT. Same signature should be =
changed in the PT body of the following page.
\line \line }{\b Reply}{\line Agreed. The mode has been changed to }{\b =
INOUT}{.\line=20
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 6.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright {Pg 85 third of the way down:\line Not sure about this =
wording. Talking about where the declaration is contained should be wrt =
regions of text. Declarations do not occur within objects. It\rquote s =
probably more correct to say simply=20
\ldblquote or within a protected type.\rdblquote \line \line }{\b =
Reply}{\line We see references to a protected type method as being =
similar/analogous to a field of a record type. H
owever, it is still different. That is, the protected type method =
reference is different from all other cases of selected names. The =
sentence has been reworded as follows:\line \line \ldblquote A selected =
name may be used to denote \'85
a named entity whose declaration is contained within another named =
entity, particularly within a library, a package, or a protected =
type.\rdblquote \line \line Further down, we have changed \ldblquote =
\'85 within a object of a protected type \'85
\rdblquote to \ldblquote \'85 within a protected type \'85.\rdblquote =
\line=20
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 7.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright {Pg 85 near bottom:\line Consider replacing \ldblquote =
appears within\rdblquote with \ldblquote appears immediately =
within.\rdblquote \line \line }{\b Reply}{\line Agreed. The change has =
been made.\line=20
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 8.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright {Pg 113 near bottom:\line Review last clause in this =
rule for overlap wrt the rule on Pg 24 near middle.\line \line }{\b =
Reply}{\line Although the rules overlap, we believe this to be a matter =
of cont
ext. The paragraphs containing the rule on page 24 deal with =
restrictions relative to the ancestor relationship between subprograms. =
To add to this rule to make it complete would introduce information =
irrelevant to this relationship.\line \line=20
There are other pla
ces within the LRM where multiple sections contain disjoint sets of =
restrictions relevant to a single piece of syntax. For example, see the =
restrictions on the usage of interface objects of various modes. While =
we agree that it would be desirable, in pr
inciple, to provide all restrictions in one place in the LRM, we feel =
that it is impossible to do so.\line \line=20
In this instance, since the rule on page 24 is covered entirely by the =
rule on page 113, we will move the rule on page 24 to be a non-normative =
note.\line=20
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 9.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright {Pg 141 near bottom:\line The header on the new list =
element is missing a right parenthesis?\line \line }{\b Reply\line =
}{Agreed. The parenthesis has been added.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 10.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls4\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls4\adjustright {Pg 156 near bottom:\line Review \ldblquote or that has =
a subelement that is a shared variable.\rdblquote Can you have a =
subelement that is a shared
variable? Consider re-phrasing in terms of PT objects. Last, do you =
really mean as a primary or do you mean as a prefix in an expanded =
name?\line \line }{\b Reply}{\line=20
Correct, subelements cannot be shared variables. Primary is a more =
inclusive term covering the case of the shared variable simple name and =
shared variable method selected name. Reworded as follows:\line \line =
\ldblquote=20
Additionally, it is an error if a primary that denotes a shared variable =
or a method of the protected type of a shared variable is evaluated =
during the elaboration of a declarative item.\rdblquote \line=20
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {Brian Griffin
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls5\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls5\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {Section 4.3.1.3, =
2}{\super nd}{ paragraph, last sentence.\line=20
One of the primary goals of accepting a change to the specification for =
shared variables is a timely approved changed. Having taken 5 (count =
them, FIVE!!!!) years t
o get to this point is completely unacceptable because of this fact: =
there is a large body of existing VHDL code in productive use around the =
world that contain instances of shared variables as currently defined in =
1076-1993. Changing the standard at thi
s late point would needlessly invalidate this otherwise functionally =
correct and successful body of work. Reading requirement 2.8.1 \endash=20
it was argued that the body of code (at the time) was not or could not =
be very large. However, as time went by, the numbe
r of instances have grown and is now, I believe, too large to be ignored =
and therefore, if the requirements voting were done today, this tally =
would come out quite differently.\line \line=20
If this revision is accepted, then tool vendors will be pressured by =
their cus
tomers to accept both new and old semantics for shared variables. This =
will compromise the integrity of the standard. If this change really =
must be added to the standard, it should be done as an addition to the =
existing shared variable semantics, howeve
r, I don\rquote t believe this change is even necessary. The concerns =
with current shared variable semantics can be easily addressed by =
creatively employing other language features.\line \line }{\b =
Reply}{\line=20
While it is indeed unfortunate that it required 5 years to achieve =
suffici
ent consensus on a language modification that met as many design =
objectives and requirements as possible, there was no way to accelerate =
the process. The issues with shared variables in 1076-1993 were well =
publicized as was the fact that the 1076a workin
g group was working towards a resolution that would likely be =
incompatible with the 1076-1993 standard in this area. Implementers and =
users were forewarned (at least as well as a volunteer standards group =
can publicize this information).\line \line=20
We must also disagree with the commentor\rquote=20
s statement that the existing body of code is functionally correct. =
During the P1076a process, it has been amply demonstrated that =
unsynchronized access to shared data is not functionally correct. The =
apparent lack of problem is m
erely due to the fact that most current commercial simulators do not, in =
fact, provide simultaneous access to shared data and therefore =
implicitly synchronize these accesses.\line \line=20
That said, the 1076a working group is sensitive to the issue of backward =
compati
bility in language changes. In this case, maintaining the existing =
specification of shared variables and adding a safer shared variable =
capability in the language is in direct contradiction of the =
requirements established by the committee.\line \line=20
In spite of th
is direct contradiction, we did consider allowing both sets of semantics =
as part of 1076a. As part of this effort, one of us (Steve Bailey) =
fashioned a partial translation from the existing (1076-1993) shared =
variable syntax into the proposed (P1076a) se
m
antics. In spite of the superficial appeal of integrating this approach =
into P1076a, problems were uncovered with our attempt to be backward =
compatible, specifically, the backward compatibility would need to be =
limited to scalar-typed shared variables. =20
Therefore, we maintain that VHDL and its users are better served in the =
long run by providing only safe and consistent access to shared data as =
part of the standard.\line \line=20
Finally, how an implementers chooses to address this issue for existing =
models using the 1
993 form of shared variables is not defined by the standard. We can =
envision at least 3 possible and non-mutually exclusive ways an =
implementation might handle the situation:\line \line=20
a. Force users to update models if they want to use the latest =
version of the implementer\rquote s products;\line \line b. Provide =
tool switches that allow 1993-style shared variables in models;\line =
\line=20
c. Provide a utility that converts 1993-style shared variables into =
1076a-compatible shared variables.
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {Andrew Guyler
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls6\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls6\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {Monitors add extra =
complexity to the language which detracts from the growth of the =
language. There is an increase in \ldblquote behavioral\rdblquote=20
designers who are expressing their design at the behavioral rather than =
RTL or gate levels. This higher level of abstraction lends itself to =
higher productivity.\line \line }{\b Reply}{\line=20
IEEE rules require each ballot comment to clearly state what should be =
changed in the balloted draft to resolve the comment. We cannot =
determine what the comment advocates, unless it is to drop the =
monitor-based approach entirely.\line \line M
oreover, we do not understand how the second and third sentences relate =
to the first. As only the first sentence appears to contain a comment =
about the proposed language change, only it will be addressed. Yes, =
monitors do add extra complexity to the lan
g
uage. However, accompanying that extra complexity is additional =
capability. The primary capabilities provided are in the areas of user =
control over the portability of a design using shared variables =
(algorithmic determinism) and better support for model
i
ng complex shared data (abstract data types such as trees and lists, =
which happen to be important to behavioral modelers). Secondarily, it =
provides sufficient language semantics to support implementation of =
simulators that exploit parallelism. There is=20
always a tension between complexity and capability. We believe that we =
have made the correct tradeoffs. We recognize that others may disagree.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 2.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls6\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls6\adjustright {People modeling and designing at the behavioral level =
have found that shared variables are a convenient concept=20
for sharing data between processes. Enclosed is a skeleton example of =
the sorts of shared memory concepts that are desired to be =
expressed.\line \line }{\b Reply}{\line=20
Once again, we cannot determine what, if anything, the comment advocates =
in the way of a change to the draft.\line \line=20
However, regarding the example, we believe that monitors provide more =
power for behavioral modeling than the 1993 implementation of shared =
variables by allowing the encapsulation of arbitrarily complex shared =
data. The memory example would be trivial t
o implement in 1076a. The assumption is that the commenter is referring =
to the simplicity of using shared variables in 1076-1993 in that no =
additional syntax or lines of code are required. Whereas, 1076a would =
require the modeler to write a protected ty
p
e declaration and implementation and accesses to the shared would =
require a few more keystrokes. While this is true, the alternative, in =
reality, is not the status quo (1076-1993). Every programming language =
that has been implemented on a multi-process=20
o
r multi-threaded platform has required either mutual exclusion semantics =
and language constructs (cf. Ada, Modula, et al.) or the equivalent of =
lock (P) and unlock (V) operations to control access to shared data. =
VHDL is no different. Eventually, users,
especially those modeling at a behavioral level, will encounter the =
need for this capability. The 1076a working group has delivered those =
capabilities in a modern language design form: monitors.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 3.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls6\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls6\adjustright {Shared variables are almost OK as the are. A simple =
change=20
in the definition of the language to say that if any process reads or =
writes any shared variable then any other process will be prevented from =
reading or writing any shared variable until that process encounters a =
wait statement \endash will force=20
\ldblquote sequential implementation\rdblquote functionality, provide =
no extra complexity to the user and have reasonably well defined =
semantics. Sequential implementations have been demonstrating this =
level of functionality for years.\line \line }{\b=20
Reply}{\line The proposed modification to the original implementation =
91076-1993) does not meet as many requirements as the proposed amendment =
(1076a) and, therefore, falls short of the functionality provided by =
this revision.\line \line=20
a) The language specification should not preclude or penalize =
multi-threaded (parallel
) simulation implementations. Forcing mutual exclusion at the process =
level is the most conservative and pessimistic requirement possible. =
The revised implementation (1076a) permits a finer level of mutual =
exclusion and higher potential for parallelism=20
during simulation. (Reference requirement 2.1.3 Parallelism (Explicit) =
in the SVWG Requirements Prioritization document.)\line \line=20
b) The original implementation of shared variables in 1076-1993 did not =
permit the modeling of a collection or complex composite dat
a type as a single atomic piece of shared data. The revised =
implementation (1076a) permits this. (Specifically, refer to =
requirements 2.2 Dynamic Resizing of Shared Data Structures and 2.3.3 =
Permit Shared Variables of Access Type in the SVWG Requirement
s Prioritization document.)
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 4.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls6\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls6\adjustright {Page 57, note 4. The old shared variable syntax is =
shown. This does not apply to monitors as the type shortrange is not a =
protected type and indirect reads and writes are made.\line \line }{\b =
Reply}{\line See the reply to J. Bhasker
\rquote s comment number 2.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 5.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls6\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls6\adjustright {Interestingly monitors does NOT help resolve the =
determinism of the P57 example as if the decrement happened first the =
value will be out of range!\line \line }{\b Reply}{\line Again, see the =
reply to J. Bhasker\rquote s comment number 2.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 6.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls6\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls6\adjustright {This makes Verilog to VHDL translation more =
difficult.\line \line }{\b Reply}{\line=20
Although no language change is proposed in the comment, we will respond =
by noting that this was never proposed as a requirement. This working =
group, as with all previous working groups that worked on previous =
versions of 1076, made no=20
attempt to facilitate translation from another language into VHDL. To =
make translation from Verilog to VHDL easier, significant compromises to =
many accepted requirements would have been necessary. We do not believe =
it is desirable to compromise many acc
epted requirements to meet a non-accepted requirement.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 7.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls6\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls6\adjustright {Last but not least we are trying to standardize and =
invent at the same time. It seems that we are moving from something =
which operates OK on all sequential simulation implementations to a more =
complex=20
technique which has been derived looking at the implementation problems =
of the few, rather than considering the usability of the language by the =
user community.\line \line }{\b Reply}{\line=20
Again, we note that it is difficult to determine what, if any, language =
change is being=20
proposed. Monitors are not a new language design implemented for the =
first time in VHDL. Monitors have been discussed in the programming =
language literature for several years. The language revision places a =
slightly higher implementation burden on sequ
e
ntial implementations. That burden is entirely in the compiler and =
should have no impact on simulation performance. The language revision =
also places a slightly higher use burden on users who use shared =
variables in trivial ways. In exchange for the sl
i
ght increase in cost under simple usage situations, the language =
revision provides significant enhancements in modeling capability that =
would not otherwise be possible. This enhanced capability permits =
models that would otherwise not be possible or would
be more difficult to code, both when using shared and non-shared =
variables as protected types are not limited to just shared variables.
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {M.M. Kamal Hashmi
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls7\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls7\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {The definition of =
\ldblquote protected type\rdblquote is very close to that of an =
\ldblquote object\rdblquote in standard object-oriented de
finitions. Any extension to the language, after this proposal, which =
tries to add object orientation will probably change the protected type =
definition so a clear definition of the objective of protected type is =
needed to \ldblquote protect\rdblquote=20
it from any later proposal. The memorandum that came with the proposal =
was too all-inclusive and clear in this regard.\line \line }{\b =
Reply}{\line We again cannot determine specifically what we should =
change in the draft to resolve this comment.\line=20
\line Moreover, it is difficult to predict with certainty=20
the future evolution of any language. The purpose of the protected type =
is clear: provide a language mechanism that automatically defines the =
critical region for access to shared data. It does so without =
constraining what kind of shared data is possible
=20
(no type limitations). As such, protected types encapsulate the shared =
data. Encapsulation is one characteristic of object-orientation, but =
not the only one. One would hope that any future efforts to add object =
orientation to VHDL would build on the pr
otected type capabilities that have been added. At the very least, any =
future efforts to add object orientation would need to provide similar =
capabilities for shared data.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 2.\tab}}\pard =
\s15\qj\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls7\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls7\adjustright {The new shared variable is not backward compatible =
with VHDL-93 and this may cause problems for people who have already =
coded models using the old construct. While I don\rquote=20
t think the problem is large, it would help the acceptance of the new =
standard if a small set of modeling guidelines could be published freely =
to show how the new constructs can be useful and better than the old =
one.\line \line }{\b Reply}{\line=20
The comment is beyond the scope of what can be done within an IEEE =
standard. It is always desirable to publicize standards changes and the =
benefits they provide. This has been done in the past for sh
ared variables and the proposed change including presentations at VHDL =
International User Forums (conferences) and articles in }{\ul EE Times}{ =
and }{\ul VHDL Times}{. We welcome additional opportunities to further =
publicize these changes.
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {Rich Hatcher
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls8\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls8\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {Section 4.3.1.3\line =
I\rquote=20
m concerned about requiring shared variables to be protected type. The =
1993 LRM has been out 5 years. Tools have made shared variables =
available and users have found ways to use them. The proposed change =
would (it appears) make any existing use of shar
ed variables illegal.\line \line I can\rquote t tell which requirements: =
integrity, determinism, deadlock, atomicity, etc. depend on protected =
types so it\rquote=20
s hard to judge. I see the voting was sometimes split on mandatory =
language requirements versus optional satisfaction of requirements.\line =
\line=20
Overall I support the protected type solution. If the greatest =
satisfaction of requirements is achieved this way, then I support =
it.\line \line }{\b Reply}{\line Please see the response to Brian =
Griffin\rquote=20
s comments. In addition, protected types allow the sati
sfaction of determinism because the user is guaranteed that his models =
will be simulated deterministically. Algorithmic determinism is =
specifically what is satisfied. Protected types guarantee that for a =
given set of inputs, a model may return one of se
veral sets of outputs. Each set is valid and only depends upon the =
ordering of access to the shared data. The 1076-1993 implementation of =
shared variables could not guarantee this level of determinism.\line =
\line=20
Protected types also satisfy the requirement for ato
micity by defining an encapsulation of the shared data. The shared data =
can be arbitrarily complex defining such dynamically sized abstract =
objects such as queues, lists and trees. Since the data is encapsulated =
by the protected type, access to every pi
e
ce of the shared data is controlled via the protected type. Thus =
operations on the shared data are atomic in that the mutually exclusive =
access is granted to the entire set of shared data encapsulated and not =
simply scalar elements or single nodes in a q
ueue, list or tree.\line \line=20
Finally, protected types satisfy the requirement for integrity. =
Integrity refers to the value of the shared data. In 1076-1993, an =
implementation is not required to implement any form of mutually =
exclusive access to a shared variable.
Therefore, it would be possible for a model that contains two or more =
processes that each increment an integer-typed shared counter to have =
all processes attempt the increment operation at the same time. Without =
mutually exclusive access who knows what
=20
the value of the counter would be after each process finished its =
increment operation? It could be the sum of the increments, some value =
between the starting value and the sum of the increments or a completely =
random value caused by simultaneous attempts
to change the individual bits in the hardware underlying the simulator =
implementation.
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {Greg Peterson
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls9\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls9\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {The best solution to =
the problems with shared variables in 1076-1993 is to remove them from =
the language. Although the requirements document indicates a v
ote precluded this, the vote was close and few participated. Removing =
shared variables would best support good software engineering =
practices.\line \line }{\b Reply}{\line=20
As noted, a vote was taken on this alternative (not once, but multiple =
times) and it failed each time. Furthermore, since people have =
exploited shared variables in 1076-1993, there is a demonstrated need =
for the capability of shared data.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 2.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls9\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls9\adjustright {All references to 1997 should be changed to 1998.\line =
\line }{\b Reply}{\line Agreed. The references have been updated.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 3.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls9\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls9\adjustright {On pages 24 and 113,=20
a sentence was added that a wait statement in a subprogram is not =
allowed if the parent of the subprogram is declared within either a =
protected type declaration or a protected type body. This needs to be =
strengthened to disallow the wait statement for th
e case when the parent or an ancestor (parent\rquote s parent, =
etc).\line \line }{\b Reply}{\line=20
Agreed, the rule has been disambiguated with respect to the entire =
ancestral chain starting from and including a protected type method down =
through any subprogram in the call stack. See comments from Doug =
Dunlop.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 4.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls9\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls9\adjustright {On page 47, the change under 3.4 to add that =
\ldblquote if the base type is a composite type, it must not contain a =
subelement of an access type, a file type or a protected type\rdblquote=20
is a change beyond the scope of this PAR (although I agree with the =
change).\line \line }{\b Reply}{\line=20
We do not believe that the change exceeds the scope of the PAR. As =
protected types are an integral part of the shared variable language =
amendment, any areas of the standard where a protected type might be =
used is within the scope of
the PAR. In this case, the decision was made to limit where a =
protected type could be used to minimize as much as possible, the impact =
on implementations for making this change. It is believed that it is =
easier to remove in a future language revision a
n overly conservative limitation than it is to limit a too liberal usage =
of a new language capability in a future revision.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 5.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls9\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls9\adjustright {The use of the term \ldblquote method\rdblquote will =
cause potential confusion and conflict with designers familiar with =
object-oriented languages. In=20
particular, this term may cause significant headaches to the OO-VHDL =
group should they eventually develop extensions to VHDL. \ldblquote =
Method\rdblquote should be changed.\line \line }{\b Reply}{\line The =
term \ldblquote method\rdblquote=20
was chosen because it provides the same capabilities as it is =
associated with in object-oriented languages. The commentor does not =
explain why there is potential confusion and the 1076a design and ballot =
response teams fail to see any confusion.
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {Steve Schultz
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls10\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls10\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {I do not understand =
why protected types (shared variables) are not allo
wed or defined for the equality and inequality operators, especially =
since similar relational operators (<, >, etc.) are permitted. Equality =
and inequality operations on shared variables would seem to be a common =
and simple means to instantaneously commu
nicate across processes.\line \line }{\b Reply}{\line=20
The comment is mistaken. The ordering (relational) operators are not =
predefined for protected types. They are predefined for scalar and =
discrete array types only. Protected types are neither scalar nor =
discrete array types
. Neither equality, inequality nor the ordering operators can be =
predefined for protected types.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 2.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls10\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls10\adjustright {It is not clear to me why a variable declaration =
whose subtype indication denotes a protected type cannot have an initial =
value expression. What is fundament
ally different about setting an initial value for a shared variable vs. =
a local variable? If the concern is that multiple processes might =
attempt to set conflicting initial values, it seems that could be =
defined as an error to be caught after elaboration
in a fairly straightforward manner with little performance impact.\line =
\line }{\b Reply}{\line=20
Protected types define a more complex data type than even composite =
types. The user can define constants and variables that are local to =
the protected type body. Since the shared d
ata is defined by the object declarations in the protected type body, a =
user of the protected type would need to have visibility of the body in =
order to specify initial values. Furthermore, language semantics would =
need to define the ordering of applying
=20
what would essentially be an aggregate expression to the local objects =
(subelements) of the shared variable as defined in the protected type =
body. The developer of the protected type may not wish to expose all =
protected type local objects to the user of=20
the protected type for the purpose of initializing their values.\line =
\line=20
While it is possible to come up with a mechanism to allow the =
specification of initial values in the declaration of a shared variable =
in a way that addresses most, if not all issues involved,
the 1076a language design team determined that this capability is a =
\ldblquote nice-to-have\rdblquote=20
bout not critical. As such, the decision was made to not provide this =
capability at this time. Making this trade-off allowed further =
minimization of the language change i
mpact on implementations. The language design team also believes that =
if the capability has strong market needs, then it can be added in a =
future language revision.
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {Holger Veit
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls11\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {In section 2.1.1.1: =
added \ldblquote For a subprogram having a parameter \'85\rdblquote on =
p.21. I=20
fail to see why the mode must be INOUT. It would simplify analysis and =
semantic checking and lead to more clarity and strictness, if a =
procedure may declare access to a SV explicitly as \ldblquote =
readonly\rdblquote=20
(IN) or writeonly (OUT) or both (INOUT). I do understand=20
that INOUT is an implementation issue related to the fact that the =
parameter passing mechanism is by-reference (which is by itself okay to =
me for efficiency reasons although the language specification should not =
enforce such a mechanism unless there is no
alternative). I don\rquote t accept the possible argument that =
typically programmers (model writers) will use INOUT to circumvent the =
well-known \ldblquote=20
non-costness pollution problem of other languages, i.e., a badly =
designed interface will destroy any use of \ldblquote const\rdblquote =
(in VHDL \ldblquote IN or \ldblquote CONSTANT\rdblquote ) \endash=20
because variables will be accessed in write mode everywhere.\line \line =
}{\b Reply}{\line The decision that the mode of protected type formal =
parameters be INOUT is a pragmatic one. Allowing the specification of =
IN or OUT direction only implies th
at the language requires checks to ensure that the execution of the =
subprogram does not result in the updating or reading of the input =
parameter. For shared variables of protected type, such checks would be =
expensive to implement and execute as the share
d
data can be arbitrarily complex. Therefore, the language design team =
chose to keep the language change impact minimized by requiring INOUT =
mode and therefore no burden of implementing or performing read-only and =
write-only checks. Once again, this is a
situation where if market needs require the ability to specify IN or =
OUT modes with corresponding checks, these can be accommodated in a =
future language revision in a backward compatible manner.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 2.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls11\adjustright {Section 3.5.1: I\rquote d demand that the syntax is =
to be changed in a way that the method declaration has to describe what =
the method is doing with the SV, such as in:\line IN PROCEDURE readit( =
VARIABLE foo : INTEGER );\line=20
PROCEDURE changeit( VARIABLE bar : TIME ) INOUT;\line Such a =
convention would be somehow consistent with the=20
scheme of declaring PURE and IMPURE subprograms. The syntax in the =
above two examples is subject for discussion. The motivation behind =
such an additional tag is to simplify code verification and make the =
declaration more readable (one does not have to r
ely on function naming to speculate whether the method modifies or only =
reads a SV).\line \line }{\b Reply}{\line=20
The response to issue 1 applies here as well. The language design team =
considered such a proposal and rejected it. Again, the primary reason =
for rejection was the=20
complexity of the implementation. Consider a method to insert an =
element into a shared list the insertion does not necessarily change any =
of the protected type local variables. Clearly, the burden on an =
implementation to verify the modes of the methods=20
is significant. The language design team opted to not impose that =
burden on implementations. Again, depending upon market needs, this =
decision can be revisited and changed in a future language revision.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 3.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls11\adjustright {Section 4.2: What is the semantics of protected subt
ype (other than a primitive name alias for a type)? Should we provide a =
means to specify constrainable SV subtypes? This would allow to make =
the type/subtype mechanism more flexible. It is in principle =
unreasonable to expect that a simple variable=20
\endash just because it is changed into a SV \endash now no longer may =
have a range constraint.\line Example (again: syntax is subject for =
discussion):\line TYPE scalable_counter is PROTECTED\line=20
SHAREDTYPE stype is INTEGER; -- the specific type to be =
scaled\line \'85 some methods \'85\line END PROTECTED =
scalable_counter;\line \line TYPE scalable_counter is PROTECTED =
BODY\line=20
VARIABLE counter : stype; -- constraint applies to this =
variable\line \'85\line END PROTECTED BODY scalable_counter;\line =
\line SUBTYPE threebitcounter is scalable_counter RANGE 7 downto =
0;\line -- subtype applies to \ldblquote SHAREDTYPE
\rdblquote \line SUBTYPE twobit counter IS scalable_counter RANGE 0 to =
3;\line \line SHARED VARIABLE foo : threebitcounter;\line SHARED =
VARIABLE bar : twobitcounter;\line \line }{\b Reply}{\line=20
The commenter is correct that subtypes of protected types simply provide =
a way of aliasing (renaming) the protected types.\line \line=20
Obviously, the ability to parameterize a protected type would provide =
additional capabilities. However, the language design team considered =
this and, again, made the tradeoff for minimal language ch
ange and implementation impact. According to market needs, this =
capability (see also the ability to provide initial values in Steve =
Shultz\rquote s comments as these two requests are related) could be =
provided in a future language revision.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 4.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls11\adjustright {Section 4.3.1.3: In my opinion, the SHARED keyword is =
now redundant, because we expect that a SV must be declared with a =
protected type as its base type.\line \line }{\b Reply}{\line=20
In actuality, the SHARED keyword has always been redundant. This is due =
to the fact that the context of the declara
tive part containing the shared variable declaration dictates whether it =
can be shared by multiple processes or not (via scope and visibility =
rules). (If declared in an entity, architecture, package declaration, =
package body or block, then the variable c
an be shared. Otherwise, it is not shared.) The SHARED keyword has =
been retained to satisfy one of VHDL\rquote s original language design =
goals: design documentation. The keyword may be redundant, but it makes =
clear that it is shared.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 5.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls11\adjustright {More section 4.3.1.3: What is the semantics of a =
variable without the SHARED keyword, but with a protected base type? =
Does it become shared implicitly? Or is this a tricky way to introduce =
class objects with methods to VHDL? I
\rquote d appreciate the latter: in this case, the SHARED ke
yword should be made explicit, and the normal type declaration should =
generally accept methods for any typed storage-based object. In this =
case, the PROTECTED keyword for the protected type =
declaration/definition becomes redundant, and there has to be ju
st a restriction that variables explicitly declared as SHARED may only =
be accessed through methods.\line \line }{\b Reply}{\line Answering the =
questions in order:\line \line=20
a) The semantics of a variable without the SHARED keyword, but with a =
protected base type is a local (non-shared) variable.\line \line b) It =
does not become implicitly shared.\line \line c) The capability is not =
motivated by a desire to \ldblquote=20
sneak\rdblquote in to VHDL object-oriented capabilities. The reason =
why non-shared variables can be of a protected type is that there was no =
good reason to no
t allow it (the language change impact is actually greater to specify a =
limitation and there is little to no implementation impact to allow it). =
A case can actually be made that such capability is necessary to allow =
the (\ldblquote deep\rdblquote=20
) copying of the current \ldblquote value\rdblquote of a shared =
variable into a process local variable for future use in comparisons of =
the shared data against a previous snapshot.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 6.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls11\adjustright {The example of 5.7 is (without extensions in 4 and 5 =
above) incorrect VHDL 1076a because the declared SV counter has a sub
type which does not have a protected type. If this example should =
explain a problem which would happen with a different paradigm of SVs, =
it should be specifically marked as \ldblquote incorrect code.\rdblquote =
\line \line }{\b Reply}{\line=20
Yes, the example was in error and has been fixed. See response to J. =
Bhasker\rquote s comment #2.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 7.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls11\adjustright {Section 7.2.2: VHDL allows overloading the basic =
operators for a type. What is preventing us to specify an \ldblquote =
=3D\rdblquote or \ldblquote /=3D\rdblquote=20
operator method for a protected type so that you can again compare =
instances of SVs without first copying them to another nonshared =
variable.\line \line }{\b Reply}{\line See response to Steve =
Schultz\rquote s, comment #1.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 8.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls11\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls11\adjustright {P. 116: The two additions #2 and #3 are in my opinion =
redundant, because 4.3.1.2 forbids signal declarations with a protected =
type already.\line \line }{\b Reply}{\line Yes, the informa
tion in notes 2 and 3 are redundant. However, the purpose of Notes is =
to explicitly state logical consequences of the contents of the section. =
There is no harm in being redundant within Notes.
\par }\pard\plain =
\s1\sa220\sl200\slmult0\keep\keepn\widctlpar\outlinelevel0\adjustright =
\f16\fs22\expnd-2\expndtw-10\kerning28\cgrid {Peter Ashenden
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 1.\tab}}\pard\plain =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls12\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls12\adjustright \f1\fs20\expnd-1\expndtw-5\cgrid {I noticed a problem =
in one of the examples. On page 50, the ComplexNumber type has a method =
that has a parameter of type ComplexNumber. The problem is that the =
name \ldblquote ComplexNumber\rdblquote=20
is not visible at the point of the method definition. According to LRM =
section 10.3, lines 83-84:\line \line \ldblquote A declaration is o
nly visible within a certain part of its scope; this part starts at the =
end of the declaration except in the declaration of a design unit, in =
which case it starts immediately after the reserved word }{\b is}{
occurring after the identifier of the design unit.\rdblquote \line =
\line T
hus, in the example, the type name ComplexNumber is only visible after =
the end of the protected type declaration, and not at the point of the =
method declarations. In general, this prohibits methods that have =
parameters of the protected type in which they
are defined. I don\rquote t believe this was the intention.\line \line =
A simple solution is to add protected type declarations to the list of =
exceptions in the LRM clause quoted above. This change would make the =
example legal without changing the example, and reflects what I believe =
was the language design intention.\line=20
\line }{\b Reply}{\line The commenter is correct and his proposed =
solution is adopted. The LRM language has been changed as follows =
(additions in }{\i italics}{):\line \line \ldblquote A declaration is =
only visible within a certain part of its scope;=20
this part starts at the end of the declaration except in the declaration =
of a design unit }{\i or a protected type declaration}{, in which case =
it starts immediately after the reserved word }{\b is}{ occurring after =
the identifier of the design unit }{\i=20
or protected type declaration}{.
\par {\pntext\pard\plain\s15 \f1\fs20\expnd-1\expndtw-5\cgrid =
\hich\af1\dbch\af0\loch\f1 2.\tab}}\pard =
\s15\fi-360\li360\sa220\sl180\slmult0\widctlpar\jclisttab\tx360{\*\pn =
\pnlvlbody\ilvl0\ls12\pnrnot0\pndec\pnstart1\pnindent360\pnhang{\pntxta =
.}}
\ls12\adjustright {
Introduction of suspension semantics for mutual exclusion introduces a =
problem in the definition of the simulation cycle. In LRM 12.6.4, there =
are places that describe processes executing until they suspend. In the =
new text in 12.5(b), elabora
tion is suspended until exclusive access to the subprogram is secured. =
It is now not clear whether the suspension referred to in 12.6.4 =
includes the suspension referred to in the new text. The language =
design intention is that it not be included. Rathe
r, 12.6.4 should refer only to suspension arising from execution of a =
wait statement.\line \line I suggest that the four occurrences of =
\ldblquote suspends\rdblquote in 12.6.4 be replaced by \ldblquote =
suspends by executing a wait statement.\rdblquote=20
\line \line }{\b Reply}{\line The commenter\rquote s analysis of the =
problem is correct. However, rather than using the phrase \ldblquote =
suspends by executing a wait statement,\rdblquote=20
we shall distinguish between the two kinds of suspension by calling the =
suspension for the purposes of gaining exclusive access to a shared =
variable \lquote blocking.\rdblquote This te
rm is defined in the section and an entry has been added to the =
glossary.
\par }}
------=_NextPart_000_004B_01BF195F.8C29F250--