SAVANT is a VHDL analyzer and code generator developed at the University of Cincinnati. It is designed to be easily extensible by the end user by allowing the insertion of new back ends into the intermediate form. The intermediate form that SAVANT supports is the open specification AIRE IIR - see www.vhdl.org/vi/aire/ for details. Documentation for inserting a new backend into the analyzer is in the doc subdirectory of the SAVANT distribution.
One of the backends that comes with the SAVANT distribution is a C++ code generator. It generates code for the University of Cincinnati's TyVis VHDL support library. TyVis is a C++ library that supports many of the concepts of VHDL like signals, signal assignment, etc. and works with a parallel discrete event simulation library, WARPED.
Using SAVANT, TyVis, and WARPED, parallel VHDL simulation across SMP workstations, distributed machines, or large parallel systems is possible.
SAVANT is available for download at:ftp.ececs.uc.edu:/pub/users/dmartin.
(1.2) Where do I get std_logic_1164 and other libraries for SAVANT?
Check out the comp.lang.vhdl FAQ. It's home is www.vhdl.org/comp.lang.vhdl/. See Part I, section 4.7.
(1.3) What is the status of SAVANT?
SAVANT can analyze real designs. It can analyze over 97% of the Billowitch test suite, and lots of real code we've thrown at it. It's pretty good at analyzing good VHDL. It will do weird things with bad VHDL sometimes. We're still working on that, in addition to other improvements in the whole system.
The code generator doesn't cover the language as well as the analyzer.
At this point there is no documentation to say what's covered and what's
not. We've recently started compiling a list; it will be in some future
release. Starting in version 1.02, the file savant/doc/BUGS list
known unsupported features. This list is surely incomplete.
Let us know when you find
other unsupported features not listed.
Also, please report any cases where good VHDL doesn't parse, or bad VHDL does. Or if scram does something you don't like - we love feedback!
(1.4) Can I pay someone for support if I'm interested in using SAVANT for an important project?
Yes. Commerical support for SAVANT is available from Clifton Labs, Inc. Clifton Labs employees several of the primary authors of SAVANT and is happy to fix bugs, provide training, phone support, implement new back-ends - you name it. Please send email if you have any questions at all about support of any kind for SAVANT.
Scram is the name of the analyzer/code generator in SAVANT. No one can remember why it's named that way. We like it though.
(2.1) When I run makedepend that came with SAVANT, I get all kinds of warnings.
Yep. Ignore them. If any of them are important, you'll find out when you actually try to build scram. Most of the aren't.
If you really want to know, it is because "makedepend" doesn't define the same include paths and preprocessor flags as a real compiler. As a result, it can't find all of the system files (who cares?!) and it might show some #error directives in headers.
(2.2) When I build dependencies with g++ as happens by default, not everything rebuilds that should.
Yes, we've noticed that too. Bummer. Guess you're better off using the
makedepend.your_platform that we've included with the distribution. Here's
how to change it. Edit savant/lib/Makefile.common. Find the line:
MAKEDEPEND = -rm -f .depend; g++ ...
and change it to:
MAKEDEPEND = -rm -f .depend;../bin/makedepend.your_platform
-f- --\
$(MDFLAGS) $(CPPFLAGS) -- $(MAKEDEP_SRCS) > .depend
Make sure you replace "makedepend.your_platform" with an actual binary name corresponding to your platform. If you're running a newer linux distribution, for instance, it would be "makedepend.linux-gnu".
(2.3) If you know that g++ doesn't do it quite right, why not make your makedepend binary the default?
Well, we used to do that but a lot of people didn't like the warnings mentioned in Section 2.1. Since most people aren't actively modifying and recompiling SAVANT, we decided that correct dependencies weren't really a big deal... And if they were to an individual, they'd at least know to ask.
In some future release of SAVANT we hope to have a better solution to this problem.
(2.4) But, there is no makedepend.my_platform - what can I do now?
Are there any that are compatible with your platform? The old Solaris binaries should work with a new release, even though the name doesn't match, for instance.
If not, it doesn't look good. You need to compile your own or figure out some other way to generate dependencies. If you compile your own, please send it to the author at dmartin@ececs.uc.edu and it will be included for others in the next release.
To compile your own, you'll need to grab the X11 distribution, and modify the source for makedepend by increasing MAXFILES to something like 2048 or larger.
You can obtain PCCTS from www.polhode.com/pccts.html.
You can ftp Flex from prep.ai.mit.edu. Go to pub/gnu.
(2.7) Where do I get GNU make?
You can ftp GNU make from prep.ai.mit.edu. Go to pub/gnu.
(2.8) Compiling scram is slow - what can I do to get it to compile faster?!
Buy a faster machine! Well, OK. For us, it compiles in about 13 minutes. That's on a dual processor Pentium Pro machine that's getting slow by today's standards. A lot of RAM really helps. More than 128M is probably enough for maximum comfort if you're really developing with SAVANT.
Other tips... Specify the files that you've touched explicitly to make. If you modified IIRScram_Declaration.cc then in the savant/src directory, say make aire/iir/IIRScram/IIRScram_Declaration.o. Once you've beaten the bugs out of your new code, then do a make and let the whole thing build.
Another thing you can do on most platforms is get rid of the ranlib
step in the compilation. Ranlib builds indexes in library files.
The thing is, most modern versions of ar
write the index when the build the library. On Linux the index is
written and then ranlib rewrites the index again - a serious waste of time.
You can edit the Makefile (or Makefile.in, and rerun configure) and
remove all lines containing RANLIB.
On Solaris this won't buy you much - ranlib on
Solaris doesn't do anything at all. And on SunOs 4.1.3, you need
to run ranlib so don't
remove it from the Makefile.
It probably can - we've tested with quite a few of them. However, it's not so simple as we'd like. This is because every vendor releases non-standard, non-compatible versions of their own libraries. So you need to find versions of the libraries that "line up". For instance, use all of the libraries from the same vendor and you should be OK.
The best bet for portability is to work with the actual IEEE libraries. See Section 1.2 for details.
(3.1) Can scram parse/simulate my design?
You'll have to try, we don't know.
(3.2) Can scram parse/simulate _any_ design?
It can parse and simulate a lot of real designs. We have many working
examples. If you're having problems:
1) See if you can isolate your problem a bit - we get a lot of email.
2) Send us a simplified test case exhibiting the problem and the full
error messages you're seeing, or a description of the problem. You can
send the email to savant-users@ececs.uc.edu
if you like.
One comes with the distribution, and it's also online at www.ececs.uc.edu/~paw/savant/doc/simulationManual/.
(4.1) When I tried to build my simulation, it didn't build. What should I do?
Follow the steps in Section 3.2.
(4.2) Can SAVANT simulate _any_ design?
See Section 3.2.
Many versions of PCCTS including some of the "MR" releases had this bug - it's a problem with their header file. Look at the file in the error and go to the line it lists. It probably says something like "virtual bufferSize() { return buffer_size; }". The problem is that this declaration lists no return type and that's not allowed in the C++standard. Older versions of g++ would allow this and so PCCTS got away with it for a long time.
To fix it, simply change the declaration to "virtual int bufferSize() { return buffer_size; }". If you can't modify the file (because it's installed in a root owned directory and you're not a sysadmin, for instance), you can copy that whole directory into your account, fix the problem, and then set the environment variable "PCCTSROOT" to the directory in your account. Problem solved.