cross_origen 1.1.0 → 1.2.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 +5 -5
- data/config/version.rb +1 -1
- data/lib/cross_origen/ip_xact.rb +214 -27
- data/lib/cross_origen_dev/dut.rb +65 -10
- data/templates/test/ip_xact_1685-2009.xml.erb +1 -0
- data/templates/test/ip_xact_sub_block_1685.xml.erb +1 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fa363dd12d4fee8fd75ab281271dd739994b0a433c9630fb556c16ef8095542d
|
4
|
+
data.tar.gz: 4bfd5b6d824821fe249a095451f9229145435d2c813bc9d4836f6315989cbe89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98950a584c2f3c81fe453a79341bd97b7ea8a8fbe4b887ba84ee480671ae2b86a942ea7c842a1d4af85476f5e66080b05d4ed0f51a8f24313a3510ad35b2339e
|
7
|
+
data.tar.gz: c510adad00c3db5c117c320105a2eba67c529209dd0cb9e66d6fdd540ea8c0ad787578c29322fb1171fff2bc12cb0f1767c51027c69aa7374a97ef0eef1726a2
|
data/config/version.rb
CHANGED
data/lib/cross_origen/ip_xact.rb
CHANGED
@@ -6,6 +6,9 @@ module CrossOrigen
|
|
6
6
|
|
7
7
|
AddressBlock = Struct.new(:name, :base_address, :range, :width)
|
8
8
|
|
9
|
+
# Create a shorthand way to reference Origen Core's Bit ACCESS_CODES
|
10
|
+
@@access_hash = Origen::Registers::Bit.const_get(:ACCESS_CODES)
|
11
|
+
|
9
12
|
# Import/reader that currently only supports creating registers and bit fields
|
10
13
|
def import(file, options = {}) # rubocop:disable CyclomaticComplexity
|
11
14
|
require 'kramdown'
|
@@ -66,15 +69,42 @@ module CrossOrigen
|
|
66
69
|
# Do a logical bitwise AND with the reset value and mask
|
67
70
|
reset_value = reset_value & reset_mask
|
68
71
|
end
|
72
|
+
# Future expansion: pull in HDL path as abs_path in Origen.
|
69
73
|
addr_block_obj.reg name, addr_offset, size: size, access: access, description: reg_description(register) do |reg|
|
70
74
|
register.xpath('spirit:field').each do |field|
|
71
75
|
name = fetch field.at_xpath('spirit:name'), downcase: true, to_sym: true, get_text: true
|
72
76
|
bit_offset = fetch field.at_xpath('spirit:bitOffset'), get_text: true, to_i: true
|
73
77
|
bit_width = fetch field.at_xpath('spirit:bitWidth'), get_text: true, to_i: true
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
+
xml_access = fetch field.at_xpath('spirit:access'), get_text: true
|
79
|
+
# Newer IP-XACT standards list access as < read or write>-< descriptor >, such as
|
80
|
+
# "read-write", "read-only", or "read-writeOnce"
|
81
|
+
if xml_access =~ /\S+\-\S+/ || xml_access == 'writeOnce'
|
82
|
+
# This filter alone is not capable of interpreting the 1685-2009 (and 2014). Therefore
|
83
|
+
# must reverse-interpret the content of access_hash (see top of file).
|
84
|
+
#
|
85
|
+
# First get the base access type, ie: read-write, read-only, etc.
|
86
|
+
# base_access = fetch field.at_xpath('spirit:access'), get_text: true
|
87
|
+
base_access = xml_access
|
88
|
+
# Next grab any modified write values or read actions
|
89
|
+
mod_write = fetch field.at_xpath('spirit:modifiedWriteValue'), get_text: true
|
90
|
+
read_action = fetch field.at_xpath('spirit:readAction'), get_text: true
|
91
|
+
# Using base_access, mod_write, and read_action, look up the corresponding access
|
92
|
+
# acronym from access_hash, noting it is not possible to differentiate write-only
|
93
|
+
# from write-only, read zero and read-write from dc.
|
94
|
+
#
|
95
|
+
# Matched needs to be tracked, as there is no way to differentiate :rw and :dc in IP-XACT.
|
96
|
+
# Everything imported will default to :rw, never :dc.
|
97
|
+
matched = false
|
98
|
+
@@access_hash.each_key do |key|
|
99
|
+
if @@access_hash[key][:base] == base_access && @@access_hash[key][:write] == mod_write && @@access_hash[key][:read] == read_action && !matched
|
100
|
+
access = key.to_sym
|
101
|
+
matched = true
|
102
|
+
end
|
103
|
+
end
|
104
|
+
# Older IP-XACT standards appear to also accept short acronyms like "ro", "w1c", "rw",
|
105
|
+
# etc.
|
106
|
+
elsif xml_access =~ /\S+/
|
107
|
+
access = xml_access.downcase.to_sym
|
78
108
|
else
|
79
109
|
# default to read-write if access is not specified
|
80
110
|
access = :rw
|
@@ -117,6 +147,13 @@ xsi:schemaLocation="$REGMEM_HOME/builder/ipxact/schema/ipxact
|
|
117
147
|
end
|
118
148
|
|
119
149
|
# Returns a string representing the owner object in IP-XACT XML
|
150
|
+
# Usable / Available options:
|
151
|
+
# :vendor = Company name/web address, ex: 'nxp.com'
|
152
|
+
# :library = IP Library
|
153
|
+
# :schema = '1685-2009' or default of Spirit 1.4 (when no :schema option passed)
|
154
|
+
# :bus_interface = only 'AMBA3' supported at this time
|
155
|
+
# :mmap_name = Optionally set the memoryMap name to something other than the module name
|
156
|
+
# :mmap_ref = memoryMapRef name, ex: 'UserMap'
|
120
157
|
def owner_to_xml(options = {})
|
121
158
|
require 'nokogiri'
|
122
159
|
|
@@ -126,21 +163,43 @@ xsi:schemaLocation="$REGMEM_HOME/builder/ipxact/schema/ipxact
|
|
126
163
|
|
127
164
|
@format = options[:format]
|
128
165
|
|
129
|
-
schemas
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
166
|
+
# Compatible schemas: Spirit 1.4, 1685-2009
|
167
|
+
# Assume Spirit 1.4 if no schema provided
|
168
|
+
if options[:schema] == '1685-2009' # Magillem tool uses alternate schema
|
169
|
+
schemas = [
|
170
|
+
'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009',
|
171
|
+
'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009/index.xsd'
|
172
|
+
]
|
173
|
+
else # Assume Spirit 1.4 if not
|
174
|
+
schemas = [
|
175
|
+
'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4',
|
176
|
+
'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4/index.xsd'
|
177
|
+
]
|
178
|
+
end
|
179
|
+
|
180
|
+
if uvm? && !(options[:schema] == '1685-2009')
|
134
181
|
schemas << '$IREG_GEN/XMLSchema/SPIRIT/VendorExtensions.xsd'
|
135
182
|
end
|
136
183
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
184
|
+
if options[:schema] == '1685-2009' # Magillem tool uses alternate schema
|
185
|
+
headers = {
|
186
|
+
'xmlns:spirit' => 'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009',
|
187
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
188
|
+
'xsi:schemaLocation' => schemas.join(' ')
|
189
|
+
}
|
190
|
+
else # Assume Spirit 1.4 if not
|
191
|
+
headers = {
|
192
|
+
'xmlns:spirit' => 'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4',
|
193
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
194
|
+
'xsi:schemaLocation' => schemas.join(' ')
|
195
|
+
}
|
196
|
+
end
|
197
|
+
|
198
|
+
if uvm? && !(options[:schema] == '1685-2009')
|
143
199
|
headers['xmlns:vendorExtensions'] = '$IREG_GEN/XMLSchema/SPIRIT'
|
200
|
+
# Else:
|
201
|
+
# Do nothing ?
|
202
|
+
# headers['xmlns:vendorExtensions'] = '$UVM_RGM_HOME/builder/ipxact/schema'
|
144
203
|
end
|
145
204
|
|
146
205
|
builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
@@ -151,19 +210,44 @@ xsi:schemaLocation="$REGMEM_HOME/builder/ipxact/schema/ipxact
|
|
151
210
|
# I guess this should really be the register owner's owner's name?
|
152
211
|
spirit.name try(:ip_name) || owner.class.to_s.split('::').last
|
153
212
|
spirit.version try(:ip_version, :version, :revision)
|
213
|
+
# The 1685-2009 schema allows for a bus interface. AMBA3 (slave) supported so far.
|
214
|
+
if options[:schema] == '1685-2009'
|
215
|
+
if options[:bus_interface] == 'AMBA3'
|
216
|
+
spirit.busInterfaces do
|
217
|
+
spirit.busInterface do
|
218
|
+
spirit.name 'Slave'
|
219
|
+
bustype_header = {
|
220
|
+
'spirit:vendor' => options[:vendor] || 'Origen',
|
221
|
+
'spirit:library' => 'amba3',
|
222
|
+
'spirit:name' => 'APB3',
|
223
|
+
'spirit:version' => '1.0'
|
224
|
+
}
|
225
|
+
xml['spirit'].busType bustype_header
|
226
|
+
spirit.slave do
|
227
|
+
mmapref_header = {
|
228
|
+
'spirit:memoryMapRef' => options[:mmap_ref] || 'APB'
|
229
|
+
}
|
230
|
+
xml['spirit'].memoryMapRef mmapref_header
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
154
236
|
spirit.memoryMaps do
|
155
237
|
memory_maps.each do |map_name, _map|
|
156
238
|
spirit.memoryMap do
|
157
|
-
|
239
|
+
# Optionally assign memory map name to something other than the module name in Ruby,
|
240
|
+
# default to 'RegisterMap'
|
241
|
+
spirit.name options[:mmap_name] || 'RegisterMap'
|
158
242
|
address_blocks do |domain_name, _domain, sub_block|
|
159
243
|
spirit.addressBlock do
|
244
|
+
# When registers reside at the top level, do not assign an address block name
|
160
245
|
if sub_block == owner
|
161
246
|
spirit.name nil
|
162
|
-
spirit.baseAddress 0.to_hex
|
163
247
|
else
|
164
248
|
spirit.name address_block_name(domain_name, sub_block)
|
165
|
-
spirit.baseAddress sub_block.base_address.to_hex
|
166
249
|
end
|
250
|
+
spirit.baseAddress sub_block.base_address.to_hex
|
167
251
|
spirit.range range(sub_block)
|
168
252
|
spirit.width width(sub_block)
|
169
253
|
sub_block.regs.each do |name, reg|
|
@@ -189,7 +273,95 @@ xsi:schemaLocation="$REGMEM_HOME/builder/ipxact/schema/ipxact
|
|
189
273
|
spirit.description try(bits, :brief_description, :name_full, :full_name)
|
190
274
|
spirit.bitOffset bits.position
|
191
275
|
spirit.bitWidth bits.size
|
192
|
-
|
276
|
+
# When exporting to 1685-2009 schema, need to handle special cases (writeOnce),
|
277
|
+
# modifiedWriteValue, and readAction fields.
|
278
|
+
if options[:schema] == '1685-2009'
|
279
|
+
if bits.writable? && bits.readable?
|
280
|
+
if bits.access == :w1
|
281
|
+
spirit.access 'read-writeOnce'
|
282
|
+
else
|
283
|
+
spirit.access 'read-write'
|
284
|
+
end
|
285
|
+
elsif bits.writable?
|
286
|
+
if bits.access == :wo1
|
287
|
+
spirit.access 'writeOnce'
|
288
|
+
else
|
289
|
+
spirit.access 'write-only'
|
290
|
+
end
|
291
|
+
elsif bits.readable?
|
292
|
+
spirit.access 'read-only'
|
293
|
+
end
|
294
|
+
if bits.readable?
|
295
|
+
unless @@access_hash[bits.access][:read].nil?
|
296
|
+
spirit.readAction @@access_hash[bits.access][:read]
|
297
|
+
end
|
298
|
+
end
|
299
|
+
if bits.writable?
|
300
|
+
unless @@access_hash[bits.access][:write].nil?
|
301
|
+
spirit.modifiedWriteValue @@access_hash[bits.access][:write]
|
302
|
+
end
|
303
|
+
end
|
304
|
+
else # Assume Spirit 1.4 if not
|
305
|
+
spirit.access bits.access
|
306
|
+
end
|
307
|
+
# HDL paths provide hooks for a testbench to directly manipulate the
|
308
|
+
# registers without having to go through a bus interface or read/write
|
309
|
+
# protocol. Because the hierarchical path to a register block can vary
|
310
|
+
# greatly between devices, allow the user to provide an abs_path value
|
311
|
+
# and define "full_reg_path" to assist.
|
312
|
+
#
|
313
|
+
# When registers reside at the top level of the memory map, assume "top"
|
314
|
+
# for the register path name. (Need to improve this process in the future.)
|
315
|
+
if reg.owner.top_level? == true
|
316
|
+
regpath = 'top'
|
317
|
+
else
|
318
|
+
regpath = reg.owner.path
|
319
|
+
end
|
320
|
+
# If :full_reg_path is defined, the :abs_path metadata for a register will
|
321
|
+
# be used for regpath. This can be assigned at an address block (sub-block)
|
322
|
+
# level.
|
323
|
+
unless options[:full_reg_path].nil? == true
|
324
|
+
regpath = reg.path
|
325
|
+
end
|
326
|
+
if options[:schema] == '1685-2009'
|
327
|
+
spirit.parameters do
|
328
|
+
spirit.parameter do
|
329
|
+
spirit.name '_hdlPath_'
|
330
|
+
# HDL path needs to be to the declared bit field name, NOT to the bus slice
|
331
|
+
# that Origen's "abs_path" will yield. Ex:
|
332
|
+
#
|
333
|
+
# ~~~ ruby
|
334
|
+
# reg :myreg, 0x0, size: 32 do |reg|
|
335
|
+
# bits 7..4, :bits_high
|
336
|
+
# bits 3..0, :bits_low
|
337
|
+
# end
|
338
|
+
# ~~~
|
339
|
+
#
|
340
|
+
# The abs_path to ...regs(:myreg).bits(:bits_low).abs_path will yield
|
341
|
+
# "myreg.myreg[3:0]", not "myreg.bits_low". This is not an understood path
|
342
|
+
# in Origen (myreg[3:0] does not exist in either myreg's RegCollection or BitCollection),
|
343
|
+
# and does not sync with how RTL would create bits_low[3:0].
|
344
|
+
# Therefore, use the path to "myreg"'s owner appended with bits.name (bits_low here).
|
345
|
+
#
|
346
|
+
# This can be done in a register or sub_blocks definition by defining register
|
347
|
+
# metadata for "abs_path". If the reg owner's path weren't used, but instead the
|
348
|
+
# reg's path, that would imply each register was a separate hierarchical path in
|
349
|
+
# RTL (ex: "top.myblock.regblock.myreg.myreg_bits"), which is normally not the case.
|
350
|
+
# The most likely path would be "top.myblock.regblock.myreg_bits.
|
351
|
+
spirit.value "#{regpath}.#{bits.name}"
|
352
|
+
end
|
353
|
+
end
|
354
|
+
end
|
355
|
+
# C. Hume - Unclear which vendorExtensions should be included by default, if any.
|
356
|
+
# Future improvment: Allow passing of vendorExtensions enable & value hash/string
|
357
|
+
# if options[:schema] == '1685-2009'
|
358
|
+
# spirit.vendorExtensions do
|
359
|
+
# vendorext = { 'xmlns:vendorExtensions' => '$UVM_RGM_HOME/builder/ipxact/schema' }
|
360
|
+
# xml['vendorExtensions'].hdl_path vendorext, "#{reg.path}.#{bits.name}"
|
361
|
+
# end
|
362
|
+
# end
|
363
|
+
|
364
|
+
# Allow optional inclusion of bit field values and descriptions
|
193
365
|
if options[:include_bit_field_values]
|
194
366
|
if bits.bit_value_descriptions[0]
|
195
367
|
bits.bit_value_descriptions.each do |val, desc|
|
@@ -201,28 +373,43 @@ xsi:schemaLocation="$REGMEM_HOME/builder/ipxact/schema/ipxact
|
|
201
373
|
end
|
202
374
|
end
|
203
375
|
end
|
204
|
-
if uvm?
|
376
|
+
if uvm? && !(options[:schema] == '1685-2009')
|
205
377
|
spirit.vendorExtensions do
|
206
|
-
xml['vendorExtensions'].hdl_path bits.
|
378
|
+
xml['vendorExtensions'].hdl_path "#{regpath}.#{bits.name}"
|
207
379
|
end
|
208
380
|
end
|
209
381
|
end
|
210
382
|
end
|
211
383
|
end
|
212
384
|
end
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
end
|
385
|
+
# Unclear whether addressBlock vendor extensions are supported in Spirit 1.4
|
386
|
+
# if uvm?
|
387
|
+
# spirit.vendorExtensions do
|
388
|
+
# xml['vendorExtensions'].hdl_path sub_block.path(relative_to: owner)
|
389
|
+
# end
|
390
|
+
# end
|
218
391
|
end
|
219
392
|
end
|
393
|
+
# Assume byte addressing if not specified
|
394
|
+
if owner.methods.include?(:lau) == false
|
395
|
+
spirit.addressUnitBits 8
|
396
|
+
else
|
397
|
+
spirit.addressUnitBits owner.lau
|
398
|
+
end
|
220
399
|
end
|
221
400
|
end
|
222
401
|
end
|
223
402
|
end
|
224
403
|
end
|
225
|
-
|
404
|
+
# When testing with 'origen examples', travis_ci (bash) will end up with empty tags -
|
405
|
+
# '<spirit:description/>' that do not appear on some user's tshell environments. To
|
406
|
+
# prevent false errors for this issue, force Nokogiri to use self-closing tags
|
407
|
+
# ('<spirit:description></spirit:description>'), but keep the XML formatted for readability.
|
408
|
+
# All tags with no content will appear as '<spirit:tag_name></spirit:tag_name>'.
|
409
|
+
#
|
410
|
+
builder.to_xml(save_with: Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS |
|
411
|
+
Nokogiri::XML::Node::SaveOptions::FORMAT)
|
412
|
+
# builder.to_xml
|
226
413
|
end
|
227
414
|
|
228
415
|
private
|
data/lib/cross_origen_dev/dut.rb
CHANGED
@@ -22,6 +22,7 @@ module CrossOrigenDev
|
|
22
22
|
cr_import(path: "#{Origen.root}/imports/ipxact.xml")
|
23
23
|
end
|
24
24
|
|
25
|
+
# Import Spirit 1.4 version of ATX
|
25
26
|
def add_atx2
|
26
27
|
sub_block :atx2, class_name: 'ATX2', base_address: 0x6000_0000
|
27
28
|
end
|
@@ -31,7 +32,21 @@ module CrossOrigenDev
|
|
31
32
|
include CrossOrigen
|
32
33
|
|
33
34
|
def initialize
|
34
|
-
cr_import(path: "#{Origen.root}/approved/ip_xact_sub_block.xml")
|
35
|
+
cr_import(path: "#{Origen.root}/approved/ip_xact_sub_block.xml", refresh: true)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Import 1685-2009 version of ATX
|
40
|
+
def add_atx3
|
41
|
+
sub_block :atx3, class_name: 'ATX3', base_address: 0x7000_0000
|
42
|
+
end
|
43
|
+
|
44
|
+
class ATX3
|
45
|
+
include Origen::Model
|
46
|
+
include CrossOrigen
|
47
|
+
|
48
|
+
def initialize
|
49
|
+
cr_import(path: "#{Origen.root}/approved/ip_xact_sub_block_1685.xml", refresh: true)
|
35
50
|
end
|
36
51
|
end
|
37
52
|
|
@@ -40,22 +55,62 @@ module CrossOrigenDev
|
|
40
55
|
include CrossOrigen
|
41
56
|
|
42
57
|
def initialize
|
43
|
-
# A manually defined
|
58
|
+
# A manually defined set of registers for testing the conversion of any specific attributes
|
44
59
|
|
45
|
-
# **
|
46
|
-
#
|
60
|
+
# ** MPU Clock Divider Register **
|
61
|
+
#
|
62
|
+
# The MCLKDIV register is used to divide down the frequency of the OSCCLK input. If the MCLKDIV
|
47
63
|
# register is set to value "N", then the output (beat) frequency of the clock divider is OSCCLK / (N+1). The
|
48
|
-
# resulting beats are, in turn, counted by the
|
49
|
-
# operations.
|
64
|
+
# resulting beats are, in turn, counted by the TIMER module to control the duration of operations.
|
50
65
|
# This is a test of potentially problematic characters ' " \' \" < >
|
51
66
|
reg :mclkdiv, 0x0, size: 16, bit_order: 'decrement' do
|
52
|
-
# **Oscillator (Hi)** -
|
53
|
-
#
|
67
|
+
# **Oscillator (Hi)** - Clock source selection. (Note that in addition to this firmware-controlled bit, the
|
68
|
+
# clock source is also dependent on test and power control discretes).
|
54
69
|
#
|
55
|
-
# 0 |
|
56
|
-
# 1 |
|
70
|
+
# 0 | Clock is the externally supplied bus clock bus_clk
|
71
|
+
# 1 | Clock is the internal oscillator from the hardblock
|
57
72
|
bit 15, :osch, reset: 1, access: :rw
|
58
73
|
end
|
74
|
+
|
75
|
+
# **Access Type Test Register**
|
76
|
+
#
|
77
|
+
# This register tests the IP-XACT export of various bit access types, such as write-one-to-clear,
|
78
|
+
# read-only, etc.
|
79
|
+
reg :access_types, 0x4, size: 32 do
|
80
|
+
# Test read-only access.
|
81
|
+
bit 31, :readonly, access: :ro
|
82
|
+
# Test read-write access.
|
83
|
+
bit 30, :readwrite, access: :rw
|
84
|
+
# Test read-clear access, where a read clears the value afterwards.
|
85
|
+
bit 29, :readclear, access: :rc
|
86
|
+
# Test read-set access, where a read sets the bit afterwards.
|
87
|
+
bit 28, :readset, access: :rs
|
88
|
+
# Test writable, clear-on-read access, etc...
|
89
|
+
bit 27, :writablereadclear, access: :wrc
|
90
|
+
bit 26, :writablereadset, access: :wrs
|
91
|
+
bit 25, :writeclear, access: :wc
|
92
|
+
bit 24, :writeset, access: :ws
|
93
|
+
bit 23, :writesetreadclear, access: :wsrc
|
94
|
+
bit 22, :writeclearreadset, access: :wcrs
|
95
|
+
bit 21, :write1toclear, access: :w1c
|
96
|
+
bit 20, :write1toset, access: :w1s
|
97
|
+
bit 19, :write1totoggle, access: :w1t
|
98
|
+
bit 18, :write0toclear, access: :w0c
|
99
|
+
bit 17, :write0toset, access: :w0s
|
100
|
+
bit 16, :write0totoggle, access: :w0t
|
101
|
+
bit 15, :write1tosetreadclear, access: :w1src
|
102
|
+
bit 14, :write1toclearreadset, access: :w1crs
|
103
|
+
bit 13, :write0tosetreadclear, access: :w0src
|
104
|
+
bit 12, :write0toclearreadset, access: :w0crs
|
105
|
+
bit 11, :writeonly, access: :wo
|
106
|
+
bit 10, :writeonlyclear, access: :woc
|
107
|
+
bit 9, :writeonlyreadzero, access: :worz
|
108
|
+
bit 8, :writeonlyset, access: :wos
|
109
|
+
bit 7, :writeonce, access: :w1
|
110
|
+
bit 6, :writeonlyonce, access: :wo1
|
111
|
+
bit 5, :readwritenocheck, access: :dc
|
112
|
+
bit 4, :readonlyclearafter, access: :rowz
|
113
|
+
end
|
59
114
|
end
|
60
115
|
end
|
61
116
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= $dut.to_ip_xact :format => :uvm, :schema=> '1685-2009', :mmap_name => 'RegisterMap', :vendor => 'origen-sdk.org', :library => 'id', :name => 'ipxact', :mmap_ref => 'test', :bus_interface => 'AMBA3' %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= $dut.atx.to_ip_xact :format => :uvm, :schema=> '1685-2009', :mmap_name => 'RegisterMap', :vendor => 'origen-sdk.org', :library => 'id', :name => 'ipxact_1685_2009' %>
|
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: 1.
|
4
|
+
version: 1.2.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: 2018-
|
11
|
+
date: 2018-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.38'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.38'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sanitize
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -65,7 +65,9 @@ files:
|
|
65
65
|
- templates/test/default.ralf.erb
|
66
66
|
- templates/test/headers_default.h.erb
|
67
67
|
- templates/test/ip_xact.xml.erb
|
68
|
+
- templates/test/ip_xact_1685-2009.xml.erb
|
68
69
|
- templates/test/ip_xact_sub_block.xml.erb
|
70
|
+
- templates/test/ip_xact_sub_block_1685.xml.erb
|
69
71
|
- templates/web/_history.md
|
70
72
|
- templates/web/example.md.erb
|
71
73
|
- templates/web/examples.md.erb
|
@@ -95,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
97
|
version: 1.8.11
|
96
98
|
requirements: []
|
97
99
|
rubyforge_project:
|
98
|
-
rubygems_version: 2.6
|
100
|
+
rubygems_version: 2.7.6
|
99
101
|
signing_key:
|
100
102
|
specification_version: 4
|
101
103
|
summary: Translators for importing and exporting Origen data to/from 3rd party formats
|