xref: /vim-8.2.3635/runtime/syntax/vhdl.vim (revision d1caa941)
1071d4279SBram Moolenaar" Vim syntax file
25f148ec0SBram Moolenaar" Language:		VHDL [VHSIC (Very High Speed Integrated Circuit) Hardware Description Language]
3ff78155aSBram Moolenaar" Maintainer:		Daniel Kho <[email protected]>
4baca7f70SBram Moolenaar" Previous Maintainer:	Czo <[email protected]>
5071d4279SBram Moolenaar" Credits:		Stephan Hegel <[email protected]>
6*d1caa941SBram Moolenaar" Last Changed:		2020 Apr 04 by Daniel Kho
7071d4279SBram Moolenaar
889bcfda6SBram Moolenaar" quit when a syntax file was already loaded
989bcfda6SBram Moolenaarif exists("b:current_syntax")
10071d4279SBram Moolenaar  finish
11071d4279SBram Moolenaarendif
12071d4279SBram Moolenaar
13b8ff1fb5SBram Moolenaarlet s:cpo_save = &cpo
14b8ff1fb5SBram Moolenaarset cpo&vim
15b8ff1fb5SBram Moolenaar
16071d4279SBram Moolenaar" case is not significant
17071d4279SBram Moolenaarsyn case	ignore
18071d4279SBram Moolenaar
19*d1caa941SBram Moolenaar" VHDL 1076-2019 keywords
20*d1caa941SBram Moolenaarsyn keyword	vhdlStatement	access after alias all
21071d4279SBram Moolenaarsyn keyword 	vhdlStatement	architecture array attribute
22*d1caa941SBram Moolenaarsyn keyword 	vhdlStatement	assert assume
23071d4279SBram Moolenaarsyn keyword 	vhdlStatement	begin block body buffer bus
24071d4279SBram Moolenaarsyn keyword 	vhdlStatement	case component configuration constant
25baca7f70SBram Moolenaarsyn keyword 	vhdlStatement	context cover
26baca7f70SBram Moolenaarsyn keyword 	vhdlStatement	default disconnect downto
27071d4279SBram Moolenaarsyn keyword 	vhdlStatement	elsif end entity exit
28071d4279SBram Moolenaarsyn keyword 	vhdlStatement	file for function
29baca7f70SBram Moolenaarsyn keyword 	vhdlStatement	fairness force
30071d4279SBram Moolenaarsyn keyword 	vhdlStatement	generate generic group guarded
31071d4279SBram Moolenaarsyn keyword 	vhdlStatement	impure in inertial inout is
32071d4279SBram Moolenaarsyn keyword 	vhdlStatement	label library linkage literal loop
33071d4279SBram Moolenaarsyn keyword 	vhdlStatement	map
34071d4279SBram Moolenaarsyn keyword 	vhdlStatement	new next null
35071d4279SBram Moolenaarsyn keyword 	vhdlStatement	of on open others out
36071d4279SBram Moolenaarsyn keyword 	vhdlStatement	package port postponed procedure process pure
37*d1caa941SBram Moolenaarsyn keyword 	vhdlStatement	parameter property protected private
38071d4279SBram Moolenaarsyn keyword 	vhdlStatement	range record register reject report return
39*d1caa941SBram Moolenaarsyn keyword 	vhdlStatement	release restrict
40*d1caa941SBram Moolenaarsyn keyword 	vhdlStatement	select severity signal shared subtype
41baca7f70SBram Moolenaarsyn keyword 	vhdlStatement	sequence strong
42071d4279SBram Moolenaarsyn keyword 	vhdlStatement	then to transport type
43071d4279SBram Moolenaarsyn keyword 	vhdlStatement	unaffected units until use
44*d1caa941SBram Moolenaarsyn keyword 	vhdlStatement	variable view
45*d1caa941SBram Moolenaarsyn keyword 	vhdlStatement	vpkg vmode vprop vunit
46baca7f70SBram Moolenaarsyn keyword 	vhdlStatement	wait when while with
47*d1caa941SBram Moolenaar
48*d1caa941SBram Moolenaar" VHDL predefined severity levels
49*d1caa941SBram Moolenaarsyn keyword 	vhdlAttribute	note warning error failure
50071d4279SBram Moolenaar
512c5e8e80SBram Moolenaar" Linting of conditionals.
52071d4279SBram Moolenaarsyn match	vhdlStatement	"\<\(if\|else\)\>"
532c5e8e80SBram Moolenaarsyn match	vhdlError	"\<else\s\+if\>"
54071d4279SBram Moolenaar
555f148ec0SBram Moolenaar" Types and type qualifiers
565f148ec0SBram Moolenaar" Predefined standard VHDL types
5777cdfd10SBram Moolenaarsyn match	vhdlType	"\<bit\>\'\="
5877cdfd10SBram Moolenaarsyn match	vhdlType	"\<boolean\>\'\="
5977cdfd10SBram Moolenaarsyn match	vhdlType	"\<natural\>\'\="
6077cdfd10SBram Moolenaarsyn match	vhdlType	"\<positive\>\'\="
6177cdfd10SBram Moolenaarsyn match	vhdlType	"\<integer\>\'\="
6277cdfd10SBram Moolenaarsyn match	vhdlType	"\<real\>\'\="
6377cdfd10SBram Moolenaarsyn match	vhdlType	"\<time\>\'\="
645f148ec0SBram Moolenaar
6577cdfd10SBram Moolenaarsyn match	vhdlType	"\<bit_vector\>\'\="
6677cdfd10SBram Moolenaarsyn match	vhdlType	"\<boolean_vector\>\'\="
6777cdfd10SBram Moolenaarsyn match	vhdlType	"\<integer_vector\>\'\="
6877cdfd10SBram Moolenaarsyn match	vhdlType	"\<real_vector\>\'\="
6977cdfd10SBram Moolenaarsyn match	vhdlType	"\<time_vector\>\'\="
705f148ec0SBram Moolenaar
7177cdfd10SBram Moolenaarsyn match	vhdlType	"\<character\>\'\="
7277cdfd10SBram Moolenaarsyn match	vhdlType	"\<string\>\'\="
7385eee130SBram Moolenaarsyn keyword	vhdlType	line text side width
745f148ec0SBram Moolenaar
755f148ec0SBram Moolenaar" Predefined standard IEEE VHDL types
7677cdfd10SBram Moolenaarsyn match	vhdlType	"\<std_ulogic\>\'\="
7777cdfd10SBram Moolenaarsyn match	vhdlType	"\<std_logic\>\'\="
7877cdfd10SBram Moolenaarsyn match	vhdlType	"\<std_ulogic_vector\>\'\="
7977cdfd10SBram Moolenaarsyn match	vhdlType	"\<std_logic_vector\>\'\="
8077cdfd10SBram Moolenaarsyn match	vhdlType	"\<unresolved_signed\>\'\="
8177cdfd10SBram Moolenaarsyn match	vhdlType	"\<unresolved_unsigned\>\'\="
8277cdfd10SBram Moolenaarsyn match	vhdlType	"\<u_signed\>\'\="
8377cdfd10SBram Moolenaarsyn match	vhdlType	"\<u_unsigned\>\'\="
8477cdfd10SBram Moolenaarsyn match	vhdlType	"\<signed\>\'\="
8577cdfd10SBram Moolenaarsyn match	vhdlType	"\<unsigned\>\'\="
865f148ec0SBram Moolenaar
87071d4279SBram Moolenaar
88071d4279SBram Moolenaar" array attributes
89071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'high"
90071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'left"
91071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'length"
92071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'low"
93071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'range"
94071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'reverse_range"
95071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'right"
96071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'ascending"
97071d4279SBram Moolenaar" block attributes
98071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'simple_name"
99071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'instance_name"
100071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'path_name"
10160cce2fbSBram Moolenaarsyn match   	vhdlAttribute	"\'foreign"	    " VHPI
102071d4279SBram Moolenaar" signal attribute
103071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'active"
104071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'delayed"
105071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'event"
106071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'last_active"
107071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'last_event"
108071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'last_value"
109071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'quiet"
110071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'stable"
111071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'transaction"
112071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'driving"
113071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'driving_value"
114071d4279SBram Moolenaar" type attributes
115071d4279SBram Moolenaarsyn match	vhdlAttribute	"\'base"
11660cce2fbSBram Moolenaarsyn match   	vhdlAttribute	"\'subtype"
11760cce2fbSBram Moolenaarsyn match   	vhdlAttribute	"\'element"
118071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'leftof"
119071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'pos"
120071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'pred"
121071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'rightof"
122071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'succ"
123071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'val"
124071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'image"
125071d4279SBram Moolenaarsyn match   	vhdlAttribute	"\'value"
126ff78155aSBram Moolenaar" VHDL-2019 interface attribute
12785eee130SBram Moolenaarsyn match   	vhdlAttribute	"\'converse"
128071d4279SBram Moolenaar
129071d4279SBram Moolenaarsyn keyword	vhdlBoolean	true false
130071d4279SBram Moolenaar
131071d4279SBram Moolenaar" for this vector values case is significant
132071d4279SBram Moolenaarsyn case	match
133071d4279SBram Moolenaar" Values for standard VHDL types
134071d4279SBram Moolenaarsyn match	vhdlVector	"\'[0L1HXWZU\-\?]\'"
135071d4279SBram Moolenaarsyn case	ignore
136071d4279SBram Moolenaar
137071d4279SBram Moolenaarsyn match	vhdlVector	"B\"[01_]\+\""
138071d4279SBram Moolenaarsyn match   	vhdlVector	"O\"[0-7_]\+\""
139071d4279SBram Moolenaarsyn match   	vhdlVector	"X\"[0-9a-f_]\+\""
140071d4279SBram Moolenaarsyn match   	vhdlCharacter   "'.'"
141baca7f70SBram Moolenaarsyn region  	vhdlString	start=+"+  end=+"+
142071d4279SBram Moolenaar
143071d4279SBram Moolenaar" floating numbers
144071d4279SBram Moolenaarsyn match	vhdlNumber	"-\=\<\d\+\.\d\+\(E[+\-]\=\d\+\)\>"
145071d4279SBram Moolenaarsyn match	vhdlNumber	"-\=\<\d\+\.\d\+\>"
146071d4279SBram Moolenaarsyn match	vhdlNumber	"0*2#[01_]\+\.[01_]\+#\(E[+\-]\=\d\+\)\="
147071d4279SBram Moolenaarsyn match	vhdlNumber	"0*16#[0-9a-f_]\+\.[0-9a-f_]\+#\(E[+\-]\=\d\+\)\="
148071d4279SBram Moolenaar" integer numbers
149071d4279SBram Moolenaarsyn match	vhdlNumber	"-\=\<\d\+\(E[+\-]\=\d\+\)\>"
150071d4279SBram Moolenaarsyn match	vhdlNumber	"-\=\<\d\+\>"
151071d4279SBram Moolenaarsyn match	vhdlNumber	"0*2#[01_]\+#\(E[+\-]\=\d\+\)\="
152071d4279SBram Moolenaarsyn match	vhdlNumber	"0*16#[0-9a-f_]\+#\(E[+\-]\=\d\+\)\="
15360cce2fbSBram Moolenaar
154071d4279SBram Moolenaar" operators
155071d4279SBram Moolenaarsyn keyword	vhdlOperator	and nand or nor xor xnor
156071d4279SBram Moolenaarsyn keyword	vhdlOperator	rol ror sla sll sra srl
157071d4279SBram Moolenaarsyn keyword	vhdlOperator	mod rem abs not
15860cce2fbSBram Moolenaar
15960cce2fbSBram Moolenaar" Concatenation and math operators
16060cce2fbSBram Moolenaarsyn match	vhdlOperator	"&\|+\|-\|\*\|\/"
16160cce2fbSBram Moolenaar
16260cce2fbSBram Moolenaar" Equality and comparison operators
16360cce2fbSBram Moolenaarsyn match	vhdlOperator	"=\|\/=\|>\|<\|>="
16460cce2fbSBram Moolenaar
16560cce2fbSBram Moolenaar" Assignment operators
16660cce2fbSBram Moolenaarsyn match	vhdlOperator	"<=\|:="
16760cce2fbSBram Moolenaarsyn match	vhdlOperator	"=>"
16860cce2fbSBram Moolenaar
169ff78155aSBram Moolenaar" VHDL-202x concurrent signal association (spaceship) operator
17085eee130SBram Moolenaarsyn match	vhdlOperator	"<=>"
17185eee130SBram Moolenaar
17260cce2fbSBram Moolenaar" VHDL-2008 conversion, matching equality/non-equality operators
17360cce2fbSBram Moolenaarsyn match	vhdlOperator	"??\|?=\|?\/=\|?<\|?<=\|?>\|?>="
17460cce2fbSBram Moolenaar
1752c5e8e80SBram Moolenaar" VHDL-2008 external names
1762c5e8e80SBram Moolenaarsyn match	vhdlOperator	"<<\|>>"
1772c5e8e80SBram Moolenaar
17860cce2fbSBram Moolenaar" Linting for illegal operators
17960cce2fbSBram Moolenaar" '='
18060cce2fbSBram Moolenaarsyn match	vhdlError	"\(=\)[<=&+\-\*\/\\]\+"
18160cce2fbSBram Moolenaarsyn match	vhdlError	"[=&+\-\*\\]\+\(=\)"
18260cce2fbSBram Moolenaar" '>', '<'
1832c5e8e80SBram Moolenaar" Allow external names: '<< ... >>'
1842c5e8e80SBram Moolenaarsyn match	vhdlError	"\(>\)[<&+\-\/\\]\+"
1852c5e8e80SBram Moolenaarsyn match	vhdlError	"[&+\-\/\\]\+\(>\)"
1862c5e8e80SBram Moolenaarsyn match	vhdlError	"\(<\)[&+\-\/\\]\+"
1872c5e8e80SBram Moolenaarsyn match	vhdlError	"[>=&+\-\/\\]\+\(<\)"
18860cce2fbSBram Moolenaar" Covers most operators
1892c5e8e80SBram Moolenaar" support negative sign after operators. E.g. q<=-b;
190ff78155aSBram Moolenaar" Supports VHDL-202x spaceship (concurrent simple signal association).
19185eee130SBram Moolenaarsyn match	vhdlError	"\(<=\)[<=&+\*\\?:]\+"
19285eee130SBram Moolenaarsyn match	vhdlError	"[>=&+\-\*\\:]\+\(=>\)"
19385eee130SBram Moolenaarsyn match	vhdlError	"\(&\|+\|\-\|\*\*\|\/=\|??\|?=\|?\/=\|?<=\|?>=\|>=\|:=\|=>\)[<>=&+\*\\?:]\+"
19485eee130SBram Moolenaarsyn match	vhdlError	"[<>=&+\-\*\\:]\+\(&\|+\|\*\*\|\/=\|??\|?=\|?\/=\|?<\|?<=\|?>\|?>=\|>=\|<=\|:=\)"
1952c5e8e80SBram Moolenaarsyn match	vhdlError	"\(?<\|?>\)[<>&+\*\/\\?:]\+"
1962c5e8e80SBram Moolenaarsyn match	vhdlError	"\(<<\|>>\)[<>&+\*\/\\?:]\+"
19760cce2fbSBram Moolenaar
19860cce2fbSBram Moolenaar"syn match	vhdlError	"[?]\+\(&\|+\|\-\|\*\*\|??\|?=\|?\/=\|?<\|?<=\|?>\|?>=\|:=\|=>\)"
19960cce2fbSBram Moolenaar" '/'
20060cce2fbSBram Moolenaarsyn match	vhdlError	"\(\/\)[<>&+\-\*\/\\?:]\+"
20160cce2fbSBram Moolenaarsyn match	vhdlError	"[<>=&+\-\*\/\\:]\+\(\/\)"
20260cce2fbSBram Moolenaar
20360cce2fbSBram Moolenaarsyn match	vhdlSpecial	"<>"
204071d4279SBram Moolenaarsyn match	vhdlSpecial	"[().,;]"
20560cce2fbSBram Moolenaar
20660cce2fbSBram Moolenaar
207071d4279SBram Moolenaar" time
208071d4279SBram Moolenaarsyn match	vhdlTime	"\<\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
209071d4279SBram Moolenaarsyn match	vhdlTime	"\<\d\+\.\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
210071d4279SBram Moolenaar
21160cce2fbSBram Moolenaarsyn case	match
212f2571c61SBram Moolenaarsyn keyword	vhdlTodo	contained TODO NOTE
213f2571c61SBram Moolenaarsyn keyword	vhdlFixme	contained FIXME
21460cce2fbSBram Moolenaarsyn case	ignore
215baca7f70SBram Moolenaar
216f2571c61SBram Moolenaarsyn region	vhdlComment	start="/\*" end="\*/"	contains=vhdlTodo,vhdlFixme,@Spell
21760cce2fbSBram Moolenaarsyn match	vhdlComment	"\(^\|\s\)--.*"		contains=vhdlTodo,vhdlFixme,@Spell
21860cce2fbSBram Moolenaar
2195f148ec0SBram Moolenaar" Standard IEEE P1076.6 preprocessor directives (metacomments).
2205f148ec0SBram Moolenaarsyn match	vhdlPreProc	"/\*\s*rtl_synthesis\s\+\(on\|off\)\s*\*/"
2215f148ec0SBram Moolenaarsyn match	vhdlPreProc	"\(^\|\s\)--\s*rtl_synthesis\s\+\(on\|off\)\s*"
2225f148ec0SBram Moolenaarsyn match	vhdlPreProc	"/\*\s*rtl_syn\s\+\(on\|off\)\s*\*/"
2235f148ec0SBram Moolenaarsyn match	vhdlPreProc	"\(^\|\s\)--\s*rtl_syn\s\+\(on\|off\)\s*"
2245f148ec0SBram Moolenaar
22560cce2fbSBram Moolenaar" Industry-standard directives. These are not standard VHDL, but are commonly
22660cce2fbSBram Moolenaar" used in the industry.
2272c5e8e80SBram Moolenaarsyn match	vhdlPreProc	"/\*\s*synthesis\s\+translate_\(on\|off\)\s*\*/"
2282c5e8e80SBram Moolenaar"syn match	vhdlPreProc	"/\*\s*simulation\s\+translate_\(on\|off\)\s*\*/"
2295f148ec0SBram Moolenaarsyn match	vhdlPreProc	"/\*\s*pragma\s\+translate_\(on\|off\)\s*\*/"
2302c5e8e80SBram Moolenaarsyn match	vhdlPreProc	"/\*\s*pragma\s\+synthesis_\(on\|off\)\s*\*/"
2312c5e8e80SBram Moolenaarsyn match	vhdlPreProc	"/\*\s*synopsys\s\+translate_\(on\|off\)\s*\*/"
2322c5e8e80SBram Moolenaar
2332c5e8e80SBram Moolenaarsyn match	vhdlPreProc	"\(^\|\s\)--\s*synthesis\s\+translate_\(on\|off\)\s*"
2342c5e8e80SBram Moolenaar"syn match	vhdlPreProc	"\(^\|\s\)--\s*simulation\s\+translate_\(on\|off\)\s*"
2355f148ec0SBram Moolenaarsyn match	vhdlPreProc	"\(^\|\s\)--\s*pragma\s\+translate_\(on\|off\)\s*"
2362c5e8e80SBram Moolenaarsyn match	vhdlPreProc	"\(^\|\s\)--\s*pragma\s\+synthesis_\(on\|off\)\s*"
2372c5e8e80SBram Moolenaarsyn match	vhdlPreProc	"\(^\|\s\)--\s*synopsys\s\+translate_\(on\|off\)\s*"
238071d4279SBram Moolenaar
239baca7f70SBram Moolenaar"Modify the following as needed.  The trade-off is performance versus functionality.
24060cce2fbSBram Moolenaarsyn sync	minlines=600
241baca7f70SBram Moolenaar
242071d4279SBram Moolenaar" Define the default highlighting.
24389bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
244071d4279SBram Moolenaar
245f37506f6SBram Moolenaarhi def link vhdlSpecial	Special
246f37506f6SBram Moolenaarhi def link vhdlStatement   Statement
247f37506f6SBram Moolenaarhi def link vhdlCharacter   Character
248f37506f6SBram Moolenaarhi def link vhdlString	String
249f37506f6SBram Moolenaarhi def link vhdlVector	Number
250f37506f6SBram Moolenaarhi def link vhdlBoolean	Number
251f37506f6SBram Moolenaarhi def link vhdlTodo	Todo
252f37506f6SBram Moolenaarhi def link vhdlFixme	Fixme
253f37506f6SBram Moolenaarhi def link vhdlComment	Comment
254f37506f6SBram Moolenaarhi def link vhdlNumber	Number
255f37506f6SBram Moolenaarhi def link vhdlTime	Number
256f37506f6SBram Moolenaarhi def link vhdlType	Type
257f37506f6SBram Moolenaarhi def link vhdlOperator    Operator
258f37506f6SBram Moolenaarhi def link vhdlError	Error
259f37506f6SBram Moolenaarhi def link vhdlAttribute   Special
260f37506f6SBram Moolenaarhi def link vhdlPreProc	PreProc
261071d4279SBram Moolenaar
262071d4279SBram Moolenaar
263071d4279SBram Moolenaarlet b:current_syntax = "vhdl"
264071d4279SBram Moolenaar
265b8ff1fb5SBram Moolenaarlet &cpo = s:cpo_save
266b8ff1fb5SBram Moolenaarunlet s:cpo_save
267*d1caa941SBram Moolenaar
268071d4279SBram Moolenaar" vim: ts=8
269