Hacker News new | past | comments | ask | show | jobs | submit login

Either the author is not explicit enough in the article, or he makes a critical, wrongful assumption. Either way it's dangerously misleading.

Sadly, I'd lean towards the second one because of text like this:

> A major difference between software written for CPUs and VHDL is: VHDL is concurrent by default.

VHDL is a description language, not a programming language.

When writing VHDL you are not, at any point, writing software, you are laying out a map of the hardware. This map describes physicalities, and (barring relativistic considerations) physics happens everywhere at once. It is not parallel computing, it is physics.




The logic arrays do not physically transform when you program a FPGA. They get input from the program that determines their function.

The difference is essentially that with a normal CPU, the function is changed every time you load a new instruction. With FPGAs, you allocate a bunch of logic arrays to just one specific block of instructions all the time. That gives you the magic parallelism.

(The point is: you might argue that VHDL is just describing logic, but so is any other compiled code!)


> They get input from the program that determines their function.

Agreed, this is a program, yet this results not in software, but (configured) hardware.

> That gives you the magic parallelism.

And thus it follows that it's not magic at all, merely physics. Put an electric signal in, an electric signal gets out, and everything happens at 'once' (bounded by the speed of light and various other electronic considerations). This is what the essential difference is: hardware (however configurable, it is not software) vs software (however low-level, it is not hardware), and it is a very fundamental difference.


I'm the author. I think I made the distinction quite clear. Surely I understand concurrent means several independent components working in parallel and not parallel execution of code on CPUs. Did you read the whole post?


Yes I did, I just find the wording ambiguous enough to mislead newcomers, especially at the very start. The article is good at making parallels with the software world and explaining how to map previous knowledge, but does not make it clear at the beginning that this is not software. Even at the end, things are muddy, with things like:

    Hardware - write concurrent code, write serial code where needed.
For you an I who get the difference, we can read between the lines and get it, but a complete newcomer might just as well end up thinking: "okay I get it, this is very low level software code which is executing concurrently by default", when really, it is "this is very high level hardware which is described here, and physics makes it 'happen everywhere' at once, but I can understand what happens through a mind trick".

Mind you, I like your article, but I just feel it may make some hardware beginners get some fundamental basics wrong.

As an anecdote, I personally noticed the critical importance of this distinction first hand, as in a software program, we went through a hardware course on this very subject and the teacher incessantly restated this fact, with due reason since later down the road each one of us understood that basically every single mistake one made was due to one trying to shoehorn software concepts into hardware, or expecting software behaviour from hardware.


VHDL looks declarative and also appears discrete enough such that you could probably write a virtual machine that would create virtual machines from your VHDL.


> you could probably write a virtual machine

Well, you would not be writing a virtual machine, you would be writing the hardware definition of a real machine. A virtual machine is virtual precisely because it's hardware mimicked by software, whereas there you're doing hardware directly.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: