Formal Analysis of Single WAIT VHDL processes
for Semantic Based Synthesis
Ludovic Jacomme, Frédéric Pétrot and Rajesh
K. Bawa
Département ASIM, LIP6
Université Pierre et Marie Curie
4 place Jussieu, F-75252 Paris Cedex 05
France
{Ludovic.Jacomme, Frederic.Petrot, Rajesh.Bawa}@lip6.fr
Abstract:
The problem of formally identifying flipflops, latches and three-state
elements within VHDL descriptions of hardware systems is tackled in this
paper. Due to the simulation based semantics of VHDL, the existing synthesis
tools rely on explicit templates to guarantee memorizing element inference
to avoid a complex formal analysis. Opposed to the pattern matching approach
of the commercial tools, the approach proposed here is based on a formal
representation of VHDL in terms of Interpreted Petri Nets (IPN). A Petri
Net preserving the simulation semantic is build as a result of VHDL compilation.
In order to simplify the formal recognition of the memorizing elements
appearing in the description, the Petri net is reduced to a unique minimal
form. This reduction phase has two different constraints, on the one hand
to preserves the VHDL semantic and on the other hand to preserve as much
as possible all intermediates equations, as required for an efficient synthesis
process. Ultimately a set of equations is extracted, and a formal analysis
is performed on all cyclic VHDL symbol assignments. The result is a register
transfer level VHDL description, synthesizable by any existing synthesis
tools. This methodology has been implemented and is illustrated on a representative
set of simple VHDL descriptions.
Introduction
Existing synthesis tools such as the Synopsys VHDL Compiler [2]
or Cadence Synergy [3] are able to
treat sophisticated VHDL descriptions. However, they all impose their own
description style for flipflops, latches or tristates inference. This allows
the tool to avoid a complex analysis due to the underlying simulation semantic
of VHDL [1]. In this work, we tackle
the problem of sequential - and three-state - element identification without
ressorting to templates but relying on a formal approach.
Formalisms were initially elaborated for the integration of formal verification
techniques in the VHDL based circuit design methodology [4,7,8,9,10].
Some formalisms emerging lately are usable for the synthesis of VHDL descriptions
[5,11,13,14,17].
Those applications consider a less restricted subsets of VHDL than the
ones using templates and pattern matching techniques, but as far as we
know, no general method for latch inference has been presented.
To solve this problem, we use a formal model based on Interpreted Petri
Nets (IPN) [15]. Our model is an enhancement
of the one defined in [5] that has been extended
to be applicable for synthesis. We propose the use of an intermediate synthesis
oriented formal model whose goal is specifically to alleviate the constraints
on the programming style. We also guarantee that the behavioral simulation
is identical before and after synthesis when the process is synthesizable.
Section 2 presents our synthesis oriented formal model based on Petri
Nets. Section 3 deals with some of the main aspects of the memorizing elements
recognition after the compilation into our formal model. Section 4 presents
with experimental results and we conclude and present future prospects
in Section 5.
Compilation of VHDL descriptions
to Petri Nets
The VHDL description we consider is supposed to be elaborated. It is a
collection of processes communicating through signals. In particular, all
concurrent statements other than processes are supposed to be replaced
by their equivalent process. All call statements are replaced by the body
of the called procedure or function, by renaming the formal parameters
with actual called arguments and by importing the local variables of the
called function or procedure. The following restrictions have to be also
satisfied :
-
The types and functions defined in the IEEE 1164 standard libraries, are
the only one supported.
-
The temporal clauses are excluded both in signal assignment and WAIT
statement.
We are not interested in the VHDL compilation aspect, so we can restrict
the VHDL subset to a minimal subset, as long as it is sufficient to illustrate
all critical examples for the memorizing elements recognition.
Each VHDL process can be seen as a synchronized automaton, where changing
the state induces some transformations of internal variable's values and
signal's drivers. Thus a process can be easily represented as a Interpreted
Petri Net (IPN) [14,7].
Its translation should preserve the simulation semantic, the intermediate
information relevant to synthesis, the execution's sequentiality of the
process body and also the vectorized symbols.
Presentation of the Petri Net
Formalism
The Petri Net is made of a control part and a data part. The control part
represents each VHDL processes and their synchronization mechanisms. The
data part represents the informations concerning all the symbols manipulated
in the VHDL description such as constants, variables or signals.
The VHDL data part
An element of a set
is associated to each VHDL variable and signal of the description. It represents
the variable or signal attributs, and the three subsets such that
are defined as follows :
-
is the set of all signals
.
Each element
is a triplet
,
and defined as follows :
the effective value of
,
its event attribute and
its driving value.
-
is the set of all variables
of process
.
Each element
is defined by
,
where
represents the current value of
.
-
is the set of all constants
.
Each element
is defined by
,
where
is the constant value of
.
The control part
The control part is an Interpreted Petri Net representing the sequential
instructions of each process. We distinguish two types of transitions :
associated to the
EXECUTE phase of the VHDL simulation cycle, and
corresponding to the RESUME phase :
-
We associate a list of ordered sequential assignments to the
transitions and eventually a firing condition, called GUARD condition.
We assume that given one VHDL symbol, only one assignment to this symbol
is permitted in a transition. The sequential assignments list modifies
the data part of the Petri Net, with the same semantic than the execution
of a VHDL sequential statement. If the transition
has a GUARD condition, the firing of
is possible only if it is true.
-
The
transitions correspond to the implicit or explicit wait statements of each
process. They are used firstly to stop the process when it reaches one
and secondly to wake it up on signal's events occurrences. The firing of
a
transition is possible only when an event occurs on its sensitivity list.
We note
the boolean set, and
the set of all boolean functions with parameters in is the power set of
noted
.
The Petri Net
is defined by :
where
-
is the set of all places.
-
is a set of all transitions,
such that
.
is the set of all transitions modifying elements of
.
is the set of all transitions sensible to the appearance of events on elements
of
.
-
defined as
is true iff an arc exists from
to
.
A transition
has got a maximum of one predecessor.
-
defined as
is true iff an arc exists from
to
.
A transition
has got a maximum of one successor.
-
,
is the guard condition of
.
-
,
where
is an ordered set of couples
with
and
.
indicates the modification applied to a data
while firing the transition
.
-
is the set of all modified symbols when the transition
is fired.
-
is the initial marking of the Petri Net.
Principles of the VHDL compilation
to Petri Nets
The compilation builds a sub Petri Net for each VHDL process. All sequential
statements are individually mapped into an equivalent sub Petri Net. Those
resulting sub Petri Nets are connected together by intermediate places.
All VHDL instructions modifying VHDL symbols are associated to the
transitions.
ENTITY DREG IS
PORT ( CK, A : in BIT;
T : out BIT )
END DREG;
ARCHITECTURE BEH OF DREG IS
BEGIN
PROCESS( CK )
VARIABLE V : BIT;
BEGIN
IF (CK = '1') THEN
V := A;
END IF;
T <= V;
END PROCESS;
END BEH;
|
|
|
Data = { (A.eff, A.drv, A.evt),
(CK.eff, CK.drv, CK.evt),
(V.val),
(TEST0.val),
(T.eff, T.drv, T.evt) }
G(t0) = CK.evt
G(t2) = TEST0.val
G(t3) = NOT TEST0.val
Trf(t1) = { TEST0.val, (CK.eff = '1') }
Trf(t4) = { V.val, A.eff }
Trf(t6) = { T.drv, V.val }
Asg(t1) = { TEST0.val }
Asg(t4) = { V.val }
Asg(t6) = { T.drv }
|
|
|
Figure 1: VHDL Description of a flipflop
All implicit or explicit statements of synchronization are translated to
their equivalent
transitions. The three main transformation principles are the following
:
A VHDL description of a flipflop and the corresponding unreduced Petri
Net and its
structure are given on Figure 1.
A certain number of reduction techniques [6,4,5]
allow to obtain a smaller Petri Net, which preserves the underlying VHDL
semantic and make the net easier to manage. The reduction method of the
Petri Net can be different depending on the target application. For synthesis,
we need to keep all sequences of execution and we also try to obtain a
minimal reduced form, relatively independent of the initial description
style.
We can apply two techniques of reduction. The first one called local
reduction is based on the VHDL instructions structure. This local reduction
takes place each time a VHDL instruction is translated. It is not always
possible [5] to reduce completely a Petri
Net with this first technique. Thus we have to apply another type of reduction,
called global reduction, once the entire Petri Net is obtained.
Local reduction of sub Petri
net representing VHDL processes
The local reduction is based on two basic algorithms that attempt to either
merge several alternative transitions or two consecutive transitions called
respectively lateral reduction and sequential reduction. In the following
we note
where
is set of all intermediate variables added during the reduction process
and
the set of variables which have been declared in the initial VHDL description.
We have
where the sets
and
are respectively the set of possible signal's driver values, and the set
of possible variable's values encountered during the reduction process.
Those intermediate variables have the property to be assigned only once
in a VHDL process.
In what follows, we assume that each process contains one and only one
WAIT statement, since the semantic of VHDL imposes this fact for
flipflop, latches and three-state buffers.
Lateral reduction
When applicable this reduction merges several alternative transitions and
results in a single transition which is equivalent to the merged transitions.
This reduction is applied after the translation of each CASE or
IF
statement, if they do not contain a WAIT statement. A lateral reduction
can be applied to a set of transitions
iff the following conditions hold :
-
All transitions are of type EXECUTE and have a guard condition.
-
is equal to the set of all transitions which have a unique and identical
preceding place
.
-
The set of all the successors of
is equal to
.
-
is equal to the set of all transitions which have a unique and identical
following place
.
-
The set of all the predecessors of
is equal to
.
The lateral reduction of
,
replaces all transitions
by an unique transition
in the sub Petri Net. The transition
is built as follow :
-
A transition
is added in
and two arcs from
to
and from
to the place
are created.
-
The guard condition of
is set to empty.
-
The data transformation defined by
and
is built.
-
The set of transitions
is deleted from
and so are all associated arcs.
The construction of the data transformations is done using the following
algorithm :
-
The transition
modifies all symbols assigned by each
:
.
-
The assignment of each intermediate variables appearing in each
must be first added in the ordered set
:
, 
-
A combination of all others assignment of each VHDL symbols
for each transition
must be performed using the following method :
,
:
-
, 
-
,
:
if
then
,
if
then
,
where
is the driver of
if
is a signal and the current value of the variable
otherwise.
|
|
Figure 2: An example of lateral reduction
This reduction has on the one hand propagated guard conditions of each
in each assignment statement and on the other hand gathered all assignment
statements for each symbol. The sequential execution of the transition
is behaviorally equivalent of the execution of each alternative transitions
,
knowing its guard condition is true. This reduction is illustrated on a
simple Petri Net on Figure 2.
Sequential reduction
When applicable, this reduction merges two consecutive transitions and
results in a single transition whose behavior is equivalent to the one
of the merged transitions. It is applied systematically after the translation
of each signal or variable assignment. A notable difference with the one
defined in [5] is that the sequence of instructions
is preserved by introducing intermediate variables
and
.
These intermediate variables are used to share subexpressions for efficient
resource allocation and boolean optimization in later synthesis stages.
Sequential reduction can be applied to an ordered set of two transitions
iff the following conditions hold :
-
The two transitions
and
are of the type EXECUTE.
-
The two transitions are different and sequentially connected with two intermediate
places
and
.
-
The place
has a unique predecessor
and a unique successor
.
-
The place
has a unique predecessor
.
The sequential reduction replaces the two transitions
and
by a unique transition
in the sub Petri Net. We note
the ordered set of the two places
and
previously defined. We note also
the place preceding transition
.
The resulting transition
is built as follows :
-
A transition
is added in
and two arcs from
to
and from
to
are created.
-
The guard condition of
is the equal to the guard condition of
.
-
The data transformation defined by
and
is built.
-
The place
and the two transitions
and
are deleted and all associated arcs are alose removed.
We note
,
where
is a new variable that shall replace
.
We note
,
where
is a new variable associated to the driver of
.
The data transformation defined by
and
is build as follows :
-
First we set initial value :
,
,
,
and
.
-
Then we proceed to the exploration of all assignments of
,
we do :
-
.
-
if
then we add a new temporary variable :
,
and we build two new assignment statements : 
,
.
-
if
then we add also a new temporary variable :
,
and we build two new assignment statements : 
,
.
-
in the others cases we only duplicate the assignment statement in the new
transition
:
.
-
Let
,
where
appears in
the support of the boolean function
.
We proceed to the exploration of all assignment of
,
:
-
We must rename, in transition
,
all references to previous variables assigned in transition
.
and
,
then rename
by
in the boolean function
.
-
We must also rename in transition
,
all references to previous signal's driver, assigned in transition
.
and
,
then rename
by
in the boolean function
.
-
given one symbol, only one assignment to this symbol is permitted in a
transition, so we erase all previous assignment of symbols of
if they appear in
.
if
then
,
-

|
|
Figure 3: An example of two consecutive
sequential reductions
We only have introduced auxiliary variables, and removed unused assignment
statements in transition
.
The sequential execution of two consecutive transitions
and
,
is behaviorally equivalent to the execution of
.
This reduction technique is illustrated on Figure 3.
Global reduction of sub Petri
Net representing VHDL processes
This reduction is purely based on Petri Net traversal. This traversal is
done by identifying a set of reducible sequences of transitions. A set
of transition
is called a sequence of transitions iff the following conditions hold :
-
We note
,
.
The two transitions
and
are of type RESUME.
-
Transitions included between
and
are of type EXECUTE.
-
Transitions of the sequence are sequentially connected.
A
is said to be completely reduced or a minimal sequence iff
.
Because we consider VHDL process with only one WAIT statement,
the two transitions
and
are identicals. All the sequences of the process are treated one by one
using sequential reduction technique. The resulting reduced sequences,
which have the same initial and last transitions are merged by applying
a lateral reduction technique. Let
,
the set of all sequences of a VHDL process
.
we note
the successor of
,
and
the predecessor of
.
The global reduction on a process is defined as follows :
For all the sequences
of a process
,
-
A transition
is added in
and two arcs from
to
and from
to
are created.
-
All the guard conditions of each transition of the sequence are merged
in a unique guard :
with
.
-
The new assignment statement list
is the result of all successive sequential reduction of all couples
,
with
and
sets to
.
-
If it exists several transitions
then a lateral reduction is applied on all transitions
.
The global reduction transform each sequences, from a WAIT statement
to another WAIT statement, in a single transition. All possible
execution paths are preserved using multiplexors instead of branches, so
the resulting Petri Net has the same behavior than the initial one.
The Petri Net can be reduced using exclusively the global reduction,
but the computational complexity depends on the number of sequences
to be minimized in
.
The objective of the local reduction is to reduce the number of sequences
necessary for the global reduction. On a 32 bit micro-programmed processor
DLXm control automaton [12], the global reduction
without local reduction leaves with 64 sequences to be minimized, while
local reduction leaves with only one.
|
|
Figure 4: Reduction of the sub Petri Net
Such an example is shown on Figure 4,
where all sequences are minimized during local reduction. At this stage
we have obtained a minimal Petri Net and the next section will deal with
the memorizing element recognition from this reduced Petri Net.
Synthesis of VHDL processes with
one WAIT statement
In this paper we are interested in processes with only one WAIT
statement. Nevertheless our reduction technique is useful to synthesized
process with more than one WAIT, but this is part of another study.
The synthesis of equivalent single wait processes differs between different
synthesis tools. For example the four process given in Figure 5
are functionally equivalent.
ENTITY DREG IS
PORT ( CK, A : in BIT;
T : out BIT )
END DREG;
ARCHITECTURE BEH_1 OF DREG IS
BEGIN
PROCESS( CK )
VARIABLE R : BIT;
BEGIN
IF ((CK = '1') AND CK'EVENT)
THEN R := A;
END IF;
T <= R;
END PROCESS;
END BEH_1;
|
|
ARCHITECTURE BEH_2 OF DREG IS
BEGIN
PROCESS
BEGIN
LOOP
WAIT ON CK;
NEXT WHEN (CK /= '1');
T <= A;
END LOOP;
END PROCESS;
END BEH_2;
|
|
ARCHITECTURE BEH_3 OF DREG IS
BEGIN
PROCESS( CK )
BEGIN
IF (NOT(CK='0') AND CK'EVENT)
THEN
T <= A;
END IF;
END PROCESS;
END BEH_3;
|
|
ARCHITECTURE BEH_4 OF DREG IS
BEGIN
PROCESS( CK )
VARIABLE R : BIT;
BEGIN
IF (CK = '1') THEN
R := A;
END IF;
T <= R;
END PROCESS;
END BEH_4;
|
|
|
Figure 5: Four equivalent VHDL Descriptions
of a D-register
They all represent a flipflop as far as VHDL simulation is concerned. Synopsis
Synthesis tool [2] is incapable of
treating the first three descriptions (Behavioral Compiler Error). However,
the fourth one is synthesized as a latch ! Our approach will deduce a flipflop
from all the four descriptions.
Once the Petri Net is completely reduced, we obtain a set of equations
for each variable and signal of the process. The cyclic equation of the
driver
of the signal
derived from all the four descriptions is illustrated on the Figure 6.
Identification of the memorizing elements is done in two distinct steps
: the analysis of the sensitivity list and the analysis of the equation
itself.
|
|
Data = { (A.eff, A.drv, A.evt),
(CK.eff, CK.drv, CK.evt),
(TEST0.val), (T.eff, T.drv, T.evt) }
G(t0) = CK.evt
Trf(t1) = { { TEST0.val, (CK.eff = '1') },
{ T.drv, (A.eff AND TEST0.val) OR
(T.drv AND NOT(TEST0.val) } }
|
|
|
Figure 6: The Sub Petri Net of a flipflop
and the corresponding data transformations
Sensitivity list analysis
The analysis of the support of the assigned signal or variable and the
sensitivity list of the corresponding process, as shown below, allows us
to classify each signal or variable into three distinct classes : un-synthesizable
assignment, noncyclic combinatorial assignment and cyclic combinatorial
assignment.
Given the couple
,
we note
the extended support of
,
where all intermediate variables
are replaced by their own extended support
.
By construction the extended support
of the function
contains only symbols of the two sets
and
.
Let
the set of all signals
that appear in the sensitivity list of the process, we note
and we note
.
An analysis is performed for all useful couples
with
:
-
if
,
then
-
if
it is un-synthesizable
-
or if
it is a constant
-
or if
it is a combinatorial function
-
and otherwise it is un-synthesizable.
-
if
then
-
if
it is a cyclic function
-
and otherwise it is a simple combinatorial function.
-
if
then
-
if
it is a cyclic function,
-
and otherwise it is un-synthesizable
At this stage, we have classified each useful VHDL symbol into the two
synthesizable categories : cyclic and noncyclic functions. Noncyclic functions
are simply synthesized as combinatorial gates. The next step is to analyze
the cyclic equations, that will possibly be synthesized as memorizing elements.
Analysis of cyclic equations
A one bit memorizing element can be modeled typically by a simple state
graph, with a first state associated to the value one, and a second associated
to the value zero. We treat all the symbols one by one and construct the
boolean equations on all the arcs of the state transition graph to determine
:
-
The memorization condition,
-
Eventual oscillation condition,
-
Set and reset conditions,
-
The equation of the data to be memorized.
The computation of these equations is performed using BDDs [16].
Given a couple
and two boolean equations
and
derived from
we have :
-
and
,
-
,
where
is the cofactor function,
-
,
-

-
.
Once the above equations have been obtained, we proceed further in the
analysis to determine the type of hardware necessary for the synthesis
:
-
if
an oscillation is possible (undesirable behavior from the designer point
of view).
-
if
the couple
is a simple combinatory assignment, the analysis is ended.
-
if
the symbol
is never assigned, it's a constant equal to its elaboration value.
-
if
or
there is a set or reset condition.
An iteration of the previous step may be necessary to remove intermediate
variables appearing in the memorizing condition. A more precise analysis
has to be performed on the BDDs equations in order to separate the asynchronous,
synchronous set or reset conditions, a write enable condition and the clock's
edge type :
-
if
appears in
then
-
if
,
with
or
flipflop
-
otherwise
un-synthesizable
-
if
appears in 
-
if
latch
-
otherwise
un-synthesizable
Those new checks have to follow the constraints given by the sensitivity
list of the process.
It is important to note that these equations do not depend upon the
VHDL description style, since the reduction process achieved a minimal
form. The set of equations obtained for the descriptions of Figure 6
are the following :
From this equation all four forms of VHDL process leads to the synthesis
of flipflop.
Experimental results
Table 1: Experimental results after compilation of 54 VHDL
descriptions
| Synthesis tools |
Error |
Warning |
Ok |
| Synopsys Compiler |
26 |
48.5% |
11 |
20% |
17 |
31.5 % |
| Cadence Synergy |
34 |
63% |
0 |
0% |
20 |
37 % |
| Our approach |
0 |
0% |
0 |
0% |
54 |
100 % |
|
We have implemented our approach and have applied it to a set of 54 simple
VHDL descriptions. We have also used two well known commercial synthesis
tools : Synopsys Design Compiler and Cadence Synergy. This set of descriptions
is composed of multiplexors, latches and flipflops with various combinations
of write enable, asynchronous or synchronous set and reset, rising or falling
clock edges. We have written those descriptions by using numerous forms
of WAIT,
IF, ELSIF and LOOP statements.
In Table 1, the first column gives the name
of the synthesis tool. The next two columns give the number and the percentage
of VHDL descriptions that have been rejected with an error message by the
synthesis tool during the compilation phase. The next two columns give
the number and the percentage of descriptions which have been accepted
with a warning message. The last two columns give the number and the percentage
of descriptions which have been accepted without any message.
Table 2: Experimental results after synthesis of VHDL descriptions
| Synthesis tools |
Error |
| Synopsys Compiler |
13 |
46% |
| Cadence Synergy |
0 |
0% |
| Our approach |
0 |
0% |
|
In Table 2, the first column gives the name
of the synthesis tool. The next two columns give the number and the percentage
of VHDL descriptions that have been accepted during the compilation phases,
but that were synthesized incorrectly without any error message by the
tool.
The results Tables 1 and 2
underline three important points :
-
Those two synthesis tools don't impose the same restrictions on the description
style. This is damageable for the designs from a portability point of view.
-
The Synopsys Compiler is not able to synthesize properly all the VHDL descriptions
accepted during the compilation and analysis phases.
-
Our analysis succeed in all cases to recognize the right hardware implantation,
whatever the style of description.
Conclusion
We have presented an approach which exploits a formal model of VHDL in
terms of Interpreted Petri Nets. Several reductions techniques preserving
first the simulation semantic of VHDL and second the informations necessary
for an efficient synthesis, have been developed.
Based on the reduced Petri Net, we are able to determine if a simple
process, with only on WAIT statement, can be synthesized. This is
done by the analysis of the cyclic and noncyclic data equations attached
to the Petri Net, taking into account the sensitivity list of the process.
If the process is synthesizable, we apply a formal recognition technique
to find out the correct hardware required to implement the sequential behavior
of the process.
This approach has been implemented and experimented on a set of 54 simple
VHDL descriptions, whose goal is to illustrate many ways to describe the
same sequential VHDL behavior, such as latches, flipflops, multiplexors
or tristates.
Future use of these techniques include first the multi-wait processes
synthesis, where both the formal model and the recognition algorithm are
useful, and second, the translation to and from VERILOG as the existing
translators make use of syntax based rules instead of taking into account
the language semantic.
Bibliography
-
1
-
VHDL LRM (1992) IEEE Standard VHDL Language Reference Manual in IEEE
Std 1076-1987.
-
2
-
Synopsys Inc. (1988-1996) VHDL Compiler v3.5a
-
3
-
Cadence System Inc. (1997) Synergy v3.0
-
4
-
Encrenaz E. (1995) Une Méthode de vérification de propriétés
de programmes VHDL basée sur des modèles formels de réseaux
de Petri. PhD thesis (in French), Pierre and Marie Curie University, Paris.
-
5
-
Bawa R. K. (1996) An Automated Framework for the Formal Verification and
Analysis of Systems Described in VHDL, PhD thesis (in French), Pierre and
Marie Curie University, Paris.
-
6
-
Müller J. and Krämer H. (1993) Analysis of Multi-Process VHDL
Specifications with a Petri Net Model. in Proceedings of the Euro-Dac'93,
474-479, Germany.
-
7
-
Olcoz S. and Colom M. (1993) A Petri Net Approach for the Analysis of VHDL
Descriptions, in Proceedings of the CHARME.
-
8
-
Déharbe D. and Borrione D. (1993) A Qualitative Finite Subset of
VHDL and Semantics, in Technical Report of IMAG Institute, RR943.
-
9
-
Dohmen G. and Hermann R. (1995) A Deterministic Finite-State Model for
VHDL, in formal Semantics for VHDL, edited by C. Delgado Kloos and P.
T. Breur, Kluwer Academic Publishers.
-
10
-
Van Tassel. J. P. (1993) femto VHDL: The Semantics of a Subset of VHDL
and Its Embedding in the HOL Proof Assistant, PhD Thesis, University
of Cambridge .
-
11
-
ELES P. and Kushinski K. et al. (1994) Synthesis of VHDL Concurrent Processes,
in Proceedings of the Euro-Dac'94, Grenoble.
-
12
-
John L. Hennessy and David A. Patterson (1990) in Computer architecture,
a quantitative approach, Morgan Kaufmann Publisher Inc.
-
13
-
Mekenkamp G. and Middelhoek P. F. A. et al. (1996) A Syntax based VHDL
to CDFG Translation Model for High-Level Synthesis, in Proceedings of
VHDL International Users Forum, VIUF Spring'96, 89-97, Santa
Clara.
-
14
-
Mirkowski J. and Bilinski K. et al. (1996) Petri Net Modelling of VHDL
Simulation Cycle for High Level Synthesis Purposes, in Proceedings of
VHDL User Forum in Europe SIG-VHDL Spring'96 working conference, Dresden.
-
15
-
Murata. A. (1989) Petri Nets: Properties Analysis and Applications, in
Proceedings IEEE, vol. 77 N
4, 541-580, April 1989.
-
16
-
Bryant R. E. (1986) Graph Based Algorithms for Boolean Function Manipulation,
in Proceedings of IEEE Transactions on Computers, Vol C-35, 677-691,
1986.
-
17
-
Hsieh Y-W. and Levitan S. P. (1997) Control/Data-Flow Analysis for VHDL
Semantic Extraction, in Proceedings of 4th Asia-Pacific Conference on
Hardware Description Language, 68-75, 1997.
About this document ...
Formal Analysis of Single WAIT VHDL processes
for Semantic Based Synthesis
This document was generated using the
LaTeX2HTML
translator Version 99.1 release (March 30, 1999)
Copyright © 1993, 1994, 1995, 1996,
Nikos
Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross
Moore, Mathematics Department, Macquarie University, Sydney.