origen_testers 0.9.1 → 0.9.2

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: 9999dc9b15d3f51a08afdf0e8dd98b7fa3376ee7
4
- data.tar.gz: be914aec8a32f1194e449c03a671145dfaf969d2
3
+ metadata.gz: bb7e94e2ce35ea525eeb90410b24ebe55c8576b7
4
+ data.tar.gz: 68d99c86782203d2ba107e3bf9233915c67d5f56
5
5
  SHA512:
6
- metadata.gz: ded3c3e7b07768e69156024f808efb1807db5b0c79cfcc816222c5f93be46efe24410df23199f809733603406e5b49c90d72167faffacf4225b0a78fa626f4fa
7
- data.tar.gz: bf0da11b37b262af872f540dbb8894c32dd97a4ff380efade01563002d53573918c89323743ed7bb1d28c43f04b1fb14d63f9d50ca9e083d8962edf431704f29
6
+ metadata.gz: 1cbd6405ece9a4cc5f0b71facce92e3588b81dbf7d38f1815d6780e45cf0b71400ac8d8d82258892071c750ad3a1eea04a74d453f387f31e88137088ce33ab69
7
+ data.tar.gz: ad6cfc2654f121f21c14be9cf82e60075eeb0c3b7932a19ab8473a5bd169e87ecf425149eac9c2866da89d4012e1ebf2f29641abe0244963a1872d9c7d7ce98e
@@ -30,11 +30,13 @@ class OrigenTestersApplication < Origen::Application
30
30
 
31
31
  config.semantically_version = true
32
32
 
33
+ # to handle for web compile where environment/tester not yet defined
34
+
33
35
  # By default all generated output will end up in ./output.
34
36
  # Here you can specify an alternative directory entirely, or make it dynamic such that
35
37
  # the output ends up in a setup specific directory.
36
38
  config.output_directory do
37
- dir = "#{Origen.root}/output/#{$tester.name}"
39
+ dir = "#{Origen.root}/output/#{$tester.nil? ? '': $tester.name}"
38
40
  # Check if running on windows, if so, substitute :: with _
39
41
  dir.gsub!("::","_") if Origen.os.windows?
40
42
  dir
@@ -43,7 +45,7 @@ class OrigenTestersApplication < Origen::Application
43
45
  # Similary for the reference files, generally you want to setup the reference directory
44
46
  # structure to mirror that of your output directory structure.
45
47
  config.reference_directory do
46
- dir = "#{Origen.root}/.ref/#{$tester.name}"
48
+ dir = "#{Origen.root}/.ref/#{$tester.nil? ? '': $tester.name}"
47
49
  # Check if running on windows, if so, substitute :: with _
48
50
  dir.gsub!("::","_") if Origen.os.windows?
49
51
  dir
data/config/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module OrigenTesters
2
2
  MAJOR = 0
3
3
  MINOR = 9
4
- BUGFIX = 1
4
+ BUGFIX = 2
5
5
  DEV = nil
6
6
 
7
7
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
@@ -329,7 +329,7 @@ module OrigenTesters
329
329
  # $tester.start_subroutine("wait_for_done")
330
330
  # < generate your subroutine vectors here >
331
331
  # $tester.end_subroutine
332
- def start_subroutine(name)
332
+ def start_subroutine(name, options = {})
333
333
  local_subroutines << name.to_s.chomp unless local_subroutines.include?(name.to_s.chomp) || @inhibit_vectors
334
334
  microcode "global subr #{name}:"
335
335
  end
@@ -343,7 +343,8 @@ module OrigenTesters
343
343
  # < generate your subroutine vectors here >
344
344
  # $tester.end_subroutine
345
345
  # cond: whether return is conditional on a flag (to permit to mix subrs together)
346
- def end_subroutine(cond = false)
346
+ def end_subroutine(cond = false, options = {})
347
+ (cond, options) = false, cond if cond.is_a?(Hash)
347
348
  if cond
348
349
  update_vector microcode: 'if (flag) return'
349
350
  else
@@ -42,6 +42,9 @@ module OrigenTesters
42
42
 
43
43
  @set_msb_issued = false # Internal flag to keep track of set_msb usage, allowing for set_lsb to be used as a readcode
44
44
  @microcode[:keepalive] = 'keepalive'
45
+
46
+ @onemodsubs_found = false # flag to indicate whether a single-module subroutine has been implemented in this pattern
47
+ @nonmodsubs_found = false # flag to indicate whether a normal non-single-module subroutine has been implemented in this pattern
45
48
  end
46
49
 
47
50
  # Do a frequency measure.
@@ -302,9 +305,13 @@ module OrigenTesters
302
305
  high_voltage: false,
303
306
  svm_only: false
304
307
  )) do |pin_list|
305
- microcode "#{options[:subroutine_pat] ? 'srm_vector' : 'vm_vector'}"
306
- microcode "#{options[:pattern]} ($tset, #{pin_list})"
307
- microcode '{'
308
+ # if subroutine pattern has only single-module subroutines then skip module start
309
+ # (will be taken care of elsewhere)
310
+ unless options[:subroutine_pat] && @onemodsubs_found && !@nonmodsubs_found
311
+ microcode "#{options[:subroutine_pat] ? 'srm_vector' : 'vm_vector'}"
312
+ microcode "#{options[:pattern]} ($tset, #{pin_list})"
313
+ microcode '{'
314
+ end
308
315
  # override min vector limit if subroutine pattern
309
316
  @min_pattern_vectors = 0 if options[:subroutine_pat]
310
317
  unless options[:subroutine_pat]
@@ -314,7 +321,46 @@ module OrigenTesters
314
321
  end
315
322
 
316
323
  def pattern_footer(options = {})
317
- super(options.merge(end_module: false))
324
+ # if subroutine pattern has any single-module subroutines then skip module end
325
+ # (will be taken care of elsewhere)
326
+ unless options[:subroutine_pat] && @onemodsubs_found
327
+ super(options.merge(end_module: false))
328
+ end
329
+ end
330
+
331
+ # allow for option of separate modules for each subroutine
332
+ # requirement is that any subroutines in their own module (options[:onemodsub] = true)
333
+ # MUST be implemented AFTER any subroutines in the common pattern module!
334
+ def start_subroutine(name, options = {})
335
+ if options[:onemodsub]
336
+ if @nonmodsubs_found && !@onemodsubs_found
337
+ # this means we need to do end module for non-single-module subroutines
338
+ # do only once!
339
+ pattern_footer(options.merge(subroutine_pat: true, end_module: false))
340
+ end
341
+ @onemodsubs_found = true # importnat put this after the call to pattern_footer above
342
+ pin_list = ordered_pins.map(&:name).join(', ')
343
+ microcode 'srm_vector'
344
+ microcode "#{name}_module ($tset, #{pin_list})"
345
+ microcode '{'
346
+ else
347
+ # normal subroutine to use common
348
+ if @onemodsubs_found
349
+ # give error -- requirement is that any normal subroutines using common pattern module
350
+ # must be done BEFORE any subroutines that need their own module definition!
351
+ fail "ERROR: Cannot implement any common module subroutines (#{name}) after implementing any single-module subroutines in the same pattern!"
352
+ end
353
+ @nonmodsubs_found = true
354
+ end
355
+ super(name, options)
356
+ end
357
+
358
+ def end_subroutine(cond = false, options = {})
359
+ (cond, options) = false, cond if cond.is_a?(Hash)
360
+ super(cond, options)
361
+ if options[:onemodsub]
362
+ microcode '}'
363
+ end
318
364
  end
319
365
 
320
366
  # Generates a match loop based on vector condition passed in via block
@@ -65,16 +65,17 @@ module OrigenTesters
65
65
  end
66
66
 
67
67
  def execute(options = {})
68
- options = { define: false, # whether to define subr or call it
69
- name: 'executefunc1'
68
+ options = { define: false, # whether to define subr or call it
69
+ name: 'executefunc1',
70
+ onemodsub: false # whether to expects subr to be in single module
70
71
  }.merge(options)
71
72
 
72
73
  if options[:define]
73
74
  # define subroutine
74
- $tester.start_subroutine(options[:name])
75
- $tester.cycle
76
- $tester.end_subroutine
75
+ $tester.start_subroutine(options[:name], onemodsub: options[:onemodsub])
77
76
  $tester.cycle
77
+ $tester.end_subroutine(onemodsub: options[:onemodsub])
78
+ $tester.cycle unless options[:onemodsub]
78
79
  else
79
80
  # call subroutine
80
81
  $tester.cycle
@@ -39,7 +39,26 @@ unless $tester.v93k?
39
39
 
40
40
  # Define digsrc_overlay subr
41
41
  $dut.digsrc_overlay(:subr_name => 'digsrc_overlay', :define => true, overlay_cycle_num: 64)
42
+
43
+ # test out single module subroutine capability, integrated with other normal subroutines
44
+ # only for UltraFLEX
45
+ $dut.execute(define: true, name: 'overlaysub1', onemodsub: true )
46
+ $dut.execute(define: true, name: 'overlaysub2', onemodsub: true )
47
+ $dut.execute(define: true, name: 'overlaysub3', onemodsub: true )
48
+ $dut.execute(define: true, name: 'overlaysub4', onemodsub: true )
49
+
42
50
  end
43
51
  end
52
+
53
+ if $tester.ultraflex?
54
+ # test out single module subroutine capability in standalone pattern
55
+ # only for UltraFLEX
56
+ Pattern.create(name: 'subroutines2', subroutine_pat: true) do
57
+ $dut.execute(define: true, name: 'overlaysub5', onemodsub: true )
58
+ $dut.execute(define: true, name: 'overlaysub6', onemodsub: true )
59
+ $dut.execute(define: true, name: 'overlaysub7', onemodsub: true )
60
+ $dut.execute(define: true, name: 'overlaysub4', onemodsub: true )
61
+ end
62
+ end
44
63
  end
45
64
  end
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.9.1
4
+ version: 0.9.2
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-02-22 00:00:00.000000000 Z
11
+ date: 2017-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: origen