vertigo_vhdl 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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