[Gateware] is not my term. I'm sure almost anyone who familiar with FPGA development know it very well.
Sure –– I did show that it is already defined at e.g. Wiktionary, so it is definitely a known term ––, but outside FPGA developers, it is not a well-known term. Be assured, I do know it now, and won't confuse you or others familiar with FPGA development by mixing the terms.
if you don't believe me, just look for example on CERN site:
https://indico.cern.ch/event/1337180/contributions/5629282/attachments/2882918/5051661/ISOTDAQ2024_Advanced_FPGA_Design.pdf
Key concepts about FPGA design
FPGA gateware design is NOT programming
That is a rather simplistic/problematic/exaggerated view of programming by Manoel Barros Marin of International School of Trigger and Data Acquisition. (BTW, I've worked for a couple of CERN research partner organizations for a bit, having had a CERN user account and email address for a few years, if that sort of stuff matters to you.)
That definition of "programming" does not match reality, you see.
It would be more accurate and useful to distinguish between
imperative programming and say
declarative programming. Mind you, even the Wikipedia article on
computer programming makes a similar error (without any references), by talking about "step by step instructions". Such instructions are specific to imperative programming.
An example of purely declarative programming is the
OpenSCAD declarative programming language for describing 3D
constructive solid geometry, often used to describe parametrized objects like gears and such for 3D printing. In particular, it is not executed step by step, but all at once. (To implement animation, the same program is evaluated for each frame, but with different values of built-in variables related to "time".)
A third, very useful category of programming is
functional programming, which evolved from
lambda calculus. It is neither imperative or declarative, exactly; but it is closer to declarative, as it essentially describes the mapping of inputs to outputs using functions (using the
mathematics definition of a function). With functional programming, even the actual order of operations a computer will perform is utterly unknown to the programmer. It is definitely nothing "step by step".
You are not the first to be surprised by this difference, almost any programmer who has encountered FPGA discovers that there is another world...
There are many worlds beyond imperative programming, which is often the only world most programmers know.
I am well aware of the approaches behind Verilog and VHDL, and I can somewhat read Verilog already (although I don't think I've written a line of Verilog yet). (For example, I fully understand the difference between
<= and
= assignment operators. In Verilog, their effects are quite different from each other.)
I just do not consider it different from other forms of "programming"; only different from "imperative programming". To me, it is a fourth class, similar to functional programming in that it is not imperative, is not exactly declarative but close ("declarative
style", like functional programming); but instead of mapping inputs to outputs using functions, Verilog and VHDL use a more verbose human-readable (non-mathematician readable) form, and terms from electronics (like
wire for example).
Considering it completely separate is just tribalist self-aggrandizement; like those who use jargon to bolster their self-image, instead of explaining the terms they use so everybody understands the message. It is concentrating on the
appearances and
separation, instead of focusing on the useful bits.
Separating Verilog and VHDL from
imperative programming is very useful and informative, but there are other forms of programming like functional and declarative programming that are similarly different from imperative programming too, and yet are still considered as part of "programming" nonetheless.