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--