In some parts of electronics development, there is no fully agreed-on terminology for important concepts which are often present in discussions. Here we present our choices for terms in a number of areas. As for any choice, there is a certain amount of arbitrariness, and the main merit of the definitions below is to bring clarity to what is meant in our technical documentation when we use this or that term.
-
Block: sometimes you have a diagram of the inside of an FPGA design, with its cores and its interconnects, and you draw a dashed line around some of the cores. How do you call what's inside that dashed line? If it satisfies the condition of "precise purpose", we can also call that a core. Cores can be made of other cores, nothing wrong with that. In general, both if that condition is fulfilled and if it isn't, we think that the word "block" is a good fit. Please prepend the word "FPGA", i.e. use "FPGA block" instead of "block", when the context (FPGA design) is not clear.
-
Core: we use this word to mean a set of one or more HDL files with a top-level that serves a concrete purpose, such as: "a CPU core", "an I2C core" or a "VME slave core". The word "core" is also used in computer architecture to mean each of the processing units in a multi-processing CPU. We have never had problems with this term meaning something else in that realm. First because a core in the CPU sense can also be a core in the HDL sense, and second because the context often makes things clear enough. One key difference between "core" and the more general "block" is that cores are always meant to be reusable in many different designs, while blocks do not necessarily fulfil this requirement. Please prepend the word "FPGA", i.e. use "FPGA core" instead of "core", when the context (FPGA design) is not clear.
-
Design: FPGAs are very versatile. They can be configured differently in different contexts to fulfil different requirements. We say in that case, that an FPGA has been configured with a "design". I.e. a design is the result of a complete set of HDL files which is used (after synthesis, P&R and bitstream generation) to fully configure an FPGA. So, for example, the FPGA in the SPEC board can be configured with a design which makes the SPEC look like an ADC board or with another design which makes it look like a Time-to-Digital Converter (TDC). Please prepend the word "FPGA", i.e. use "FPGA design" instead of "design", when the context (FPGA) is not clear.
-
Device: in the context of discussions at the interface between FPGA design and the development of external software support for that design, we call "device" any FPGA block for which we want to develop dedicated software support. In the most common case, that support takes the form of a Linux driver, and then the FPGA device is represented in software by a Linux device served by the driver. The word "device" is notorious for having many meanings in many different contexts. For example, a device can be a full PCB with an FPGA and other electronics, or even the equipment making use of that PCB. When context does not make it clear, please prepend "FPGA" as for other words in this glossary: "FPGA device" is then a block inside the FPGA which is managed by a driver or some other kind of external software support.
-
Firmware: some people use this term for HDL. We think it is misleading, because firmware is very often defined as a computer program or software of some particular kind, and we don't think HDL is a program. Why? Because typical definitions of "program" mention the sequential execution of instructions, and this is not what HDL is about. "Firmware" is a handy term when we want to make a difference between the software that runs in e.g. a soft-CPU core inside an FPGA and the software that runs in the Linux host which controls the board with the FPGA in it. In those cases, we tend to use "firmware" for the embedded software running in the soft-CPU. But we also use "software" for those programs sometimes, when there is no risk of confusion. Firmware is a particular kind of software, which typically appeals to more basic infrastructure (bare metal, small OS...). It used to be that firmware was the kind of software which cannot be easily changed (hence "firm"), such as the binaries stored in one-time-programmable ROM. These days everything is easily replaceable, but by extension we still call firmware the software which is stored in flash or embedded in the configuration bitstream of an FPGA in the form of RAM initialisation bits.
-
Gateware: software is defined by Cambridge dictionary as "the instructions that control what a computer does; computer programs". Clearly, this is not what we write when we write HDL for FPGAs. So we need to use a new word. We think the word "gateware" very intuitively relates to HDL because after synthesis it's all gates and flip-flops. The term also is the subject of rough consensus in the community of people who don't want to call this "software" and would also like to avoid the term "firmware".