Re: [vhdl-200x] Why OOP vs Generics

From: Evan Lavelle <eml-vhdl-200x@cyconix.com>
Date: Fri Mar 18 2011 - 16:23:05 PDT

I think it would be useful to start by getting some clarity on the
target market for all these new features. Will VHDL200x be used by
engineers, or programmers? People designing circuits, or verifying them?
These aren't the same people, except in very limited cases. There are
people who design and "verify" FPGAs, but they generally don't do much
verification, and are happy with what VHDL or even Verilog currently
has. If you look at everybody else, you see a very clear division
between the engineers, who do the hardware in an HDL, and the
verification people, who are professional programmers, and who (in the
VHDL world) do verification in C, C++, or 'e'. If you've ever worked in
an organisation like this you'll know that there are very few people who
can do both. My own experience in an organisation that used Verilog and
'e' is that, of the Verilog guys who trained on 'e', maybe only 10 - 20%
ever used it in anger. The rest couldn't; they were engineers, and not
programmers, and didn't have the mindset for it (and 'e' is trivially
easy compared to C++).

The real-world lesson, IMHO, is that one size does not fit all in EDA.
There's no point adding fancy modern programming features to antiquated
1980's HDLs, because the result is not going to please anybody. The
engineers get features that they don't understand and won't use, and the
programmers get a clunky retrofit on top of an unusable base language.
The only winners are the EDA vendors, as everyone has to go through yet
another replacement cycle. If this sounds familiar, then it's because
this is exactly what has been happening with SystemVerilog over the last
few years.

You also have to consider something else, which is that designing new
languages is not, by any stretch of the imagination, easy. It's also,
with all due respect, not something that can be done by an IEEE
committee. Adding OOP to VHDL is, to all intents and purposes, designing
a new language (unless, of course, you simply copy Ada, but I don't
think that would go down well in the market). There are some things that
could be done relatively easily (coverage, generators, a small standard
library), but OOP is not one of them. It's vastly complicated.

On to OOP and generics.

OOP:

----
The problem with OOP, quite apart from the implementation and market 
issues, is that it's got nothing to do with hardware (Niklaus Wirth did 
try with Lola, but Lola disappeared without trace). If you look at the 
history of programming languages over the past 60 or so years, you can 
see a clear progression in the development of type systems, from untyped 
or minimally-typed languages, through various levels of abstraction to 
current OO languages. Essentially, this was a progression from a 
function-based to a data-based paradigm; from a paradigm in which 
operations, or functions, are central and data is secondary, to one in 
which data, or objects, are central, and the operations on that data are 
secondary. For programmers, this has been incredibly useful. However, 
the problem here is that this progression is of no value whatsoever when 
describing electronic circuits. In the hardware world we are concerned 
precisely with the function-based paradigm. We care only about simple 
well-defined operations on data. Abstracting 'data' into a 'class' - 
where a 'class' has the properties of dynamic lookup, abstraction, 
subtyping, and inheritance - has no value in hardware design. As an 
engineer, I need a language which allows me to concisely describe basic 
operations on data. As a programmer, I already have access to maybe a 
dozen modern and excellent OO languages that can do the verification job 
properly.
Generics:
---------
Generic programming, on the other hand, is very useful in hardware 
design. Stroustrup defined this as "lifting algorithms and data 
structures from concrete examples to their most general and abstract 
form", which is precisely what I'd like to do in an HDL. VHDL's limited 
generics pre-2008 have always been one of its main strengths, and 
package generics can only make that better. It's difficult to see why 
you'd want to add any more to this, though. C++, for example, has 
generic class templates and function templates. Class templates aren't 
relevant without an entire class infrastructure, but generic functions 
might be of some use. Personally, I'd put the effort into more pressing 
features first.
-Evan
-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Fri Mar 18 16:23:36 2011

This archive was generated by hypermail 2.1.8 : Fri Mar 18 2011 - 16:23:50 PDT