origen_sim 0.12.0 → 0.13.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.
Files changed (35) hide show
  1. checksums.yaml +5 -5
  2. data/config/application.rb +17 -2
  3. data/config/shared_commands.rb +7 -0
  4. data/config/version.rb +1 -1
  5. data/ext/bridge.c +13 -3
  6. data/lib/origen_sim.rb +10 -0
  7. data/lib/origen_sim/artifacts.rb +101 -0
  8. data/lib/origen_sim/commands/build.rb +41 -9
  9. data/lib/origen_sim/heartbeat.rb +13 -1
  10. data/lib/origen_sim/origen_testers/api.rb +90 -7
  11. data/lib/origen_sim/simulation.rb +49 -4
  12. data/lib/origen_sim/simulator.rb +171 -19
  13. data/lib/origen_sim/stderr_reader.rb +19 -13
  14. data/lib/origen_sim/stdout_reader.rb +22 -16
  15. data/lib/origen_sim/tester.rb +110 -1
  16. data/lib/origen_sim_dev/dut.rb +5 -0
  17. data/pattern/test.rb +143 -0
  18. data/templates/empty.gtkw +19 -1
  19. data/templates/empty.rc +86 -0
  20. data/templates/empty.svcf +79 -9
  21. data/templates/empty.tcl +37 -9
  22. data/templates/origen_guides/simulation/app.md.erb +131 -0
  23. data/templates/origen_guides/simulation/artifacts.md.erb +115 -0
  24. data/templates/origen_guides/simulation/compiling.md.erb +190 -0
  25. data/templates/origen_guides/simulation/debugging.md.erb +135 -0
  26. data/templates/origen_guides/simulation/environment.md.erb +217 -0
  27. data/templates/origen_guides/simulation/flows.md.erb +69 -0
  28. data/templates/origen_guides/simulation/howitworks.md.erb +64 -0
  29. data/templates/origen_guides/simulation/introduction.md.erb +35 -0
  30. data/templates/origen_guides/simulation/log.md.erb +118 -0
  31. data/templates/origen_guides/simulation/patterns.md.erb +193 -0
  32. data/templates/probe.tcl.erb +3 -0
  33. data/templates/rtl_v/origen.v.erb +19 -3
  34. data/templates/web/layouts/_guides.html.erb +15 -0
  35. metadata +18 -5
@@ -14,13 +14,24 @@ module OrigenSim
14
14
  end
15
15
 
16
16
  simulator.configure(opts, &block)
17
+ @comment_buffer = []
18
+ @last_comment_size = 0
17
19
  super()
18
20
  end
19
21
 
22
+ # Returns the current cycle count
23
+ def cycle_count
24
+ @cycle_count || 0
25
+ end
26
+
20
27
  def simulator
21
28
  OrigenSim.simulator
22
29
  end
23
30
 
31
+ def dut_version
32
+ simulator.dut_version
33
+ end
34
+
24
35
  def handshake(options = {})
25
36
  end
26
37
 
@@ -50,6 +61,12 @@ module OrigenSim
50
61
  simulator.sync_up
51
62
  end
52
63
 
64
+ # Flush any buffered simulation output, this should cause live waveviewers to
65
+ # reflect the latest state
66
+ def flush
67
+ simulator.flush
68
+ end
69
+
53
70
  def set_timeset(name, period_in_ns)
54
71
  super
55
72
  # Need to remove this once OrigenTesters does it
@@ -68,7 +85,10 @@ module OrigenSim
68
85
  puts '$tester.set_timeset("nvmbist", 40) # Where 40 is the period in ns'
69
86
  exit 1
70
87
  end
88
+ flush_comments unless @comment_buffer.empty?
71
89
  simulator.cycle(options[:repeat] || 1)
90
+ @cycle_count ||= 0
91
+ @cycle_count += options[:repeat] || 1
72
92
  if @after_next_vector
73
93
  @after_next_vector.call(@after_next_vector_args)
74
94
  @after_next_vector = nil
@@ -76,7 +96,7 @@ module OrigenSim
76
96
  end
77
97
 
78
98
  def c1(msg, options = {})
79
- simulator.write_comment(msg) if @step_comment_on
99
+ @comment_buffer << msg if @step_comment_on
80
100
  end
81
101
 
82
102
  def loop_vectors(name, number_of_loops, options = {})
@@ -126,8 +146,97 @@ module OrigenSim
126
146
  end
127
147
  end
128
148
 
149
+ def match(pin, state, timeout_in_cycles, options = {})
150
+ if dut_version <= '0.12.0'
151
+ OrigenSim.error "Use of match loops requires a DUT model compiled with OrigenSim version > 0.12.0, the current dut was compiled with #{dut_version}"
152
+ end
153
+ expected_val = state == :high ? 1 : 0
154
+ if options[:pin2]
155
+ expected_val2 = options[:state2] == :high ? 1 : 0
156
+ end
157
+ timed_out = true
158
+ 10.times do
159
+ (timeout_in_cycles / 10).cycles
160
+ current_val = simulator.peek("dut.#{pin.rtl_name}").to_i
161
+ if options[:pin2]
162
+ current_val2 = simulator.peek("dut.#{options[:pin2].rtl_name}").to_i
163
+ if current_val == expected_val || current_val2 == expected_val2
164
+ timed_out = false
165
+ break
166
+ end
167
+ else
168
+ if current_val == expected_val
169
+ timed_out = false
170
+ break
171
+ end
172
+ end
173
+ end
174
+ # Final assertion to make the pattern fail if the loop timed out
175
+ if timed_out
176
+ pin.restore_state do
177
+ pin.assert!(expected_val)
178
+ end
179
+ if options[:pin2]
180
+ options[:pin2].restore_state do
181
+ options[:pin2].assert!(expected_val2)
182
+ end
183
+ end
184
+ end
185
+ end
186
+
187
+ def match_block(timeout_in_cycles, options = {}, &block)
188
+ if dut_version <= '0.12.0'
189
+ OrigenSim.error "Use of match loops requires a DUT model compiled with OrigenSim version > 0.12.0, the current dut was compiled with #{dut_version}"
190
+ end
191
+ match_conditions = Origen::Utility::BlockArgs.new
192
+ fail_conditions = Origen::Utility::BlockArgs.new
193
+ if block.arity > 0
194
+ block.call(match_conditions, fail_conditions)
195
+ else
196
+ match_conditions.add(&block)
197
+ end
198
+ timed_out = true
199
+ simulator.match_loop do
200
+ 10.times do
201
+ (timeout_in_cycles / 10).cycles
202
+ # Consider the match resolved if any condition can execute without generating errors
203
+ if match_conditions.any? do |condition|
204
+ e = simulator.match_errors
205
+ condition.call
206
+ e == simulator.match_errors
207
+ end
208
+ timed_out = false
209
+ break
210
+ end
211
+ end
212
+ end
213
+ # Final execution to make the pattern fail if the loop timed out
214
+ if timed_out
215
+ if fail_conditions.instance_variable_get(:@block_args).empty?
216
+ match_conditions.each(&:call)
217
+ else
218
+ fail_conditions.each(&:call)
219
+ end
220
+ end
221
+ end
222
+
223
+ def wait(*args)
224
+ super
225
+ flush if Origen.running_interactively? && dut_version > '0.12.1'
226
+ end
227
+
129
228
  private
130
229
 
230
+ def flush_comments
231
+ # Looping for at least the length of the last comment is require to ensure that all lines
232
+ # from the last comment are either overwritten or cleared
233
+ [@comment_buffer.size, @last_comment_size].max.times do |i|
234
+ simulator.write_comment(i, @comment_buffer[i])
235
+ end
236
+ @last_comment_size = @comment_buffer.size
237
+ @comment_buffer.clear
238
+ end
239
+
131
240
  def after_next_vector(*args, &block)
132
241
  @after_next_vector = block
133
242
  @after_next_vector_args = args
@@ -24,6 +24,7 @@ module OrigenSimDev
24
24
  add_pin :p4, size: 4, force: 0xA
25
25
  add_pin :v1, rtl_name: 'nc'
26
26
  add_pin :v2, rtl_name: :nc
27
+ add_pin :done
27
28
  add_pin :not_present
28
29
 
29
30
  timeset :func do |t|
@@ -84,6 +85,10 @@ module OrigenSimDev
84
85
  # tester.simulator.log_messages = true
85
86
  tester.set_timeset('func', 100)
86
87
 
88
+ dut.pin(:rstn).drive!(1)
89
+ 10.cycles
90
+ dut.pin(:rstn).drive!(0)
91
+ 10.cycles
87
92
  dut.pin(:rstn).drive!(1)
88
93
  10.cycles
89
94
  dut.pin(:tck).drive!(1)
@@ -11,6 +11,9 @@ Pattern.create do
11
11
  dut.jtag.read_ir(0xE, size: 4)
12
12
 
13
13
  ss "Switch to slower timeset"
14
+ ss "And test multiple comments for Github issue #8"
15
+ ss "Blah blah, more stuff to verify that we can handle large comment blocks without having problems"
16
+ ss "Blah blah, more stuff to verify that we can handle large comment blocks without having problems"
14
17
  tester.set_timeset("func", 200)
15
18
 
16
19
  dut.jtag.write_ir(0x5, size: 4)
@@ -103,4 +106,144 @@ Pattern.create do
103
106
  dut.cmd.write!(0x55)
104
107
  60.cycles
105
108
  end
109
+
110
+ ss "Test the command works with static vectors"
111
+ dut.pin(:done).assert!(1)
112
+ dut.pin(:done).dont_care
113
+ dut.cmd.write!(0x75)
114
+ 5.cycles
115
+ dut.pin(:done).assert!(0)
116
+ dut.pin(:done).dont_care
117
+ 500.cycles
118
+ dut.pin(:done).assert!(0)
119
+ dut.pin(:done).dont_care
120
+ 500.cycles
121
+ dut.pin(:done).assert!(1)
122
+ dut.pin(:done).dont_care
123
+
124
+ ss "Test basic match loop"
125
+ dut.pin(:done).assert!(1)
126
+ dut.pin(:done).dont_care
127
+ dut.cmd.write!(0x75)
128
+ 5.cycles
129
+ dut.pin(:done).assert!(0)
130
+ dut.pin(:done).dont_care
131
+ tester.wait match: true, time_in_cycles: 2000, pin: dut.pin(:done), state: :high
132
+ dut.pin(:done).assert!(1)
133
+ dut.pin(:done).dont_care
134
+
135
+ ss "Test basic 2-pin match loop"
136
+ dut.pin(:done).assert!(1)
137
+ dut.pin(:done).dont_care
138
+ dut.cmd.write!(0x75)
139
+ 5.cycles
140
+ dut.pin(:done).assert!(0)
141
+ dut.pin(:done).dont_care
142
+ tester.wait match: true, time_in_cycles: 2000, pin: dut.pin(:tdo), state: :low,
143
+ pin2: dut.pin(:done), state2: :high
144
+ dut.pin(:done).assert!(1)
145
+ dut.pin(:done).dont_care
146
+
147
+ ss "Test a block match loop"
148
+ dut.pin(:done).assert!(1)
149
+ dut.pin(:done).dont_care
150
+ dut.cmd.write!(0x75)
151
+ 5.cycles
152
+ dut.pin(:done).assert!(0)
153
+ dut.pin(:done).dont_care
154
+ tester.wait match: true, time_in_cycles: 2000 do
155
+ dut.pin(:done).assert!(1)
156
+ end
157
+ dut.pin(:done).assert!(1)
158
+ dut.pin(:done).dont_care
159
+
160
+ # ss "Test a multi-block match loop"
161
+ # dut.pin(:done).assert!(1)
162
+ # dut.pin(:done).dont_care
163
+ # dut.cmd.write!(0x75)
164
+ # dut.pin(:done).assert!(0)
165
+ # dut.pin(:done).dont_care
166
+ # tester.wait match: true, time_in_cycles: 2000 do |conditions, fail|
167
+ # # Just do two conditions that do the same thing here, the content
168
+ # # is not important for testing this feature
169
+ # conditions.add do
170
+ # dut.pin(:done).assert!(1)
171
+ # end
172
+ # conditions.add do
173
+ # dut.pin(:done).assert!(1)
174
+ # end
175
+ # end
176
+ # dut.pin(:done).assert!(0)
177
+ # dut.pin(:done).dont_care
178
+
179
+ ss "Test sim_delay"
180
+ dut.pin(:done).assert!(1)
181
+ dut.pin(:done).dont_care
182
+ dut.cmd.write!(0x75)
183
+ 5.cycles
184
+ dut.pin(:done).assert!(0)
185
+ dut.pin(:done).dont_care
186
+ tester.sim_delay :delay1 do
187
+ dut.pin(:done).assert!(1)
188
+ end
189
+ dut.pin(:done).assert!(1)
190
+ dut.pin(:done).dont_care
191
+
192
+ ss "Test sim delay with timeout"
193
+ dut.pin(:done).assert!(1)
194
+ dut.pin(:done).dont_care
195
+ dut.cmd.write!(0x75)
196
+ 5.cycles
197
+ dut.pin(:done).assert!(0)
198
+ dut.pin(:done).dont_care
199
+ tester.sim_delay :delay1, time_in_cycles: 2000 do
200
+ dut.pin(:done).assert!(1)
201
+ end
202
+ dut.pin(:done).assert!(1)
203
+ dut.pin(:done).dont_care
204
+
205
+ ss "Test sim delay with resolution"
206
+ dut.pin(:done).assert!(1)
207
+ dut.pin(:done).dont_care
208
+ e = tester.cycle_count
209
+ dut.cmd.write!(0x75)
210
+ 5.cycles
211
+ dut.pin(:done).assert!(0)
212
+ dut.pin(:done).dont_care
213
+ tester.sim_delay :delay1, resolution: 10 do
214
+ dut.pin(:done).assert!(1)
215
+ end
216
+ dut.pin(:done).assert!(1)
217
+ dut.pin(:done).dont_care
218
+
219
+ ss "Test sim delay with resolution and timeout"
220
+ dut.pin(:done).assert!(1)
221
+ dut.pin(:done).dont_care
222
+ e = tester.cycle_count
223
+ dut.cmd.write!(0x75)
224
+ 5.cycles
225
+ dut.pin(:done).assert!(0)
226
+ dut.pin(:done).dont_care
227
+ tester.sim_delay :delay1, time_in_cycles: 2000, resolution: { time_in_cycles: 10 } do
228
+ dut.pin(:done).assert!(1)
229
+ end
230
+ dut.pin(:done).assert!(1)
231
+ dut.pin(:done).dont_care
232
+
233
+ ss "Test sim delay with padding"
234
+ dut.pin(:done).assert!(1)
235
+ dut.pin(:done).dont_care
236
+ e = tester.cycle_count
237
+ dut.cmd.write!(0x75)
238
+ 5.cycles
239
+ dut.pin(:done).assert!(0)
240
+ dut.pin(:done).dont_care
241
+ tester.sim_delay :delay1, time_in_cycles: 2000, padding: { time_in_cycles: 500 } do
242
+ dut.pin(:done).assert!(1)
243
+ end
244
+ dut.pin(:done).assert!(1)
245
+ dut.pin(:done).dont_care
246
+ if (tester.cycle_count - e) < 1400
247
+ OrigenSim.error "sim_delay padding was not applied!"
248
+ end
106
249
  end
@@ -17,10 +17,28 @@
17
17
  [signals_width] 158
18
18
  [sst_expanded] 1
19
19
  [sst_vpaned_height] 337
20
+ @800200
21
+ -debug
20
22
  @820
21
23
  origen.debug.pattern[1023:0]
22
- origen.debug.comments[1023:0]
24
+ @800200
25
+ -Comments
26
+ @820
27
+ origen.debug.comments0[1023:0]
28
+ origen.debug.comments1[1023:0]
29
+ origen.debug.comments2[1023:0]
30
+ origen.debug.comments3[1023:0]
31
+ origen.debug.comments4[1023:0]
32
+ origen.debug.comments5[1023:0]
33
+ origen.debug.comments6[1023:0]
34
+ origen.debug.comments7[1023:0]
35
+ origen.debug.comments8[1023:0]
36
+ origen.debug.comments9[1023:0]
37
+ @1000200
38
+ -Comments
23
39
  @22
24
40
  origen.debug.errors[31:0]
41
+ @1000200
42
+ -debug
25
43
  [pattern_trace] 1
26
44
  [pattern_trace] 0
@@ -0,0 +1,86 @@
1
+ Magic 271485
2
+ Revision Verdi_N-2017.12-SP2
3
+
4
+ ; Window Layout <x> <y> <width> <height> <signalwidth> <valuewidth>
5
+ viewPort 0 28 1450 327 288 65
6
+
7
+ ; File list:
8
+ ; openDirFile [-d delimiter] [-s time_offset] [-rf auto_bus_rule_file] path_name file_name
9
+ openDirFile -d / "" ""
10
+
11
+ ; file time scale:
12
+ ; fileTimeScale ### s|ms|us|ns|ps
13
+
14
+ ; signal spacing:
15
+ signalSpacing 5
16
+
17
+ ; windowTimeUnit is used for zoom, cursor & marker
18
+ windowTimeUnit 1ns
19
+
20
+ ; waveform viewport range
21
+ zoom 0.000000 4013756.949425 1n
22
+ cursor 10096.000000
23
+ marker 0.000000
24
+
25
+ ; user define markers
26
+ ; userMarker time_pos marker_name color linestyle
27
+ ; visible top row signal index
28
+ top 0
29
+ ; marker line index
30
+ markerPos 6
31
+
32
+ ; event list
33
+ ; addEvent event_name event_expression
34
+ ; curEvent event_name
35
+
36
+
37
+
38
+ COMPLEX_EVENT_BEGIN
39
+
40
+
41
+ COMPLEX_EVENT_END
42
+
43
+
44
+
45
+ ; toolbar current search type
46
+ ; curSTATUS search_type
47
+ curSTATUS ByChange
48
+
49
+
50
+ activeDirFile "" ""
51
+ addGroup "Debug"
52
+ addSignal -h 15 -UNSIGNED -HEX -holdScope errors[31:0]
53
+ addSignal -h 15 -UNSIGNED -ASC -holdScope pattern[1023:0]
54
+ addGroup "Comments"
55
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[0]
56
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[1]
57
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[2]
58
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[3]
59
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[4]
60
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[5]
61
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[6]
62
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[7]
63
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[8]
64
+ addSignal -h 15 -UNSIGNED -ASC /origen/debug/comments[9]
65
+ addGroup "DUT"
66
+
67
+ ; getSignalForm Scope Hierarchy Status
68
+ ; active file of getSignalForm
69
+ activeDirFile "" ""
70
+
71
+ GETSIGNALFORM_SCOPE_HIERARCHY_BEGIN
72
+ getSignalForm close
73
+
74
+ "/FSN_DLLDELAY_1"
75
+ "/origen"
76
+
77
+ SCOPE_LIST_BEGIN
78
+ "/testbench/msf1"
79
+ "/FSN_DLLDELAY_1"
80
+ "/testbench"
81
+ "/origen"
82
+ "/origen/dut"
83
+ "/origen/debug"
84
+ SCOPE_LIST_END
85
+
86
+ GETSIGNALFORM_SCOPE_HIERARCHY_END
@@ -2,18 +2,22 @@
2
2
  # Preferences
3
3
  #
4
4
  preferences set plugin-enable-svdatabrowser-new 1
5
- preferences set toolbar-SimControl-WaveWindow {
5
+ preferences set toolbar-Standard-WaveWindow {
6
6
  usual
7
- position -row 1 -pos 4 -anchor e
7
+ position -pos 1
8
8
  }
9
9
  preferences set plugin-enable-groupscope 0
10
- preferences set sb-display-values 1
11
10
  preferences set plugin-enable-interleaveandcompare 0
12
11
  preferences set plugin-enable-waveformfrequencyplot 0
13
12
  preferences set toolbar-WaveZoom-WaveWindow {
14
13
  usual
15
14
  position -row 1 -pos 3 -anchor w
16
15
  }
16
+ preferences set toolbar-SimControl-WaveWindow {
17
+ usual
18
+ position -row 1 -pos 4 -anchor e
19
+ }
20
+ preferences set sb-display-values 1
17
21
  preferences set whats-new-dont-show-at-startup 1
18
22
  #
19
23
  # Groups
@@ -21,6 +25,7 @@ preferences set whats-new-dont-show-at-startup 1
21
25
  catch {group new -name Debug -overlay 0}
22
26
  catch {group new -name {Group 2} -overlay 0}
23
27
  catch {group new -name DUT -overlay 0}
28
+ catch {group new -name Comments -overlay 0}
24
29
  group using Debug
25
30
  group set -overlay 0
26
31
  group set -comment {}
@@ -28,8 +33,7 @@ group clear 0 end
28
33
 
29
34
  group insert \
30
35
  [subst {[format {origen.debug.pattern[1023:0]}]} ] \
31
- [subst {[format {origen.debug.comments[1023:0]}]} ] \
32
- [subst {[format {origen.debug.errors[31:0]}]} ]
36
+ Comments
33
37
  group using {Group 2}
34
38
  group set -overlay 0
35
39
  group set -comment {}
@@ -40,6 +44,22 @@ group set -overlay 0
40
44
  group set -comment {}
41
45
  group clear 0 end
42
46
 
47
+ group using Comments
48
+ group set -overlay 0
49
+ group set -comment {}
50
+ group clear 0 end
51
+
52
+ group insert \
53
+ [subst {[format {origen.debug.comments0[1023:0]}]} ] \
54
+ [subst {[format {origen.debug.comments1[1023:0]}]} ] \
55
+ [subst {[format {origen.debug.comments2[1023:0]}]} ] \
56
+ [subst {[format {origen.debug.comments3[1023:0]}]} ] \
57
+ [subst {[format {origen.debug.comments4[1023:0]}]} ] \
58
+ [subst {[format {origen.debug.comments5[1023:0]}]} ] \
59
+ [subst {[format {origen.debug.comments6[1023:0]}]} ] \
60
+ [subst {[format {origen.debug.comments7[1023:0]}]} ] \
61
+ [subst {[format {origen.debug.comments8[1023:0]}]} ] \
62
+ [subst {[format {origen.debug.comments9[1023:0]}]} ]
43
63
 
44
64
  #
45
65
  # Mnemonic Maps
@@ -70,16 +90,52 @@ waveform baseline set -time 0
70
90
 
71
91
 
72
92
  set groupId0 [waveform add -groups Debug]
93
+
94
+ set groupId1 [waveform find -name Comments]
95
+ set gpGlist1 [waveform hierarchy contents $groupId1]
96
+ set gpID1 [lindex $gpGlist1 0]
97
+ foreach {name attrs} [subst {
98
+ {[format {origen.debug.comments0[1023:0]}]} {-radix %a}
99
+ {[format {origen.debug.comments1[1023:0]}]} {-radix %a}
100
+ {[format {origen.debug.comments2[1023:0]}]} {-radix %a}
101
+ {[format {origen.debug.comments3[1023:0]}]} {-radix %a}
102
+ {[format {origen.debug.comments4[1023:0]}]} {-radix %a}
103
+ {[format {origen.debug.comments5[1023:0]}]} {-radix %a}
104
+ {[format {origen.debug.comments6[1023:0]}]} {-radix %a}
105
+ {[format {origen.debug.comments7[1023:0]}]} {-radix %a}
106
+ {[format {origen.debug.comments8[1023:0]}]} {-radix %a}
107
+ {[format {origen.debug.comments9[1023:0]}]} {-radix %a}
108
+ }] childcmds {
109
+ {}
110
+ {}
111
+ {}
112
+ {}
113
+ {}
114
+ {}
115
+ {}
116
+ {}
117
+ {}
118
+ {}
119
+ } {
120
+ set expected [ join [waveform signals -format path $gpID1] ]
121
+ if {[string equal $name $expected] || $name == "cdivider"} {
122
+ if {$attrs != ""} {
123
+ eval waveform format $gpID1 $attrs
124
+ }
125
+ if { $childcmds != ""} {
126
+ eval $childcmds
127
+ }
128
+ }
129
+ set gpGlist1 [lrange $gpGlist1 1 end]
130
+ set gpID1 [lindex $gpGlist1 0]
131
+ }
132
+
73
133
  set gpGlist0 [waveform hierarchy contents $groupId0]
74
134
  set gpID0 [lindex $gpGlist0 0]
75
135
  foreach {name attrs} [subst {
76
136
  {[format {origen.debug.pattern[1023:0]}]} {-radix %a}
77
- {[format {origen.debug.comments[1023:0]}]} {-radix %a}
78
- {[format {origen.debug.errors[31:0]}]} {}
79
137
  }] childcmds {
80
138
  {}
81
- {}
82
- {}
83
139
  } {
84
140
  set expected [ join [waveform signals -format path $gpID0] ]
85
141
  if {[string equal $name $expected] || $name == "cdivider"} {
@@ -94,7 +150,21 @@ foreach {name attrs} [subst {
94
150
  set gpID0 [lindex $gpGlist0 0]
95
151
  }
96
152
 
153
+ set id [waveform add -signals [subst {
154
+ {[format {origen.debug.errors[31:0]}]}
155
+ } ]]
97
156
 
98
157
  set groupId0 [waveform add -groups DUT]
99
158
 
159
+ waveform xview limits 0 32768000ns
160
+
161
+ #
162
+ # Waveform Window Links
163
+ #
164
+
165
+ #
166
+ # Console windows
167
+ #
168
+ console set -windowname Console
169
+ window geometry Console 600x250+2364+0
100
170