origen_verilog 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/commands.rb +5 -0
- data/config/version.rb +1 -1
- data/grammars/verilog.rb +6 -6
- data/lib/origen_verilog/commands/parse.rb +68 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1be3a1740eb02ddf52433ffdf8d3b6eb3ca30657
|
4
|
+
data.tar.gz: d0d8602e57ecb3eeb04d1dbd0919bb3d36f7a252
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c4f3a008af2790d2479c594f5cb777fa7903fea17df2f1ad3daa1df728bf52e9ec498baaaf1ce5867c4aa7027b8ffb96c2eaa90475236af1f687d4a75de9036
|
7
|
+
data.tar.gz: a2468d8aeb390439016a517c1eb5bd55707f0c2bfa1addbcc801e69a88fdfdc07650600da81194c64806406ce0a30b221be9074397120398e21017494c26a72b
|
data/config/commands.rb
CHANGED
@@ -34,6 +34,10 @@ when "build"
|
|
34
34
|
end
|
35
35
|
exit 0
|
36
36
|
|
37
|
+
when "parse"
|
38
|
+
require "origen_verilog/commands/parse"
|
39
|
+
exit 0
|
40
|
+
|
37
41
|
## Example of how to make a command to run unit tests, this simply invokes RSpec on
|
38
42
|
## the spec directory
|
39
43
|
when "specs"
|
@@ -80,6 +84,7 @@ else
|
|
80
84
|
# origen -h, you can do this by assigning the required text to @application_commands
|
81
85
|
# before handing control back to Origen.
|
82
86
|
@application_commands = <<-EOT
|
87
|
+
parse Command to test/debug the verilog parser (similar to the sim:build command)
|
83
88
|
tags Build a tags file for this app
|
84
89
|
build Build/compile the latest grammar files
|
85
90
|
specs Run the specs (tests), -c will enable coverage
|
data/config/version.rb
CHANGED
data/grammars/verilog.rb
CHANGED
@@ -1247,11 +1247,11 @@ module OrigenVerilog
|
|
1247
1247
|
|
1248
1248
|
i0, s0 = index, []
|
1249
1249
|
i1 = index
|
1250
|
-
if (match_len = has_terminal?("
|
1251
|
-
r2 =
|
1250
|
+
if (match_len = has_terminal?("100", false, index))
|
1251
|
+
r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
|
1252
1252
|
@index += match_len
|
1253
1253
|
else
|
1254
|
-
terminal_parse_failure('"
|
1254
|
+
terminal_parse_failure('"100"')
|
1255
1255
|
r2 = nil
|
1256
1256
|
end
|
1257
1257
|
if r2
|
@@ -1269,11 +1269,11 @@ module OrigenVerilog
|
|
1269
1269
|
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
|
1270
1270
|
r1 = r3
|
1271
1271
|
else
|
1272
|
-
if (match_len = has_terminal?("
|
1273
|
-
r4 =
|
1272
|
+
if (match_len = has_terminal?("1", false, index))
|
1273
|
+
r4 = true
|
1274
1274
|
@index += match_len
|
1275
1275
|
else
|
1276
|
-
terminal_parse_failure('"
|
1276
|
+
terminal_parse_failure('"1"')
|
1277
1277
|
r4 = nil
|
1278
1278
|
end
|
1279
1279
|
if r4
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'origen_verilog'
|
3
|
+
|
4
|
+
options = { source_dirs: [] }
|
5
|
+
|
6
|
+
# App options are options that the application can supply to extend this command
|
7
|
+
app_options = @application_options || []
|
8
|
+
opt_parser = OptionParser.new do |opts|
|
9
|
+
opts.banner = <<-EOT
|
10
|
+
Parse the given top-level verilog file and convert the top-level module to an Origen top-level
|
11
|
+
model.
|
12
|
+
Usage: origen parse TOP_LEVEL_RTL_FILE [options]
|
13
|
+
EOT
|
14
|
+
opts.on('-t', '--top NAME', String, 'Specify the top-level Verilog module name if OrigenSim can\'t work it out') { |t| options[:top_level_name] = t }
|
15
|
+
opts.on('-s', '--source_dir PATH', 'Directories to look for include files in (the directory containing the top-level is already considered)') do |path|
|
16
|
+
options[:source_dirs] << path
|
17
|
+
end
|
18
|
+
opts.on('-d', '--debugger', 'Enable the debugger') { options[:debugger] = true }
|
19
|
+
app_options.each do |app_option|
|
20
|
+
opts.on(*app_option) {}
|
21
|
+
end
|
22
|
+
opts.separator ''
|
23
|
+
opts.on('-h', '--help', 'Show this message') { puts opts; exit 0 }
|
24
|
+
end
|
25
|
+
|
26
|
+
opt_parser.parse! ARGV
|
27
|
+
|
28
|
+
unless ARGV.size > 0
|
29
|
+
puts 'You must supply a path to the top-level RTL file'
|
30
|
+
exit 1
|
31
|
+
end
|
32
|
+
rtl_top = ARGV.first
|
33
|
+
unless File.exist?(rtl_top)
|
34
|
+
puts "File does not exist: #{rtl_top}"
|
35
|
+
exit 1
|
36
|
+
end
|
37
|
+
|
38
|
+
ast = OrigenVerilog.parse_file(rtl_top)
|
39
|
+
|
40
|
+
unless ast
|
41
|
+
puts 'Sorry, but the given top-level RTL file failed to parse'
|
42
|
+
exit 1
|
43
|
+
end
|
44
|
+
|
45
|
+
candidates = ast.top_level_modules
|
46
|
+
candidates = ast.modules if candidates.empty?
|
47
|
+
|
48
|
+
if candidates.size == 0
|
49
|
+
puts "Sorry, couldn't find any Verilog module declarations in that file"
|
50
|
+
exit 1
|
51
|
+
elsif candidates.size > 1
|
52
|
+
if options[:top_level_name]
|
53
|
+
mod = candidates.find { |c| c.name == options[:top_level_name] }
|
54
|
+
end
|
55
|
+
unless mod
|
56
|
+
puts "Sorry, couldn't work out what the top-level module is, please help by running again and specifying it via the --top switch with one of the following names:"
|
57
|
+
candidates.each do |c|
|
58
|
+
puts " #{c.name}"
|
59
|
+
end
|
60
|
+
exit 1
|
61
|
+
end
|
62
|
+
else
|
63
|
+
mod = candidates.first
|
64
|
+
end
|
65
|
+
|
66
|
+
rtl_top_module = mod.name
|
67
|
+
|
68
|
+
mod.to_top_level # Creates dut
|
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.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ast
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- grammars/preprocessor.rb
|
54
54
|
- grammars/verilog.rb
|
55
55
|
- lib/origen_verilog.rb
|
56
|
+
- lib/origen_verilog/commands/parse.rb
|
56
57
|
- lib/origen_verilog/node.rb
|
57
58
|
- lib/origen_verilog/parser.rb
|
58
59
|
- lib/origen_verilog/preprocessor/node.rb
|
@@ -90,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
91
|
version: 1.8.11
|
91
92
|
requirements: []
|
92
93
|
rubyforge_project:
|
93
|
-
rubygems_version: 2.6.
|
94
|
+
rubygems_version: 2.6.7
|
94
95
|
signing_key:
|
95
96
|
specification_version: 4
|
96
97
|
summary: A parser and generator for Verilog (IEEE 1364)
|