vertigo_vhdl 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (183) hide show
  1. checksums.yaml +7 -0
  2. data/bin/vertigo +7 -0
  3. data/lib/vertigo.rb +4 -0
  4. data/lib/vertigo/ast.rb +87 -0
  5. data/lib/vertigo/ast_vertigo_rkgen.rb +607 -0
  6. data/lib/vertigo/code.rb +57 -0
  7. data/lib/vertigo/compiler.rb +61 -0
  8. data/lib/vertigo/generic_lexer.rb +61 -0
  9. data/lib/vertigo/generic_parser.rb +44 -0
  10. data/lib/vertigo/indent.rb +20 -0
  11. data/lib/vertigo/lexer.rb +172 -0
  12. data/lib/vertigo/parser.rb +1458 -0
  13. data/lib/vertigo/pretty_printer.rb +749 -0
  14. data/lib/vertigo/runner.rb +115 -0
  15. data/lib/vertigo/tb_generator.rb +81 -0
  16. data/lib/vertigo/template.tb.vhd +72 -0
  17. data/lib/vertigo/token.rb +67 -0
  18. data/lib/vertigo/version.rb +3 -0
  19. data/lib/vertigo/vertigo.rkg +354 -0
  20. data/lib/vertigo/visitor_vertigo_rkgen.rb +447 -0
  21. data/tests/ghdl_tests/fsm.vhd +98 -0
  22. data/tests/ghdl_tests/fsm_synth.vhd +248 -0
  23. data/tests/ghdl_tests/test_fsm.vhd +162 -0
  24. data/tests/parser_tests/else.vhd +64 -0
  25. data/tests/parser_tests/test_MUST_fail.vhd +1 -0
  26. data/tests/parser_tests/test_accelerator.vhd +160 -0
  27. data/tests/parser_tests/test_accelerator_pp.vhd +144 -0
  28. data/tests/parser_tests/test_aggregate.vhd +17 -0
  29. data/tests/parser_tests/test_aggregate_pp.vhd +15 -0
  30. data/tests/parser_tests/test_archi_1.vhd +45 -0
  31. data/tests/parser_tests/test_archi_1_pp.vhd +41 -0
  32. data/tests/parser_tests/test_array_array_00.vhd +25 -0
  33. data/tests/parser_tests/test_array_array_00_pp.vhd +25 -0
  34. data/tests/parser_tests/test_array_urange.vhd +25 -0
  35. data/tests/parser_tests/test_array_urange_pp.vhd +25 -0
  36. data/tests/parser_tests/test_chu-1.vhd +80 -0
  37. data/tests/parser_tests/test_chu-1_pp.vhd +104 -0
  38. data/tests/parser_tests/test_concat.vhd +11 -0
  39. data/tests/parser_tests/test_concat_pp.vhd +14 -0
  40. data/tests/parser_tests/test_counter.vhd +35 -0
  41. data/tests/parser_tests/test_counter_pp.vhd +35 -0
  42. data/tests/parser_tests/test_de2.vhd +358 -0
  43. data/tests/parser_tests/test_de2_pp.vhd +274 -0
  44. data/tests/parser_tests/test_encode.vhd +2679 -0
  45. data/tests/parser_tests/test_encode_pp.vhd +2549 -0
  46. data/tests/parser_tests/test_fsm.vhd +162 -0
  47. data/tests/parser_tests/test_fsm_pp.vhd +125 -0
  48. data/tests/parser_tests/test_fsm_synth.vhd +248 -0
  49. data/tests/parser_tests/test_fsm_synth_pp.vhd +197 -0
  50. data/tests/parser_tests/test_function-01.vhd +33 -0
  51. data/tests/parser_tests/test_function-01_pp.vhd +18 -0
  52. data/tests/parser_tests/test_lfsr.vhd +75 -0
  53. data/tests/parser_tests/test_lfsr_pp.vhd +44 -0
  54. data/tests/parser_tests/test_microwatt_cache_ram.vhd +1 -0
  55. data/tests/parser_tests/test_microwatt_cache_ram_pp.vhd +68 -0
  56. data/tests/parser_tests/test_microwatt_common.vhd +1 -0
  57. data/tests/parser_tests/test_microwatt_common_pp.vhd +336 -0
  58. data/tests/parser_tests/test_microwatt_control.vhd +1 -0
  59. data/tests/parser_tests/test_microwatt_control_pp.vhd +187 -0
  60. data/tests/parser_tests/test_microwatt_core.vhd +1 -0
  61. data/tests/parser_tests/test_microwatt_core_debug.vhd +1 -0
  62. data/tests/parser_tests/test_microwatt_core_debug_pp.vhd +104 -0
  63. data/tests/parser_tests/test_microwatt_core_pp.vhd +231 -0
  64. data/tests/parser_tests/test_microwatt_core_tb.vhd +1 -0
  65. data/tests/parser_tests/test_microwatt_core_tb_pp.vhd +43 -0
  66. data/tests/parser_tests/test_microwatt_countzero.vhd +1 -0
  67. data/tests/parser_tests/test_microwatt_countzero_pp.vhd +120 -0
  68. data/tests/parser_tests/test_microwatt_countzero_tb.vhd +1 -0
  69. data/tests/parser_tests/test_microwatt_countzero_tb_pp.vhd +70 -0
  70. data/tests/parser_tests/test_microwatt_cr_file.vhd +1 -0
  71. data/tests/parser_tests/test_microwatt_cr_file_pp.vhd +74 -0
  72. data/tests/parser_tests/test_microwatt_cr_hazard.vhd +1 -0
  73. data/tests/parser_tests/test_microwatt_cr_hazard_pp.vhd +51 -0
  74. data/tests/parser_tests/test_microwatt_crhelpers.vhd +1 -0
  75. data/tests/parser_tests/test_microwatt_crhelpers_pp.vhd +48 -0
  76. data/tests/parser_tests/test_microwatt_dcache.vhd +1 -0
  77. data/tests/parser_tests/test_microwatt_dcache_pp.vhd +481 -0
  78. data/tests/parser_tests/test_microwatt_dcache_tb.vhd +1 -0
  79. data/tests/parser_tests/test_microwatt_dcache_tb_pp.vhd +98 -0
  80. data/tests/parser_tests/test_microwatt_decode1.vhd +1 -0
  81. data/tests/parser_tests/test_microwatt_decode1_pp.vhd +138 -0
  82. data/tests/parser_tests/test_microwatt_decode2.vhd +1 -0
  83. data/tests/parser_tests/test_microwatt_decode2_pp.vhd +300 -0
  84. data/tests/parser_tests/test_microwatt_decode_types.vhd +1 -0
  85. data/tests/parser_tests/test_microwatt_decode_types_pp.vhd +67 -0
  86. data/tests/parser_tests/test_microwatt_divider.vhd +1 -0
  87. data/tests/parser_tests/test_microwatt_divider_pp.vhd +132 -0
  88. data/tests/parser_tests/test_microwatt_divider_tb.vhd +1 -0
  89. data/tests/parser_tests/test_microwatt_divider_tb_pp.vhd +95 -0
  90. data/tests/parser_tests/test_microwatt_dmi_dtm_dummy.vhd +1 -0
  91. data/tests/parser_tests/test_microwatt_dmi_dtm_dummy_pp.vhd +29 -0
  92. data/tests/parser_tests/test_microwatt_dmi_dtm_tb.vhd +1 -0
  93. data/tests/parser_tests/test_microwatt_dmi_dtm_tb_pp.vhd +197 -0
  94. data/tests/parser_tests/test_microwatt_dmi_dtm_xilinx.vhd +1 -0
  95. data/tests/parser_tests/test_microwatt_dmi_dtm_xilinx_pp.vhd +139 -0
  96. data/tests/parser_tests/test_microwatt_execute1.vhd +1 -0
  97. data/tests/parser_tests/test_microwatt_execute1_pp.vhd +689 -0
  98. data/tests/parser_tests/test_microwatt_fetch1.vhd +1 -0
  99. data/tests/parser_tests/test_microwatt_fetch1_pp.vhd +88 -0
  100. data/tests/parser_tests/test_microwatt_fetch2.vhd +1 -0
  101. data/tests/parser_tests/test_microwatt_fetch2_pp.vhd +79 -0
  102. data/tests/parser_tests/test_microwatt_glibc_random.vhd +1 -0
  103. data/tests/parser_tests/test_microwatt_glibc_random_helpers.vhd +1 -0
  104. data/tests/parser_tests/test_microwatt_glibc_random_helpers_pp.vhd +25 -0
  105. data/tests/parser_tests/test_microwatt_glibc_random_pp.vhd +41 -0
  106. data/tests/parser_tests/test_microwatt_gpr_hazard.vhd +1 -0
  107. data/tests/parser_tests/test_microwatt_gpr_hazard_pp.vhd +68 -0
  108. data/tests/parser_tests/test_microwatt_helpers.vhd +1 -0
  109. data/tests/parser_tests/test_microwatt_helpers_pp.vhd +153 -0
  110. data/tests/parser_tests/test_microwatt_icache.vhd +1 -0
  111. data/tests/parser_tests/test_microwatt_icache_pp.vhd +337 -0
  112. data/tests/parser_tests/test_microwatt_icache_tb.vhd +1 -0
  113. data/tests/parser_tests/test_microwatt_icache_tb_pp.vhd +104 -0
  114. data/tests/parser_tests/test_microwatt_insn_helpers.vhd +1 -0
  115. data/tests/parser_tests/test_microwatt_insn_helpers_pp.vhd +208 -0
  116. data/tests/parser_tests/test_microwatt_loadstore1.vhd +1 -0
  117. data/tests/parser_tests/test_microwatt_loadstore1_pp.vhd +222 -0
  118. data/tests/parser_tests/test_microwatt_logical.vhd +1 -0
  119. data/tests/parser_tests/test_microwatt_logical_pp.vhd +87 -0
  120. data/tests/parser_tests/test_microwatt_multiply.vhd +1 -0
  121. data/tests/parser_tests/test_microwatt_multiply_pp.vhd +84 -0
  122. data/tests/parser_tests/test_microwatt_multiply_tb.vhd +1 -0
  123. data/tests/parser_tests/test_microwatt_multiply_tb_pp.vhd +75 -0
  124. data/tests/parser_tests/test_microwatt_plru.vhd +1 -0
  125. data/tests/parser_tests/test_microwatt_plru_pp.vhd +46 -0
  126. data/tests/parser_tests/test_microwatt_plru_tb.vhd +1 -0
  127. data/tests/parser_tests/test_microwatt_plru_tb_pp.vhd +93 -0
  128. data/tests/parser_tests/test_microwatt_ppc_fx_insns.vhd +1 -0
  129. data/tests/parser_tests/test_microwatt_ppc_fx_insns_pp.vhd +665 -0
  130. data/tests/parser_tests/test_microwatt_register_file.vhd +1 -0
  131. data/tests/parser_tests/test_microwatt_register_file_pp.vhd +86 -0
  132. data/tests/parser_tests/test_microwatt_rotator.vhd +1 -0
  133. data/tests/parser_tests/test_microwatt_rotator_pp.vhd +149 -0
  134. data/tests/parser_tests/test_microwatt_rotator_tb.vhd +1 -0
  135. data/tests/parser_tests/test_microwatt_rotator_tb_pp.vhd +134 -0
  136. data/tests/parser_tests/test_microwatt_sim_bram.vhd +1 -0
  137. data/tests/parser_tests/test_microwatt_sim_bram_helpers.vhd +1 -0
  138. data/tests/parser_tests/test_microwatt_sim_bram_helpers_pp.vhd +52 -0
  139. data/tests/parser_tests/test_microwatt_sim_bram_pp.vhd +53 -0
  140. data/tests/parser_tests/test_microwatt_sim_console.vhd +1 -0
  141. data/tests/parser_tests/test_microwatt_sim_console_pp.vhd +43 -0
  142. data/tests/parser_tests/test_microwatt_sim_jtag.vhd +1 -0
  143. data/tests/parser_tests/test_microwatt_sim_jtag_pp.vhd +64 -0
  144. data/tests/parser_tests/test_microwatt_sim_jtag_socket.vhd +1 -0
  145. data/tests/parser_tests/test_microwatt_sim_jtag_socket_pp.vhd +36 -0
  146. data/tests/parser_tests/test_microwatt_sim_uart.vhd +1 -0
  147. data/tests/parser_tests/test_microwatt_sim_uart_pp.vhd +90 -0
  148. data/tests/parser_tests/test_microwatt_soc.vhd +1 -0
  149. data/tests/parser_tests/test_microwatt_soc_pp.vhd +195 -0
  150. data/tests/parser_tests/test_microwatt_utils.vhd +1 -0
  151. data/tests/parser_tests/test_microwatt_utils_pp.vhd +39 -0
  152. data/tests/parser_tests/test_microwatt_wishbone_arbiter.vhd +1 -0
  153. data/tests/parser_tests/test_microwatt_wishbone_arbiter_pp.vhd +54 -0
  154. data/tests/parser_tests/test_microwatt_wishbone_bram_tb.vhd +1 -0
  155. data/tests/parser_tests/test_microwatt_wishbone_bram_tb_pp.vhd +157 -0
  156. data/tests/parser_tests/test_microwatt_wishbone_bram_wrapper.vhd +1 -0
  157. data/tests/parser_tests/test_microwatt_wishbone_bram_wrapper_pp.vhd +62 -0
  158. data/tests/parser_tests/test_microwatt_wishbone_debug_master.vhd +1 -0
  159. data/tests/parser_tests/test_microwatt_wishbone_debug_master_pp.vhd +124 -0
  160. data/tests/parser_tests/test_microwatt_wishbone_types.vhd +1 -0
  161. data/tests/parser_tests/test_microwatt_wishbone_types_pp.vhd +38 -0
  162. data/tests/parser_tests/test_microwatt_writeback.vhd +1 -0
  163. data/tests/parser_tests/test_microwatt_writeback_pp.vhd +87 -0
  164. data/tests/parser_tests/test_package-1.vhd +68 -0
  165. data/tests/parser_tests/test_package-1_pp.vhd +53 -0
  166. data/tests/parser_tests/test_precedence.vhd +13 -0
  167. data/tests/parser_tests/test_precedence_pp.vhd +16 -0
  168. data/tests/parser_tests/test_selected_sig.vhd +14 -0
  169. data/tests/parser_tests/test_selected_sig_pp.vhd +10 -0
  170. data/tests/parser_tests/test_slice.vhd +15 -0
  171. data/tests/parser_tests/test_slice_pp.vhd +16 -0
  172. data/tests/parser_tests/test_tb-00.vhd +94 -0
  173. data/tests/parser_tests/test_tb-00_pp.vhd +71 -0
  174. data/tests/parser_tests/test_type_decl_02.vhd +9 -0
  175. data/tests/parser_tests/test_type_decl_02_pp.vhd +11 -0
  176. data/tests/parser_tests/test_use.vhd +7 -0
  177. data/tests/parser_tests/test_use_pp.vhd +10 -0
  178. data/tests/parser_tests/test_while_1.vhd +38 -0
  179. data/tests/parser_tests/test_while_1_pp.vhd +26 -0
  180. data/tests/parser_tests/test_with-00.vhd +21 -0
  181. data/tests/parser_tests/test_with-00_pp.vhd +12 -0
  182. data/tests/tb_gen_tests/test_accelerator.vhd +160 -0
  183. metadata +224 -0
@@ -0,0 +1,115 @@
1
+ require "optparse"
2
+
3
+ require_relative "compiler"
4
+
5
+ module Vertigo
6
+
7
+ class Runner
8
+
9
+ def self.run *arguments
10
+ new.run(arguments)
11
+ end
12
+
13
+ def run arguments
14
+ compiler=Compiler.new
15
+ compiler.options = args = parse_options(arguments)
16
+ begin
17
+ if args[:parse_only]
18
+ filename=args[:vhdl_file]
19
+ ok=compiler.parse(filename)
20
+ elsif args[:gen_tb]
21
+ filename=args[:vhdl_file]
22
+ ok=compiler.gen_tb(filename)
23
+ elsif filename=args[:vhdl_file]
24
+ ok=compiler.compile(filename)
25
+ else
26
+ raise "need a VHDL file : vhdl_tb [options] <file.vhd>"
27
+ end
28
+ return ok
29
+ rescue Exception => e
30
+ puts e unless compiler.options[:mute]
31
+ return false
32
+ end
33
+ end
34
+
35
+ def header
36
+ puts "Vertigo -- VHDL utilities (#{VERSION})- (c) JC Le Lann 2016-20"
37
+ end
38
+
39
+ private
40
+ def parse_options(arguments)
41
+
42
+ parser = OptionParser.new
43
+
44
+ no_arguments=arguments.empty?
45
+
46
+ options = {}
47
+
48
+ parser.on("-h", "--help", "Show help message") do
49
+ puts parser
50
+ exit(true)
51
+ end
52
+
53
+ parser.on("-p", "--parse", "parse only") do
54
+ options[:parse_only]=true
55
+ end
56
+
57
+ parser.on("--dump", "dump ast") do
58
+ options[:dump_ast]=true
59
+ end
60
+
61
+ parser.on("--pp", "pretty print back source code, in the console") do
62
+ options[:pp] = true
63
+ end
64
+
65
+ parser.on("--pp_to_file", "pretty print back source code, to a _pp.vhd file") do
66
+ options[:pp_to_file] = true
67
+ end
68
+
69
+ parser.on("--ast", "abstract syntax tree (AST)") do
70
+ options[:ast] = true
71
+ end
72
+
73
+ parser.on("--check", "elaborate and check types") do
74
+ options[:check] = true
75
+ end
76
+
77
+ parser.on("--draw_ast", "draw abstract syntax tree (AST)") do
78
+ options[:draw_ast] = true
79
+ end
80
+
81
+ parser.on("--gen_tb", "generates a testbench for the first entity/arch pair found") do
82
+ options[:gen_tb] = true
83
+ end
84
+
85
+ parser.on("--dummy_transform", "dummy ast transform") do
86
+ options[:dummy_transform] = true
87
+ end
88
+
89
+ parser.on("--vv", "verbose") do
90
+ options[:verbose] = true
91
+ end
92
+
93
+ parser.on("--mute","mute") do
94
+ options[:mute]=true
95
+ end
96
+
97
+ parser.on("-v", "--version", "Show version number") do
98
+ puts VERSION
99
+ exit(true)
100
+ end
101
+
102
+ parser.parse!(arguments)
103
+
104
+ header unless options[:mute]
105
+
106
+ options[:vhdl_file]=arguments.shift #the remaining c file
107
+
108
+ if no_arguments
109
+ puts parser
110
+ end
111
+
112
+ options
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,81 @@
1
+ require 'erb'
2
+
3
+ module Vertigo
4
+
5
+ class TestBenchGenerator
6
+ attr_accessor :ast
7
+ attr_accessor :entity,:arch
8
+ attr_accessor :clk,:rst
9
+ def initialize options={}
10
+ @options=options
11
+ @supplemental_libs_h=options[:supplemental_libs_h]||{}
12
+ end
13
+
14
+ def generate_from ast
15
+ @ast=ast
16
+ entity_arch=find_entity_arch
17
+ detecting_clk_and_reset entity_arch
18
+ @tb_name=entity_arch.first.name.str+'_tb'
19
+ erb=ERB.new(IO.read "#{__dir__}/template.tb.vhd")
20
+ vhdl_tb=erb.result(binding)
21
+ tb_filename=@tb_name+".vhd"
22
+ File.open(tb_filename,'w'){|f| f.puts vhdl_tb}
23
+ puts "=> generated testbench : #{tb_filename}"
24
+ end
25
+
26
+ private
27
+ def find_entity_arch
28
+ @entity=ast.design_units.find{|du| du.is_a? Entity}
29
+ if @entity.nil?
30
+ puts msg="ERROR : no entity found"
31
+ raise msg
32
+ end
33
+ puts "=> found entity '#{entity.name.str}'"
34
+ @arch=ast.design_units.find{|du| du.is_a? Architecture}
35
+ if @arch.nil?
36
+ puts msg="ERROR : no architecture found"
37
+ raise msg
38
+ end
39
+
40
+ puts "=> found architecture '#{arch.name.str}'"
41
+ [@entity,@arch]
42
+ end
43
+
44
+ def detecting_clk_and_reset entity_arch
45
+ puts "=> detecting clock and reset"
46
+ entity,arch=entity_arch
47
+ inputs=entity.ports.select{|port| port.is_a?(Input)}
48
+ @clk = inputs.sort_by{|input| levenshtein_distance(input.name.str,"clk")}.first
49
+ @rst = inputs.sort_by{|input| levenshtein_distance(input.name.str,"reset")}.first
50
+ puts "\t-most probable clk : #{@clk.name.str}"
51
+ puts "\t-most probable reset : #{@rst.name.str}"
52
+ @max_length_str=entity.ports.map{|port| port.name.str.size}.max
53
+ @excluded=[@clk,@rst]
54
+ end
55
+
56
+ def levenshtein_distance(s, t)
57
+ m = s.length
58
+ n = t.length
59
+ return m if n == 0
60
+ return n if m == 0
61
+ d = Array.new(m+1) {Array.new(n+1)}
62
+
63
+ (0..m).each {|i| d[i][0] = i}
64
+ (0..n).each {|j| d[0][j] = j}
65
+ (1..n).each do |j|
66
+ (1..m).each do |i|
67
+ d[i][j] = if s[i-1] == t[j-1] # adjust index into string
68
+ d[i-1][j-1] # no operation required
69
+ else
70
+ [ d[i-1][j]+1, # deletion
71
+ d[i][j-1]+1, # insertion
72
+ d[i-1][j-1]+1, # substitution
73
+ ].min
74
+ end
75
+ end
76
+ end
77
+ d[m][n]
78
+ end
79
+ end
80
+
81
+ end
@@ -0,0 +1,72 @@
1
+ -----------------------------------------------------------------
2
+ -- This file was generated automatically by Vertigo Ruby utility
3
+ -- date : <%=Time.now.strftime("(d/m/y) %d/%m/%Y %H:%M")%>
4
+ -- Author : Jean-Christophe Le Lann - 2014
5
+ -----------------------------------------------------------------
6
+ library ieee;
7
+ use ieee.std_logic_1164.all;
8
+ use ieee.numeric_std.all;
9
+ <%@supplemental_libs_h.each do |lib,packages|%>
10
+ library <%=lib%>;
11
+ <%packages.each do |package|%>
12
+ use <%=lib%>.<%=package%>.all;
13
+ <%end%>
14
+ <%end%>
15
+
16
+ entity <%=@tb_name%> is
17
+ end entity;
18
+
19
+ architecture bhv of <%=@tb_name%> is
20
+
21
+ constant HALF_PERIOD : time := 5 ns;
22
+
23
+ signal <%=clk.name.str%> : std_logic := '0';
24
+ signal <%=rst.name.str%> : std_logic := '0';
25
+
26
+ signal running : boolean := true;
27
+
28
+ procedure wait_cycles(n : natural) is
29
+ begin
30
+ for i in 1 to n loop
31
+ wait until rising_edge(clk);
32
+ end loop;
33
+ end procedure;
34
+
35
+ <%=@entity.ports.collect do |port|
36
+ " signal #{port.name.str.ljust(@max_length_str)} : #{port.type.str}" if not @excluded.include?(port)
37
+ end.compact.join(";\n")%>;
38
+
39
+ begin
40
+ -------------------------------------------------------------------
41
+ -- clock and reset
42
+ -------------------------------------------------------------------
43
+ reset_n <= '0','1' after 666 ns;
44
+
45
+ clk <= not(clk) after HALF_PERIOD when running else clk;
46
+
47
+ --------------------------------------------------------------------
48
+ -- Design Under Test
49
+ --------------------------------------------------------------------
50
+ dut : entity work.<%=@entity.name.str%>(<%=@arch.name.str%>)
51
+ <%=@generics%>
52
+ port map ( <%map=@entity.ports.collect do |port| "\t #{port.name.str} => #{port.name.str}" end%>
53
+ <%=map.join(",\n")%>
54
+ );
55
+
56
+ --------------------------------------------------------------------
57
+ -- sequential stimuli
58
+ --------------------------------------------------------------------
59
+ stim : process
60
+ begin
61
+ report "running testbench for <%=@entity.name.str%>(<%=@arch.name.str%>)";
62
+ report "waiting for asynchronous reset";
63
+ wait until reset_n='1';
64
+ wait_cycles(100);
65
+ report "applying stimuli...";
66
+ wait_cycles(100);
67
+ report "end of simulation";
68
+ running <=false;
69
+ wait;
70
+ end process;
71
+
72
+ end bhv;
@@ -0,0 +1,67 @@
1
+ module Vertigo
2
+
3
+ class Token
4
+ attr_accessor :kind,:val,:pos
5
+ def initialize tab
6
+ @kind,@val,@pos=*tab
7
+ end
8
+
9
+ def is_a? kind
10
+ case kind
11
+ when Symbol
12
+ return @kind==kind
13
+ when Array
14
+ for sym in kind
15
+ return true if @kind==sym
16
+ end
17
+ return false
18
+ else
19
+ raise "wrong type during lookahead"
20
+ end
21
+ end
22
+
23
+ def not_a? kind
24
+ result=self.is_a? kind
25
+ !result
26
+ end
27
+
28
+ def is_not_a? kind
29
+ case kind
30
+ when Symbol
31
+ return @kind!=kind
32
+ when Array
33
+ ret=true
34
+ for sym in kind
35
+ ret=false if @kind==sym
36
+ end
37
+ return ret
38
+ else
39
+ raise "wrong type during lookahead"
40
+ end
41
+ end
42
+
43
+ def accept visitor,args=nil
44
+ visitor.visitToken(self)
45
+ end
46
+
47
+ def self.create kind,str
48
+ Token.new [kind,str,[0,0]]
49
+ end
50
+
51
+ # def inspect
52
+ # "(#{@kind.to_s.ljust(15,' ')},'#{@val}',#{@pos})"
53
+ # end
54
+
55
+ def str
56
+ val
57
+ end
58
+
59
+ def clone
60
+ Token.new([@kind,@val,@pos])
61
+ end
62
+
63
+ def line
64
+ pos.first
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,3 @@
1
+ module Vertigo
2
+ VERSION="0.8.2"
3
+ end
@@ -0,0 +1,354 @@
1
+
2
+ - Root:
3
+ - design_unitS
4
+
5
+ - Comment:
6
+ - str
7
+
8
+ - Library:
9
+ - name
10
+
11
+ - Use:
12
+ - library
13
+ - package
14
+ - element
15
+
16
+ - Entity:
17
+ - name
18
+ - genericS
19
+ - portS
20
+
21
+ - Generic:
22
+ - name
23
+ - type
24
+ - init
25
+
26
+ - Input:
27
+ - name
28
+ - type
29
+ - init
30
+
31
+ - Output:
32
+ - name
33
+ - type
34
+ - init
35
+
36
+ - InOut:
37
+ - name
38
+ - type
39
+ - init
40
+ #===================
41
+ - Package:
42
+ - name
43
+ - declS
44
+
45
+ - PackageBody:
46
+ - name
47
+ - declS
48
+
49
+ - ProcedureDecl:
50
+ - name
51
+ - formal_argS
52
+ - declS
53
+ - body
54
+
55
+ - FormalArg:
56
+ - signal
57
+ - direction
58
+ - name
59
+ - type
60
+
61
+ - ProcedureCall:
62
+ - name
63
+ - actual_argS
64
+ #====================
65
+ - Architecture:
66
+ - name
67
+ - entity_name
68
+ - declS
69
+ - body
70
+
71
+ - Body:
72
+ - elementS
73
+
74
+ - Process:
75
+ - sensitivity
76
+ - declS
77
+ - body
78
+
79
+ - Sensitivity:
80
+ - elementS
81
+
82
+ - EntityInstance:
83
+ - full_name
84
+ - arch_name
85
+ - generic_map
86
+ - port_map
87
+
88
+ - ComponentDecl:
89
+ - name
90
+ - genericS
91
+ - portS
92
+
93
+ - ComponentInstance:
94
+ - name
95
+ - generic_map
96
+ - port_map
97
+
98
+ - PortMap:
99
+ - elementS
100
+
101
+ - GenericMap:
102
+ - elementS
103
+
104
+ - Map:
105
+ - lhs
106
+ - rhs
107
+
108
+ - AttributeDecl:
109
+ - name
110
+ - type
111
+
112
+ - AttributeSpec:
113
+ - name
114
+ - entity_spec
115
+ - expr
116
+
117
+ - EntitySpec:
118
+ - elementS
119
+ - entity_class
120
+
121
+ #======= statements =====
122
+
123
+ - SigAssign:
124
+ - lhs
125
+ - rhs
126
+
127
+ - varAssign:
128
+ - lhs
129
+ - rhs
130
+
131
+ - wait:
132
+ - until_
133
+ - for_
134
+
135
+ - If:
136
+ - cond
137
+ - body
138
+ - elsifS
139
+ - else_
140
+
141
+ - Elsif:
142
+ - cond
143
+ - body
144
+
145
+ - Else:
146
+ - body
147
+
148
+ - Case:
149
+ - expr
150
+ - whenS
151
+
152
+ - CaseWhen:
153
+ - expr
154
+ - body
155
+
156
+ - Alternative:
157
+ - elementS
158
+
159
+ - NullStmt:
160
+ - dummy
161
+
162
+ - Assert:
163
+ - cond
164
+ - report
165
+ - severity
166
+
167
+ - Report:
168
+ - expr
169
+ - severity
170
+
171
+ - Severity:
172
+ - type
173
+
174
+ - Return:
175
+ - expr
176
+
177
+ - WithSelect:
178
+ - with_expr
179
+ - assigned
180
+ - selected_whenS
181
+
182
+ - SelectedWhen:
183
+ - lhs
184
+ - rhs
185
+
186
+ - IfGenerate:
187
+ - cond
188
+ - body
189
+
190
+ - ForGenerate:
191
+ - index
192
+ - range
193
+ - declS
194
+ - body
195
+
196
+ - IsolatedRange:
197
+ - lhs
198
+ - rhs
199
+
200
+ #====================
201
+ - TypeDecl:
202
+ - name
203
+ - spec
204
+
205
+ - SubTypeDecl:
206
+ - name
207
+ - spec
208
+
209
+ - EnumDecl:
210
+ - elementS
211
+
212
+ - RecordDecl:
213
+ - elementS
214
+
215
+ - RecordItem:
216
+ - name
217
+ - type
218
+
219
+ - ArrayDecl:
220
+ - dim_declS
221
+ - type
222
+
223
+ - ArrayDimDecl:
224
+ - type_mark
225
+ - range
226
+
227
+ - Constant:
228
+ - name
229
+ - type
230
+ - expr
231
+
232
+ - Signal:
233
+ - name
234
+ - type
235
+ - init
236
+
237
+ - Variable:
238
+ - name
239
+ - type
240
+ - init
241
+
242
+ - Alias:
243
+ - designator
244
+ - type
245
+ - name
246
+ - signature
247
+
248
+ - StdType:
249
+ - ident
250
+
251
+ - RangedType:
252
+ - type
253
+ - range
254
+
255
+ - NamedType:
256
+ - ident
257
+
258
+ - ArrayType:
259
+ - name
260
+ - discrete_rangeS
261
+
262
+ - DiscreteRange:
263
+ - lhs
264
+ - dir
265
+ - rhs
266
+
267
+ # === expressions
268
+ - Parenth:
269
+ - expr
270
+
271
+ - Waveform:
272
+ - elementS
273
+
274
+ - CondExpr:
275
+ - whenS
276
+ - else_
277
+
278
+ - When:
279
+ - expr
280
+ - cond
281
+
282
+ - Binary:
283
+ - lhs
284
+ - op
285
+ - rhs
286
+
287
+ - After:
288
+ - lhs
289
+ - rhs
290
+
291
+ - Timed:
292
+ - lhs
293
+ - rhs
294
+
295
+ - Attributed:
296
+ - lhs
297
+ - rhs
298
+
299
+ - Concat:
300
+ - lhs
301
+ - rhs
302
+
303
+ - Qualified:
304
+ - lhs
305
+ - rhs
306
+
307
+ - Sliced:
308
+ - expr
309
+ - lhs
310
+ - dir
311
+ - rhs
312
+
313
+ # === terms
314
+ - ident:
315
+ - tok
316
+
317
+ - IntLit:
318
+ - tok
319
+
320
+ - CharLit:
321
+ - tok
322
+
323
+ - BoolLit:
324
+ - tok
325
+
326
+ - selectedName:
327
+ - lhs
328
+ - rhs
329
+
330
+ - FuncProtoDecl:
331
+ - name
332
+ - formal_argS
333
+ - return_type
334
+
335
+ - FuncDecl:
336
+ - name
337
+ - formal_argS
338
+ - return_type
339
+ - decls
340
+ - body
341
+
342
+ - FuncCall:
343
+ - name
344
+ - actual_argS
345
+
346
+ - Aggregate:
347
+ - elementS
348
+
349
+ - Label:
350
+ - ident
351
+
352
+ - Assoc:
353
+ - lhs
354
+ - rhs