Hardware Reference
In-Depth Information
1 a_no_start: assert property (
2
start |=> !start throughout complete[->1]
3 );
4 a_no_complete: assert property (
5
complete |=> !complete throughout start[->1]
6 );
7 initial
8
a_initial_no_complete: assert property (
!complete throughout start[->1]
9
);
10
Fig. 15.3
Encoding of control part of sequential protocol
3. If start is high, then the value of dataIn at that time must equal the value of
dataOut at the next strictly subsequent cycle in which complete is high.
4. If start is high, then start must be low in the next cycle and remain low until
after the next strictly subsequent cycle in which complete is high.
5. complete may not be high unless start was high in a preceding cycle and
complete was not high in any of the intervening cycles.
The last two English rules specify that the protocol is sequential. Let us say that
a Boolean occurs if it is high. Then these rules say that a second start cannot
occur until after the complete for the first start occurs, and an occurrence of
complete corresponds to the nearest preceding occurrence of start . A transaction
spans the set of cycles from an occurrence of start to its corresponding occurrence
of complete , and two transactions do not overlap.
Note that this specification decomposes into a control part, which ensures the
sequential pairing of occurrences of start and complete , and a data part, which
checks the data correspondence between dataIn and dataOut for each such pair.
The control part of the specification does not involve data or local variables and can
be encoded as shown in Fig. 15.3 .
Assertion a_no_start checks Rule 4 .Rule 5 is checked by a_no_complete
and a_initial_no_complete . The first two assertions are symmetric in start
and complete , while the last is not. Since the last assertion is within an initial
procedure, only one evaluation attempt of a_initial_no_complete is begun at
the first occurrence of the clocking event. That evaluation checks that there is no
occurrence of complete until after the first occurrence of start .
Now let us move to the data part of the specification and begin without using local
variables. Since the latency from an occurrence of start to the next subsequent
occurrence of complete is not fixed, $past will not work. The value of dataIn at an
occurrence of start needs to be stored somewhere, though, since otherwise it is lost
and the comparison with dataOut cannot be made. Since the protocol is sequential,
 
Search WWH ::




Custom Search