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.
- checksums.yaml +4 -4
- data/config/shared_commands.rb +6 -0
- data/config/version.rb +2 -2
- data/lib/commands/run.rb +44 -0
- data/lib/origen_testers.rb +19 -1
- data/lib/origen_testers/flow.rb +382 -0
- data/lib/origen_testers/generator.rb +32 -29
- data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -0
- data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -0
- data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -0
- data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -0
- data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -0
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +97 -0
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +390 -115
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +4 -54
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +257 -11
- data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -0
- data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -0
- data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -0
- data/lib/origen_testers/igxl_based_tester/base/levelset.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +33 -1
- data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -0
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +47 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +2 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +137 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +58 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +58 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +95 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +2 -2
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +121 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +24 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +137 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -0
- data/lib/origen_testers/interface.rb +41 -6
- data/lib/origen_testers/no_interface.rb +7 -0
- data/lib/origen_testers/origen_ext/application/runner.rb +25 -0
- data/lib/origen_testers/origen_ext/generator.rb +37 -0
- data/lib/origen_testers/origen_ext/generator/flow.rb +70 -0
- data/lib/origen_testers/origen_ext/generator/resources.rb +21 -0
- data/lib/origen_testers/program_generators.rb +0 -1
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +158 -134
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +2 -3
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +4 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +5 -6
- data/lib/origen_testers/test/dut.rb +5 -0
- data/lib/origen_testers/test/j750_base_interface.rb +0 -3
- data/lib/origen_testers/test/ultraflex_interface.rb +230 -4
- data/lib/origen_testers/test/v93k_interface.rb +5 -23
- data/program/components/_temp.rb +6 -0
- data/program/flow_control.rb +190 -62
- data/program/prb1.rb +13 -50
- data/program/prb2.rb +0 -16
- data/program/test.rb +12 -3
- data/program/uflex_resources.rb +159 -0
- metadata +66 -16
- data/lib/origen_testers/doc.rb +0 -224
- data/lib/origen_testers/doc/generator.rb +0 -124
- data/lib/origen_testers/doc/generator/flow.rb +0 -69
- data/lib/origen_testers/doc/generator/flow_line.rb +0 -201
- data/lib/origen_testers/doc/generator/test.rb +0 -66
- data/lib/origen_testers/doc/generator/test_group.rb +0 -64
- data/lib/origen_testers/doc/generator/tests.rb +0 -45
- data/lib/origen_testers/doc/model.rb +0 -160
- data/lib/origen_testers/generator/flow_control_api.rb +0 -611
- data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +0 -476
- 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
|
-
%
|
8
|
-
<%=
|
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,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
|
-
|
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
|
-
|
155
|
-
|
156
|
-
|
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
|
-
|
196
|
+
OrigenTesters::Interface.resources_mode?
|
162
197
|
end
|
163
198
|
|
164
199
|
def identity_map # :nodoc:
|
@@ -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
|