123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- " Vim syntax file
- " Language: VHDL [VHSIC (Very High Speed Integrated Circuit) Hardware Description Language]
- " Maintainer: Daniel Kho <daniel.kho@logik.haus>
- " Previous Maintainer: Czo <Olivier.Sirol@lip6.fr>
- " Credits: Stephan Hegel <stephan.hegel@snc.siemens.com.cn>
- " Last Changed: 2020 Apr 04 by Daniel Kho
- " quit when a syntax file was already loaded
- if exists("b:current_syntax")
- finish
- endif
- let s:cpo_save = &cpo
- set cpo&vim
- " case is not significant
- syn case ignore
- " VHDL 1076-2019 keywords
- syn keyword vhdlStatement access after alias all
- syn keyword vhdlStatement architecture array attribute
- syn keyword vhdlStatement assert assume
- syn keyword vhdlStatement begin block body buffer bus
- syn keyword vhdlStatement case component configuration constant
- syn keyword vhdlStatement context cover
- syn keyword vhdlStatement default disconnect downto
- syn keyword vhdlStatement elsif end entity exit
- syn keyword vhdlStatement file for function
- syn keyword vhdlStatement fairness force
- syn keyword vhdlStatement generate generic group guarded
- syn keyword vhdlStatement impure in inertial inout is
- syn keyword vhdlStatement label library linkage literal loop
- syn keyword vhdlStatement map
- syn keyword vhdlStatement new next null
- syn keyword vhdlStatement of on open others out
- syn keyword vhdlStatement package port postponed procedure process pure
- syn keyword vhdlStatement parameter property protected private
- syn keyword vhdlStatement range record register reject report return
- syn keyword vhdlStatement release restrict
- syn keyword vhdlStatement select severity signal shared subtype
- syn keyword vhdlStatement sequence strong
- syn keyword vhdlStatement then to transport type
- syn keyword vhdlStatement unaffected units until use
- syn keyword vhdlStatement variable view
- syn keyword vhdlStatement vpkg vmode vprop vunit
- syn keyword vhdlStatement wait when while with
- " VHDL predefined severity levels
- syn keyword vhdlAttribute note warning error failure
- " Linting of conditionals.
- syn match vhdlStatement "\<\(if\|else\)\>"
- syn match vhdlError "\<else\s\+if\>"
- " Types and type qualifiers
- " Predefined standard VHDL types
- syn match vhdlType "\<bit\>\'\="
- syn match vhdlType "\<boolean\>\'\="
- syn match vhdlType "\<natural\>\'\="
- syn match vhdlType "\<positive\>\'\="
- syn match vhdlType "\<integer\>\'\="
- syn match vhdlType "\<real\>\'\="
- syn match vhdlType "\<time\>\'\="
- syn match vhdlType "\<bit_vector\>\'\="
- syn match vhdlType "\<boolean_vector\>\'\="
- syn match vhdlType "\<integer_vector\>\'\="
- syn match vhdlType "\<real_vector\>\'\="
- syn match vhdlType "\<time_vector\>\'\="
- syn match vhdlType "\<character\>\'\="
- syn match vhdlType "\<string\>\'\="
- syn keyword vhdlType line text side width
- " Predefined standard IEEE VHDL types
- syn match vhdlType "\<std_ulogic\>\'\="
- syn match vhdlType "\<std_logic\>\'\="
- syn match vhdlType "\<std_ulogic_vector\>\'\="
- syn match vhdlType "\<std_logic_vector\>\'\="
- syn match vhdlType "\<unresolved_signed\>\'\="
- syn match vhdlType "\<unresolved_unsigned\>\'\="
- syn match vhdlType "\<u_signed\>\'\="
- syn match vhdlType "\<u_unsigned\>\'\="
- syn match vhdlType "\<signed\>\'\="
- syn match vhdlType "\<unsigned\>\'\="
- " array attributes
- syn match vhdlAttribute "\'high"
- syn match vhdlAttribute "\'left"
- syn match vhdlAttribute "\'length"
- syn match vhdlAttribute "\'low"
- syn match vhdlAttribute "\'range"
- syn match vhdlAttribute "\'reverse_range"
- syn match vhdlAttribute "\'right"
- syn match vhdlAttribute "\'ascending"
- " block attributes
- syn match vhdlAttribute "\'simple_name"
- syn match vhdlAttribute "\'instance_name"
- syn match vhdlAttribute "\'path_name"
- syn match vhdlAttribute "\'foreign" " VHPI
- " signal attribute
- syn match vhdlAttribute "\'active"
- syn match vhdlAttribute "\'delayed"
- syn match vhdlAttribute "\'event"
- syn match vhdlAttribute "\'last_active"
- syn match vhdlAttribute "\'last_event"
- syn match vhdlAttribute "\'last_value"
- syn match vhdlAttribute "\'quiet"
- syn match vhdlAttribute "\'stable"
- syn match vhdlAttribute "\'transaction"
- syn match vhdlAttribute "\'driving"
- syn match vhdlAttribute "\'driving_value"
- " type attributes
- syn match vhdlAttribute "\'base"
- syn match vhdlAttribute "\'subtype"
- syn match vhdlAttribute "\'element"
- syn match vhdlAttribute "\'leftof"
- syn match vhdlAttribute "\'pos"
- syn match vhdlAttribute "\'pred"
- syn match vhdlAttribute "\'rightof"
- syn match vhdlAttribute "\'succ"
- syn match vhdlAttribute "\'val"
- syn match vhdlAttribute "\'image"
- syn match vhdlAttribute "\'value"
- " VHDL-2019 interface attribute
- syn match vhdlAttribute "\'converse"
- syn keyword vhdlBoolean true false
- " for this vector values case is significant
- syn case match
- " Values for standard VHDL types
- syn match vhdlVector "\'[0L1HXWZU\-\?]\'"
- syn case ignore
- syn match vhdlVector "B\"[01_]\+\""
- syn match vhdlVector "O\"[0-7_]\+\""
- syn match vhdlVector "X\"[0-9a-f_]\+\""
- syn match vhdlCharacter "'.'"
- syn region vhdlString start=+"+ end=+"+
- " floating numbers
- syn match vhdlNumber "-\=\<\d\+\.\d\+\(E[+\-]\=\d\+\)\>"
- syn match vhdlNumber "-\=\<\d\+\.\d\+\>"
- syn match vhdlNumber "0*2#[01_]\+\.[01_]\+#\(E[+\-]\=\d\+\)\="
- syn match vhdlNumber "0*16#[0-9a-f_]\+\.[0-9a-f_]\+#\(E[+\-]\=\d\+\)\="
- " integer numbers
- syn match vhdlNumber "-\=\<\d\+\(E[+\-]\=\d\+\)\>"
- syn match vhdlNumber "-\=\<\d\+\>"
- syn match vhdlNumber "0*2#[01_]\+#\(E[+\-]\=\d\+\)\="
- syn match vhdlNumber "0*16#[0-9a-f_]\+#\(E[+\-]\=\d\+\)\="
- " operators
- syn keyword vhdlOperator and nand or nor xor xnor
- syn keyword vhdlOperator rol ror sla sll sra srl
- syn keyword vhdlOperator mod rem abs not
- " Concatenation and math operators
- syn match vhdlOperator "&\|+\|-\|\*\|\/"
- " Equality and comparison operators
- syn match vhdlOperator "=\|\/=\|>\|<\|>="
- " Assignment operators
- syn match vhdlOperator "<=\|:="
- syn match vhdlOperator "=>"
- " VHDL-202x concurrent signal association (spaceship) operator
- syn match vhdlOperator "<=>"
- " VHDL-2008 conversion, matching equality/non-equality operators
- syn match vhdlOperator "??\|?=\|?\/=\|?<\|?<=\|?>\|?>="
- " VHDL-2008 external names
- syn match vhdlOperator "<<\|>>"
- " Linting for illegal operators
- " '='
- syn match vhdlError "\(=\)[<=&+\-\*\/\\]\+"
- syn match vhdlError "[=&+\-\*\\]\+\(=\)"
- " '>', '<'
- " Allow external names: '<< ... >>'
- syn match vhdlError "\(>\)[<&+\-\/\\]\+"
- syn match vhdlError "[&+\-\/\\]\+\(>\)"
- syn match vhdlError "\(<\)[&+\-\/\\]\+"
- syn match vhdlError "[>=&+\-\/\\]\+\(<\)"
- " Covers most operators
- " support negative sign after operators. E.g. q<=-b;
- " Supports VHDL-202x spaceship (concurrent simple signal association).
- syn match vhdlError "\(<=\)[<=&+\*\\?:]\+"
- syn match vhdlError "[>=&+\-\*\\:]\+\(=>\)"
- syn match vhdlError "\(&\|+\|\-\|\*\*\|\/=\|??\|?=\|?\/=\|?<=\|?>=\|>=\|:=\|=>\)[<>=&+\*\\?:]\+"
- syn match vhdlError "[<>=&+\-\*\\:]\+\(&\|+\|\*\*\|\/=\|??\|?=\|?\/=\|?<\|?<=\|?>\|?>=\|>=\|<=\|:=\)"
- syn match vhdlError "\(?<\|?>\)[<>&+\*\/\\?:]\+"
- syn match vhdlError "\(<<\|>>\)[<>&+\*\/\\?:]\+"
- "syn match vhdlError "[?]\+\(&\|+\|\-\|\*\*\|??\|?=\|?\/=\|?<\|?<=\|?>\|?>=\|:=\|=>\)"
- " '/'
- syn match vhdlError "\(\/\)[<>&+\-\*\/\\?:]\+"
- syn match vhdlError "[<>=&+\-\*\/\\:]\+\(\/\)"
- syn match vhdlSpecial "<>"
- syn match vhdlSpecial "[().,;]"
- " time
- syn match vhdlTime "\<\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
- syn match vhdlTime "\<\d\+\.\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
- syn case match
- syn keyword vhdlTodo contained TODO NOTE
- syn keyword vhdlFixme contained FIXME
- syn case ignore
- syn region vhdlComment start="/\*" end="\*/" contains=vhdlTodo,vhdlFixme,@Spell
- syn match vhdlComment "\(^\|\s\)--.*" contains=vhdlTodo,vhdlFixme,@Spell
- " Standard IEEE P1076.6 preprocessor directives (metacomments).
- syn match vhdlPreProc "/\*\s*rtl_synthesis\s\+\(on\|off\)\s*\*/"
- syn match vhdlPreProc "\(^\|\s\)--\s*rtl_synthesis\s\+\(on\|off\)\s*"
- syn match vhdlPreProc "/\*\s*rtl_syn\s\+\(on\|off\)\s*\*/"
- syn match vhdlPreProc "\(^\|\s\)--\s*rtl_syn\s\+\(on\|off\)\s*"
- " Industry-standard directives. These are not standard VHDL, but are commonly
- " used in the industry.
- syn match vhdlPreProc "/\*\s*synthesis\s\+translate_\(on\|off\)\s*\*/"
- "syn match vhdlPreProc "/\*\s*simulation\s\+translate_\(on\|off\)\s*\*/"
- syn match vhdlPreProc "/\*\s*pragma\s\+translate_\(on\|off\)\s*\*/"
- syn match vhdlPreProc "/\*\s*pragma\s\+synthesis_\(on\|off\)\s*\*/"
- syn match vhdlPreProc "/\*\s*synopsys\s\+translate_\(on\|off\)\s*\*/"
- syn match vhdlPreProc "\(^\|\s\)--\s*synthesis\s\+translate_\(on\|off\)\s*"
- "syn match vhdlPreProc "\(^\|\s\)--\s*simulation\s\+translate_\(on\|off\)\s*"
- syn match vhdlPreProc "\(^\|\s\)--\s*pragma\s\+translate_\(on\|off\)\s*"
- syn match vhdlPreProc "\(^\|\s\)--\s*pragma\s\+synthesis_\(on\|off\)\s*"
- syn match vhdlPreProc "\(^\|\s\)--\s*synopsys\s\+translate_\(on\|off\)\s*"
- "Modify the following as needed. The trade-off is performance versus functionality.
- syn sync minlines=600
- " Define the default highlighting.
- " Only when an item doesn't have highlighting yet
- hi def link vhdlSpecial Special
- hi def link vhdlStatement Statement
- hi def link vhdlCharacter Character
- hi def link vhdlString String
- hi def link vhdlVector Number
- hi def link vhdlBoolean Number
- hi def link vhdlTodo Todo
- hi def link vhdlFixme Fixme
- hi def link vhdlComment Comment
- hi def link vhdlNumber Number
- hi def link vhdlTime Number
- hi def link vhdlType Type
- hi def link vhdlOperator Operator
- hi def link vhdlError Error
- hi def link vhdlAttribute Special
- hi def link vhdlPreProc PreProc
- let b:current_syntax = "vhdl"
- let &cpo = s:cpo_save
- unlet s:cpo_save
- " vim: ts=8
|