ShareCG: ASICs .. the Book
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}

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);
-- 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

Chapter  start   Previous  page   Next  page

© 2020 Internet Business Systems, Inc.
25 North 14th Steet, Suite 710, San Jose, CA 95112
+1 (408) 882-6554 — Contact Us
ShareCG™ is a trademark of Internet Business Systems, Inc.

Report a Bug Report Abuse Make a Suggestion About Privacy Policy Contact Us User Agreement Advertise