Subject: [sv-ac] revised errata, JH goup 1
From: John Havlicek (john.havlicek@motorola.com)
Date: Wed Jan 21 2004 - 11:44:02 PST
All:
Bassam makes a good point that we should give an
example that shows "##0" is illegal for combining
differently-clocked sequences. I revised the
one erratum change item that involves the illegal
examples so that it reads:
5. 17.11.1, p. 245. Change
Differently-clocked or multiply-clocked sequence operands cannot
be combined with any sequence operators other than the
multi-clock concatenation operator ##. For example, the
following is illegal:
(@(posedge clk1) x ##1 y) intersect (@(posedge clk2) z[*1:$])
to
Differently-clocked or multiply-clocked sequence operands cannot
be combined with any sequence operators other than ##1.
For example, if clk1 and clk2 are not identical, then the following
are all illegal:
@(posedge clk1) s1 ##0 @(posedge clk2) s2
@(posedge clk1) s1 ##2 @(posedge clk2) s2
@(posedge clk1) s1 intersect @(posedge clk2) s2
Bassam: Is this good enough?
The full text of the revised errata appears below.
Best regards,
John H.
================================================================================
SVA 3.1A DRAFT 3 ERRATA, JH GROUP 1
================================================================================
Erratum JH1: Parsing Problem with Clock Flow
================================================================================
Discussion
----------
Proposal 12 on Clock Flow makes optional the specification of the
clock in places that it is redundant. Thus, it is not necessary to
write a clock event after the multi-clock concatentation "##" if the
clock does not change. This introduces a parsing problem in
determining whether what follows "##" is the parameter "n" of a
singly-clocked "##n" or an expression operand of a multiply-clocked
"##". The difficulty is illustrated in in the following example:
@(c) s ## 2 ## 3 ## 4 ## 5 ## 6
vs.
@(c) s ## 2 ## 3 ## 4 ## 5 ## 6 7
The latter actually means
@(c) s ##2 ##3 ##4 ##5 ##6 7
The proposed solution is to use "##1" instead of the special symbol
"##" for multi-clock concatenation. In the formal semantics, "##"
already means the same thing as "##1". This solves the parsing
problem because every "##" must be followed by a parameter. "##1" is
the only concatenation operator allowed for joining differently
clocked sequences.
The BNF for multi_clock_sequence allows a general cycle_delay_range
for combining two multiply-clocked sequences. The semantic restriction
to "##1" is described in the LRM text.
BNF Changes
-----------
1. 17.6, Syntax Box 17-4. Change
multi_clock_sequence ## multi_clock_sequence
to
multi_clock_sequence cycle_delay_range multi_clock_sequence
2. 17.11, Syntax Box 17-15. Change
multi_clock_sequence ## multi_clock_sequence
to
multi_clock_sequence cycle_delay_range multi_clock_sequence
3. Annex A, p. 410. Change
multi_clock_sequence ## multi_clock_sequence
to
multi_clock_sequence cycle_delay_range multi_clock_sequence
LRM Text Changes
----------------
1. 17.11.1, p. 245. Change the first paragraph from
Multiply-clocked sequences are built by concatenating
singly-clocked subsequences using the multi-clock concatenation
operator ##. This operator is non-overlapping and synchronizes
between the ending clock tick of the left hand sequence and the
strictly subsequent starting clock tick of the right hand
sequence.
to
Multiply-clocked sequences are built by concatenating
singly-clocked sequences using the single-delay concatenation
operator ##1. This operator is non-overlapping and synchronizes
between the clocks of the two sequences. The single delay
indicated by ##1 is understood to be from the endpoint of the
first sequence, which occurs at a tick of the first clock, to
the nearest strictly subsequent tick of the second clock, where
the second sequence begins.
2. 17.11.1, line 9, p. 245. Change
the above sequence is equivalent to
to
the above sequence is equivalent to the singly-clocked sequence
3. 17.11.1, p. 245. Change
When using the multi-clock concatenation operator ##, both
operands are required to admit only non-empty matches.
to
When concatenating differently-clocked sequences, the maximal
singly-clocked subsequences are required to admit only non-empty
matches.
4. 17.11.1, p. 245. Change
The restriction to operands that do not match the empty word
when using ## ensures that any multiply-clocked sequence has
well-defined starting and ending clocking events and
well-defined clock changes.
to
The restriction that maximal singly-clocked subsequences not
match the empty word ensures that any multiply-clocked sequence
has well-defined starting and ending clocking events and
well-defined clock changes.
5. 17.11.1, p. 245. Change
Differently-clocked or multiply-clocked sequence operands cannot
be combined with any sequence operators other than the
multi-clock concatenation operator ##. For example, the
following is illegal:
(@(posedge clk1) x ##1 y) intersect (@(posedge clk2) z[*1:$])
to
Differently-clocked or multiply-clocked sequence operands cannot
be combined with any sequence operators other than ##1.
For example, if clk1 and clk2 are not identical, then the following
are all illegal:
@(posedge clk1) s1 ##0 @(posedge clk2) s2
@(posedge clk1) s1 ##2 @(posedge clk2) s2
@(posedge clk1) s1 intersect @(posedge clk2) s2
6. 17.11.1, p. 245. Change all remaining instances of "##" to "##1"
(but do not change "##1" to "##11"). [7 instances]
[Note: There are 11 instances of "##" in this section in Draft 3,
but 4 of these should be eliminated by the preceding changes.]
7. 17.11.2, p. 246. Examples on p. 246, change "##" to "##1"
(but do not change "##1" to "##11"). [3 instance]
8. 17.11.3, p. 247. Examples on p. 247, change "##" to "##1"
(but do not change "##1" to "##11"). [8 instances]
9. 17.11.3, p. 248. Examples on p. 248, change "##" to "##1"
(but do not change "##1" to "##11"). [10 instances]
Formal Semantics Changes
------------------------
1. H.2.1, p. 484. In the abstract grammar for clocked sequences, change "##"
to "##1".
2. H.2.3.1, second bullet, p. 485. Change "##" to "##1".
3. H.3.1, p. 487. Delete the bullet "(S_1 ## S_2) |---> (S_1 ##1 S_2)".
================================================================================
Erratum JH2: Clocked sequence parenthesis form missing in formal semantics
================================================================================
Discussion
----------
By oversight, the BNF change allowing parentheses to be used on multiply-clocked
sequences was not paralleled in the formal semantics.
Formal Semantics Changes
------------------------
1. H.2.1, p. 484. Add a production to the abstract grammar for clocked
sequences. Change
S ::= @(b) R // "clock" form
| ( S ## S ) // "concatenation" form
to
S ::= @(b) R // "clock" form
| ( S ) // "parenthesis" form
| ( S ##1 S ) // "concatenation" form
This archive was generated by hypermail 2b28 : Wed Jan 21 2004 - 11:57:32 PST