On Jan 2, 2014, at 11:15 AM, Peter Corlett <abuse at cabal.org.uk> wrote:
On Sun, Dec 29, 2013 at 11:05:35AM -0800, Al Kossow
wrote:
[...]
I had been tinkering with Cyclone parts, but most
people here use Xilinx. I
think Verilog vs VHDL is about half and half. Over Christmas, I bought myself
a Pipistrello board with level converter shield
http://pipistrello.saanlima.com/index.php?title=Welcome_to_Pipistrello
My research into FPGAs so far has come up with the following:
I am informed that Xilinx's FPGAs are better than Altera's, but Altera's
development tools are much better. Having actually *used* Altera's Quartus II
and found it to be pretty hateful, I dread to think how horrible Xilinx's tools
must be.
Such "information" is highly suspect, in my view. The superiority
of one brand of FPGAs changes over time; I vastly preferred Altera
FPGAs up until Xilinx's recent 7-series came out, which is generally
better in most ways. Both of them have pretty comparable lines, and
they move back and forth, but I think Xilinx gets a lot of sockets
because it's the name everyone knows.
Beyond that, what brand is better really depends on what you need to
accomplish. Altera usually has the upper hand in terms of multiplier
quantity and capability, though there are some DSP-specific things
that Xilinx's multipliers have traditionally done better. Altera has
also usually had better transceivers. Xilinx typically comes out on
top for general I/O, especially with the 7-series. Both of them have
pretty nice-looking SoC chips, though I haven't used either yet; as
Eric Smith pointed out, there's usually not much point in using one
unless you have a good reason not to just bolt on an external uC (the
pins and routing required to interface a parallel bus to the uC can
be a driving issue).
Both toolchains are pretty bad from a GUI standpoint, though they are
fine from the command line. I generally prefer Quartus, though they
have made some UI regressions of late (though most of that coincided
with a move to Qt for the GUI framework instead of using a really
awful Win32 translation library for the Linux port, so everything
actually WORKS on Linux now). ISE has always been a pretty awful
GUI, but they're trying to push people to their new "Vivado" system
now, which I haven't tried yet. I will point out that Xilinx has
consistently been about 4-5 years behind Altera in making their
synthesizer and fitter multiprocessor-capable, which is really just
absurd for something that insanely parallelizable.
All the GUIs are going to be pretty hateful until you understand
that they're not software IDEs; the compile-debug-revise cycle is
just about the worst way you can go about it. You want to be doing
your debugging and revisions with a simulator, not the actual FPGA
compiler; that's really only for when you have something that's
actually ready to be tried on real silicon.
Verilog claims to be C-like, but this isn't
particularly true. Some of its
expression syntax is C-inspired, but you could describe it as Perl-like or
Java-like at that point! It's somewhat more Perl-like in that you can just glue
fragments together and it'll generally work. Even a rank amateur like myself
managed to get a blinking LED after barely twenty hours or so of effort :)
I don't find Verilog to be even remotely Perl-like, and I use both
quite a lot. If anything, syntax-wise, it's more of a fusion of C
and Pascal, but I feel like it's mostly C-like. Where do you get
Perl from?
VHDL appears to be much more strongly-typed, which I
approve of as it means
code that actually compiles is much more likely to be correct, however a
beginner is going to find themselves utterly flummoxed because they're having
to learn circuit design and a rather picky language. I decided to leave
learning VHDL for the day when I embark upon a more ambitious project that
would benefit from a more rigorous design.
VHDL is nice in a way; the strong typing does keep you from shooting
yourself in the foot a lot, but it really tends to stump new users
quite a bit (as does the fact that a "signal" describes both a
register and a net, depending on how you use it, which is a little
baffling; of course, in Verilog, you can use a "reg" to describe a
combinatorial process, which is equally baffling).
My problem with both languages is that for testbenching, they both
have significant, non-intersecting areas of advantage. Verilog has
much better methods of making functional simulation models (you can
make modules on which you can essentially call methods, e.g. a PCI
master, in ways that you really can't do in VHDL). VHDL allows
for dynamic allocation, though it's very limited; still, for doing
sophisticated testbenches where you need to queue up results or
the like, it's invaluable. You can do that in SystemVerilog, but
support for that among test vendors is nearly absent.
BTW, among all the talk about GHDL, no one seems to have mentioned
Icarus Verilog. It's a nice open-source Verilog simulation engine
(it's not compiled like GHDL is, but interpreted). I use it quite
a bit, though it's not up to par with the commercial simulators;
it's not as fast and it's sometimes buggy and it doesn't always
have the Verilog features implemented that you want. But it does
an OK enough job that I'm happy with it for my home needs.
- Dave