[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: gEDA-user: Assertion based verification using VCD and VHDL
- To: geda-user@seul.org
- Subject: Re: gEDA-user: Assertion based verification using VCD and VHDL
- From: Tom Hawkins <tom@launchbird.com>
- Date: Sun, 2 May 2004 09:48:40 -0500
- Cc: cores@opencores.org
- Delivered-to: archiver@seul.org
- Delivered-to: geda-user-outgoing@seul.org
- Delivered-to: geda-user@seul.org
- Delivery-date: Sun, 02 May 2004 10:52:19 -0400
- In-reply-to: <409136AC.4060005@cliftonlabs.com>
- Organization: Launchbird Design Systems, Inc.
- References: <409136AC.4060005@cliftonlabs.com>
- Reply-to: geda-user@seul.org
- Sender: owner-geda-user@seul.org
- User-agent: KMail/1.4.3
On Thursday 29 April 2004 12:09 pm, Darryl Dieckman wrote:
> Hi,
>
> I am trying to locate an open-source tool chain that I can
> use for assertion based verification of a design. I have
> read about PSL/Sugar and the Open Verification Library (OVL).
> It looks like OVL would allow me to add verification to
> a VHDL design which would work great while my design is
> in VHDL.
>
> However, my digital design is eventually fabricated as a full
> custom VLSI layout. I extract SPICE for the design and run
> simulations of the design in SPICE. I then take the raw output
> from
> the SPICE run and generate a VCD (value change dump) file.
> Currently I use something like GTKWave to visually inspect the
> digital response of the circuit.
[snip]
It sounds like you're tackling two independent issues: functional
verification and implementation verification.
Functional verification answers the question, "Does my RTL implement
the intended function?" Implementation verification answers the
question, "Now that I've converted my RTL to a lower level (gates,
transistors, post-layout), was the translation performed correctly,
i.e. does it meets timing and is it functionally equivalent?"
Assertions (PSL, OVL) help answer the first question by allowing the
designer to specify system properties such as "If 'req' is high, then
'ack' should be true on the next clock cycle":
always (req -> next ack) // PSL
The properties are verified using simulation or formal methods. For
simulation, a tool converts a property into a state-machine to act as
a monitor. During simulation, if the property is violated, the
state-machine posts a failure message.
Model checking is a formal method to mathematically prove a property
will never be violated. Unlike simulation, model checking covers
every possible corner.
For simulations based property assertions, I only know of one
open-source tool chain. Confluence (http://www.launchbird.com) has a
tool called ba2cf, when coupled with another open-source tool,
ltl2ba, completes the path from temporal properties similar to PSL,
to assertion monitor state-machines. Ba2cf is in rough shape, but I
have a cleaner version that generates Verilog and SystemC monitors.
For formal verification, there is an open-source model checker called
NuSMV (http://nusmv.irst.itc.it/). NuSMV is considered a close
cousin of Cadence's FormalCheck. The drawback of NuSMV is it doesn't
accept HDL as input; you'd have to convert your design by hand. If
Confluence is your source code, it can auto-generate VHDL, Verilog,
and NuSMV, not to mention C.
Implementation verification is a separate topic. Traditionally this
has been handled by running RTL test vectors through gate-level
simulation to check for functional errors or timing violations. But
like with any simulation-based approach, you'll always be left
wondering, "Did my test vectors cover everything?". Almost always
the answer is no.
There are two formal methods to prove correctness of a low-level
netlist; they are static timing analysis (STA) and equivalence
checking (EC). Unfortunately there are no open-source STA or EC
tools. :-( If you can afford STA and EC (I recommend Conformal),
you'll never have to run a digital gate-level sim again.
-Tom
--
Tom Hawkins
Launchbird Design Systems, Inc.
Home of the Confluence Logic Design Language
http://www.launchbird.com/