" =========================================================================== " HLS pragma highlighting for Vitis HLS (EMBS) " --------------------------------------------------------------------------- " Vim's stock C/C++ syntax files treat the whole "#pragma HLS ..." line as one " anonymous preprocessor directive, so the pragma name and its options are " invisible. These rules give them their own highlight groups. " " Loaded automatically when this directory is on 'runtimepath' (see the " hlsdev README). Safe to source twice. " =========================================================================== if !exists('b:current_syntax') finish endif if b:current_syntax !=# 'cpp' && b:current_syntax !=# 'c' finish endif " The pragma line as a whole, so options inside it can be picked out. syntax region hlsPragma \ start=/#\s*pragma\s\+HLS\>/ \ end="$" \ keepend \ contains=hlsPragmaName,hlsPragmaOption,hlsPragmaValue,hlsPragmaMode " The pragma name: PIPELINE, UNROLL, ARRAY_PARTITION, INTERFACE, ... syntax match hlsPragmaName /\\s\+\zs[A-Z][A-Z_]*/ contained " Option keys: variable=, II=, type=, port=, bundle= syntax match hlsPragmaOption /\<\w\+\ze\s*=/ contained " Option values: complete, 2, in_words, AXILiteS syntax match hlsPragmaValue /=\s*\zs[^ ]\+/ contained " INTERFACE modes are positional, so they have no "mode=" in front of them: " #pragma HLS INTERFACE s_axilite port=return bundle=ctrl syntax match hlsPragmaMode /\<\%(ap_none\|ap_vld\|ap_ack\|ap_hs\|ap_ovld\|ap_fifo\|ap_memory\|ap_bram\|bram\|ap_ctrl_none\|ap_ctrl_hs\|ap_ctrl_chain\|m_axi\|s_axilite\|axis\|s_axis\|m_axis\|ap_stable\|ap_bus\)\>/ contained highlight default link hlsPragma PreProc highlight default link hlsPragmaName Statement highlight default link hlsPragmaOption Identifier highlight default link hlsPragmaValue Constant highlight default link hlsPragmaMode Constant