10.4 Identifiers and Literals
Chapter start Previous
page Next page
10.4 Identifiers and Literals
Names (the "nouns"
of VHDL) are known as identifiers [VHDL
LRM13.3]. The correct "spelling" of an identifier is defined
in BNF as follows:
identifier ::=
letter {[underline] letter_or_digit}
|\graphic_character{graphic_character}\
In this book an underline
in VHDL BNF marks items that are new or that have changed in VHDL-93 from
VHDL-87. The following are examples of identifiers:
s -- A simple name.
S -- A simple name, the same as s. VHDL is not case sensitive.
a_name -- Imbedded underscores are OK.
-- Successive underscores are illegal in names: Ill__egal
-- Names can't start with underscore: _Illegal
-- Names can't end with underscore: Illegal_
Too_Good -- Names must start with a letter.
-- Names can't start with a number: 2_Bad
You may not use a reserved
word as a declared identifier, and it is wise not to use units, special
characters, and function names: ns , ms , FF
, read , write, and so on. You may attach qualifiers
to names as follows [VHDL LRM6]:
CMOS.all -- A selected or expanded name, all units in library CMOS.
Data'LEFT(1) -- An attribute name, LEFT is the attribute designator.
Data(24 downto 1) -- A slice name, part of an array: Data(31 downto 0)
Data(1) -- An indexed name, one element of an array.
Comments follow two hyphens
'--' and instruct the analyzer to ignore the rest of the line.
There are no multiline comments in VHDL. Tabs improve readability, but it
is best not to rely on a tab as a space in case the tabs are lost or deleted
in conversion. You should thus write code that is still legal if all tabs
are deleted.
There are various forms of
literals (fixed-value items) in VHDL [VHDL
LRM13.4-13.7]. The following
code shows some examples:
entity Literals_1 is end;
architecture Behave of Literals_1 is
begin process
variable I1 : integer; variable Rl : real;
variable C1 : CHARACTER; variable S16 : STRING(1 to 16);
variable BV4: BIT_VECTOR(0 to 3);
variable BV12 : BIT_VECTOR(0 to 11);
variable BV16 : BIT_VECTOR(0 to 15);
begin
-- Abstract literals are decimal or based literals.
-- Decimal literals are integer or real literals.
-- Integer literal examples (each of these is the same):
I1 := 120000; Int := 12e4; Int := 120_000;
-- Based literal examples (each of these is the same):
I1 := 2#1111_1111#; I1 := 16#FFFF#;
-- Base must be an integer from 2 to 16:
I1 := 16:FFFF:; -- you may use a : if you don't have #
-- Real literal examples (each of these is the same):
Rl := 120000.0; Rl := 1.2e5; Rl := 12.0E4;
-- Character literal must be one of the 191 graphic characters.
-- 65 of the 256 ISO Latin-1 set are non-printing control characters
C1 := 'A'; C1 := 'a'; -- different from each other
-- String literal examples:
S16 := " string" & " literal"; -- concatenate long strings
S16 := """Hello,"" I said!"; -- doubled quotes
S16 := % string literal%; -- can use % instead of "
S16 := %Sale: 50%% off!!!%; -- doubled %
-- Bit-string literal examples:
BV4 := B"1100"; -- binary bit-string literal
BV12 := O"7777"; -- octal bit-string literal
BV16 := X"FFFF"; -- hex bit-string literal
wait; end process; -- the wait prevents an endless loop
end;
Chapter start Previous page Next page
|