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