origen 0.7.47 → 0.8.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
2
  SHA1:
3
- metadata.gz: d8688e7223db63afb14c0f389e2ab3d886a734c5
4
- data.tar.gz: 86b84cadd3cef4869577b0d1c0537c520665df6d
3
+ metadata.gz: 7ed980dcd18e1d53defcd27928d2fae2b5c6fe53
4
+ data.tar.gz: c9d7b163c3c5d219ea8b81f0b624938cf5049877
5
5
  SHA512:
6
- metadata.gz: a12e93f8ecbbae0ace53ee1766c4508915f51cf9723862b991776c510b412e6713aa95394ea1901cc57a4e783f088f41f21f94c2979df5b9a28f837d08a6b12c
7
- data.tar.gz: a0146dad6e254c25bb97fd58ad905e5cf8af69690ec7bff85e1a3ee786ac15ca0adf1c28814d0ed83379cb62701aac22f2f8dc1e99f809481c61acd7dbc76293
6
+ metadata.gz: 540490e6a49ea8c7acef2f18d56eec937a14fe826b91f48fc0344a52ee9027d6310ed9546a77f1d2a95a484123feac4ca366228b8b8c01bfa79ed1f575f7ac5a
7
+ data.tar.gz: 83801037183ae53aa780c1c06c4a15bc9976361e2a552011195176eb8004353a69a1b58b525de23ec4373906dc6ad7b8c4b395aec07a65c300e469fc7728ae22
@@ -1,7 +1,7 @@
1
1
  module Origen
2
2
  MAJOR = 0
3
- MINOR = 7
4
- BUGFIX = 47
3
+ MINOR = 8
4
+ BUGFIX = 0
5
5
  DEV = nil
6
6
 
7
7
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
@@ -44,6 +44,18 @@ module C99
44
44
  def add_non_byte_aligned_regs
45
45
  add_reg :non_aligned_small, 0x1000, size: 4
46
46
  add_reg :non_aligned_big, 0x1010, size: 10
47
+ add_reg :non_aligned_small_msb0, 0x2000, size: 4, bit_order: :msb0
48
+ add_reg :non_aligned_big_msb0, 0x2010, size: 10, bit_order: :msb0
49
+ end
50
+
51
+ def add_msb0_regs
52
+ reg :SIUL2_MIDR1, 0x4, bit_order: :msb0 do |reg|
53
+ bit 0..15, :PARTNUM, res: 0b0101011101110111
54
+ bit 16, :ED
55
+ bit 17..21, :PKG
56
+ bit 24..27, :MAJOR_MASK
57
+ bit 28..31, :MINOR_MASK
58
+ end
47
59
  end
48
60
  end
49
61
 
@@ -23,7 +23,6 @@ module Origen
23
23
  require 'origen/users'
24
24
  include Origen::Users
25
25
 
26
- attr_accessor :current_job
27
26
  attr_accessor :name
28
27
  attr_accessor :namespace
29
28
 
@@ -99,6 +98,14 @@ module Origen
99
98
  end
100
99
  end
101
100
 
101
+ def current_job
102
+ current_jobs.last
103
+ end
104
+
105
+ def current_jobs
106
+ @current_jobs ||= []
107
+ end
108
+
102
109
  # Load all rake tasks defined in the application's lib/task directory
103
110
  def load_tasks
104
111
  RakeLoader.new.load_tasks
@@ -109,7 +109,7 @@ module Origen
109
109
  end
110
110
 
111
111
  def run
112
- Origen.app.current_job = self
112
+ Origen.app.current_jobs << self
113
113
  begin
114
114
  if @options[:compile]
115
115
  Origen.generator.compiler.compile(@requested_pattern, @options)
@@ -151,6 +151,7 @@ module Origen
151
151
  raise
152
152
  end
153
153
  end
154
+ Origen.app.current_jobs.pop
154
155
  end
155
156
  end
156
157
  end
@@ -50,6 +50,7 @@ module Origen
50
50
  Origen.top_level == self
51
51
  end
52
52
  alias_method :is_dut?, :is_top_level?
53
+ alias_method :top_level?, :is_top_level?
53
54
 
54
55
  # Means that when dealing with a controller/model pair, you can
55
56
  # always call obj.model and obj.controller to get the one you want,
@@ -24,6 +24,20 @@ module Origen
24
24
 
25
25
  attr_accessor :owner
26
26
  attr_accessor :name
27
+ attr_writer :bit_order
28
+ end
29
+
30
+ # Returns the bit order attribute of the model (either :msb0 or :lsb0). If
31
+ # not explicitly defined on this model it will be inherited from the parent
32
+ # and will default to :lsb0 at the top-level
33
+ def bit_order
34
+ @bit_order ||= begin
35
+ if parent
36
+ parent.bit_order
37
+ else
38
+ :lsb0
39
+ end
40
+ end
27
41
  end
28
42
 
29
43
  def method_missing(method, *args, &block) # :nodoc:
@@ -17,6 +17,7 @@ module Origen
17
17
  STORE_CHAR = 'S'
18
18
 
19
19
  attr_accessor :name
20
+ alias_method :id, :name
20
21
 
21
22
  def initialize(reg, name, data = []) # :nodoc:
22
23
  if reg.respond_to?(:has_bits_enabled_by_feature?) && reg.has_parameter_bound_bits?
@@ -27,6 +28,11 @@ module Origen
27
28
  [data].flatten.each { |item| self << item }
28
29
  end
29
30
 
31
+ # Returns the bit order of the parent register
32
+ def bit_order
33
+ parent.bit_order
34
+ end
35
+
30
36
  def terminal?
31
37
  true
32
38
  end
@@ -103,7 +109,7 @@ module Origen
103
109
  v = tester.capture do
104
110
  store!(sync: true)
105
111
  end
106
- reverse_each.with_index do |bit, i|
112
+ reverse_shift_out_with_index do |bit, i|
107
113
  bit.instance_variable_set('@updated_post_reset', true)
108
114
  bit.instance_variable_set('@data', v.first[i])
109
115
  end
@@ -264,7 +270,7 @@ module Origen
264
270
  # reg(:control).data # => 0x55, assuming the reg has the required bits to store that
265
271
  def data
266
272
  data = 0
267
- each_with_index do |bit, i|
273
+ shift_out_with_index do |bit, i|
268
274
  return undefined if bit.is_a?(Origen::UndefinedClass)
269
275
  data |= bit.data << i
270
276
  end
@@ -282,7 +288,7 @@ module Origen
282
288
  # Returns the reverse of the data value held by the collection
283
289
  def data_reverse
284
290
  data = 0
285
- reverse.each_with_index do |bit, i|
291
+ reverse_shift_out_with_index do |bit, i|
286
292
  return undefined if bit.is_a?(Origen::UndefinedClass)
287
293
  data |= bit.data << i
288
294
  end
@@ -295,6 +301,11 @@ module Origen
295
301
  self
296
302
  end
297
303
 
304
+ # Returns true if the collection contains all bits in the register
305
+ def whole_reg?
306
+ size == parent.size
307
+ end
308
+
298
309
  # Set the data value of the collection within the patgen, but not on silicon - i.e. calling
299
310
  # write will not trigger a pattern write event.
300
311
  def write(value, options = {})
@@ -305,7 +316,10 @@ module Origen
305
316
  value = value[0]
306
317
  end
307
318
  value = value.data if value.respond_to?('data')
308
- each_with_index { |bit, i| bit.write(value[i], options) }
319
+
320
+ size.times do |i|
321
+ self[i].write(value[i], options)
322
+ end
309
323
  self
310
324
  end
311
325
  alias_method :data=, :write
@@ -325,8 +339,8 @@ module Origen
325
339
  write(value, force: true)
326
340
  end
327
341
  if options[:mask]
328
- each_with_index { |bit, i| bit.read if options[:mask][i] == 1 }
329
- each_with_index { |bit, i| bit.clear_read_flag if options[:mask][i] == 0 }
342
+ shift_out_with_index { |bit, i| bit.read if options[:mask][i] == 1 }
343
+ shift_out_with_index { |bit, i| bit.clear_read_flag if options[:mask][i] == 0 }
330
344
  else
331
345
  each(&:read)
332
346
  end
@@ -374,12 +388,58 @@ module Origen
374
388
  # bist_shift(bit)
375
389
  # end
376
390
  def shift_out_left
377
- reverse_each { |bit| yield bit }
391
+ if bit_order == :msb0
392
+ each { |bit| yield bit }
393
+ else
394
+ reverse_each { |bit| yield bit }
395
+ end
396
+ end
397
+
398
+ # Same as Reg#shift_out_left but includes the index counter
399
+ def shift_out_left_with_index
400
+ if bit_order == :msb0
401
+ each.with_index { |bit, i| yield bit, i }
402
+ else
403
+ reverse_each.with_index { |bit, i| yield bit, i }
404
+ end
378
405
  end
379
406
 
380
407
  # Same as Reg#shift_out_left but starts from the MSB
381
408
  def shift_out_right
382
- each { |bit| yield bit }
409
+ if bit_order == :msb0
410
+ reverse_each { |bit| yield bit }
411
+ else
412
+ each { |bit| yield bit }
413
+ end
414
+ end
415
+
416
+ # Same as Reg#shift_out_right but includes the index counter
417
+ def shift_out_right_with_index
418
+ if bit_order == :msb0
419
+ reverse_each.with_index { |bit, i| yield bit, i }
420
+ else
421
+ each_with_index { |bit, i| yield bit, i }
422
+ end
423
+ end
424
+
425
+ # Yields each bit in the register, LSB first.
426
+ def shift_out(&block)
427
+ each(&block)
428
+ end
429
+
430
+ # Yields each bit in the register and its index, LSB first.
431
+ def shift_out_with_index(&block)
432
+ each_with_index(&block)
433
+ end
434
+
435
+ # Yields each bit in the register, MSB first.
436
+ def reverse_shift_out(&block)
437
+ reverse_each(&block)
438
+ end
439
+
440
+ # Yields each bit in the register and its index, MSB first.
441
+ def reverse_shift_out_with_index(&block)
442
+ reverse_each.with_index(&block)
383
443
  end
384
444
 
385
445
  # Returns true if any bits have the read flag set - see Bit#is_to_be_read?
@@ -410,7 +470,7 @@ module Origen
410
470
  # value in these bits
411
471
  def setting(value)
412
472
  result = 0
413
- each_with_index do |bit, i|
473
+ shift_out_with_index do |bit, i|
414
474
  result |= bit.setting(value[i])
415
475
  end
416
476
  result
@@ -640,11 +700,11 @@ module Origen
640
700
  def reset_data(value = nil)
641
701
  # This method was originally setup to set the reset value by passing an argument
642
702
  if value
643
- each_with_index { |bit, i| bit.reset_val = value[i] }
703
+ shift_out_with_index { |bit, i| bit.reset_val = value[i] }
644
704
  self
645
705
  else
646
706
  data = 0
647
- each_with_index do |bit, i|
707
+ shift_out_with_index do |bit, i|
648
708
  return bit.reset_data if bit.reset_data.is_a?(Symbol)
649
709
  data |= bit.reset_data << i
650
710
  end
@@ -659,13 +719,13 @@ module Origen
659
719
 
660
720
  # Modify writable for bits in collection
661
721
  def writable(value)
662
- each_with_index { |bit, i| bit.writable = (value[i] == 0b1); bit.set_access_from_rw }
722
+ shift_out_with_index { |bit, i| bit.writable = (value[i] == 0b1); bit.set_access_from_rw }
663
723
  self
664
724
  end
665
725
 
666
726
  # Modify readable for bits in collection
667
727
  def readable(value)
668
- each_with_index { |bit, i| bit.readable = (value[i] == 0b1); bit.set_access_from_rw }
728
+ shift_out_with_index { |bit, i| bit.readable = (value[i] == 0b1); bit.set_access_from_rw }
669
729
  self
670
730
  end
671
731
 
@@ -718,20 +778,20 @@ module Origen
718
778
 
719
779
  # Modify clr_only for bits in collection
720
780
  def clr_only(value)
721
- each_with_index { |bit, i| bit.clr_only = (value[i] == 0b1) }
781
+ shift_out_with_index { |bit, i| bit.clr_only = (value[i] == 0b1) }
722
782
  self
723
783
  end
724
784
 
725
785
  # Modify set_only for bits in collection
726
786
  def set_only(value)
727
- each_with_index { |bit, i| bit.set_only = (value[i] == 0b1) }
787
+ shift_out_with_index { |bit, i| bit.set_only = (value[i] == 0b1) }
728
788
  self
729
789
  end
730
790
 
731
791
  # Return nvm_dep value held by collection
732
792
  def nvm_dep
733
793
  nvm_dep = 0
734
- each_with_index { |bit, i| nvm_dep |= bit.nvm_dep << i }
794
+ shift_out_with_index { |bit, i| nvm_dep |= bit.nvm_dep << i }
735
795
  nvm_dep
736
796
  end
737
797
 
@@ -821,7 +881,7 @@ module Origen
821
881
  # myreg.data # => 0b0011
822
882
  def shift_left(data = 0)
823
883
  prev_bit = nil
824
- reverse_each do |bit|
884
+ reverse_shift_out do |bit|
825
885
  prev_bit.write(bit.data) if prev_bit
826
886
  prev_bit = bit
827
887
  end
@@ -844,7 +904,7 @@ module Origen
844
904
  # myreg.data # => 0b1100
845
905
  def shift_right(data = 0)
846
906
  prev_bit = nil
847
- each do |bit|
907
+ shift_out do |bit|
848
908
  prev_bit.write(bit.data) if prev_bit
849
909
  prev_bit = bit
850
910
  end
@@ -14,12 +14,13 @@ module Origen
14
14
  # to all of its contained bits unless a specific bit has its own definition of the same
15
15
  # attribute
16
16
  REG_LEVEL_ATTRIBUTES = {
17
- feature: {},
18
- reset: { aliases: [:res] },
19
- memory: {},
20
- path: { aliases: [:hdl_path] },
21
- abs_path: { aliases: [:absolute_path] },
22
- access: {}
17
+ feature: {},
18
+ reset: { aliases: [:res] },
19
+ memory: {},
20
+ path: { aliases: [:hdl_path] },
21
+ abs_path: { aliases: [:absolute_path] },
22
+ access: {},
23
+ bit_order: {}
23
24
  }
24
25
 
25
26
  # Returns the object that own the register.
@@ -86,6 +87,13 @@ module Origen
86
87
  add_bits_from_options(options)
87
88
  end
88
89
 
90
+ # Returns the bit order attribute of the register (either :msb0 or :lsb0). If
91
+ # not explicitly defined on this register it will be inherited from the parent
92
+ # and will default to :lsb0 at the top-level
93
+ def bit_order
94
+ @bit_order ||= parent.bit_order
95
+ end
96
+
89
97
  def freeze
90
98
  bits.each(&:freeze)
91
99
  # Call any methods which cache results to generate the instance variables
@@ -122,10 +130,14 @@ module Origen
122
130
  bit_width = 13
123
131
  desc = ["\n0x%X - :#{name}" % address]
124
132
  r = size % 8
125
- if r == 0
133
+ if r == 0 || (size > 8 && bit_order == :msb0)
126
134
  desc << (' ' + ('=' * (bit_width + 1) * 8)).chop
127
135
  else
128
- desc << (' ' + (' ' * (bit_width + 1) * (8 - r)) + ('=' * (bit_width + 1) * r)).chop
136
+ if bit_order == :lsb0
137
+ desc << (' ' + (' ' * (bit_width + 1) * (8 - r)) + ('=' * (bit_width + 1) * r)).chop
138
+ else
139
+ desc << (' ' + ('=' * (bit_width + 1) * r)).chop
140
+ end
129
141
  end
130
142
 
131
143
  # "<#{self.class}: #{self.name}>"
@@ -133,30 +145,48 @@ module Origen
133
145
  num_bytes.times do |byte_index|
134
146
  # Need to add support for little endian regs here?
135
147
  byte_number = num_bytes - byte_index
136
- max_bit = (byte_number * 8) - 1
137
- min_bit = max_bit - 8 + 1
148
+ if bit_order == :lsb0
149
+ max_bit = (byte_number * 8) - 1
150
+ min_bit = max_bit - 8 + 1
151
+ else
152
+ min_bit = (byte_index * 8)
153
+ max_bit = min_bit + 7
154
+ end
138
155
 
139
156
  # BIT INDEX ROW
140
157
  line = ' '
158
+ line_complete = false
141
159
  8.times do |i|
142
- bit_num = (byte_number * 8) - i - 1
160
+ if bit_order == :lsb0
161
+ bit_num = (byte_number * 8) - i - 1
162
+ else
163
+ bit_num = (byte_index * 8) + i
164
+ end
143
165
  if bit_num > size - 1
144
- line << ' ' + ''.center(bit_width)
166
+ if bit_order == :msb0 && bit_num == size
167
+ line += '|'
168
+ line_complete = true
169
+ else
170
+ line << ' ' + ''.center(bit_width)
171
+ end
145
172
  else
146
173
  line << '|' + "#{bit_num}".center(bit_width)
147
174
  end
148
175
  end
149
- line += '|'
176
+ line += '|' unless line_complete
150
177
  desc << line
151
178
 
152
179
  # BIT NAME ROW
153
180
  line = ' '
154
181
  first_done = false
182
+ line_complete = false
155
183
  named_bits include_spacers: true do |name, bit, bitcounter|
156
184
  if _bit_in_range?(bit, max_bit, min_bit)
157
- if max_bit > (size - 1) && !first_done
158
- (max_bit - (size - 1)).times do
159
- line << ' ' * (bit_width + 1)
185
+ if bit_order == :lsb0
186
+ if max_bit > (size - 1) && !first_done
187
+ (max_bit - (size - 1)).times do
188
+ line << ' ' * (bit_width + 1)
189
+ end
160
190
  end
161
191
  end
162
192
 
@@ -164,13 +194,21 @@ module Origen
164
194
 
165
195
  if name
166
196
  if bitcounter.nil?
167
- bit_name = "#{name}[#{_max_bit_in_range(bit, max_bit, min_bit)}:#{_min_bit_in_range(bit, max_bit, min_bit)}]"
197
+ if bit_order == :lsb0
198
+ bit_name = "#{name}[#{_max_bit_in_range(bit, max_bit, min_bit)}:#{_min_bit_in_range(bit, max_bit, min_bit)}]"
199
+ else
200
+ bit_name = "#{name}[#{_min_bit_in_range(bit, max_bit, min_bit)}:#{_max_bit_in_range(bit, max_bit, min_bit)}]"
201
+ end
168
202
  bit_span = _num_bits_in_range(bit, max_bit, min_bit)
169
203
 
170
204
  else
171
205
  upper = _max_bit_in_range(bit, max_bit, min_bit) + bitcounter - bit.size
172
206
  lower = _min_bit_in_range(bit, max_bit, min_bit) + bitcounter - bit.size
173
- bit_name = "#{name}[#{upper}:#{lower}]"
207
+ if bit_order == :lsb0
208
+ bit_name = "#{name}[#{upper}:#{lower}]"
209
+ else
210
+ bit_name = "#{name}[#{upper}:#{lower}]"
211
+ end
174
212
  bit_span = upper - lower + 1
175
213
  end
176
214
  width = (bit_width * bit_span) + bit_span - 1
@@ -212,9 +250,11 @@ module Origen
212
250
  first_done = false
213
251
  named_bits include_spacers: true do |name, bit, _bitcounter|
214
252
  if _bit_in_range?(bit, max_bit, min_bit)
215
- if max_bit > (size - 1) && !first_done
216
- (max_bit - (size - 1)).times do
217
- line << ' ' * (bit_width + 1)
253
+ if bit_order == :lsb0
254
+ if max_bit > (size - 1) && !first_done
255
+ (max_bit - (size - 1)).times do
256
+ line << ' ' * (bit_width + 1)
257
+ end
218
258
  end
219
259
  end
220
260
 
@@ -265,13 +305,19 @@ module Origen
265
305
 
266
306
  if size >= 8
267
307
  r = size % 8
268
- if byte_index == 0 && r != 0
308
+ if byte_index == 0 && r != 0 && bit_order == :lsb0
269
309
  desc << (' ' + ('=' * (bit_width + 1) * (8 - r)).chop + ' ' + ('-' * (bit_width + 1) * r)).chop
310
+ elsif (byte_index == num_bytes - 1) && r != 0 && bit_order == :msb0
311
+ desc << (' ' + ('-' * (bit_width + 1) * r)).chop
270
312
  else
271
313
  desc << (' ' + ('-' * (bit_width + 1) * 8)).chop
272
314
  end
273
315
  else
274
- desc << (' ' + (' ' * (bit_width + 1) * (8 - size)) + ('-' * (bit_width + 1) * size)).chop
316
+ if bit_order == :lsb0
317
+ desc << (' ' + (' ' * (bit_width + 1) * (8 - size)) + ('-' * (bit_width + 1) * size)).chop
318
+ else
319
+ desc << (' ' + ('-' * (bit_width + 1) * size)).chop
320
+ end
275
321
  end
276
322
  end
277
323
  desc.join("\n")
@@ -411,7 +457,6 @@ module Origen
411
457
 
412
458
  # @api private
413
459
  def add_bits_from_options(options = {}) # :nodoc:
414
- # edit Traynor
415
460
  # options is now an array for split bit groups or a hash if single bit/range bits
416
461
  # Now add the requested bits to the register, removing the unwritable bits as required
417
462
  options.each do |bit_id, bit_params|
@@ -490,12 +535,24 @@ module Origen
490
535
  @lookup.each { |_k, v| split_bits = true if v.is_a? Array }
491
536
 
492
537
  if split_bits == false
493
- current_pos = size
494
- # Sort by position descending
495
- @lookup.sort_by { |_name, details| -details[:pos] }.each do |name, details|
496
- pos = details[:bits] + details[:pos]
538
+ if bit_order == :lsb0
539
+ current_pos = size
540
+ else
541
+ current_pos = 0
542
+ end
543
+ # Sort by position
544
+ @lookup.sort_by { |_name, details| bit_order == :lsb0 ? -details[:pos] : details[:pos] }.each do |name, details|
545
+ if bit_order == :lsb0
546
+ pos = details[:bits] + details[:pos]
547
+ else
548
+ pos = details[:pos]
549
+ end
497
550
  if options[:include_spacers] && (pos != current_pos)
498
- collection = BitCollection.dummy(self, nil, size: current_pos - pos, pos: pos)
551
+ if bit_order == :lsb0
552
+ collection = BitCollection.dummy(self, nil, size: current_pos - pos, pos: pos)
553
+ else
554
+ collection = BitCollection.dummy(self, nil, size: pos - current_pos, pos: current_pos)
555
+ end
499
556
  unless collection.size == 0
500
557
  if block_given?
501
558
  yield nil, collection
@@ -515,10 +572,19 @@ module Origen
515
572
  result << [name, collection]
516
573
  end
517
574
  end
518
- current_pos = details[:pos]
575
+ if bit_order == :lsb0
576
+ current_pos = details[:pos]
577
+ else
578
+ current_pos = details[:bits] + details[:pos]
579
+ end
519
580
  end
520
- if options[:include_spacers] && current_pos != 0
521
- collection = BitCollection.dummy(self, nil, size: current_pos, pos: 0)
581
+ if options[:include_spacers] && ((bit_order == :lsb0 && current_pos != 0) ||
582
+ bit_order == :msb0 && current_pos != size)
583
+ if bit_order == :lsb0
584
+ collection = BitCollection.dummy(self, nil, size: current_pos, pos: 0)
585
+ else
586
+ collection = BitCollection.dummy(self, nil, size: size - current_pos, pos: current_pos)
587
+ end
522
588
  unless collection.size == 0
523
589
  if block_given?
524
590
  yield nil, collection
@@ -1159,7 +1225,7 @@ module Origen
1159
1225
  extract_meta_data(method, *args)
1160
1226
  else
1161
1227
  if BitCollection.instance_methods.include?(method)
1162
- BitCollection.new(self, name, @bits).send(method, *args, &block)
1228
+ to_bit_collection.send(method, *args, &block)
1163
1229
  elsif has_bits?(method)
1164
1230
  bits(method)
1165
1231
  else
@@ -1168,6 +1234,10 @@ module Origen
1168
1234
  end
1169
1235
  end
1170
1236
 
1237
+ def to_bit_collection
1238
+ BitCollection.new(self, name, @bits)
1239
+ end
1240
+
1171
1241
  # Recognize that Reg responds to all BitCollection methods methods based on
1172
1242
  # application-specific meta data properties
1173
1243
  def respond_to?(*args) # :nodoc:
@@ -319,12 +319,16 @@ module Origen
319
319
  FileUtils.rm_f(version_file) if File.exist?(version_file)
320
320
  rc = RevisionControl.new remote: rc_url, local: dir
321
321
  rc.checkout version: prefix_tag(tag), force: true
322
- `echo "#{tag}" >> "#{version_file}"`
322
+ File.open(version_file, 'w') do |f|
323
+ f.write tag
324
+ end
323
325
  else
324
326
  rc = RevisionControl.new remote: rc_url, local: dir
325
327
  rc.checkout version: prefix_tag(tag), force: true
326
- `touch "#{dir}/.initial_populate_successful"`
327
- `echo "#{tag}" >> "#{version_file}"`
328
+ FileUtils.touch "#{dir}/.initial_populate_successful"
329
+ File.open(version_file, 'w') do |f|
330
+ f.write tag
331
+ end
328
332
  end
329
333
  end
330
334
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.47
4
+ version: 0.8.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: 2017-04-06 00:00:00.000000000 Z
11
+ date: 2017-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -324,6 +324,20 @@ dependencies:
324
324
  - - '='
325
325
  - !ruby/object:Gem::Version
326
326
  version: 0.12.4
327
+ - !ruby/object:Gem::Dependency
328
+ name: sinatra
329
+ requirement: !ruby/object:Gem::Requirement
330
+ requirements:
331
+ - - "~>"
332
+ - !ruby/object:Gem::Version
333
+ version: '1'
334
+ type: :runtime
335
+ prerelease: false
336
+ version_requirements: !ruby/object:Gem::Requirement
337
+ requirements:
338
+ - - "~>"
339
+ - !ruby/object:Gem::Version
340
+ version: '1'
327
341
  description:
328
342
  email:
329
343
  - stephen.f.mcginty@gmail.com
@@ -568,7 +582,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
568
582
  version: 1.8.11
569
583
  requirements: []
570
584
  rubyforge_project:
571
- rubygems_version: 2.6.7
585
+ rubygems_version: 2.5.2
572
586
  signing_key:
573
587
  specification_version: 4
574
588
  summary: The Semiconductor Developer's Kit