Hello world program¶
To illustrate the general purpose of VHDL, the following block is a commented Hello world program which is saved in
a file named hello.vhdl
:
-- Hello world program
use std.textio.all; -- Imports the standard textio package.
-- Defines a design entity, without any ports.
entity hello_world is
end hello_world;
architecture behaviour of hello_world is
begin
process
variable l : line;
begin
write (l, String'("Hello world!"));
writeline (output, l);
wait;
end process;
end behaviour;
Tip
Both
.vhdl
and.vhd
extensions are used for VHDL source files, while.v
is used for Verilog.Since, extension
.vhd
is also interpreted as a Virtual Hard Disk file format, some users prefer.vhdl
, to avoid ambiguity. This is the case with GHDL’s codebase. However, in order to maintain backward-compatibility with legacy DOS systems, other users prefer.vhd
.
Unless you use especial characters, either UTF-8 or ISO-8859-1 encodings can be used. However, if you do, the latter should be used. The standard defines ASCII (7-bit encoding) or ISO Latin-1 (ISO-8859-1) as default. However, GHDL has a relaxing option,
--mb-comments
(multi byte), to allow UTF-8 or other encodings in comments.
First, you have to compile the file; this is called analysis of a design file in VHDL terms. Run
ghdl -a hello.vhdl
in the shell. This command creates or updates a filework-obj93.cf
, which describes the librarywork
.Then, run
ghdl -e hello_world
in the shell. Command-e
means elaborate, which is used to build a design, with thehello_world
entity at the top of the hierarchy.Last, you can directly launch the simulation running
ghdl -r hello_world
in the shell. The result of the simulation will be shown on screen:
Hello world!
Hint
If a GCC/LLVM variant of GHDL is used:
Analysis generates a file,
hello.o
, which is the object file corresponding to your VHDL program. This is not created with mcode. These kind of object files can be compiled into foreign programs (see Linking GHDL object files to Ada/C).The elaboration step is mandatory after running the analysis and prior to launching the simulation. This will generate an executable binary named
hello_world
.As a result,
-r
is just a passthrough to the binary generated in the elaboration. Therefore, the executable can be run directly:./hello_world
. See-r
for more informartion.