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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5562897c79ebf49e9fb75bbb83787437c0ed8d3f
4
- data.tar.gz: 4e47b1a017700d51a7dd34be36120a46cf4d245a
2
+ SHA256:
3
+ metadata.gz: fa363dd12d4fee8fd75ab281271dd739994b0a433c9630fb556c16ef8095542d
4
+ data.tar.gz: 4bfd5b6d824821fe249a095451f9229145435d2c813bc9d4836f6315989cbe89
5
5
  SHA512:
6
- metadata.gz: 29cc7e80165331b890f6ee18b3a9e63b686ee022ec167891a065ef1ee80c89b5ae7316a55657d3f756c48fef1615dac52bae2f6dbe7026f5232aabf128d8f998
7
- data.tar.gz: a39363d28a53c3d9cd11869c15b0e7b2f7722bf8e0165b3227caebdc1352cc81a12e8838da87f0fdef1632ef96cdec8c8b1fb6c65e75be46604ca80fcd2c4ff8
6
+ metadata.gz: 98950a584c2f3c81fe453a79341bd97b7ea8a8fbe4b887ba84ee480671ae2b86a942ea7c842a1d4af85476f5e66080b05d4ed0f51a8f24313a3510ad35b2339e
7
+ data.tar.gz: c510adad00c3db5c117c320105a2eba67c529209dd0cb9e66d6fdd540ea8c0ad787578c29322fb1171fff2bc12cb0f1767c51027c69aa7374a97ef0eef1726a2
@@ -1,6 +1,6 @@
1
1
  module CrossOrigen
2
2
  MAJOR = 1
3
- MINOR = 1
3
+ MINOR = 2
4
4
  BUGFIX = 0
5
5
  DEV = nil
6
6
 
@@ -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
- access = fetch field.at_xpath('spirit:access'), get_text: true
75
- if access =~ /\S+\-\S+/
76
- access = access[/^(\S)/, 1] + access[/\-(\S)\S+$/, 1]
77
- access = access.downcase.to_sym
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
- 'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4',
131
- 'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4/index.xsd'
132
- ]
133
- if uvm?
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
- headers = {
138
- 'xmlns:spirit' => 'http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.4',
139
- 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
140
- 'xsi:schemaLocation' => schemas.join(' ')
141
- }
142
- if uvm?
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
- spirit.name map_name
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
- spirit.access bits.access
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.path(relative_to: sub_block)
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
- if uvm?
214
- spirit.vendorExtensions do
215
- xml['vendorExtensions'].hdl_path sub_block.path(relative_to: owner)
216
- end
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
- builder.to_xml
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
@@ -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 register for testing the conversion of any specific attributes
58
+ # A manually defined set of registers for testing the conversion of any specific attributes
44
59
 
45
- # ** MGATE Clock Divider Register **
46
- # The MCLKDIV register is used to divide down the frequency of the HBOSCCLK input. If the MCLKDIV
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 PTIMER module to control the duration of Flash high-voltage
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)** - Firmware FMU clk source selection. (Note that in addition to this firmware-controlled bit, the
53
- # FMU clock source is also dependent on test and power control discretes).
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 | FMU clock is the externally supplied bus clock ipg_clk
56
- # 1 | FMU clock is the internal oscillator from the TFS hardblock
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.1.0
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-05-11 00:00:00.000000000 Z
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.32'
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.32'
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.7
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