origen_testers 0.4.1 → 0.5.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.
@@ -385,109 +385,126 @@ module OrigenTesters
385
385
  include_pingroups: true
386
386
  }.merge(options)
387
387
 
388
- pinorder = Origen.app.pin_pattern_order.dup
389
- pinexclude = Origen.app.pin_pattern_exclude.dup
390
- pinids = []
388
+ result = nil
391
389
 
392
- if Origen.app.pin_pattern_order.last.is_a?(Hash)
393
- options.merge!(pinorder.pop)
394
- end
395
- if Origen.app.pin_pattern_exclude.last.is_a?(Hash)
396
- options.merge!(pinexclude.pop)
397
- end
390
+ Origen.profile 'Working out pin pattern order' do
391
+ pinorder = Origen.app.pin_pattern_order.dup
392
+ pinexclude = Origen.app.pin_pattern_exclude.dup
398
393
 
399
- ordered_pins = []
400
-
401
- # add bit here that puts pingroup id into ordered pins array and deletes included pins
402
- pins = Origen.pin_bank.pins.dup
403
- pingroups = Origen.pin_bank.pin_groups.dup
404
-
405
- if pinorder && pinorder.size > 0
406
- pinorder.each do |id|
407
- if Origen.pin_bank.pin_groups.keys.include? id
408
- # see if group is already in ordered_pins
409
- fail "Pin group #{id} is duplicately defined in pin_pattern_order" unless pingroups.include? id
410
- # see if any pins in group are already in pin_order
411
- used = []
412
- pingroups[id].each do |pin|
413
- pinorder.each { |pin| pinids << Origen.pin_bank.find(pin).id if Origen.pin_bank.find(pin) }
414
- used << pin if pinids.include?(pin.id) # see if pin included in pinids
415
- end
416
- if !used.empty?
417
- pingroups[id].each { |pin| ordered_pins << pin unless used.include?(pin) }
394
+ if Origen.app.pin_pattern_order.last.is_a?(Hash)
395
+ options.merge!(pinorder.pop)
396
+ end
397
+ if Origen.app.pin_pattern_exclude.last.is_a?(Hash)
398
+ options.merge!(pinexclude.pop)
399
+ end
400
+
401
+ ordered_pins = []
402
+
403
+ # Create a copy of all pins and groups to be output, pins/groups will be delete from here as
404
+ # they are output, so that at the end of the user defined pin order what is left in here can
405
+ # either be discarded or output at the end
406
+ pins = Origen.pin_bank.pins.dup
407
+ pingroups = Origen.pin_bank.pin_groups.dup
408
+
409
+ if pinorder && pinorder.size > 0
410
+ pinorder.each do |id|
411
+ # If the ID refers to a pin group
412
+ if group = Origen.pin_bank.pin_groups[id]
413
+ # If the group has still to be output just do that now
414
+ if pingroups.include? group.id
415
+ ordered_pins << group
416
+ # Now delete the group from the list of groups still to be output and all of its pins
417
+ # from the list pins still to be output
418
+ group.each do |pin|
419
+ pins.delete(pin.id)
420
+ pin.groups.each do |name, _group|
421
+ pingroups.delete(name)
422
+ end
423
+ end
424
+ pingroups.delete(group.id)
425
+ # To get here the some of the pins in the group have already been output which is preventing
426
+ # output of the complete group at this point, in that case output any of its pins that have
427
+ # still to go
428
+ else
429
+ group.each do |pin|
430
+ if pins.include? pin.id
431
+ ordered_pins << pin
432
+ pin.groups.each do |name, _group|
433
+ pingroups.delete(name)
434
+ end
435
+ end
436
+ end
437
+ end
438
+ # this is a pin
418
439
  else
419
- # this is a pin group, add pin_group and delete all pins in group
420
- ordered_pins << pingroups[id]
421
- pingroups[id].each do |pin|
422
- fail "Pin (#{pin.name}) in group (#{id}) is duplicately defined in pin_pattern_order" unless pins.include? pin.id
423
- pins.delete(pin.id)
440
+ pin = Origen.pin_bank.find(id)
441
+ fail "Undefined pin (#{id}) added to pin_pattern_order" unless pin
442
+ ordered_pins << pin
443
+ pin.groups.each do |name, _group|
444
+ pingroups.delete(name)
424
445
  end
446
+ pin.name = id
447
+ pins.delete(pin.id)
425
448
  end
426
- pingroups.delete(id)
427
- else # this is a pin
428
- pin = Origen.pin_bank.find(id)
429
- fail "Undefined pin (#{id}) added to pin_pattern_order" unless pin
430
- ordered_pins << pin
431
- pin.name = id
432
- fail "Individual pin (#{pin.name}) is duplicately defined in pin_pattern_order" unless pins.include? pin.id
433
- pins.delete(pin.id)
434
449
  end
435
450
  end
436
- end
437
451
 
438
- if pinexclude && pinexclude.size > 0
439
- pinexclude.each do |id|
440
- if Origen.pin_bank.pin_groups.keys.include? id
441
- # see if group is already in ordered_pins
442
- fail "Pin group #{id} is defined both in pin_pattern_order and pin_pattern_exclude" unless pingroups.include? id
443
- # this is a pin group, delete all pins in group
444
- pingroups[id].each do |pin|
445
- fail "Pin (#{pin.name}) in group (#{id}) is defined both in pin_pattern_order and pin_pattern_exclude" unless pins.include? pin.id
452
+ if pinexclude && pinexclude.size > 0
453
+ pinexclude.each do |id|
454
+ if group = Origen.pin_bank.pin_groups[id]
455
+ # see if group is already in ordered_pins
456
+ fail "Pin group #{id} is defined both in pin_pattern_order and pin_pattern_exclude" unless pingroups.include? id
457
+ # this is a pin group, delete all pins in group
458
+ pingroups.delete(id)
459
+ group.each do |pin|
460
+ fail "Pin (#{pin.name}) in group (#{group.id}) is defined both in pin_pattern_order and pin_pattern_exclude" unless pins.include? pin.id
461
+ pins.delete(pin.id)
462
+ end
463
+ else # this is a pin, delete the pin
464
+ pin = Origen.pin_bank.find(id)
465
+ fail "Undefined pin (#{id}) added to pin_pattern_exclude" unless pin
466
+ fail "Pin #{pin.name} is defined both in pin_pattern_order and pin_pattern_exclude" unless pins.include? pin.id
467
+ pin.name = id
446
468
  pins.delete(pin.id)
469
+ pin.groups.each do |name, _group|
470
+ pingroups.delete(name)
471
+ end
447
472
  end
448
- else # this is a pin, delete the pin
449
- pin = Origen.pin_bank.find(id)
450
- fail "Undefined pin (#{id}) added to pin_pattern_exclude" unless pin
451
- fail "Pin #{pin.name} is defined both in pin_pattern_order and pin_pattern_exclude" unless pins.include? pin.id
452
- pin.name = id
453
- pins.delete(pin.id)
454
473
  end
455
474
  end
456
- end
457
475
 
458
- unless options[:only]
459
- # all the rest of the pins to the end of the pattern order
460
- pins.each do |id, pin|
461
- # check for port
462
- if pin.belongs_to_a_pin_group?
463
- if id =~ /(\D+)\d+$/
464
- name = Regexp.last_match[1]
465
- port = nil
466
- pin.groups.each do |group|
467
- if group[0] == name.to_sym # belongs to a port
468
- port = group[1]
469
- end
476
+ unless options[:only]
477
+ # all the rest of the pins to the end of the pattern order
478
+ pins.each do |_id, pin|
479
+ # check for port
480
+ if pin.belongs_to_a_pin_group?
481
+ # Are any of this pin's groups still waiting to be output? pingroups at this point contains
482
+ # those groups which have not been rendered yet
483
+ group = pingroups.find do |_id, group|
484
+ pin.groups.any? { |_pid, pgroup| group == pgroup }
470
485
  end
471
- if pingroups.include?(port.id)
472
- ordered_pins << port
473
- port.each { |pin| pins.delete(pin.id) }
486
+ if group
487
+ ordered_pins << group[1]
488
+ group[1].each { |pin| pins.delete(pin.id) }
489
+ else
490
+ ordered_pins << pin
474
491
  end
475
492
  else
476
493
  ordered_pins << pin
477
494
  end
478
- else
479
- ordered_pins << pin
480
495
  end
481
496
  end
482
- end
483
497
 
484
- ordered_pins.map do |pin|
485
- if options[:include_inhibited_pins]
486
- pin
487
- else
488
- inhibited_pins.include?(pin) ? nil : pin
498
+ result = ordered_pins.map do |pin|
499
+ if options[:include_inhibited_pins]
500
+ pin
501
+ else
502
+ inhibited_pins.include?(pin) ? nil : pin
503
+ end
489
504
  end
490
- end.compact
505
+ result = result.compact
506
+ end
507
+ result
491
508
  end
492
509
 
493
510
  def current_pin_vals
@@ -3,15 +3,17 @@ require 'active_support/concern'
3
3
  require 'require_all'
4
4
 
5
5
  module OrigenTesters
6
- autoload :VectorBasedTester, 'origen_testers/vector_based_tester'
7
- autoload :Vector, 'origen_testers/vector'
8
- autoload :VectorPipeline, 'origen_testers/vector_pipeline'
9
- autoload :Interface, 'origen_testers/interface'
10
- autoload :Generator, 'origen_testers/generator'
11
- autoload :Parser, 'origen_testers/parser'
12
- autoload :BasicTestSetups, 'origen_testers/basic_test_setups'
13
- autoload :ProgramGenerators, 'origen_testers/program_generators'
14
- # not yet autoload :Time, 'origen_testers/time'
6
+ autoload :Doc, 'origen_testers/doc'
7
+ autoload :CommandBasedTester, 'origen_testers/command_based_tester'
8
+ autoload :VectorBasedTester, 'origen_testers/vector_based_tester'
9
+ autoload :Vector, 'origen_testers/vector'
10
+ autoload :VectorPipeline, 'origen_testers/vector_pipeline'
11
+ autoload :Interface, 'origen_testers/interface'
12
+ autoload :Generator, 'origen_testers/generator'
13
+ autoload :Parser, 'origen_testers/parser'
14
+ autoload :BasicTestSetups, 'origen_testers/basic_test_setups'
15
+ autoload :ProgramGenerators, 'origen_testers/program_generators'
16
+ # not yet autoload :Time, 'origen_testers/time'
15
17
  end
16
18
 
17
19
  require 'origen_testers/igxl_based_tester'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen_testers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.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: 2015-08-31 00:00:00.000000000 Z
11
+ date: 2015-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: origen
@@ -119,6 +119,15 @@ files:
119
119
  - lib/origen_testers/api.rb
120
120
  - lib/origen_testers/basic_test_setups.rb
121
121
  - lib/origen_testers/callback_handlers.rb
122
+ - lib/origen_testers/command_based_tester.rb
123
+ - lib/origen_testers/doc.rb
124
+ - lib/origen_testers/doc/generator.rb
125
+ - lib/origen_testers/doc/generator/flow.rb
126
+ - lib/origen_testers/doc/generator/flow_line.rb
127
+ - lib/origen_testers/doc/generator/test.rb
128
+ - lib/origen_testers/doc/generator/test_group.rb
129
+ - lib/origen_testers/doc/generator/tests.rb
130
+ - lib/origen_testers/doc/model.rb
122
131
  - lib/origen_testers/generator.rb
123
132
  - lib/origen_testers/generator/flow_control_api.rb
124
133
  - lib/origen_testers/generator/identity_map.rb