VHDL quick ref.

+ some Vanilla info.
1076:1987
PACKAGE package_name IS
	TYPE my_enumeration_type IS(enum1, enum2, ... );		--enumeration type

	TYPE type IS RANGE x TO y;					--value type

	TYPE cons_array IS ARRAY(7 DOWNTO 0) OF type;			--constrained array
	TYPE uncons_array IS ARRAY(INTEGER RANGE <>) OF type;	--unconstrained array

	TYPE my_record IS RECORD					--record type
		record_1: type_a;
		record_2: type_b;
	END RECORD;

	CONSTANT constant_1: type := value;				--constant declaration
	CONSTANT constant_2: uncons_array(0 TO 16) := (1, 2, 3, other => 4);

	PROCEDURE procedure_name(x :IN type; y :OUT type);		--subprogram declaration
	FUNCTION function_name(a, b, c: type) RETURN d;
END package_name;

PACKAGE BODY package_name IS
	PROCEDURE procedure_name(x :IN type; y :OUT type) IS
		--declarations
	BEGIN
		--statements
	END procedure_name;

	FUNCTION function_name(a, b, c:type) RETURN d IS
		--declarations
	BEGIN
		--statements
		RETURN d;
	END function_name;
END package_name;

LIBRARY library_name;
USE library_name.package_name.all;

ENTITY entity_name IS
	GENERIC (generic_name :type := value);
	PORT(a :IN type_a;
		b :OUT type_b := value;
		c, d :INOUT type);
END entity_name;

ARCHITECTURE architecture_name OF entity_name IS
	COMPONENT component_name
		GENERIC(...);
		PORT(...);
	END COMPONENT;

	--signal declarations
BEGIN
	component_label: component_name
		GENERIC MAP(..=>..);
		PORT MAP(..&=>..);
	
	process_name :PROCESS (sensitivity_list)
		--declarations - variables
	BEGIN
		--sequential statements
		--if there is no sensitivity_list then there must be WAIT statements
			WAIT; 
			WAIT ON waiting_sensitivity_list; 
			WAIT FOR time;
			WAIT UNTIL waiting_condition;

		signal <= new_value AFTER delay;
		signal2 <= new_value1 AFTER delay1, new_value2 AFTER delay2;

		variable := new_value;

		CASE variable IS
			WHEN value1 =>
				--sequential statements
			WHEN value2 | value3 | value4 TO value8 =>
				--
			WHEN OTHERS =>
				NULL;
		END CASE;

		IF expression THEN
			--sequential statements
		ELSIF expression THEN
			--
		ELSE
			--
		END IF;

		FOR variable IN x TO y LOOP
			--sequential statements
			exit;						--exit loop early
			--
		END LOOP;

		WHILE expression LOOP
			--sequential statements
		END LOOP;

		ASSERT variable'attribute
			REPORT "message" SEVERITY severity_level;
				--severity_level = NOTE, WARNING, ERROR or FAILURE
	END PROCESS process_name;

	signal1 <= new_value AFTER time;				--concurrent signal assignments
	signal2 <= new_value AFTER time;

END architecture_name;

CONFIGURATION config_name OF entity_name IS
	FOR architecture_name
		FOR ALL: component_name
			USE ENTITY library.entity_name(architecture_name);
		END FOR;
	END FOR;
END config_name;
Attributes, Expressions and operators, etc
	Array attributes := 'LEFT, 'RIGHT, 'HIGH, 'LOW, 'RANGE, 'REVERSE_RANGE, 'LENGTH
	Type attributes := 'BASE, 'LEFT, 'RIGHT, 'HIGH, 'LOW(v), 'POS(p), 'VAL(v), 'SUCC(v), 
				'PRED(v), 'LEFTOF(v), 'RIGHTOF(v)
		--p = position, v = value
	Signal attributes := 'DELAYED(time), 'STABLE(time), 'EVENT, 'LAST_EVENT, 'LAST_VALUE, 
				'QUIET(time), 'ACTIVE, 'LAST_ACTIVE, 'TRANSACTION

	array_name(index)
	array_name(x TO/DOWNTO y)

	()	typename()
	**	ABS	NOT
	*	/	MOD	REM
	+	-	&
	=	/=	<	<=	>	>=
	AND	OR	XOR	NAND	NOR
Reserved words
ABS	ACCESS	AFTER	ALIAS	ALL	AND	ARCHITECTURE	ARRAY	ASSERT	ATTRIBUTE
BEGIN	BLOCK	BODY	BUFFER	BUS	CASE	COMPONENS	CONFIGURATION	CONSTANT
DISCONNECT	DOWNTO	ELSE	ELSIF	END	ENTITY	EXIT	FILE	FOR	FUNCTION
GENERATE	GENERIC	GUARDED	IF	IN	INOUT	IS	LABEL	LIBRARY	LINKAGE
LOOP	MAP	MOD	NAND	NEW	NEXT	NOR	NOT	NULL	OF	ON
OPEN	OR	OTHERS	OUT	PACKAGE	PORT	PROCEDURE	PROCESS	RANGE	RECORD
REGISTER	REM	REPORT	RETURN	SELECT	SEVERITY	SIGNAL	SUBTYPE	THEN
TO	TRANSPORT	TYPE	UNITS	UNTIL	USE	VARIABLE	WAIT	WHEN
WHILE	WITH	XOR
Packages
PACKAGE STANDARD IS		--(Library standard)
	TYPE BOOLEAN IS (FALSE, TRUE);
	TYPE BIT IS ('0','1');
	TYPE CHARACTER IS (...);
	TYPE SEVERITY_LEVEL IS (NOTE, WARNING, ERROR, FAILURE);
	TYPE INTEGER IS RANGE implementation specific;
	TYPE REAL IS RANGE implementation specific;
	TYPE TIME IS RANGE implementation specific
		UNITS
			FS;	PS = 1000 FS;	NS = 1000 PS;	US = 1000 NS;
			MS = 1000 US;	SEC = 1000 MS;	MIN = 60 SEC; HR = 60 MIN;
		END UNITS;
	FUNCTION NOW RETURN TIME;
	SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGER'HIGH;
	SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER'HIGH;
	TYPE STRING IS ARRAY (POSITIVE RANGE <>) OF CHARACTER;
	TYPE BIT_VECTOR IS ARRAY (NATURAL RANGE <>) OF BIT;
END STANDARD;

PACKAGE TEXTIO IS		--(Library standard)
	TYPE LINE IS ACCESS STRING;
	TYPE TEXT IS FILE OF STRING;
	TYPE SIDE IS (RIGHT, LEFT);
	SUBTYPE WIDTH IS NATURAL;
	FILE INPUT: TEXT IS IN "STD_INPUT";
	FILE OUTPUT: TEXT IS OUT "STD_OUTPUT";
	PROCEDURE READLINE( var :IN TEXT; var2 :INOUT LINE);
	PROCEDURE READ( var :INOUT LINE; value :OUT {BIT, BIT_VECTOR, BOOLEAN, 
					CHARACTER, INTEGER, REAL, STRING, TIME});
	PROCEDURE WRITELINE( var :OUT TEXT; var2 :INOUT LINE);
	PROCEDURE WRITE(var :INOUT LINE; value :IN {BIT, BIT_VECTOR, BOOLEAN,
					CHARACTER, INTEGER, REAL, STRING, TIME});
END TEXTIO;

Vanilla info.



Last modified 20/6/97