origen_testers 0.5.7 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/config/shared_commands.rb +6 -0
  3. data/config/version.rb +2 -2
  4. data/lib/commands/run.rb +44 -0
  5. data/lib/origen_testers.rb +19 -1
  6. data/lib/origen_testers/flow.rb +382 -0
  7. data/lib/origen_testers/generator.rb +32 -29
  8. data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -0
  9. data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -0
  10. data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -0
  11. data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -0
  12. data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -0
  13. data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +97 -0
  14. data/lib/origen_testers/igxl_based_tester/base/flow.rb +390 -115
  15. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +4 -54
  16. data/lib/origen_testers/igxl_based_tester/base/generator.rb +257 -11
  17. data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -0
  18. data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -0
  19. data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -0
  20. data/lib/origen_testers/igxl_based_tester/base/levelset.rb +109 -0
  21. data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -0
  22. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +33 -1
  23. data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -0
  24. data/lib/origen_testers/igxl_based_tester/base/timesets.rb +47 -0
  25. data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +2 -2
  26. data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -0
  27. data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +4 -0
  28. data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -0
  29. data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -0
  30. data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -0
  31. data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -0
  32. data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -0
  33. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +137 -0
  34. data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -0
  35. data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -0
  36. data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -0
  37. data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -0
  38. data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -0
  39. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +58 -0
  40. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +58 -0
  41. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +95 -0
  42. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +2 -2
  43. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +121 -0
  44. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +24 -0
  45. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +137 -0
  46. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +4 -0
  47. data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -0
  48. data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -0
  49. data/lib/origen_testers/interface.rb +41 -6
  50. data/lib/origen_testers/no_interface.rb +7 -0
  51. data/lib/origen_testers/origen_ext/application/runner.rb +25 -0
  52. data/lib/origen_testers/origen_ext/generator.rb +37 -0
  53. data/lib/origen_testers/origen_ext/generator/flow.rb +70 -0
  54. data/lib/origen_testers/origen_ext/generator/resources.rb +21 -0
  55. data/lib/origen_testers/program_generators.rb +0 -1
  56. data/lib/origen_testers/smartest_based_tester/base/flow.rb +158 -134
  57. data/lib/origen_testers/smartest_based_tester/base/generator.rb +2 -3
  58. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +4 -0
  59. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +5 -6
  60. data/lib/origen_testers/test/dut.rb +5 -0
  61. data/lib/origen_testers/test/j750_base_interface.rb +0 -3
  62. data/lib/origen_testers/test/ultraflex_interface.rb +230 -4
  63. data/lib/origen_testers/test/v93k_interface.rb +5 -23
  64. data/program/components/_temp.rb +6 -0
  65. data/program/flow_control.rb +190 -62
  66. data/program/prb1.rb +13 -50
  67. data/program/prb2.rb +0 -16
  68. data/program/test.rb +12 -3
  69. data/program/uflex_resources.rb +159 -0
  70. metadata +66 -16
  71. data/lib/origen_testers/doc.rb +0 -224
  72. data/lib/origen_testers/doc/generator.rb +0 -124
  73. data/lib/origen_testers/doc/generator/flow.rb +0 -69
  74. data/lib/origen_testers/doc/generator/flow_line.rb +0 -201
  75. data/lib/origen_testers/doc/generator/test.rb +0 -66
  76. data/lib/origen_testers/doc/generator/test_group.rb +0 -64
  77. data/lib/origen_testers/doc/generator/tests.rb +0 -45
  78. data/lib/origen_testers/doc/model.rb +0 -160
  79. data/lib/origen_testers/generator/flow_control_api.rb +0 -611
  80. data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +0 -476
  81. data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +0 -9
@@ -4,6 +4,6 @@ DTFlowtableSheet,version=2.2:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1 Fl
4
4
  Gate Command Limits Datalog Display Results Bin Number Sort Number Flag Group Device Debug
5
5
  Label Enable Job Part Env Opcode Parameter TName TNum LoLim HiLim Scale Units Format Pass Fail Pass Fail Result Pass Fail State Specifier Sense Condition Name Sense Condition Name Assume Sites Comment
6
6
  % end
7
- % collection.each do |test|
8
- <%= test %>
7
+ % format.each do |line|
8
+ <%= line %>
9
9
  % end
@@ -0,0 +1,121 @@
1
+ % print_hdr = true
2
+ %
3
+ % ## Hash Autovivification
4
+ % l = ->(h, k) { h[k] = Hash.new(&l) }
5
+ % lset_eqns = Hash.new(&l)
6
+ %
7
+ % @ls_sheet_pins.each do |grp|
8
+ % if Origen.top_level.has_pin?(grp)
9
+ % pin_ary = get_pin_objects(grp)
10
+ % pin_ary.each do |next_pin|
11
+ % pin_nam = Origen.top_level.pin(next_pin.id).name
12
+ % found_pin_eqn = false
13
+ % if pins.key?(pin_nam)
14
+ % lset_eqns[grp][pin_nam] = pins[pin_nam]
15
+ % found_pin_eqn = true
16
+ % end
17
+ % unless found_pin_eqn
18
+ % Origen.log.error "LSET #{name}, GRP #{grp}, PIN #{pin_nam}: Pin levels are not defined in levelset"
19
+ % next
20
+ % end
21
+ % end
22
+ % elsif Origen.top_level.has_power_pin?(grp)
23
+ % found_pin_eqn = false
24
+ % if pins.key?(grp)
25
+ % lset_eqns[grp][grp] = pins[grp]
26
+ % found_pin_eqn = true
27
+ % end
28
+ % unless found_pin_eqn
29
+ % Origen.log.error "LSET #{name}, GRP #{grp}: Power levels are not defined in levelset"
30
+ % end
31
+ % else
32
+ % Origen.log.error "Undefined pin/pingroup in pattern header (#{grp})"
33
+ % end
34
+ % end
35
+ %
36
+ % lset_eqns.keys.each do |grp|
37
+ % grp_level_same = true
38
+ % grp_level = nil
39
+ % if Origen.top_level.has_pin?(grp)
40
+ % pin_ary = get_pin_objects(grp)
41
+ % pin_ary.each do |next_pin|
42
+ % pin_nam = Origen.top_level.pin(next_pin.id).name
43
+ % if lset_eqns[grp].key?(pin_nam)
44
+ % if grp_level.nil?
45
+ % grp_level = lset_eqns[grp][pin_nam]
46
+ % elsif !levels_eql?(grp_level, lset_eqns[grp][pin_nam])
47
+ % grp_level_same = false
48
+ % end
49
+ % else
50
+ % grp_level_same = false
51
+ % end
52
+ % end
53
+ % elsif Origen.top_level.has_power_pin?(grp)
54
+ % nil
55
+ % end
56
+ %
57
+ % pin_grp_done = false
58
+ % lset_eqns[grp].keys.each do |pin_nam|
59
+ % pin_grp_done ? break : nil
60
+ %
61
+ % # determine if object is a power level (conatins :vmain) or a SE pin level (:vil)
62
+ % pin_type = nil
63
+ % lset_eqns[grp][pin_nam].respond_to?(:vmain) ? pin_type = 'pwr_pin' : nil
64
+ % lset_eqns[grp][pin_nam].respond_to?(:vil) ? pin_type = 'se_pin' : nil
65
+ %
66
+ % case pin_type
67
+ % when 'pwr_pin'
68
+ % vmain = format_uflex_level(pins[pin_nam].vmain)
69
+ % valt = format_uflex_level(pins[pin_nam].valt)
70
+ % ifold = format_uflex_level(pins[pin_nam].ifold)
71
+ % delay = format_uflex_level(pins[pin_nam].delay)
72
+ % when 'se_pin'
73
+ % vil = format_uflex_level(pins[pin_nam].vil)
74
+ % vih = format_uflex_level(pins[pin_nam].vih)
75
+ % vol = format_uflex_level(pins[pin_nam].vol)
76
+ % voh = format_uflex_level(pins[pin_nam].voh)
77
+ % vcl = format_uflex_level(pins[pin_nam].vcl)
78
+ % vch = format_uflex_level(pins[pin_nam].vch)
79
+ % vt = format_uflex_level(pins[pin_nam].vt)
80
+ % voutlotyp = format_uflex_level(pins[pin_nam].voutlotyp)
81
+ % vouthityp = format_uflex_level(pins[pin_nam].vouthityp)
82
+ % dmode = pins[pin_nam].dmode
83
+ % else
84
+ % Origen.log.error "LSET #{name}, GRP #{grp}, PIN #{pin_nam}: Unknown pin type: #{pin_type}"
85
+ % end
86
+ %
87
+ % if print_hdr
88
+ % print_hdr = false
89
+ <%= "DTLevelSheet,version=2.1:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1\tPin Levels" %>
90
+ <%= "" %>
91
+ <%= "\tPin/Group\tSeq.\tParameter\tValue\tComment" %>
92
+ % end
93
+ %
94
+ % if grp_level_same
95
+ % pin_grp_done = true
96
+ % pin_tmp = grp
97
+ % else
98
+ % pin_tmp = pin_nam
99
+ % end
100
+ %
101
+ % case pin_type
102
+ % when 'pwr_pin'
103
+ <%= "\t#{pin_tmp}\t\tVMain\t#{vmain}\t" %>
104
+ <%= "\t#{pin_tmp}\t\tVAlt\t#{valt}\t" %>
105
+ <%= "\t#{pin_tmp}\t\tIFoldLevel\t#{ifold}\t" %>
106
+ <%= "\t#{pin_tmp}\t\tTdelay\t#{delay}\t" %>
107
+ % when 'se_pin'
108
+ <%= "\t#{pin_tmp}\t\tVil\t#{vil}\t" %>
109
+ <%= "\t#{pin_tmp}\t\tVih\t#{vih}\t" %>
110
+ <%= "\t#{pin_tmp}\t\tVol\t#{vol}\t" %>
111
+ <%= "\t#{pin_tmp}\t\tVoh\t#{voh}\t" %>
112
+ <%= "\t#{pin_tmp}\t\tVt\t#{vt}\t" %>
113
+ <%= "\t#{pin_tmp}\t\tVcl\t#{vcl}\t" %>
114
+ <%= "\t#{pin_tmp}\t\tVch\t#{vch}\t" %>
115
+ <%= "\t#{pin_tmp}\t\tVoutLoTyp\t#{voutlotyp}\t" %>
116
+ <%= "\t#{pin_tmp}\t\tVoutHiTyp\t#{vouthityp}\t" %>
117
+ <%= "\t#{pin_tmp}\t\tDriverMode\t#{dmode}\t" %>
118
+ % end
119
+ % end
120
+ % end
121
+ %
@@ -0,0 +1,24 @@
1
+ <%= "DTPinMap,version=2.1:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1\tPin Map" %>
2
+ <%= "\t\t\tUSL Tag:\t" %>
3
+ <%= "\tGroup Name\tPin Name\tType\tComment" %>
4
+ % @power_pins.each do |pwr_pin, attrs|
5
+ <%= "\t\t#{pwr_pin}\t#{attrs[:type]}\t#{attrs[:comment]}" %>
6
+ % end
7
+ % @utility_pins.each do |util_pin, attrs|
8
+ <%= "\t\t#{util_pin}\t#{attrs[:type]}\t#{attrs[:comment]}" %>
9
+ % end
10
+ % @pins.each do |pin, attrs|
11
+ <%= "\t\t#{pin}\t#{attrs[:type]}\t#{attrs[:comment]}" %>
12
+ % end
13
+ % @pin_groups.each do |group, pins|
14
+ % first_pin = true
15
+ % pins.each do |pin, attrs|
16
+ % if first_pin
17
+ <%= "\t#{group}\t#{pin}\t#{attrs[:type]}\t#{attrs[:comment]}" %>
18
+ % else
19
+ <%= "\t#{group}\t#{pin}\t\t#{attrs[:comment]}" %>
20
+ % end
21
+ % first_pin = false
22
+ % end
23
+ % end
24
+ %
@@ -0,0 +1,137 @@
1
+ % line_cnt = 8
2
+ % print_hdr = true
3
+ %
4
+ % ## Hash Autovivification
5
+ % l = ->(h, k) { h[k] = Hash.new(&l) }
6
+ % eset_eqns = Hash.new(&l)
7
+ % eset_eqns_print = Hash.new(&l)
8
+ % tset_eqns = Hash.new(&l)
9
+ % tset_pin_list = []
10
+ %
11
+ % # binding.pry
12
+ %
13
+ %
14
+ % # Look up edge information in the corresponding Edgesets sheet
15
+ % edgesets = Origen.interface.edgeset_sheets[@filename]
16
+ % @ts_sheet_pins.each do |grp|
17
+ % if Origen.top_level.has_pin?(grp)
18
+ % pin_ary = get_pin_objects(grp)
19
+ % pin_ary.each do |next_pin|
20
+ % pin_nam = Origen.top_level.pin(next_pin.id).name
21
+ % found_pin_eqn = false
22
+ % edgesets.es.keys.each do |eset|
23
+ % if edgesets.es[eset].pins.key?(pin_nam)
24
+ % eset_eqns[grp][eset][pin_nam] = edgesets.es[eset].pins[pin_nam]
25
+ % eset_eqns_print[grp][pin_nam][eset] = edgesets.es[eset].pins[pin_nam]
26
+ % found_pin_eqn = true
27
+ % end
28
+ % end
29
+ % unless found_pin_eqn
30
+ % Origen.log.error "GRP #{grp}, PIN #{pin_nam}: Pin timing is not defined in any edgesets"
31
+ % next
32
+ % end
33
+ % end
34
+ % else
35
+ % Origen.log.error "Undefined pin/pingroup in pattern header (#{grp})"
36
+ % end
37
+ % end
38
+ %
39
+ % eset_eqns.keys.each do |grp|
40
+ % grp_edge_same = true
41
+ % eset_eqns[grp].keys.each do |eset_key|
42
+ % grp_edge = nil
43
+ % pin_ary = get_pin_objects(grp)
44
+ % pin_ary.each do |next_pin|
45
+ % pin_nam = Origen.top_level.pin(next_pin.id).name
46
+ % if eset_eqns[grp][eset_key].key?(pin_nam)
47
+ % if grp_edge.nil?
48
+ % grp_edge = eset_eqns[grp][eset_key][pin_nam]
49
+ % elsif !edgesets.edges_eql?(grp_edge, eset_eqns[grp][eset_key][pin_nam])
50
+ % grp_edge_same = false
51
+ % end
52
+ % else
53
+ % grp_edge_same = false
54
+ % end
55
+ % end
56
+ % end
57
+ %
58
+ % pin_grp_done = false
59
+ % eset_eqns_print[grp].keys.each do |pin_nam|
60
+ % pin_grp_done ? break : nil
61
+ % eset_eqns_print[grp][pin_nam].keys.each do |eset|
62
+ % clk_per = edgesets.es[eset].pins[pin_nam].clk_per
63
+ % clk_per = edgesets.format_uflex_edge(clk_per, line_cnt)
64
+ % if print_hdr
65
+ % print_hdr = false
66
+ % tim_mode = edgesets.es[eset].t_mode
67
+ % end
68
+ % if grp_edge_same
69
+ % tset_pin_list.push(grp) unless tset_pin_list.include?(grp)
70
+ % line_cnt += 1
71
+ % pin_grp_done = true
72
+ % else
73
+ % tset_pin_list.push(pin_nam) unless tset_pin_list.include?(pin_nam)
74
+ % line_cnt += 1
75
+ % end
76
+ % end
77
+ % end
78
+ % end
79
+ %
80
+ % # Print equations for all pins and pingroups in the pin header
81
+ % @ts.keys.each do |tset|
82
+ % t_mode = ''
83
+ % period = ''
84
+ % @ts_sheet_pins.each do |grp|
85
+ % if Origen.top_level.has_pin?(grp)
86
+ % pin_ary = get_pin_objects(grp)
87
+ % pin_ary.each do |next_pin|
88
+ % pin_nam = Origen.top_level.pin(next_pin.id).name
89
+ % # If the edgeset for this pin is already specified within the timeset- apply it here
90
+ % if @ts[tset].pins.key?(pin_nam)
91
+ % tset_eqns[tset][grp][pin_nam] = @ts[tset].pins[pin_nam]
92
+ % else
93
+ % Origen.log.error "TSET #{tset}, PIN #{pin_nam}: Pin timing cannot be found"
94
+ % next
95
+ % end
96
+ % end
97
+ % else
98
+ % Origen.log.error "Undefined pin/pingroup in pattern header (#{grp})"
99
+ % end
100
+ % end
101
+ % end
102
+ %
103
+ % print_hdr = true
104
+ % tset_eqns.keys.each do |tset_key|
105
+ % tset_eqns[tset_key].keys.each do |grp|
106
+ % tset_eqns[tset_key][grp].keys.each do |pin_nam|
107
+ % eset = @ts[tset_key].pins[pin_nam]
108
+ % edge = edgesets.es[eset].pins[pin_nam]
109
+ % tset_per = edgesets.es[eset].period
110
+ % clk_per = edge.clk_per
111
+ % tset_per = edgesets.format_uflex_edge(tset_per, line_cnt)
112
+ % clk_per = edgesets.format_uflex_edge(clk_per, line_cnt, no_disable: true)
113
+ % clk_per == '' ? setup = 'i/o' : setup = 'clock'
114
+ % if print_hdr
115
+ % print_hdr = false
116
+ % tim_mode = @ts[tset_key].t_mode
117
+ % master_ts = @ts[tset_key].master_ts
118
+ <%= "DTTimesetSheet,version=2.1:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1\tTime Sets" %>
119
+ <%= "" %>
120
+ <%= "\tTiming Mode:\t#{tim_mode}\t\tMaster Timeset Name:\t" %>
121
+ <%= "\tTime Domain:\t" %>
122
+ <%= "" %>
123
+ <%= "\t\t\tCycle\tPin/Group" %>
124
+ <%= "\tTime Set\tPeriod\tName\tClock Period\tSetup\tEdge Set\tComment" %>
125
+ % end
126
+ % if tset_pin_list.include?(grp)
127
+ <%= "\t#{tset_key}\t#{tset_per}\t#{grp}\t#{clk_per}\t#{setup}\t#{eset}\t" %>
128
+ % line_cnt += 1
129
+ % break
130
+ % elsif tset_pin_list.include?(pin_nam)
131
+ <%= "\t#{tset_key}\t#{tset_per}\t#{pin_nam}\t#{clk_per}\t#{setup}\t#{eset}\t" %>
132
+ % line_cnt += 1
133
+ % end
134
+ % end
135
+ % end
136
+ % end
137
+ %
@@ -10,6 +10,10 @@ module OrigenTesters
10
10
  time_sets edge_sets pin_levels mixedsignal_timing overlay
11
11
  )
12
12
 
13
+ # Give all UltraFLEX test instances the ability to contain limits, these will
14
+ # be rendered to Use-limit lines in the flow
15
+ attr_accessor :lo_limit, :hi_limit, :scale, :units, :defer_limits
16
+
13
17
  # Attributes for additional test instance arguments beyond those described above
14
18
  TEST_INSTANCE_EXTRA_ARGS = 130
15
19
 
@@ -0,0 +1,9 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class UltraFLEX
4
+ require 'origen_testers/igxl_based_tester/base/timeset'
5
+ class Timeset < Base::Timeset
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module OrigenTesters
2
+ module IGXLBasedTester
3
+ class UltraFLEX
4
+ require 'origen_testers/igxl_based_tester/base/timesets'
5
+ class Timesets < Base::Timesets
6
+ TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb"
7
+ end
8
+ end
9
+ end
10
+ end
@@ -7,7 +7,35 @@ module OrigenTesters
7
7
 
8
8
  included do
9
9
  Origen.add_interface(self)
10
- include Generator::FlowControlAPI::Interface
10
+
11
+ (ATP::AST::Builder::CONDITION_KEYS + [:group, :bin, :pass, :fail, :test, :log]).each do |method|
12
+ define_method method do |*args, &block|
13
+ flow.send(method, *args, &block)
14
+ end
15
+ end
16
+ end
17
+
18
+ def self.with_resources_mode
19
+ orig = @resources_mode
20
+ @resources_mode = true
21
+ yield
22
+ @resources_mode = orig
23
+ end
24
+
25
+ def self.resources_mode?
26
+ !!@resources_mode
27
+ end
28
+
29
+ def self.write=(val)
30
+ @write = val
31
+ end
32
+
33
+ def self.write?
34
+ !!@write
35
+ end
36
+
37
+ def write?
38
+ OrigenTesters::Interface.write?
11
39
  end
12
40
 
13
41
  # This identifier will be used to make labels and other references unique to the
@@ -28,6 +56,7 @@ module OrigenTesters
28
56
 
29
57
  # Compile a template file
30
58
  def compile(file, options = {})
59
+ return unless write?
31
60
  # Any options passed in from an interface will be passed to the compiler and to
32
61
  # the templates being compiled
33
62
  options[:initial_options] = options
@@ -66,7 +95,13 @@ module OrigenTesters
66
95
  generator.write_to_file(options) if generator.to_be_written?
67
96
  end
68
97
  clean_referenced_patterns
98
+ flow.save_program
99
+ end
100
+
101
+ def on_program_completion(options = {})
69
102
  reset_globals
103
+ @@referenced_patterns = nil
104
+ @@referenced_subroutine_patterns = nil
70
105
  end
71
106
 
72
107
  # All generators should push to this array whenever they reference a pattern
@@ -151,14 +186,14 @@ module OrigenTesters
151
186
  # Generally this means that all resources for a given test will be generated but
152
187
  # flow entries will be inhibited.
153
188
  def resources_mode
154
- orig = @resources_mode
155
- @resources_mode = true
156
- yield
157
- @resources_mode = orig
189
+ OrigenTesters::Interface.with_resources_mode do
190
+ yield
191
+ end
158
192
  end
193
+ alias_method :with_resources_mode, :resources_mode
159
194
 
160
195
  def resources_mode?
161
- @resources_mode
196
+ OrigenTesters::Interface.resources_mode?
162
197
  end
163
198
 
164
199
  def identity_map # :nodoc:
@@ -0,0 +1,7 @@
1
+ module OrigenTesters
2
+ # Origen will instantiate this interface if the application doesn't define one,
3
+ # this allows test flows to be generated only
4
+ class NoInterface
5
+ include OrigenTesters::ProgramGenerators
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ # This shim is temporary to help NXP transition to Origen from
2
+ # our original internal version (RGen)
3
+ if defined? RGen::ORIGENTRANSITION
4
+ require 'rgen/application/runner'
5
+ else
6
+ require 'origen/application/runner'
7
+ end
8
+ module Origen
9
+ class Application
10
+ class Runner
11
+ alias_method :orig_launch, :launch
12
+ # Patch this to allow write: false to be given as an option when
13
+ # generating a test program. When supplied and set to false, the program
14
+ # output files will not be written and only a flow model will be generated.
15
+ def launch(options = {})
16
+ if options.key?(:write)
17
+ OrigenTesters::Interface.write = options[:write]
18
+ else
19
+ OrigenTesters::Interface.write = true
20
+ end
21
+ orig_launch(options)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ # This shim is temporary to help NXP transition to Origen from
2
+ # our original internal version (RGen)
3
+ if defined? RGen::ORIGENTRANSITION
4
+ require 'rgen/generator'
5
+ else
6
+ require 'origen/generator'
7
+ end
8
+ module Origen
9
+ class Generator
10
+ # Makes more sense for this plugin to own this method now
11
+ def generate_program(file, options)
12
+ Origen.file_handler.resolve_files(file, ignore_with_prefix: '_', default_dir: "#{Origen.root}/program") do |path|
13
+ Origen.file_handler.current_file = path
14
+ j = Job.new(path, options)
15
+ j.pattern = path
16
+ j.run
17
+ end
18
+ Origen.interface.write_files(options)
19
+ unless options[:quiet] || !Origen.interface.write?
20
+ if options[:referenced_pattern_list]
21
+ file = "#{Origen.root}/list/#{options[:referenced_pattern_list]}"
22
+ else
23
+ file = Origen.config.referenced_pattern_list
24
+ end
25
+ puts "Referenced pattern list written to: #{Pathname.new(file).relative_path_from(Pathname.pwd)}"
26
+ dir = Pathname.new(file).dirname
27
+ FileUtils.mkdir_p(dir) unless dir.exist?
28
+ File.open(file, 'w') do |f|
29
+ Origen.interface.referenced_patterns.uniq.sort.each do |pat|
30
+ f.puts pat
31
+ end
32
+ end
33
+ end
34
+ Origen.interface.on_program_completion(options)
35
+ end
36
+ end
37
+ end