soc_maker 0.1.1
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 +7 -0
- data/.gitignore +5 -0
- data/History.txt +4 -0
- data/LICENSE +678 -0
- data/README.rdoc +228 -0
- data/Rakefile +46 -0
- data/bin/soc_maker_cli +80 -0
- data/bin/soc_maker_parser +85 -0
- data/core_lib/cores/adv_debug_sys/01_adv_debug_sys.yaml +245 -0
- data/core_lib/cores/or1200_rel2/01_or1200.yaml +208 -0
- data/core_lib/cores/or1200_rel2/02_or1200_files.yaml +421 -0
- data/core_lib/cores/or1200_rel2/03_or1200_sparam.yaml +188 -0
- data/core_lib/cores/or1200_rel2/or1200_defines.v.in +1799 -0
- data/core_lib/cores/ram_wb/ram_wb.yaml +102 -0
- data/core_lib/cores/ram_wb/ram_wb_b3.v.in +259 -0
- data/core_lib/cores/uart16550/01_uart16550.yaml +99 -0
- data/core_lib/cores/uart16550/02_uart16550_files.yaml +70 -0
- data/core_lib/cores/wb_connect/minsoc_tc_top.v +1802 -0
- data/core_lib/cores/wb_connect/wb_connect.yaml +733 -0
- data/core_lib/inc.yaml +13 -0
- data/core_lib/interfaces/clk_rst/clk.yaml +9 -0
- data/core_lib/interfaces/clk_rst/rst.yaml +9 -0
- data/core_lib/interfaces/clk_rst/single.yaml +7 -0
- data/core_lib/interfaces/debug/debug.yaml +32 -0
- data/core_lib/interfaces/jtag/jtag.yaml +13 -0
- data/core_lib/interfaces/jtag/jtag_tap.yaml +22 -0
- data/core_lib/interfaces/power/or_power.yaml +25 -0
- data/core_lib/interfaces/uart/uart.yaml +21 -0
- data/core_lib/interfaces/wishbone/wishbone_ma_b3.yaml +54 -0
- data/core_lib/interfaces/wishbone/wishbone_sl_b3.yaml +51 -0
- data/doc/class_arch.uml +5113 -0
- data/doc/fig/hierarchical.svg +273 -0
- data/examples/or1200_test/or1200_test.cmd +78 -0
- data/examples/or1200_test/or1200_test.rb +136 -0
- data/examples/or1200_test/rtl/or1200_test_top.vhd +274 -0
- data/examples/or1200_test/rtl/s3astarter.ucf +10 -0
- data/examples/or1200_test/rtl/xilinx_internal_jtag.v +438 -0
- data/examples/or1200_test/rtl/xilinx_internal_jtag_options.v +12 -0
- data/examples/or1200_test/sw/README.txt +35 -0
- data/examples/or1200_test/sw/bin2vmem.c +159 -0
- data/examples/or1200_test/sw/board.h +24 -0
- data/examples/or1200_test/sw/compile.sh +18 -0
- data/examples/or1200_test/sw/except.S +152 -0
- data/examples/or1200_test/sw/int.c +79 -0
- data/examples/or1200_test/sw/int.h +14 -0
- data/examples/or1200_test/sw/interconnect.h +17 -0
- data/examples/or1200_test/sw/interrupts.c +14 -0
- data/examples/or1200_test/sw/main.c +16 -0
- data/examples/or1200_test/sw/or1200.h +454 -0
- data/examples/or1200_test/sw/orp.ld +60 -0
- data/examples/or1200_test/sw/reset.S +112 -0
- data/examples/or1200_test/sw/support.c +123 -0
- data/examples/or1200_test/sw/support.h +33 -0
- data/examples/or1200_test/sw/tick.c +30 -0
- data/examples/or1200_test/sw/tick.h +2 -0
- data/examples/or1200_test/sw/uart.c +136 -0
- data/examples/or1200_test/sw/uart.h +126 -0
- data/lib/soc_maker.rb +324 -0
- data/lib/soc_maker/cli.rb +544 -0
- data/lib/soc_maker/conf.rb +310 -0
- data/lib/soc_maker/core_def.rb +579 -0
- data/lib/soc_maker/core_inst.rb +305 -0
- data/lib/soc_maker/err.rb +211 -0
- data/lib/soc_maker/hdl_coder.rb +500 -0
- data/lib/soc_maker/hdl_file.rb +166 -0
- data/lib/soc_maker/hdl_parser.rb +431 -0
- data/lib/soc_maker/ifc_def.rb +193 -0
- data/lib/soc_maker/ifc_port.rb +133 -0
- data/lib/soc_maker/ifc_spc.rb +180 -0
- data/lib/soc_maker/lib.rb +289 -0
- data/lib/soc_maker/lib_inc.rb +109 -0
- data/lib/soc_maker/parameter.rb +149 -0
- data/lib/soc_maker/soc_def.rb +847 -0
- data/lib/soc_maker/sparameter.rb +289 -0
- data/lib/soc_maker/version.rb +8 -0
- data/lib/soc_maker/ypp.rb +130 -0
- data/soc_maker.gemspec +28 -0
- data/spec/cli_cmds1.txt +39 -0
- data/spec/cli_spec.rb +49 -0
- data/spec/conf_spec.rb +44 -0
- data/spec/core_def_spec.rb +503 -0
- data/spec/core_inst_spec.rb +169 -0
- data/spec/hdl_file_spec.rb +154 -0
- data/spec/hdl_parser_spec.rb +201 -0
- data/spec/ifc_def_spec.rb +121 -0
- data/spec/ifc_port_spec.rb +92 -0
- data/spec/ifc_spc_spec.rb +196 -0
- data/spec/lib_inc_spec.rb +99 -0
- data/spec/lib_spec.rb +209 -0
- data/spec/parameter_spec.rb +86 -0
- data/spec/soc_def_spec.rb +611 -0
- data/spec/soc_maker_spec.rb +7 -0
- data/spec/sparameter_spec.rb +182 -0
- data/spec/spec_helper.rb +78 -0
- data/spec/test_soc.yaml +105 -0
- data/spec/test_soc2.yaml +60 -0
- data/spec/test_soc_lib/cores/core_A_rel1/00_core_a.yaml +75 -0
- data/spec/test_soc_lib/cores/core_A_rel1/01_core_a.yaml +57 -0
- data/spec/test_soc_lib/cores/core_A_rel1/core_a.vhd +29 -0
- data/spec/test_soc_lib/cores/core_A_rel1/core_a_pkg.vhd.src +3 -0
- data/spec/test_soc_lib/cores/core_A_rel1/core_a_pkg2.vhd.src +4 -0
- data/spec/test_soc_lib/cores/core_A_rel1/core_a_pkg3.v.src +6 -0
- data/spec/test_soc_lib/cores/core_B_rel1/core_b.vhd +25 -0
- data/spec/test_soc_lib/cores/core_B_rel1/core_b.yaml +36 -0
- data/spec/test_soc_lib/cores/core_C_v1/core_C.vhd +57 -0
- data/spec/test_soc_lib/cores/core_C_v1/core_c.yaml +42 -0
- data/spec/test_soc_lib/cores/soc_A/soc_A.yaml +12 -0
- data/spec/test_soc_lib/cores/soc_maker_include.yaml +6 -0
- data/spec/test_soc_lib/ifcs/core_AB_ifc/bidir_ifc.yaml +19 -0
- data/spec/test_soc_lib/ifcs/core_AB_ifc/core_AB_ifc.yaml +15 -0
- data/spec/test_soc_lib/ifcs/core_AB_ifc/top_ifc.yaml +9 -0
- data/spec/test_soc_lib/soc_maker_include.yaml +4 -0
- data/spec/yaml_examples.rb +367 -0
- data/spec/ypp_spec.rb +156 -0
- data/test/test_soc_maker.rb +0 -0
- metadata +255 -0
data/README.rdoc
ADDED
@@ -0,0 +1,228 @@
|
|
1
|
+
= System-on-Chip Maker (soc_maker)
|
2
|
+
===========
|
3
|
+
|
4
|
+
The System-on-Chip (SoC) Maker is a tool to design and create SoCs
|
5
|
+
in a simple way, written in Ruby.
|
6
|
+
|
7
|
+
PLEASE NOTE: THIS SOFTWARE IS IN DEVELOPMENT AND HIGHLY EXPERIMENTAL!!
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
== Current Features
|
12
|
+
|
13
|
+
* All configuration files are YAML based
|
14
|
+
(see http://en.wikipedia.org/wiki/YAML)
|
15
|
+
* Hierarchical systems can be designed
|
16
|
+
* Usage of an IP core library
|
17
|
+
* A CLI for an easy interaction
|
18
|
+
(not completed, needs to be re-designed or removed, interaction is not that easy)
|
19
|
+
* Ruby interface to interact with the soc_maker on a lower level
|
20
|
+
* VHDL output
|
21
|
+
* parameterization of cores
|
22
|
+
* instance parameterization (vhdl-generics/verilog-parameters)
|
23
|
+
* global/static parameterization (vhdl-packages/verilog-includes)
|
24
|
+
|
25
|
+
|
26
|
+
== Install
|
27
|
+
* from git:
|
28
|
+
|
29
|
+
git clone https://github.com/feddischson/soc_maker.git
|
30
|
+
cd soc_maker
|
31
|
+
git checkout tags/v0.1.0 # please adapt version if necessary
|
32
|
+
# see https://github.com/feddischson/soc_maker/releases
|
33
|
+
gem build soc_maker.gemspec
|
34
|
+
gem install soc_maker-0.1.0.gem # requires ruby >= 2.0
|
35
|
+
|
36
|
+
|
37
|
+
== TODOs
|
38
|
+
* User-Guide
|
39
|
+
- YAML API documentation
|
40
|
+
* API version check
|
41
|
+
|
42
|
+
== Planed Features
|
43
|
+
* Graphical User Interface (GUI)
|
44
|
+
* Import wizzard: should scan IP core sources and suggest configuration
|
45
|
+
* Verilog output
|
46
|
+
* Plugin-interface
|
47
|
+
* Synthesis and Simulation support plugins
|
48
|
+
* More cores
|
49
|
+
|
50
|
+
== Status
|
51
|
+
A first "Hellow World" SOC has been created, simulated, synthesized and tested
|
52
|
+
on a Spartan-3AN starter kit board.
|
53
|
+
The system consists of an OpenRISC CPU, some on-chip memory and a UART core
|
54
|
+
(see ./examples/or1200_test).
|
55
|
+
|
56
|
+
Furthermore, some dummy cores have been assembled to a hierarchical system,
|
57
|
+
where a SOC contains a few cores and a sub-SOC.
|
58
|
+
|
59
|
+
The following cores are integrated into the SOC-Maker core library and can be used:
|
60
|
+
* the Advanced Debug System (http://opencores.org/project,adv_debug_sys)
|
61
|
+
* the OR1200 OpenRISC processor (http://opencores.org/or1k/Main_Page)
|
62
|
+
* the ram_wb from the openrisc project (http://opencores.org/ocsvn/openrisc/openrisc/trunk/orpsocv2/rtl/verilog/ram_wb)
|
63
|
+
* the UART16550 module (http://opencores.org/project,uart16550)
|
64
|
+
* a wishbone bus connection from the min-soc project (http://www.minsoc.com/)
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
== Motivation
|
69
|
+
The motivation of this project is the need of an open-source application
|
70
|
+
to create system-on-chips easily and fast on a higher level than vhdl or verilog.
|
71
|
+
By creating a generic application, it can support a wide range of
|
72
|
+
processors, cores, controllers and bus-topologies.
|
73
|
+
By using the SoC-Maker, it should be easy for a system-designer to assemble
|
74
|
+
multiple IP-cores together with a low effort and without low-level knowledges.
|
75
|
+
Furthermore, pre-defined SoCs can be published and extended. This makes it
|
76
|
+
interesting for IP-core developers. An existing SoC created with the
|
77
|
+
Soc-Maker can be easily extended by a custom IP core which is then tested
|
78
|
+
and used.
|
79
|
+
Not only memory-mapped systems are a target application, also signal-processing
|
80
|
+
systems are interesting, where signal-processing blocks are concatenated.
|
81
|
+
|
82
|
+
One useful example is an Open-RISC based SoC, where it would be nice, if
|
83
|
+
core and system-developers can easily create a SoC with an
|
84
|
+
Open-RISC CPU. The need of a detailed knowledge of the Open-RISC, the Wishbone
|
85
|
+
bus and so on is not needed anymore.
|
86
|
+
|
87
|
+
A second example is a any kind of wireless receiver, where signals are filtered, mixed,
|
88
|
+
decimated and further processed. All the signal processing can be put
|
89
|
+
together into a subsystem with
|
90
|
+
parameters (mixer-resolution, decimation-rate and son on). On a higher level, this
|
91
|
+
sub-system can then be used in a typical memory-mapped SoC together with other
|
92
|
+
IP-cores and sub-systems.
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
== The Goal
|
99
|
+
|
100
|
+
<b>The goal in one sentence</b>: the SoC-Maker should make it possible to parameterize and assemble
|
101
|
+
one or multiple IP-cores into one IP-core on a high level.
|
102
|
+
|
103
|
+
|
104
|
+
*IP-core*
|
105
|
+
IP stands for Intellectual Property and the definition can be found on wikipedia:
|
106
|
+
http://en.wikipedia.org/wiki/Semiconductor_intellectual_property_core
|
107
|
+
|
108
|
+
|
109
|
+
*Parameterization*
|
110
|
+
Parameterization of IP-cores says, that the user can configure and setup all
|
111
|
+
required parameters of an IP-core.
|
112
|
+
|
113
|
+
|
114
|
+
*Assembly*
|
115
|
+
Assembly in this context means, that the IP-cores are connected in a pre-defined
|
116
|
+
or user-defined way, that the final IP-core works as required by the
|
117
|
+
user.
|
118
|
+
|
119
|
+
|
120
|
+
<b>One or Multiple IP cores</b>
|
121
|
+
The minimum number of IP-cores, which are used in such a system is one. Of course,
|
122
|
+
the common case is that more than one IP-core is used to create one final
|
123
|
+
IP-core.
|
124
|
+
|
125
|
+
|
126
|
+
<b>Into one IP core</b>
|
127
|
+
The assembly into one IP-core can be seen in different ways: on the one hand,
|
128
|
+
this final IP-core can be seen as a System-on-Chip. On the other-hand, it can
|
129
|
+
be defined as a subsystem with additional parameters. This parameters are then
|
130
|
+
passed to the single IP-cores. The subsystem, which is one big IP-core, can then
|
131
|
+
be used in other systems or sub-systems.
|
132
|
+
|
133
|
+
|
134
|
+
<b>The High Level</b>
|
135
|
+
The high level says, that the user must not work on code or RTL level.
|
136
|
+
Furthermore, the high-level can can be different: one way could be
|
137
|
+
a graphical user interface. A second way might be an easy to read ASCII file
|
138
|
+
written for example in XML, YAML or JSON.
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
== Requirements
|
145
|
+
|
146
|
+
- The user is able to organize IP cores and interfaces in a library, which includes
|
147
|
+
* adding existing IP cores / interfaces
|
148
|
+
* removing IP cores / interfaces
|
149
|
+
* displaying IP cores (which are in the library)
|
150
|
+
* adding IP cores to the target-SOC
|
151
|
+
|
152
|
+
- There should be a library functionallity: the library should hold
|
153
|
+
* core definitions
|
154
|
+
* interface definitions
|
155
|
+
|
156
|
+
|
157
|
+
- There should exist a core definition for each core. The definition should define the following data
|
158
|
+
* all source files, which are required for synthesis only
|
159
|
+
* all source files, which are required for simulation only
|
160
|
+
* all source files, for synthesis and simulation
|
161
|
+
* top-level source file
|
162
|
+
* top-level port and parameters
|
163
|
+
* parameter configuration and validation
|
164
|
+
* an option to download/check out files from a repository (svn, git ...)
|
165
|
+
|
166
|
+
|
167
|
+
- There should exist an interface specification for each interface used in the library
|
168
|
+
* The interface specification defines, how the IP cores are connected
|
169
|
+
* Allow versioning
|
170
|
+
* Allow a wide range of topologies
|
171
|
+
|
172
|
+
- There should be a SOC definition
|
173
|
+
The SOC definition defines, which IP cores are used
|
174
|
+
by the target-SOC, how they are connected and how the IP cores
|
175
|
+
are parameterized.
|
176
|
+
|
177
|
+
- IP-core configuration
|
178
|
+
It must be possible to configure an IP core. The configurable parameters
|
179
|
+
are defined in the IP-core definition and set in the SOC definition.
|
180
|
+
The parameters are then used to instantiate the IP-core during the HDL generation
|
181
|
+
|
182
|
+
- Toplevel-Generation
|
183
|
+
The SoC maker should auto-generate a toplevel in VHDL or Verilog.
|
184
|
+
Both HDL languages should be supported for generation.
|
185
|
+
|
186
|
+
- Configuration Files
|
187
|
+
All configuration should be stored in YAML files, this includes
|
188
|
+
* SOC definition
|
189
|
+
* Core definition
|
190
|
+
* Interface specification
|
191
|
+
* SoC maker configuration
|
192
|
+
|
193
|
+
- User-Interaction
|
194
|
+
It should be possible to use the SOC-Maker on three levels:
|
195
|
+
* Script-level: this is the lowest level and uses the ruby API directly
|
196
|
+
* CLI-level: a commandline-interface can be used to interact with the API
|
197
|
+
* GUI-Level: this is the highest level: a graphical user interface should
|
198
|
+
make it possible to have a simple interaction with the API
|
199
|
+
|
200
|
+
|
201
|
+
|
202
|
+
|
203
|
+
|
204
|
+
== Author
|
205
|
+
|
206
|
+
<b>Christian Haettich</b>,
|
207
|
+
<tt>feddischson [ at ] opencores.org</tt>
|
208
|
+
|
209
|
+
|
210
|
+
== License
|
211
|
+
|
212
|
+
|
213
|
+
Copyright (C) 2014 Christian Haettich - feddischson [ at ] opencores.org
|
214
|
+
|
215
|
+
This program is free software: you can redistribute it and/or modify
|
216
|
+
it under the terms of the GNU General Public License as published by
|
217
|
+
the Free Software Foundation, either version 3 of the License, or
|
218
|
+
(at your option) any later version.
|
219
|
+
|
220
|
+
This program is distributed in the hope that it will be useful,
|
221
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
222
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
223
|
+
GNU General Public License for more details.
|
224
|
+
|
225
|
+
You should have received a copy of the GNU General Public License
|
226
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
227
|
+
|
228
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
require 'rake/task'
|
3
|
+
require_relative 'lib/soc_maker'
|
4
|
+
begin
|
5
|
+
require 'bones'
|
6
|
+
rescue LoadError
|
7
|
+
abort '### Please install the "bones" gem ###'
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
task :default => :spec
|
12
|
+
task 'gem:release' => 'test:all'
|
13
|
+
|
14
|
+
task :build do
|
15
|
+
system "gem build soc_maker.gemspec"
|
16
|
+
end
|
17
|
+
|
18
|
+
task :release => :build do
|
19
|
+
system "gem push soc_maker-#{SOCMaker::VERSION}.gem"
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
Bones {
|
24
|
+
name 'soc_maker'
|
25
|
+
authors 'Christian Haettich'
|
26
|
+
email 'feddischson [ at ] opencores.org'
|
27
|
+
url 'https://github.com/feddischson/soc_maker'
|
28
|
+
}
|
29
|
+
|
30
|
+
RSpec::Core::RakeTask.new(:spec) do |c|
|
31
|
+
c.ruby_opts="-w"
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
desc 'generate API documentation to doc/rdocs/index.html'
|
36
|
+
|
37
|
+
Rake::RDocTask.new do |rd|
|
38
|
+
rd.rdoc_dir = 'doc/rdocs'
|
39
|
+
rd.main = 'README.rdoc'
|
40
|
+
rd.rdoc_files.include 'README.rdoc', 'LICENSE', "bin", "lib"
|
41
|
+
rd.title = "System-on-Chip Maker (soc_maker) Version #{SOCMaker::VERSION} API Documentation"
|
42
|
+
rd.options << '--line-numbers'
|
43
|
+
rd.options << '--all'
|
44
|
+
end
|
45
|
+
|
46
|
+
|
data/bin/soc_maker_cli
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
root = File.expand_path('../..', __FILE__)
|
4
|
+
require File.join(root, %w[lib soc_maker])
|
5
|
+
require 'ostruct'
|
6
|
+
|
7
|
+
|
8
|
+
cmd_options = OpenStruct.new
|
9
|
+
cmd_options.lib_inc = []
|
10
|
+
cmd_options.log_out = "socmaker_log.txt"
|
11
|
+
|
12
|
+
##
|
13
|
+
# create option-parser and manage
|
14
|
+
# options
|
15
|
+
#
|
16
|
+
OptionParser.new do |opts|
|
17
|
+
|
18
|
+
opts.banner = "Usage: soc_maker_cli [ options ]"
|
19
|
+
|
20
|
+
opts.on("-h", "--help", "Show this message") do
|
21
|
+
puts opts
|
22
|
+
exit
|
23
|
+
end
|
24
|
+
|
25
|
+
opts.on( "-l", "--library <p1,p2,p3...>", Array,
|
26
|
+
"Sets library include paths (overrides config value)" ) do |path|
|
27
|
+
cmd_options.lib_inc << path
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on( "-o", "--log-out <file>", String, "Sets the log output file" ) do |file|
|
31
|
+
cmd_options.log_out = file
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
opts.on( "-q", "--quiet", "Run quiet" ) do |q|
|
36
|
+
cmd_options.quiet = q
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
begin
|
41
|
+
opts.parse!( ARGV )
|
42
|
+
rescue OptionParser::ParseError => e
|
43
|
+
STDERR.puts e.message, "\n", opts
|
44
|
+
exit(-1)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# manage stdout value
|
50
|
+
cmd_options.log_out = STDOUT if cmd_options.log_out.upcase == "STDOUT"
|
51
|
+
|
52
|
+
|
53
|
+
# setup options for loading the SOCMaker core
|
54
|
+
options = {}
|
55
|
+
options[ :libpath ] = cmd_options.lib_inc.flatten if cmd_options.lib_inc.size > 0
|
56
|
+
options[ :logger_out ] = cmd_options.log_out
|
57
|
+
|
58
|
+
##
|
59
|
+
# initialize SOCMaker core
|
60
|
+
# this sets up logging and parses all yaml files
|
61
|
+
# found in the configure path (see also soc_maker_conf.rb)
|
62
|
+
SOCMaker::load( options )
|
63
|
+
|
64
|
+
# Print license info
|
65
|
+
|
66
|
+
if not cmd_options.quiet
|
67
|
+
puts SOCMaker::conf[ :LIC ] + "\n\n"
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
cli = SOCMaker::Cli::instance
|
72
|
+
if ARGF.filename != '-'
|
73
|
+
ARGF.each do |line|
|
74
|
+
cli.process_cmd line
|
75
|
+
end
|
76
|
+
end
|
77
|
+
cli.run
|
78
|
+
|
79
|
+
# vim: noai:ts=2:sw=2
|
80
|
+
|
@@ -0,0 +1,85 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
root = File.expand_path('../..', __FILE__)
|
4
|
+
require File.join(root, %w[lib soc_maker])
|
5
|
+
require 'ostruct'
|
6
|
+
|
7
|
+
cmd_options = OpenStruct.new
|
8
|
+
cmd_options.toplevel = ""
|
9
|
+
cmd_options.log_out = "socmaker_log.txt"
|
10
|
+
cmd_options.files = []
|
11
|
+
cmd_options.out = ""
|
12
|
+
##
|
13
|
+
# create option-parser and manage
|
14
|
+
# options
|
15
|
+
#
|
16
|
+
OptionParser.new do |opts|
|
17
|
+
|
18
|
+
opts.banner = "Usage: soc_maker_parser [ options ]"
|
19
|
+
|
20
|
+
opts.on("-h", "--help", "Show this message") do
|
21
|
+
puts opts
|
22
|
+
exit
|
23
|
+
end
|
24
|
+
|
25
|
+
opts.on( "-t", "--toplevel <toplevel-file>", String,
|
26
|
+
"The toplevel HDL file" ) do |path|
|
27
|
+
cmd_options.toplevel << path
|
28
|
+
end
|
29
|
+
|
30
|
+
opts.on( "-o", "--log-out <file>", String, "Sets the log output file" ) do |file|
|
31
|
+
cmd_options.log_out = file
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
opts.on( "-f", "--files <files1, files2, >", Array,
|
36
|
+
"Paths to identify the HDL files, for example \"./core_x/hdl/*.v\"" ) do |files|
|
37
|
+
cmd_options.files = files
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
opts.on( "-q", "--quiet", "Run quiet" ) do |q|
|
42
|
+
cmd_options.quiet = q
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
opts.on( "-c", "--core-out <file>", String, "Sets the core output file" ) do |file|
|
47
|
+
cmd_options.out = file
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
begin
|
53
|
+
opts.parse!( ARGV )
|
54
|
+
raise OptionParser::MissingArgument if cmd_options[ :toplevel ].size == 0
|
55
|
+
raise OptionParser::MissingArgument if cmd_options[ :files].size == 0
|
56
|
+
rescue OptionParser::ParseError => e
|
57
|
+
STDERR.puts e.message, "\n", opts
|
58
|
+
exit(-1)
|
59
|
+
end
|
60
|
+
|
61
|
+
options = {}
|
62
|
+
options[ :logger_out ] = cmd_options.log_out
|
63
|
+
options[ :skip_refresh ] = true
|
64
|
+
|
65
|
+
##
|
66
|
+
# initialize SOCMaker core
|
67
|
+
# this sets up logging and parses all yaml files
|
68
|
+
# found in the configure path (see also soc_maker_conf.rb)
|
69
|
+
SOCMaker::load( options )
|
70
|
+
|
71
|
+
# Print license info
|
72
|
+
if not cmd_options.quiet
|
73
|
+
puts SOCMaker::conf[ :LIC ] + "\n\n"
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
result = SOCMaker::HDLParser.instance.parse_core( cmd_options[ :toplevel ], cmd_options[ :files ] )
|
79
|
+
if cmd_options[ :out ] and cmd_options[ :out ].size > 0
|
80
|
+
File.open( cmd_options[ :out ], "w") { |file| file.write( result ) }
|
81
|
+
else
|
82
|
+
puts result
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
@@ -0,0 +1,245 @@
|
|
1
|
+
SOCM_CORE
|
2
|
+
name: Advanced Debug System
|
3
|
+
description: Advanced Debug System
|
4
|
+
id: adv_debug_sys,ads_3
|
5
|
+
license: LGPL
|
6
|
+
licensefile:
|
7
|
+
author:
|
8
|
+
authormail:
|
9
|
+
vccmd: svn co http://opencores.org/ocsvn/adv_debug_sys/adv_debug_sys/tags/ADS_RELEASE_3_0_0/Hardware/adv_dbg_if/rtl rtl
|
10
|
+
toplevel: adbg_top
|
11
|
+
|
12
|
+
interfaces:
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
:jtag: SOCM_IFC
|
17
|
+
name: jtag_tap
|
18
|
+
dir: 1
|
19
|
+
id: jtag_tap,1
|
20
|
+
ports:
|
21
|
+
:tck_i: SOCM_PORT
|
22
|
+
len: 1
|
23
|
+
spc_ref: tck
|
24
|
+
:tdi_i: SOCM_PORT
|
25
|
+
len: 1
|
26
|
+
spc_ref: tdi
|
27
|
+
:tdo_o: SOCM_PORT
|
28
|
+
len: 1
|
29
|
+
spc_ref: tdo
|
30
|
+
:rst_i: SOCM_PORT
|
31
|
+
len: 1
|
32
|
+
spc_ref: rst
|
33
|
+
|
34
|
+
:shift_dr_i: SOCM_PORT
|
35
|
+
len: 1
|
36
|
+
spc_ref: shift
|
37
|
+
:pause_dr_i: SOCM_PORT
|
38
|
+
len: 1
|
39
|
+
spc_ref: pause
|
40
|
+
:update_dr_i: SOCM_PORT
|
41
|
+
len: 1
|
42
|
+
spc_ref: update
|
43
|
+
:capture_dr_i: SOCM_PORT
|
44
|
+
len: 1
|
45
|
+
spc_ref: capture
|
46
|
+
:debug_select_i: SOCM_PORT
|
47
|
+
len: 1
|
48
|
+
spc_ref: select
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
:wb_ifc: SOCM_IFC
|
54
|
+
name: wishbone_ma
|
55
|
+
dir: 1
|
56
|
+
id: wishbone_ma,b3
|
57
|
+
ports:
|
58
|
+
:wb_clk_i: SOCM_PORT
|
59
|
+
len: 1
|
60
|
+
spc_ref: clk
|
61
|
+
:wb_rst_i: SOCM_PORT
|
62
|
+
len: 1
|
63
|
+
spc_ref: rst
|
64
|
+
:wb_adr_o: SOCM_PORT
|
65
|
+
spc_ref: adr
|
66
|
+
len: 32
|
67
|
+
:wb_dat_o: SOCM_PORT
|
68
|
+
spc_ref: dat_i
|
69
|
+
len: 32
|
70
|
+
:wb_dat_i: SOCM_PORT
|
71
|
+
spc_ref: dat_o
|
72
|
+
len: 32
|
73
|
+
:wb_cyc_o: SOCM_PORT
|
74
|
+
spc_ref: cyc
|
75
|
+
len: 1
|
76
|
+
:wb_stb_o: SOCM_PORT
|
77
|
+
spc_ref: stb
|
78
|
+
len: 1
|
79
|
+
:wb_sel_o: SOCM_PORT
|
80
|
+
spc_ref: sel
|
81
|
+
len: 4
|
82
|
+
:wb_we_o: SOCM_PORT
|
83
|
+
spc_ref: we
|
84
|
+
len: 1
|
85
|
+
:wb_ack_i: SOCM_PORT
|
86
|
+
spc_ref: ack
|
87
|
+
len: 1
|
88
|
+
:wb_cab_o: SOCM_PORT
|
89
|
+
spc_ref: cab
|
90
|
+
len: 1
|
91
|
+
:wb_err_i: SOCM_PORT
|
92
|
+
spc_ref: err
|
93
|
+
len: 1
|
94
|
+
:wb_cti_o: SOCM_PORT
|
95
|
+
spc_ref: cti
|
96
|
+
len: 3
|
97
|
+
:wb_bte_o: SOCM_PORT
|
98
|
+
spc_ref: bte
|
99
|
+
len: 2
|
100
|
+
|
101
|
+
:cpu0_dbg_clk: SOCM_IFC
|
102
|
+
name: clk
|
103
|
+
dir: 1
|
104
|
+
id: clk,1
|
105
|
+
ports:
|
106
|
+
:cpu0_clk_i: SOCM_PORT
|
107
|
+
len: 1
|
108
|
+
spc_ref: clk
|
109
|
+
|
110
|
+
:cpu0_dbg_rst: SOCM_IFC
|
111
|
+
name: rst
|
112
|
+
dir: 0
|
113
|
+
id: rst,1
|
114
|
+
ports:
|
115
|
+
:cpu0_rst_o: SOCM_PORT
|
116
|
+
len: 1
|
117
|
+
spc_ref: rst
|
118
|
+
|
119
|
+
:cpu0_dbg: SOCM_IFC
|
120
|
+
name: debug
|
121
|
+
dir: 0
|
122
|
+
id: debug,1
|
123
|
+
ports:
|
124
|
+
:cpu0_addr_o: SOCM_PORT
|
125
|
+
len: 32
|
126
|
+
spc_ref: dbg_adr
|
127
|
+
:cpu0_data_o: SOCM_PORT
|
128
|
+
len: 32
|
129
|
+
spc_ref: dbg_dat_o
|
130
|
+
:cpu0_data_i: SOCM_PORT
|
131
|
+
len: 32
|
132
|
+
spc_ref: dbg_dat_i
|
133
|
+
:cpu0_bp_i: SOCM_PORT
|
134
|
+
len: 1
|
135
|
+
spc_ref: dbg_bpo
|
136
|
+
:cpu0_stall_o: SOCM_PORT
|
137
|
+
spc_ref: dbg_stall
|
138
|
+
len: 1
|
139
|
+
:cpu0_stb_o: SOCM_PORT
|
140
|
+
len: 1
|
141
|
+
spc_ref: dbg_stb
|
142
|
+
:cpu0_we_o: SOCM_PORT
|
143
|
+
len: 1
|
144
|
+
spc_ref: dbg_we
|
145
|
+
:cpu0_ack_i: SOCM_PORT
|
146
|
+
len: 1
|
147
|
+
spc_ref: dbg_ack
|
148
|
+
|
149
|
+
# :dbg_ewt_i: SOCM_PORT
|
150
|
+
# len: 1
|
151
|
+
# spc_ref: dbg_ewt
|
152
|
+
# :dbg_lss_o: SOCM_PORT
|
153
|
+
# len: 4
|
154
|
+
# spc_ref: dbg_lss
|
155
|
+
# :dbg_is_o: SOCM_PORT
|
156
|
+
# len: 2
|
157
|
+
# spc_ref: dbg_iso
|
158
|
+
# :dbg_wp_o: SOCM_PORT
|
159
|
+
# len: 11
|
160
|
+
# spc_ref: dbg_wpo
|
161
|
+
|
162
|
+
|
163
|
+
hdlfiles:
|
164
|
+
:adbg_top: SOCM_HDL_FILE
|
165
|
+
use_syn: true
|
166
|
+
use_sim: true
|
167
|
+
type: verilog
|
168
|
+
path: rtl/verilog/adbg_top.v
|
169
|
+
|
170
|
+
:adbg_crc32: SOCM_HDL_FILE
|
171
|
+
use_syn: true
|
172
|
+
use_sim: true
|
173
|
+
type: verilog
|
174
|
+
path: rtl/verilog/adbg_crc32.v
|
175
|
+
:adbg_defines: SOCM_HDL_FILE
|
176
|
+
use_syn: true
|
177
|
+
use_sim: true
|
178
|
+
type: verilog
|
179
|
+
path: rtl/verilog/adbg_defines.v
|
180
|
+
:adbg_jsp_biu: SOCM_HDL_FILE
|
181
|
+
use_syn: true
|
182
|
+
use_sim: true
|
183
|
+
type: verilog
|
184
|
+
path: rtl/verilog/adbg_jsp_biu.v
|
185
|
+
:adbg_jsp_module: SOCM_HDL_FILE
|
186
|
+
use_syn: true
|
187
|
+
use_sim: true
|
188
|
+
type: verilog
|
189
|
+
path: rtl/verilog/adbg_jsp_module.v
|
190
|
+
:adbg_or1k_biu: SOCM_HDL_FILE
|
191
|
+
use_syn: true
|
192
|
+
use_sim: true
|
193
|
+
type: verilog
|
194
|
+
path: rtl/verilog/adbg_or1k_biu.v
|
195
|
+
:adbg_or1k_defines: SOCM_HDL_FILE
|
196
|
+
use_syn: true
|
197
|
+
use_sim: true
|
198
|
+
type: verilog
|
199
|
+
path: rtl/verilog/adbg_or1k_defines.v
|
200
|
+
:adbg_or1k_module: SOCM_HDL_FILE
|
201
|
+
use_syn: true
|
202
|
+
use_sim: true
|
203
|
+
type: verilog
|
204
|
+
path: rtl/verilog/adbg_or1k_module.v
|
205
|
+
:adbg_or1k_status_reg: SOCM_HDL_FILE
|
206
|
+
use_syn: true
|
207
|
+
use_sim: true
|
208
|
+
type: verilog
|
209
|
+
path: rtl/verilog/adbg_or1k_status_reg.v
|
210
|
+
:adbg_top: SOCM_HDL_FILE
|
211
|
+
use_syn: true
|
212
|
+
use_sim: true
|
213
|
+
type: verilog
|
214
|
+
path: rtl/verilog/adbg_top.v
|
215
|
+
:adbg_wb_biu: SOCM_HDL_FILE
|
216
|
+
use_syn: true
|
217
|
+
use_sim: true
|
218
|
+
type: verilog
|
219
|
+
path: rtl/verilog/adbg_wb_biu.v
|
220
|
+
:adbg_wb_defines: SOCM_HDL_FILE
|
221
|
+
use_syn: true
|
222
|
+
use_sim: true
|
223
|
+
type: verilog
|
224
|
+
path: rtl/verilog/adbg_wb_defines.v
|
225
|
+
:adbg_wb_module: SOCM_HDL_FILE
|
226
|
+
use_syn: true
|
227
|
+
use_sim: true
|
228
|
+
type: verilog
|
229
|
+
path: rtl/verilog/adbg_wb_module.v
|
230
|
+
:bytefifo: SOCM_HDL_FILE
|
231
|
+
use_syn: true
|
232
|
+
use_sim: true
|
233
|
+
type: verilog
|
234
|
+
path: rtl/verilog/bytefifo.v
|
235
|
+
:syncflow: SOCM_HDL_FILE
|
236
|
+
use_syn: true
|
237
|
+
use_sim: true
|
238
|
+
type: verilog
|
239
|
+
path: rtl/verilog/syncflop.v
|
240
|
+
:syncreg: SOCM_HDL_FILE
|
241
|
+
use_syn: true
|
242
|
+
use_sim: true
|
243
|
+
type: verilog
|
244
|
+
path: rtl/verilog/syncreg.v
|
245
|
+
|