From e2580134029cdab3045e761f02eb1124503d9288 Mon Sep 17 00:00:00 2001 From: a-rey <aaronreyes2@gmail.com> Date: Fri, 12 Jun 2015 15:38:43 -0400 Subject: [PATCH 1/4] adding vhdl language --- components.js | 4 ++++ components/prism-vhdl.js | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 components/prism-vhdl.js diff --git a/components.js b/components.js index 7be18694e5..52988bf83c 100644 --- a/components.js +++ b/components.js @@ -322,6 +322,10 @@ var components = { "require": "javascript", "owner": "vkbansal" }, + "vhdl": { + "title": "VHDL", + "owner": "a-rey" + }, "wiki": { "title": "Wiki markup", "require": "markup", diff --git a/components/prism-vhdl.js b/components/prism-vhdl.js new file mode 100644 index 0000000000..41bff16806 --- /dev/null +++ b/components/prism-vhdl.js @@ -0,0 +1,24 @@ +Prism.languages.vhdl = { + 'comment': /(--[^\r\n]+)/, + // support for all logic vectors + 'vhdl-vectors': { + 'pattern': /(\b[oOxXbB]"[\dA-Fa-f_]+"|"[UuXx01ZzWwLlHh-]+")/, + 'alias': 'number' + }, + 'string': /(")(\\\n|\\?.)*?"/, + 'constant': /\b(use|library)\b/i, + // support for predefined attributes included + 'keyword': /\b(access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|report|return|select|severity|signal|shared|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|'base|'left|'right|'high|'low|'ascending|'image|'value|'pos|'val|'succ|'pred|'leftof|'rightof|'left|'left|'right|'right|'high|'high|'low|'low|'range|'range|'reverse_range|'reverse_range|'length|'length|'ascending|'ascending|'delayed|'stable|'stable|'quiet|'quiet|'transaction|'event|'active|'last_event|'last_active|'last_value|'driving|'driving_value|'simple_name|'instance_name|'path_name)\b/i, + 'boolean': /\b(true|false)\b/i, + 'function': { + // support for operator overloading included + pattern: /([a-z0-9_]+|"\S+")\(/i, + inside: { + punctuation: /\(/ + } + }, + // decimal, based, physical, and exponential numbers supported + 'number': /('[UuXx01ZzWwLlHh-]'|\b\d+([_.]+)?(#[\dA-Fa-f_.]+#)?([eE][-+]?\d+)?)/, + 'operator': /[-+]{1}|<=?|>=?|=|:=|&|\*|\/|\b(abs|not|mod|rem|sll|srl|sla|sra|rol|ror|and|or|nand|xnor|xor|nor)\b/i, + 'punctuation': /[{}[\];(),.:]/ +}; From 9fb1e8b74528901571d480641762cf4902bf6e4d Mon Sep 17 00:00:00 2001 From: a-rey <aaronreyes2@gmail.com> Date: Sat, 13 Jun 2015 14:58:11 -0400 Subject: [PATCH 2/4] requested changes/optimizations --- components/prism-vhdl.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/components/prism-vhdl.js b/components/prism-vhdl.js index 41bff16806..71bd533381 100644 --- a/components/prism-vhdl.js +++ b/components/prism-vhdl.js @@ -1,14 +1,14 @@ Prism.languages.vhdl = { - 'comment': /(--[^\r\n]+)/, + 'comment': /--.+/, // support for all logic vectors 'vhdl-vectors': { - 'pattern': /(\b[oOxXbB]"[\dA-Fa-f_]+"|"[UuXx01ZzWwLlHh-]+")/, + 'pattern': /(\b[oxb]"[\da-f_]+"|"[01uxzwlh-]+")/i, 'alias': 'number' }, - 'string': /(")(\\\n|\\?.)*?"/, + 'string': /"(\\\n|\\?.)*?"/, 'constant': /\b(use|library)\b/i, // support for predefined attributes included - 'keyword': /\b(access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|report|return|select|severity|signal|shared|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|'base|'left|'right|'high|'low|'ascending|'image|'value|'pos|'val|'succ|'pred|'leftof|'rightof|'left|'left|'right|'right|'high|'high|'low|'low|'range|'range|'reverse_range|'reverse_range|'length|'length|'ascending|'ascending|'delayed|'stable|'stable|'quiet|'quiet|'transaction|'event|'active|'last_event|'last_active|'last_value|'driving|'driving_value|'simple_name|'instance_name|'path_name)\b/i, + 'keyword': /\b('active|'ascending|'base|'delayed|'driving|'driving_value|'event|'high|'image|'instance_name|'last_active|'last_event|'last_value|'left|'leftof|'length|'low|'path_name|'pos|'pred|'quiet|'range|'reverse_range|'right|'rightof|'simple_name|'stable|'succ|'transaction|'val|'value|access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with)\b/i, 'boolean': /\b(true|false)\b/i, 'function': { // support for operator overloading included @@ -18,7 +18,7 @@ Prism.languages.vhdl = { } }, // decimal, based, physical, and exponential numbers supported - 'number': /('[UuXx01ZzWwLlHh-]'|\b\d+([_.]+)?(#[\dA-Fa-f_.]+#)?([eE][-+]?\d+)?)/, - 'operator': /[-+]{1}|<=?|>=?|=|:=|&|\*|\/|\b(abs|not|mod|rem|sll|srl|sla|sra|rol|ror|and|or|nand|xnor|xor|nor)\b/i, + 'number': /'[01uxzwlh-]'|\b\d+[_.]*(#[\da-f_.]+#)?([e][-+]?\d+)?/i, + 'operator': /<=?|>=?|:=|[-+*/&=]|\b(abs|not|mod|rem|sll|srl|sla|sra|rol|ror|and|or|nand|xnor|xor|nor)\b/i, 'punctuation': /[{}[\];(),.:]/ }; From 43cc56f51046439854a1a95e8467be37ebefbac0 Mon Sep 17 00:00:00 2001 From: a-rey <aaronreyes2@gmail.com> Date: Sun, 14 Jun 2015 16:32:47 -0400 Subject: [PATCH 3/4] getting rid of [] and () --- components/prism-vhdl.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/prism-vhdl.js b/components/prism-vhdl.js index 71bd533381..bed5ffece6 100644 --- a/components/prism-vhdl.js +++ b/components/prism-vhdl.js @@ -2,7 +2,7 @@ Prism.languages.vhdl = { 'comment': /--.+/, // support for all logic vectors 'vhdl-vectors': { - 'pattern': /(\b[oxb]"[\da-f_]+"|"[01uxzwlh-]+")/i, + 'pattern': /\b[oxb]"[\da-f_]+"|"[01uxzwlh-]+"/i, 'alias': 'number' }, 'string': /"(\\\n|\\?.)*?"/, @@ -18,7 +18,7 @@ Prism.languages.vhdl = { } }, // decimal, based, physical, and exponential numbers supported - 'number': /'[01uxzwlh-]'|\b\d+[_.]*(#[\da-f_.]+#)?([e][-+]?\d+)?/i, + 'number': /'[01uxzwlh-]'|\b\d+[_.]*(#[\da-f_.]+#)?(e[-+]?\d+)?/i, 'operator': /<=?|>=?|:=|[-+*/&=]|\b(abs|not|mod|rem|sll|srl|sla|sra|rol|ror|and|or|nand|xnor|xor|nor)\b/i, 'punctuation': /[{}[\];(),.:]/ }; From 3d3989151c8b10ddaacba2c033ee97a0b34b649a Mon Sep 17 00:00:00 2001 From: a-rey <aaronreyes2@gmail.com> Date: Thu, 18 Jun 2015 11:13:15 -0400 Subject: [PATCH 4/4] adding example page and minified file --- components/prism-vhdl.min.js | 1 + examples/prism-vhdl.html | 95 ++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 components/prism-vhdl.min.js create mode 100644 examples/prism-vhdl.html diff --git a/components/prism-vhdl.min.js b/components/prism-vhdl.min.js new file mode 100644 index 0000000000..3680f052e9 --- /dev/null +++ b/components/prism-vhdl.min.js @@ -0,0 +1 @@ +Prism.languages.vhdl={comment:/--.+/,"vhdl-vectors":{pattern:/\b[oxb]"[\da-f_]+"|"[01uxzwlh-]+"/i,alias:"number"},string:/"(\\\n|\\?.)*?"/,constant:/\b(use|library)\b/i,keyword:/\b('active|'ascending|'base|'delayed|'driving|'driving_value|'event|'high|'image|'instance_name|'last_active|'last_event|'last_value|'left|'leftof|'length|'low|'path_name|'pos|'pred|'quiet|'range|'reverse_range|'right|'rightof|'simple_name|'stable|'succ|'transaction|'val|'value|access|after|alias|all|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|new|next|null|of|on|open|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|report|return|select|severity|shared|signal|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with)\b/i,"boolean":/\b(true|false)\b/i,"function":{pattern:/([a-z0-9_]+|"\S+")\(/i,inside:{punctuation:/\(/}},number:/'[01uxzwlh-]'|\b\d+[_.]*(#[\da-f_.]+#)?(e[-+]?\d+)?/i,operator:/<=?|>=?|:=|[-+*/&=]|\b(abs|not|mod|rem|sll|srl|sla|sra|rol|ror|and|or|nand|xnor|xor|nor)\b/i,punctuation:/[{}[\];(),.:]/}; \ No newline at end of file diff --git a/examples/prism-vhdl.html b/examples/prism-vhdl.html new file mode 100644 index 0000000000..1dbf649f79 --- /dev/null +++ b/examples/prism-vhdl.html @@ -0,0 +1,95 @@ +<h1>VHDL</h1> +<p>To use this language, use the class "language-vhdl".</p> + +<h2>Comments</h2> +<pre><code>-- I am a comment +I am not</code></pre> + +<h2>Literals</h2> +<pre><code>constant FREEZE : integer := 32; +constant TEMP : real := 32.0; +A_INT <= 16#FF#; +B_INT <= 2#1010_1010#; +MONEY := 1_000_000.0; +FACTOR := 2.2E-6; +constant DEL1 :time := 10 ns; +constant DEL2 :time := 2.27 us; +type MY_LOGIC is ('X','0','1','Z'); +type T_STATE is (IDLE, READ, END_CYC); +signal CLK : MY_LOGIC := '0'; +signal STATE : T_STATE := IDLE; +constant FLAG :bit_vector(0 to 7) := "11111111"; +constant MSG : string := "Hello"; +BIT_8_BUS <= B"1111_1111"; +BIT_9_BUS <= O"353"; +BIT_16_BUS <= X"AA55"; +constant TWO_LINE_MSG : string := "Hello" & CR & "World";</code></pre> + +<h2>Full example</h2> +<pre><code>-- example code from: http://www.csee.umbc.edu/portal/help/VHDL/samples/samples.html +library IEEE; +use IEEE.std_logic_1164.all; + +entity fadd is -- full adder stage, interface + port(a : in std_logic; + b : in std_logic; + cin : in std_logic; + s : out std_logic; + cout : out std_logic); +end entity fadd; + +architecture circuits of fadd is -- full adder stage, body +begin -- circuits of fadd + s <= a xor b xor cin after 1 ns; + cout <= (a and b) or (a and cin) or (b and cin) after 1 ns; +end architecture circuits; -- of fadd + +library IEEE; +use IEEE.std_logic_1164.all; +entity add32 is -- simple 32 bit ripple carry adder + port(a : in std_logic_vector(31 downto 0); + b : in std_logic_vector(31 downto 0); + cin : in std_logic; + sum : out std_logic_vector(31 downto 0); + cout : out std_logic); +end entity add32; + +architecture circuits of add32 is + signal c : std_logic_vector(0 to 30); -- internal carry signals +begin -- circuits of add32 + a0: entity WORK.fadd port map(a(0), b(0), cin, sum(0), c(0)); + stage: for I in 1 to 30 generate + as: entity WORK.fadd port map(a(I), b(I), c(I-1) , sum(I), c(I)); + end generate stage; + a31: entity WORK.fadd port map(a(31), b(31), c(30) , sum(31), cout); +end architecture circuits; -- of add32 + +use STD.textio.all; +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_textio.all; + +entity signal_trace is +end signal_trace; + +architecture circuits of signal_trace is + signal a: std_logic_vector(31 downto 0) := x"00000000"; + signal b: std_logic_vector(31 downto 0) := x"FFFFFFFF"; + signal cin: std_logic := '1'; + signal cout: std_logic; + signal sum: std_logic_vector(31 downto 0); +begin -- circuits of signal_trace + adder: entity WORK.add32 port map(a, b, cin, sum, cout); -- parallel circuit + + prtsum: process (sum) + variable my_line : LINE; + alias swrite is write [line, string, side, width] ; + begin + swrite(my_line, "sum="); + write(my_line, sum); + swrite(my_line, ", at="); + write(my_line, now); + writeline(output, my_line); + end process prtsum; + +end architecture circuits; -- of signal_trace</code></pre>