cross_origen 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|