An external port of the mode in must be declared with the mode
in. A guarded external port of the mode inout must be
declared with the mode inout.
An external port (guarded or not) of the mode out must be declared with
the mode out. An unguarded external port of the mode inout
must be declared with the mode out. A guarded external port of the
mode inout must be declared with the mode inout. An internal
signal (simple or guarded of kind bus) of a behavioural or structural
description must be declared with the mode signal. An internal
register (guarded signal of kind register) is to be declared with
The input_output_name is used to identify the input-output signal. For an external port, the signal's identifier added, if the signal is an array, to its constraint (the range of the array) constitutes the input-output name. For an internal signal the input_output_name is made from the concatenation of the access_path and the signal's name (identifier and if needed constraint). The access_path is a string representing the instance where the signal is declared. It is a list of instance names separated by '.' (dot).
The spy option (keyword spy) may be used for outputs (out port, inout port, internal signal). This option makes one additional pattern be printed in the result file each time an event occurs on this signal during the simulation and the corresponding pattern (with this event date) has been omitted in the input pattern file.
Putting one or several additional ';' (semicolon) at the end of an input-output declaration makes one or several blank columns (up to 15) be printed in the result file after the input-outputs value.
The description block is a series of pattern description statements. Each pattern is a list of values preceded by a date and optionally by a label.
[date] [label] : list_of_values ;
Patterns statements should be ordered with stict growing dates in the series.
The date may be either an absolute date or a relative date. An absolute date is an integer followed by a time unit. A relative date is a + followed by an integer and a time unit (the reference is the date of the previous pattern description statement). Legal time unit are ps, ns, us and ms.
< 200 ps >,<4500ns>,< 12us > are legal absolute dates. < +200 ps >,<+4500ns>,<+1 us> are legal relative dates.
A label is an identifier (in VHDL syntax). The list_of_values is a set of values. Each value is associated with one input-output. The value of rank i corresponds to the i-th input-output. Depending on the format, legal values for inputs are:
|B (binary)||0 and, 1|
|O (octal)||0, 1, 2, 3, 4, 5, 6 and, 7|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E and, F
For each output the user can predict a value. This bring the simulator to make
a comparison between this value and the one calculated during the simulation.
Predicting a '*' (star) as an output value disables the comparison. Values
must be preceeded by a '?' (question mark). The '?' can be omitted when
using a '*'. Depending on the format, legal values for outputs are :
|B (binary)||0, 1 and *|
|O (octal)||0, 1, 2, 3, 4, 5, 6, 7 and *|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F and *
Using the binary format '?1' can be replaced by '+' (plus) and '?0' by
in A (0 to 15) X; in B (0 to 15) X; in Cin; out Cout; signal S (0 to 15) X; register Accu.A (0 to 15) X;
Other statements (called actions) such as changing registers value or saving the state of the circuit can be placed in the description block.
The content of a register can be forced to a user defined value using the following statement:
register_name <= value ;
Register_name is a string representing the name of the register to be forced (written in the same form as described above).
Value can be given in hexadecimal (X), octal (O) or binary (B) format :
The state of the circuit can be saved after all patterns are processed using:
The save; statement must be placed just before the end; instruction. When writing a long sequence of patterns, this feature can be used to split the sequence into several small sequences (with a save statement at the end of each sequence) (see asimut(1)).
In pat format a comment begins with either a '#' (sharp) or a '--' (two adjacent minus) and extends up to the end of the line. A comment marked by a '--' is simply ignored. A comment maked by a '#' is kept at compile time and reproduced at the same place in the result file.
Pat does not make the difference between upper and lower case letters.
When the specified read-write format is O (octal) for an array input-output and the range of the input-output doesn't match a multiple of 3, the most significant bits - 1 or 2 bits - of the value are ignored.
When the specified read-write format is X (hexadecimal) for an array input-output and the range of the input-output doesn't match a multiple of 4, the most significant bits - 1, 2 or 3 bits - of the value are ignored.
A comment beginning with a '#' (sharp) placed after the end; statement causes a syntax error.
|ASIM/LIP6||PAT (5)||October 1, 1997|