cross_origen 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/version.rb +1 -1
- data/lib/cross_origen/ip_xact.rb +81 -65
- data/lib/cross_origen/test/dut.rb +14 -1
- data/templates/test/ip_xact_sub_block.xml.erb +1 -0
- data/templates/web/layouts/_basic.html.erb +3 -0
- data/templates/web/partials/_navbar.html.erb +1 -1
- metadata +4 -4
- data/templates/web/layouts/_doc.html.erb +0 -61
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5e7b5c2e2e62729143d48392467fbbf5903885f
|
4
|
+
data.tar.gz: 421c909d4b31cfe7614084194c06650b179ebd15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 316821d70b48bf422ecdfd736512bc232be143db822a8a0c7022a195ad8003cd01de2d796a861f73320cc4ee59b8c81fb4fb3cee0ac1a6f1ce4eace3df7a2712
|
7
|
+
data.tar.gz: 803e9134ff9c1ed944f4529d0f84a73a53ea69d11b5252f7ab80f03e0d319577fed8497e4674221793662c51530cda1b68171acaf20d1338de4c8f1a88762282
|
data/config/version.rb
CHANGED
data/lib/cross_origen/ip_xact.rb
CHANGED
@@ -21,15 +21,23 @@ module CrossOrigen
|
|
21
21
|
end
|
22
22
|
doc.xpath('//spirit:memoryMaps/spirit:memoryMap').each do |mem_map|
|
23
23
|
mem_map_name = fetch mem_map.at_xpath('spirit:name'), downcase: true, to_sym: true, get_text: true
|
24
|
-
|
25
|
-
|
24
|
+
if mem_map_name.to_s.empty?
|
25
|
+
mem_map_obj = owner
|
26
|
+
else
|
27
|
+
owner.sub_block mem_map_name
|
28
|
+
mem_map_obj = owner.send(mem_map_name)
|
29
|
+
end
|
26
30
|
mem_map.xpath('spirit:addressBlock').each do |addr_block|
|
27
31
|
name = fetch addr_block.at_xpath('spirit:name'), downcase: true, to_sym: true, get_text: true
|
28
32
|
base_address = fetch addr_block.at_xpath('spirit:baseAddress'), get_text: true, to_dec: true
|
29
33
|
range = fetch addr_block.at_xpath('spirit:range'), get_text: true, to_dec: true
|
30
34
|
width = fetch addr_block.at_xpath('spirit:width'), get_text: true, to_i: true
|
31
|
-
|
32
|
-
|
35
|
+
if name.to_s.empty?
|
36
|
+
addr_block_obj = mem_map_obj
|
37
|
+
else
|
38
|
+
mem_map_obj.sub_block name, base_address: base_address, range: range, lau: width
|
39
|
+
addr_block_obj = mem_map_obj.send(name)
|
40
|
+
end
|
33
41
|
addr_block.xpath('spirit:register').each do |register|
|
34
42
|
name = fetch register.at_xpath('spirit:name'), downcase: true, to_sym: true, get_text: true
|
35
43
|
size = fetch register.at_xpath('spirit:size'), get_text: true, to_i: true
|
@@ -74,7 +82,7 @@ module CrossOrigen
|
|
74
82
|
|
75
83
|
# Returns a string representing the owner object in IP-XACT XML
|
76
84
|
def owner_to_xml(options = {})
|
77
|
-
require '
|
85
|
+
require 'nokogiri'
|
78
86
|
|
79
87
|
options = {
|
80
88
|
include_bit_field_values: true
|
@@ -82,10 +90,6 @@ module CrossOrigen
|
|
82
90
|
|
83
91
|
@format = options[:format]
|
84
92
|
|
85
|
-
xml = Builder::XmlMarkup.new(indent: 2, margin: 0)
|
86
|
-
|
87
|
-
xml.instruct!
|
88
|
-
|
89
93
|
schemas = [
|
90
94
|
'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4',
|
91
95
|
'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4/index.xsd'
|
@@ -103,69 +107,77 @@ module CrossOrigen
|
|
103
107
|
headers['xmlns:vendorExtensions'] = '$IREG_GEN/XMLSchema/SPIRIT'
|
104
108
|
end
|
105
109
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
110
|
+
builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
111
|
+
spirit = xml['spirit']
|
112
|
+
spirit.component(headers) do
|
113
|
+
spirit.vendor options[:vendor] || 'Origen'
|
114
|
+
spirit.library options[:library] || 'Origen'
|
115
|
+
# I guess this should really be the register owner's owner's name?
|
116
|
+
spirit.name try(:ip_name) || owner.class.to_s.split('::').last
|
117
|
+
spirit.version try(:ip_version, :version, :revision)
|
118
|
+
spirit.memoryMaps do
|
119
|
+
memory_maps.each do |map_name, _map|
|
120
|
+
spirit.memoryMap do
|
121
|
+
spirit.name map_name
|
122
|
+
address_blocks do |domain_name, _domain, sub_block|
|
123
|
+
spirit.addressBlock do
|
124
|
+
if sub_block == owner
|
125
|
+
spirit.name nil
|
126
|
+
spirit.baseAddress 0.to_hex
|
127
|
+
else
|
128
|
+
spirit.name address_block_name(domain_name, sub_block)
|
129
|
+
spirit.baseAddress sub_block.base_address.to_hex
|
130
|
+
end
|
131
|
+
spirit.range range(sub_block)
|
132
|
+
spirit.width width(sub_block)
|
133
|
+
sub_block.regs.each do |name, reg|
|
134
|
+
# Required for now to ensure that the current value is the reset value
|
135
|
+
reg.reset
|
136
|
+
spirit.register do
|
137
|
+
spirit.name name
|
138
|
+
spirit.description try(reg, :name_full, :full_name)
|
139
|
+
spirit.addressOffset reg.offset.to_hex
|
140
|
+
spirit.size reg.size
|
141
|
+
if reg.bits.any?(&:writable?)
|
142
|
+
spirit.access 'read-write'
|
143
|
+
else
|
144
|
+
spirit.access 'read-only'
|
145
|
+
end
|
146
|
+
spirit.reset do
|
147
|
+
spirit.value reg.data.to_hex
|
148
|
+
spirit.mask mask(reg).to_hex
|
149
|
+
end
|
150
|
+
reg.named_bits do |name, bits|
|
151
|
+
spirit.field do
|
152
|
+
spirit.name name
|
153
|
+
spirit.description try(bits, :brief_description, :name_full, :full_name)
|
154
|
+
spirit.bitOffset bits.position
|
155
|
+
spirit.bitWidth bits.size
|
156
|
+
spirit.access bits.access
|
157
|
+
if options[:include_bit_field_values]
|
158
|
+
if bits.bit_value_descriptions[0]
|
159
|
+
bits.bit_value_descriptions.each do |val, desc|
|
160
|
+
spirit.values do
|
161
|
+
spirit.value val.to_hex
|
162
|
+
spirit.name "val_#{val.to_hex}"
|
163
|
+
spirit.description desc
|
164
|
+
end
|
153
165
|
end
|
154
166
|
end
|
155
167
|
end
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
168
|
+
if uvm?
|
169
|
+
spirit.vendorExtensions do
|
170
|
+
xml['vendorExtensions'].hdl_path bits.path(relative_to: sub_block)
|
171
|
+
end
|
160
172
|
end
|
161
173
|
end
|
162
174
|
end
|
163
175
|
end
|
164
176
|
end
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
177
|
+
if uvm?
|
178
|
+
spirit.vendorExtensions do
|
179
|
+
xml['vendorExtensions'].hdl_path sub_block.path(relative_to: owner)
|
180
|
+
end
|
169
181
|
end
|
170
182
|
end
|
171
183
|
end
|
@@ -174,6 +186,7 @@ module CrossOrigen
|
|
174
186
|
end
|
175
187
|
end
|
176
188
|
end
|
189
|
+
builder.to_xml
|
177
190
|
end
|
178
191
|
|
179
192
|
private
|
@@ -193,7 +206,7 @@ module CrossOrigen
|
|
193
206
|
end
|
194
207
|
|
195
208
|
def memory_maps
|
196
|
-
{
|
209
|
+
{ nil => {} }
|
197
210
|
end
|
198
211
|
|
199
212
|
def sub_blocks(domain_name)
|
@@ -207,6 +220,9 @@ module CrossOrigen
|
|
207
220
|
domains = owner.register_domains
|
208
221
|
domains = { default: {} } if domains.empty?
|
209
222
|
domains.each do |domain_name, domain|
|
223
|
+
if owner.owns_registers?
|
224
|
+
yield domain_name, domain, owner
|
225
|
+
end
|
210
226
|
sub_blocks(domain_name).each do |sub_block|
|
211
227
|
yield domain_name, domain, sub_block
|
212
228
|
end
|
@@ -7,7 +7,7 @@ module CrossOrigen
|
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@path = :hidden
|
10
|
-
sub_block :atx, class_name: 'D_IP_ANA_TEST_ANNEX_SYN'
|
10
|
+
sub_block :atx, class_name: 'D_IP_ANA_TEST_ANNEX_SYN', base_address: 0x4000_0000
|
11
11
|
|
12
12
|
# Register defined solely to test out the top level register export
|
13
13
|
reg :dut_top_level_reg, 0x0, size: 32, bit_order: :msb0, lau: 8 do
|
@@ -23,6 +23,19 @@ module CrossOrigen
|
|
23
23
|
cr_import(path: "#{Origen.root}/imports/ipxact.xml")
|
24
24
|
end
|
25
25
|
|
26
|
+
def add_atx2
|
27
|
+
sub_block :atx2, class_name: 'ATX2', base_address: 0x6000_0000
|
28
|
+
end
|
29
|
+
|
30
|
+
class ATX2
|
31
|
+
include Origen::Model
|
32
|
+
include CrossOrigen
|
33
|
+
|
34
|
+
def initialize
|
35
|
+
cr_import(path: "#{Origen.root}/approved/ip_xact_sub_block.xml")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
26
39
|
class D_IP_ANA_TEST_ANNEX_SYN # rubocop:disable ClassAndModuleCamelCase
|
27
40
|
include Origen::Model
|
28
41
|
include CrossOrigen
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= $dut.atx.to_ip_xact %>
|
@@ -1,5 +1,6 @@
|
|
1
1
|
---
|
2
2
|
title: <%= options[:title] || Origen.config.name %>
|
3
|
+
analytics: UA-64455560-1
|
3
4
|
---
|
4
5
|
<%= render "templates/web/partials/navbar.html", tab: options[:tab] %>
|
5
6
|
|
@@ -9,5 +10,7 @@ title: <%= options[:title] || Origen.config.name %>
|
|
9
10
|
<div class="span12" markdown="1">
|
10
11
|
<%= yield %>
|
11
12
|
|
13
|
+
<%= disqus_comments %>
|
14
|
+
|
12
15
|
</div>
|
13
16
|
</div>
|
@@ -15,7 +15,7 @@
|
|
15
15
|
<li class="<%= options[:tab] == :api ? 'active' : '' %>"><a href="<%= path "/api/" %>">API</a></li>
|
16
16
|
<li class="<%= options[:tab] == :coverage ? 'active' : '' %>"><a href="<%= path "/coverage" %>">Coverage</a></li>
|
17
17
|
<li class="<%= options[:tab] == :release ? 'active' : '' %>"><a href="<%= path "/release_notes" %>">Release Notes</a></li>
|
18
|
-
<li><a href="https://github.com/Origen-SDK/
|
18
|
+
<li><a href="https://github.com/Origen-SDK/cross_origen">Github</a></li>
|
19
19
|
</ul>
|
20
20
|
<%= import "origen/web/logo.html" %>
|
21
21
|
</div><!--/.nav-collapse -->
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cross_origen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.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: 2016-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- templates/test/default.ralf.erb
|
80
80
|
- templates/test/headers_default.h.erb
|
81
81
|
- templates/test/ip_xact.xml.erb
|
82
|
+
- templates/test/ip_xact_sub_block.xml.erb
|
82
83
|
- templates/web/_history.md
|
83
84
|
- templates/web/example.md.erb
|
84
85
|
- templates/web/examples.md.erb
|
@@ -87,7 +88,6 @@ files:
|
|
87
88
|
- templates/web/examples/ralf_export.md.erb
|
88
89
|
- templates/web/index.md.erb
|
89
90
|
- templates/web/layouts/_basic.html.erb
|
90
|
-
- templates/web/layouts/_doc.html.erb
|
91
91
|
- templates/web/partials/_navbar.html.erb
|
92
92
|
- templates/web/release_notes.md.erb
|
93
93
|
homepage: http://origen-sdk.org/cross_origen
|
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
109
|
version: 1.8.11
|
110
110
|
requirements: []
|
111
111
|
rubyforge_project:
|
112
|
-
rubygems_version: 2.
|
112
|
+
rubygems_version: 2.6.2
|
113
113
|
signing_key:
|
114
114
|
specification_version: 4
|
115
115
|
summary: Translators for importing and exporting Origen data to/from 3rd party formats
|
@@ -1,61 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: <%= options[:title] || Origen.config.name %>
|
3
|
-
---
|
4
|
-
<%= render "templates/web/partials/navbar.html", tab: :docs %>
|
5
|
-
|
6
|
-
%# Add/edit sections here, the code below will expand this with the correct markup,
|
7
|
-
%# pass in the topic you want selected via the :tab option.
|
8
|
-
% s = {}
|
9
|
-
% s["Environment"] = {
|
10
|
-
% environment_introduction: "Introduction",
|
11
|
-
% environment_installation: "Installation",
|
12
|
-
% environment_definitions: "Definitions and Acronyms",
|
13
|
-
% }
|
14
|
-
% s["Targets"] = {
|
15
|
-
% targets_introduction: "Introduction",
|
16
|
-
% targets_supported: "Supported",
|
17
|
-
% }
|
18
|
-
% s["Developers"] = {
|
19
|
-
% developers_branching: "Making Branches",
|
20
|
-
% }
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
<div class="row">
|
25
|
-
<div class="span3">
|
26
|
-
<div class="well sidebar-nav">
|
27
|
-
<div class="accordion" id="sidebar-accordion">
|
28
|
-
|
29
|
-
% s.each_with_index do |(subject, sections), i|
|
30
|
-
<div class="accordion-group">
|
31
|
-
<div class="accordion-heading">
|
32
|
-
<a class="accordion-toggle" data-toggle="collapse" data-parent="#sidebar-accordion" href="#sidebar-collapse-<%= i %>">
|
33
|
-
<%= subject %>
|
34
|
-
</a>
|
35
|
-
</div>
|
36
|
-
<div id="sidebar-collapse-<%= i %>" class="accordion-body collapse <%= sections.has_key?(options[:tab]) ? 'in' : '' %>">
|
37
|
-
<div class="accordion-inner">
|
38
|
-
<ul class="nav nav-list">
|
39
|
-
% sections.each do |tab, section|
|
40
|
-
% paths = tab.to_s.split("_")
|
41
|
-
<li class="<%= tab == options[:tab] ? 'active' : '' %>"><a href="<%= path "/docs/#{paths[0]}/#{paths[1]}" %>"><%= section %></a></li>
|
42
|
-
% end
|
43
|
-
</ul>
|
44
|
-
</div>
|
45
|
-
</div>
|
46
|
-
</div>
|
47
|
-
% end
|
48
|
-
|
49
|
-
</div>
|
50
|
-
|
51
|
-
</div>
|
52
|
-
</div>
|
53
|
-
|
54
|
-
%# The markdown attribute is important if you are going to include content written
|
55
|
-
%# in markdown, without this is will be included verbatim
|
56
|
-
<div class="span9" markdown="1">
|
57
|
-
<%= yield %>
|
58
|
-
%# Also important to avoid indentation on return here, since otherwise it could be interpreted
|
59
|
-
%# as mardown code
|
60
|
-
</div>
|
61
|
-
</div>
|