origen_verilog 0.2.2 → 0.3.0
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.
- checksums.yaml +4 -4
- data/config/version.rb +2 -2
- data/grammars/verilog.rb +113 -47
- data/lib/origen_verilog.rb +6 -2
- data/lib/origen_verilog/top_level.rb +4 -2
- data/lib/origen_verilog/verilog/node.rb +29 -6
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46d8c90c2eace5e9de51b9391ae680e63107604e
|
4
|
+
data.tar.gz: e15f496480ad467f7c472c1179d5d7376958b6b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c92146efefda632b524ed0e7aac52c0c499d12e23398fb33abd2f596ffc8164b0c5cf035f18d17de2daa75ec03154dd2b7e8411c277140593014c44e3c37f1e
|
7
|
+
data.tar.gz: d7c47379ab7e2eba83b5637166f956f970feeffaac0fe1f299d35f478316dda88e4a477ce8c46b59895fc5d342d65668330812208cc8db17e24771110da7cf82
|
data/config/version.rb
CHANGED
data/grammars/verilog.rb
CHANGED
@@ -2335,6 +2335,72 @@ module OrigenVerilog
|
|
2335
2335
|
r0
|
2336
2336
|
end
|
2337
2337
|
|
2338
|
+
module ModuleItem0
|
2339
|
+
def port_declaration
|
2340
|
+
elements[0]
|
2341
|
+
end
|
2342
|
+
|
2343
|
+
def s
|
2344
|
+
elements[1]
|
2345
|
+
end
|
2346
|
+
|
2347
|
+
end
|
2348
|
+
|
2349
|
+
def _nt_module_item
|
2350
|
+
start_index = index
|
2351
|
+
if node_cache[:module_item].has_key?(index)
|
2352
|
+
cached = node_cache[:module_item][index]
|
2353
|
+
if cached
|
2354
|
+
node_cache[:module_item][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
2355
|
+
@index = cached.interval.end
|
2356
|
+
end
|
2357
|
+
return cached
|
2358
|
+
end
|
2359
|
+
|
2360
|
+
i0 = index
|
2361
|
+
i1, s1 = index, []
|
2362
|
+
r2 = _nt_port_declaration
|
2363
|
+
s1 << r2
|
2364
|
+
if r2
|
2365
|
+
r3 = _nt_s
|
2366
|
+
s1 << r3
|
2367
|
+
if r3
|
2368
|
+
if (match_len = has_terminal?(";", false, index))
|
2369
|
+
r4 = true
|
2370
|
+
@index += match_len
|
2371
|
+
else
|
2372
|
+
terminal_parse_failure('";"')
|
2373
|
+
r4 = nil
|
2374
|
+
end
|
2375
|
+
s1 << r4
|
2376
|
+
end
|
2377
|
+
end
|
2378
|
+
if s1.last
|
2379
|
+
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
|
2380
|
+
r1.extend(ModuleItem0)
|
2381
|
+
else
|
2382
|
+
@index = i1
|
2383
|
+
r1 = nil
|
2384
|
+
end
|
2385
|
+
if r1
|
2386
|
+
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
2387
|
+
r0 = r1
|
2388
|
+
else
|
2389
|
+
r5 = _nt_non_port_module_item
|
2390
|
+
if r5
|
2391
|
+
r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
|
2392
|
+
r0 = r5
|
2393
|
+
else
|
2394
|
+
@index = i0
|
2395
|
+
r0 = nil
|
2396
|
+
end
|
2397
|
+
end
|
2398
|
+
|
2399
|
+
node_cache[:module_item][start_index] = r0
|
2400
|
+
|
2401
|
+
r0
|
2402
|
+
end
|
2403
|
+
|
2338
2404
|
module ModuleOrGenerateItem0
|
2339
2405
|
def s1
|
2340
2406
|
elements[0]
|
@@ -7738,38 +7804,38 @@ module OrigenVerilog
|
|
7738
7804
|
end
|
7739
7805
|
|
7740
7806
|
module VariableType0
|
7741
|
-
def
|
7807
|
+
def variable_identifier
|
7742
7808
|
elements[0]
|
7743
7809
|
end
|
7744
7810
|
|
7745
|
-
def
|
7811
|
+
def s1
|
7746
7812
|
elements[1]
|
7747
7813
|
end
|
7748
|
-
end
|
7749
7814
|
|
7750
|
-
|
7751
|
-
|
7752
|
-
elements[0]
|
7815
|
+
def s2
|
7816
|
+
elements[3]
|
7753
7817
|
end
|
7754
7818
|
|
7819
|
+
def constant_expression
|
7820
|
+
elements[4]
|
7821
|
+
end
|
7755
7822
|
end
|
7756
7823
|
|
7757
|
-
module
|
7758
|
-
def
|
7824
|
+
module VariableType1
|
7825
|
+
def s
|
7759
7826
|
elements[0]
|
7760
7827
|
end
|
7761
7828
|
|
7762
|
-
def
|
7829
|
+
def dimension
|
7763
7830
|
elements[1]
|
7764
7831
|
end
|
7832
|
+
end
|
7765
7833
|
|
7766
|
-
|
7767
|
-
|
7834
|
+
module VariableType2
|
7835
|
+
def variable_identifier
|
7836
|
+
elements[0]
|
7768
7837
|
end
|
7769
7838
|
|
7770
|
-
def constant_expression
|
7771
|
-
elements[4]
|
7772
|
-
end
|
7773
7839
|
end
|
7774
7840
|
|
7775
7841
|
module VariableType3
|
@@ -7794,34 +7860,30 @@ module OrigenVerilog
|
|
7794
7860
|
r2 = _nt_variable_identifier
|
7795
7861
|
s1 << r2
|
7796
7862
|
if r2
|
7797
|
-
|
7798
|
-
|
7799
|
-
|
7800
|
-
|
7801
|
-
|
7802
|
-
|
7803
|
-
r6 = _nt_dimension
|
7804
|
-
s4 << r6
|
7805
|
-
end
|
7806
|
-
if s4.last
|
7807
|
-
r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
|
7808
|
-
r4.extend(VariableType0)
|
7863
|
+
r3 = _nt_s
|
7864
|
+
s1 << r3
|
7865
|
+
if r3
|
7866
|
+
if (match_len = has_terminal?("=", false, index))
|
7867
|
+
r4 = true
|
7868
|
+
@index += match_len
|
7809
7869
|
else
|
7810
|
-
|
7870
|
+
terminal_parse_failure('"="')
|
7811
7871
|
r4 = nil
|
7812
7872
|
end
|
7873
|
+
s1 << r4
|
7813
7874
|
if r4
|
7814
|
-
|
7815
|
-
|
7816
|
-
|
7875
|
+
r5 = _nt_s
|
7876
|
+
s1 << r5
|
7877
|
+
if r5
|
7878
|
+
r6 = _nt_constant_expression
|
7879
|
+
s1 << r6
|
7880
|
+
end
|
7817
7881
|
end
|
7818
7882
|
end
|
7819
|
-
r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
|
7820
|
-
s1 << r3
|
7821
7883
|
end
|
7822
7884
|
if s1.last
|
7823
7885
|
r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
|
7824
|
-
r1.extend(
|
7886
|
+
r1.extend(VariableType0)
|
7825
7887
|
else
|
7826
7888
|
@index = i1
|
7827
7889
|
r1 = nil
|
@@ -7836,26 +7898,30 @@ module OrigenVerilog
|
|
7836
7898
|
r8 = _nt_variable_identifier
|
7837
7899
|
s7 << r8
|
7838
7900
|
if r8
|
7839
|
-
|
7840
|
-
|
7841
|
-
|
7842
|
-
|
7843
|
-
|
7844
|
-
|
7901
|
+
s9, i9 = [], index
|
7902
|
+
loop do
|
7903
|
+
i10, s10 = index, []
|
7904
|
+
r11 = _nt_s
|
7905
|
+
s10 << r11
|
7906
|
+
if r11
|
7907
|
+
r12 = _nt_dimension
|
7908
|
+
s10 << r12
|
7909
|
+
end
|
7910
|
+
if s10.last
|
7911
|
+
r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
|
7912
|
+
r10.extend(VariableType1)
|
7845
7913
|
else
|
7846
|
-
|
7914
|
+
@index = i10
|
7847
7915
|
r10 = nil
|
7848
7916
|
end
|
7849
|
-
s7 << r10
|
7850
7917
|
if r10
|
7851
|
-
|
7852
|
-
|
7853
|
-
|
7854
|
-
r12 = _nt_constant_expression
|
7855
|
-
s7 << r12
|
7856
|
-
end
|
7918
|
+
s9 << r10
|
7919
|
+
else
|
7920
|
+
break
|
7857
7921
|
end
|
7858
7922
|
end
|
7923
|
+
r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
|
7924
|
+
s7 << r9
|
7859
7925
|
end
|
7860
7926
|
if s7.last
|
7861
7927
|
r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
|
data/lib/origen_verilog.rb
CHANGED
@@ -26,9 +26,13 @@ module OrigenVerilog
|
|
26
26
|
|
27
27
|
# Returns an AST for the given file
|
28
28
|
def self.parse_file(file, options = {})
|
29
|
+
top_dir = Pathname.new(file).dirname
|
30
|
+
options[:source_dirs] ||= []
|
31
|
+
options[:source_dirs] << top_dir unless options[:source_dirs].include?(top_dir)
|
29
32
|
# Evaluates all compiler directives
|
30
|
-
ast = Preprocessor::Parser.parse_file(file).process
|
33
|
+
ast = Preprocessor::Parser.parse_file(file, options).process(options)
|
34
|
+
|
31
35
|
# Now parse as verilog
|
32
|
-
Verilog::Parser.parse(ast.to_s)
|
36
|
+
Verilog::Parser.parse(ast.to_s, options)
|
33
37
|
end
|
34
38
|
end
|
@@ -8,7 +8,6 @@ module OrigenVerilog
|
|
8
8
|
@name = options[:ast].to_a[0]
|
9
9
|
|
10
10
|
options[:ast].pins.each do |node|
|
11
|
-
name = node.to_a.last
|
12
11
|
if node.type == :input_declaration
|
13
12
|
direction = :input
|
14
13
|
elsif node.type == :ouput_declaration
|
@@ -21,7 +20,10 @@ module OrigenVerilog
|
|
21
20
|
else
|
22
21
|
size = 1
|
23
22
|
end
|
24
|
-
|
23
|
+
n = node.to_a.dup
|
24
|
+
while n.last.is_a?(String)
|
25
|
+
add_pin n.pop, direction: direction, size: size
|
26
|
+
end
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
@@ -11,22 +11,45 @@ module OrigenVerilog
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
# Returns an array containing the names of all top-level modules in
|
15
|
-
# the AST
|
16
|
-
def module_names
|
17
|
-
find_all(:module_declaration).map { |n| n.to_a[0] }
|
18
|
-
end
|
19
|
-
|
20
14
|
# Returns an array containing the AST node for all modules in the AST
|
21
15
|
def modules
|
22
16
|
find_all(:module_declaration)
|
23
17
|
end
|
24
18
|
|
19
|
+
# Similar to the modules method, but removes any modules which are instantiated
|
20
|
+
# within other modules, therefore leaving only those which could be considered top
|
21
|
+
# level
|
22
|
+
def top_level_modules
|
23
|
+
mods = modules
|
24
|
+
modules.reject { |m| mods.any? { |mod| mod.instantiates?(m) } }
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns true if the node instantiates the given module node or module name
|
28
|
+
def instantiates?(module_or_name)
|
29
|
+
name = module_or_name.respond_to?(:to_a) ? module_or_name.to_a[0] : module_or_name
|
30
|
+
instantiations = find_all(:module_instantiation)
|
31
|
+
if instantiations.empty?
|
32
|
+
false
|
33
|
+
else
|
34
|
+
instantiations.any? { |i| i.to_a[0].to_s == name.to_s }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
25
38
|
# Returns the AST node for the module with the given name
|
26
39
|
def module(name)
|
27
40
|
find_all(:module_declaration).find { |n| n.to_a[0].to_s == name.to_s }
|
28
41
|
end
|
29
42
|
|
43
|
+
# Returns the name of the node, will raise an error if called on a node type for
|
44
|
+
# which the name extraction is not yet implemented
|
45
|
+
def name
|
46
|
+
if type == :module_declaration
|
47
|
+
to_a[0]
|
48
|
+
else
|
49
|
+
fail "Don't know how to extract the name from a #{type} node yet!"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
30
53
|
# Returns an array containing all input, output and inout AST nodes
|
31
54
|
def pins
|
32
55
|
find_all(:input_declaration, :output_declaration, :inout_declaration)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_verilog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ast
|
@@ -90,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
version: 1.8.11
|
91
91
|
requirements: []
|
92
92
|
rubyforge_project:
|
93
|
-
rubygems_version: 2.
|
93
|
+
rubygems_version: 2.6.8
|
94
94
|
signing_key:
|
95
95
|
specification_version: 4
|
96
96
|
summary: A parser and generator for Verilog (IEEE 1364)
|