[time-nuts] Software

jimlux jimlux at earthlink.net
Wed Oct 3 12:22:53 UTC 2018


On 10/2/18 8:39 PM, Hal Murray wrote:
> 
> richard at karlquist.com said:
>> At least for me. I took 1 course in Fortran 50 years ago, and that was the
>> extent of my software education. During my whole career, I have too busy
>> being well paid to design hardware, to have any time left over to learn
>> software.  After Fortran was over, there was the Pascal fad, then the C fad,
>> etc, now I guess Python is the latest. Never got involved in any of that.
> 
> Interesting.
> 
> All the hardware people I've worked with have been reasonably happy working on
> software.  That may be more common in the digital world.
> 
> As an example, most people write PAL code as logic equations rather than
> schematics.
> 
> It would be interesting to compare the costs of hardware vs software for a big
> chip project over time.
> 
> 
> 
Like most things, "it depends" - here, I'm going to talk about embedded 
applications (as would be typical for a "time-nuts" widget of some sort)

 From a "first unit" cost standpoint, in general software is 
cheaper/easier than FPGA code. It might also be cheaper in hardware on 
recurring cost basis. Purpose designed processors tend to be faster and 
lower power, and cheaper than FPGA instantiated processors - ultimately, 
it takes less sand to make them.




There are orders of magnitude more C programmers available than FPGA 
folks. And there are more of both of them then folks who can design an ASIC.

The maturity of the development tools for "software" is far greater than 
for FPGA and they are cheaper. There are things like documentation 
generators, debuggers, code analyzers, integrated development 
environments, and on and on for software. There are multiple vendors for 
each.

In the FPGA world, we're just starting to get analysis capabilities that 
look for things like clock domain crossings that might cause trouble, 
decent library management tools.  I don't know that there are FPGA 
equivalents to static code analysis tools like Coverity, CodeSONAR, 
Semmle, etc.  There probably are, but I'm going to bet that they've only 
been out for a few years, and don't have decades of use behind them like 
most software tools do.

In terms of debugging - whether it's "printf() to the console" or 
embedded hardware debugger supports like the SPARC/GRMON combination - 
there's a lot more support for software debugging than in an FPGA.  Part 
of this is that FPGA designs tend to be timing critical - you can't just 
add a block of code that dumps a bunch of values to a device or file. 
Tools like ChipScope in the Xilinx family do let you look at some stuff 
(like having a oscilloscope or logic analyzer in your design) - but the 
scale and practicality is limited.

Just the time required to turn around a new design after fixing a bug is 
typically faster with software.  On the Xilinx Virtex 6 designs I'm 
working with, resynthesizing the bitstream takes on the order of 30-45 
minutes.  I haven't had a C compile take that long in years, except when 
I was compiling some package from source on a Beagle.  For most software 
applications, recompile is a matter of <1 minute (if you're not working 
in an interactive or JIT language where the time is zero).


Maturity of software libraries vs embedded components for FPGAs - for a 
given function, it is far more likely that there are multiple high 
quality software implementations than for a FPGA. Look at something like 
BLAS (for linear algebra) or FFTW - folks have been optimizing numerical 
libraries for decades - you want a Radix 17 FFT for some reason, and 
there's probably one out there: in 3 different languages, and either 
platform indpendent or with a well defined path to 
optimizing/configuring them for a given platform.

In FPGA land, there's some standard building blocks: FFTs, FIR 
filters,NCOs, various common interfaces (Ethernet, serial port) - but 
often, there's one or two instances, they're somewhat tied to a specific 
architecture, and tend to be straightforward implementations.  And 
they're not necessarily cross platform supported - I made the mistake a 
few years ago of thinking that I could move a digital down converter 
from Virtex 2 to Virtex 6, but discovered that the IP cores (from 
Xilinx) used were supported on Virtex 2 but not Virtex 6, and the new 
cores worked entirely differently. Over a span of a few years, we got 
virtually no code-reuse - for a very non-sophisticated, non-platform 
specific design - an oscillator, multiplier, CIC decimator and FIR filter.

I can still use the original 10-15 line FORTRAN Radix2 FFT from that 
IEEE transactions paper in the late 60s without much trouble.
An awful lot of people reuse a CRC calculation code for 8 bit 
microcontrollers that originated in a paper by Aram Perez "Byte-wise CRC 
Calculations" in IEEE Micro June 1983. It works, why change it.





More information about the Time-nuts_lists.febo.com mailing list