origen_swd 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/commands.rb +4 -0
- data/config/version.rb +1 -1
- data/lib/origen_swd/driver.rb +256 -25
- data/lib/origen_swd/dut.rb +15 -7
- data/pattern/example_api.rb +37 -0
- data/pattern/example_reg.rb +42 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e19e934c3c7bbb7092cad11d2d69b97be46ee52e
|
4
|
+
data.tar.gz: 07ff3368c8d0e9ed1904a81602d8d0a52c7a1399
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4f9830d179fdaf7fe1f0cb51edf3b9408a2d2d848c8fa695a02de307f50d7504a28bac50dad2006585d99e7a9a1137044e12fe8ce0e54007d7b976406d58eff
|
7
|
+
data.tar.gz: 5460db3c0c1388a17f0f5eb1e049f898330c2d56fb7f5c97a151d351580ab41d5d88277cfa2ee96df16abe19ea07e3a887e89ff6e1067a7d1a63c44fd94cd888
|
data/config/commands.rb
CHANGED
@@ -24,6 +24,10 @@ when "examples"
|
|
24
24
|
# Pattern generator tests
|
25
25
|
ARGV = %w(example -t debug -r approved)
|
26
26
|
load "#{Origen.top}/lib/origen/commands/generate.rb"
|
27
|
+
ARGV = %w(example_api -t debug -r approved)
|
28
|
+
load "#{Origen.top}/lib/origen/commands/generate.rb"
|
29
|
+
ARGV = %w(example_reg -t debug -r approved)
|
30
|
+
load "#{Origen.top}/lib/origen/commands/generate.rb"
|
27
31
|
|
28
32
|
if Origen.app.stats.changed_files == 0 &&
|
29
33
|
Origen.app.stats.new_files == 0 &&
|
data/config/version.rb
CHANGED
data/lib/origen_swd/driver.rb
CHANGED
@@ -4,74 +4,305 @@ module OrigenSWD
|
|
4
4
|
# :swd_dio
|
5
5
|
#
|
6
6
|
class Driver
|
7
|
+
REQUIRED_PINS = [:swd_clk, :swd_dio]
|
8
|
+
|
9
|
+
include Origen::Registers
|
10
|
+
|
7
11
|
# Returns the parent object that instantiated the driver, could be
|
8
12
|
# either a DUT object or a protocol abstraction
|
9
13
|
attr_reader :owner
|
14
|
+
attr_accessor :trn
|
10
15
|
|
11
16
|
# Initialize class variables
|
12
|
-
# owner - parent object
|
13
|
-
# options - any miscellaneous custom arguments
|
14
|
-
# Returns nothing.
|
15
17
|
#
|
16
|
-
#
|
18
|
+
# @param [Object] owner Parent object
|
19
|
+
# @param [Hash] options Options to customize the operation
|
17
20
|
#
|
21
|
+
# @example
|
22
|
+
# # Create new SWD::Driver object
|
18
23
|
# DUT.new.swd
|
19
24
|
#
|
20
25
|
def initialize(owner, options = {})
|
21
26
|
@owner = owner
|
27
|
+
# validate_pins
|
28
|
+
|
22
29
|
@current_apaddr = 0
|
23
30
|
@orundetect = 0
|
31
|
+
@trn = 0
|
32
|
+
end
|
33
|
+
|
34
|
+
# Read data from Debug Port or Access Port
|
35
|
+
#
|
36
|
+
# @param [Integer] ap_dp A single bit indicating whether the Debug Port or the Access Port
|
37
|
+
# Register is to be accessed. This bit is 0 for an DPACC access, or 1 for a APACC access
|
38
|
+
# @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
|
39
|
+
# Value to be shifted. If a reg/bit collection is supplied this can be pre-marked for
|
40
|
+
# read, store or overlay and which will result in the requested action being applied to
|
41
|
+
# the cycles corresponding to those bits only (don't care cycles will be generated for the others).
|
42
|
+
# @param [Hash] options Options to customize the operation
|
43
|
+
def read(ap_dp, reg_or_val, options = {})
|
44
|
+
addr = reg_or_val.respond_to?(:address) ? reg_or_val.address : reg_or_val
|
45
|
+
send_header(ap_dp, 1, addr) # send read-specific header (rnw = 1)
|
46
|
+
receive_acknowledgement
|
47
|
+
receive_payload(reg_or_val, options)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Write data to Debug Port or Access Port
|
51
|
+
#
|
52
|
+
# @param [Integer] ap_dp A single bit indicating whether the Debug Port or the Access Port Register
|
53
|
+
# is to be accessed. This bit is 0 for an DPACC access, or 1 for a APACC access
|
54
|
+
# @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
|
55
|
+
# Value to be shifted. If a reg/bit collection is supplied this can be pre-marked for
|
56
|
+
# read, store or overlay and which will result in the requested action being applied to
|
57
|
+
# the cycles corresponding to those bits only (don't care cycles will be generated for the others).
|
58
|
+
# @param [Integer] wdata Data to be written
|
59
|
+
# @param [Hash] options Options to customize the operation
|
60
|
+
def write(ap_dp, reg_or_val, wdata, options = {})
|
61
|
+
addr = reg_or_val.respond_to?(:address) ? reg_or_val.address : reg_or_val
|
62
|
+
send_header(ap_dp, 0, addr) # send write-specific header (rnw = 0)
|
63
|
+
receive_acknowledgement
|
64
|
+
|
65
|
+
if reg_or_val.respond_to?(:data)
|
66
|
+
reg_or_val.data = wdata
|
67
|
+
else
|
68
|
+
reg_or_val = wdata
|
69
|
+
end
|
70
|
+
send_payload(reg_or_val, options)
|
24
71
|
end
|
25
72
|
|
26
73
|
# Sends data stream with SWD protocol
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
74
|
+
#
|
75
|
+
# @param [Integer] data Data to be sent
|
76
|
+
# @param [Integer] size The length of data
|
77
|
+
# @param [Hash] options Options to customize the operation
|
78
|
+
# @option options [String] :overlay String for pattern label to
|
79
|
+
# facilitate pattern overlay
|
32
80
|
def send_data(data, size, options = {})
|
81
|
+
# Warn caller that this method is being deprecated
|
82
|
+
msg = 'Use swd.write(ap_dp, reg_or_val, wdata, options = {}) instead of send_data(data, size, options = {})'
|
83
|
+
Origen.deprecate msg
|
33
84
|
if options.key?(:overlay)
|
34
85
|
$tester.label(options[:overlay])
|
35
86
|
size.times do |bit|
|
36
|
-
|
87
|
+
swd_clk.drive(1)
|
37
88
|
$tester.label("// SWD Data Pin #{bit}")
|
38
|
-
|
89
|
+
swd_dio.drive(data[bit])
|
39
90
|
$tester.cycle
|
40
91
|
end
|
41
|
-
|
92
|
+
swd_dio.dont_care
|
42
93
|
else
|
43
94
|
size.times do |bit|
|
44
|
-
|
45
|
-
|
95
|
+
swd_clk.drive(1)
|
96
|
+
swd_dio.drive(data[bit])
|
46
97
|
$tester.cycle
|
47
98
|
end
|
48
|
-
|
99
|
+
swd_dio.dont_care
|
49
100
|
end
|
50
101
|
end
|
51
102
|
|
52
103
|
# Recieves data stream with SWD protocol
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
104
|
+
#
|
105
|
+
# @param [Integer] size The length of data
|
106
|
+
# @param [Hash] options Options to customize the operation
|
107
|
+
# @option options [String] :compare_data Data to be compared, only compared
|
108
|
+
# if options is set
|
57
109
|
def get_data(size, options = {})
|
58
|
-
|
59
|
-
|
110
|
+
# Warn caller that this method is being deprecated
|
111
|
+
msg = 'Use swd.read(ap_dp, reg_or_val, options = {}) instead of get_data(size, options = {})'
|
112
|
+
Origen.deprecate msg
|
113
|
+
should_store = swd_dio.is_to_be_stored?
|
114
|
+
swd_dio.dont_care
|
60
115
|
size.times do |bit|
|
61
116
|
$tester.store_next_cycle($dut.pin(:swd_dio)) if should_store
|
62
|
-
|
117
|
+
swd_dio.assert(options[:compare_data][bit]) if options.key?(:compare_data)
|
63
118
|
$tester.cycle
|
64
119
|
end
|
65
120
|
end
|
66
121
|
|
67
122
|
# Sends specified number of '0' bits
|
68
|
-
#
|
69
|
-
#
|
123
|
+
#
|
124
|
+
# @param [Integer] size The length of data
|
70
125
|
def swd_dio_to_0(size)
|
71
|
-
|
126
|
+
swd_dio.drive(0)
|
72
127
|
size.times do |bit|
|
73
128
|
$tester.cycle
|
74
129
|
end
|
75
130
|
end
|
131
|
+
|
132
|
+
private
|
133
|
+
|
134
|
+
# Send SWD Packet header
|
135
|
+
# ------------------------------------------------------------------------
|
136
|
+
# | Start | APnDP | 1 | ADDR[2] | ADDR[3] | Parity | Stop | Park |
|
137
|
+
# ------------------------------------------------------------------------
|
138
|
+
#
|
139
|
+
# @param [Integer] apndp A single bit indicating whether the Debug Port or the Access Port
|
140
|
+
# Register is to be accessed. This bit is 0 for an DPACC access, or 1 for a APACC access
|
141
|
+
# @param [Integer] rnw A single bit, indicating whether the access is a read or a write.
|
142
|
+
# This bit is 0 for a write access, or 1 for a read access.
|
143
|
+
# @param [Integer] address Address of register that is being accessed
|
144
|
+
def send_header(apndp, rnw, address)
|
145
|
+
addr = address >> 2
|
146
|
+
parity = apndp ^ rnw ^ (addr >> 3) ^ (addr >> 2) & (0x01) ^ (addr >> 1) & (0x01) ^ addr & 0x01
|
147
|
+
|
148
|
+
cc 'Header phase'
|
149
|
+
swd_clk.drive(1)
|
150
|
+
cc 'Send Start Bit'
|
151
|
+
swd_dio.drive!(1) # send start bit (always 1)
|
152
|
+
cc 'Send APnDP Bit (DP or AP Access Register Bit)'
|
153
|
+
swd_dio.drive!(apndp) # send apndp bit
|
154
|
+
cc 'Send RnW Bit (read or write bit)'
|
155
|
+
swd_dio.drive!(rnw) # send rnw bit
|
156
|
+
cc 'Send Address Bits (2 bits)'
|
157
|
+
swd_dio.drive!(addr[0]) # send address[2] bit
|
158
|
+
swd_dio.drive!(addr[1]) # send address[3] bit
|
159
|
+
cc 'Send Parity Bit'
|
160
|
+
swd_dio.drive!(parity[0]) # send parity bit
|
161
|
+
cc 'Send Stop Bit'
|
162
|
+
swd_dio.drive!(0) # send stop bit
|
163
|
+
cc 'Send Park Bit'
|
164
|
+
swd_dio.drive!(1) # send park bit
|
165
|
+
swd_dio.dont_care
|
166
|
+
end
|
167
|
+
|
168
|
+
# Waits appropriate number of cycles for the acknowledgement phase
|
169
|
+
def receive_acknowledgement
|
170
|
+
cc 'Acknowledge Response phase'
|
171
|
+
wait_trn
|
172
|
+
swd_dio.dont_care
|
173
|
+
$tester.cycle(repeat: 3)
|
174
|
+
end
|
175
|
+
|
176
|
+
# Waits for TRN time delay
|
177
|
+
def wait_trn
|
178
|
+
swd_dio.drive(1)
|
179
|
+
$tester.cycle(repeat: trn + 1)
|
180
|
+
end
|
181
|
+
|
182
|
+
# Get (read) the data payload
|
183
|
+
#
|
184
|
+
# @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
|
185
|
+
# Value to be read. If a reg/bit collection is supplied this can be pre-marked for
|
186
|
+
# read, store or overlay and which will result in the requested action being applied to
|
187
|
+
# the cycles corresponding to those bits only (don't care cycles will be generated for the others).
|
188
|
+
# @option options [String] :overlay String for pattern label to
|
189
|
+
# facilitate pattern overlay
|
190
|
+
def receive_payload(reg_or_val, options)
|
191
|
+
cc 'Read Data Payload phase'
|
192
|
+
|
193
|
+
cc 'SWD 32-Bit Read Data Start'
|
194
|
+
options[:read] = true
|
195
|
+
shift_payload(reg_or_val, options)
|
196
|
+
|
197
|
+
cc 'SWD 32-Bit Read Data End'
|
198
|
+
cc 'Get Read Parity Bit'
|
199
|
+
swd_dio.dont_care
|
200
|
+
$tester.cycle
|
201
|
+
cc 'Send Read ACK bits'
|
202
|
+
wait_trn
|
203
|
+
end
|
204
|
+
|
205
|
+
# Send (write) the data payload
|
206
|
+
#
|
207
|
+
# @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
|
208
|
+
# Value to be written. If a reg/bit collection is supplied this can be pre-marked for
|
209
|
+
# read, store or overlay and which will result in the requested action being applied to
|
210
|
+
# the cycles corresponding to those bits only (don't care cycles will be generated for the others).
|
211
|
+
# @option options [String] :overlay String for pattern label to
|
212
|
+
# facilitate pattern overlay
|
213
|
+
def send_payload(reg_or_val, options)
|
214
|
+
cc 'Write Data Payload phase'
|
215
|
+
cc 'Send ACK Bits'
|
216
|
+
wait_trn
|
217
|
+
|
218
|
+
cc 'SWD 32-Bit Write Start'
|
219
|
+
options[:read] = false
|
220
|
+
shift_payload(reg_or_val, options)
|
221
|
+
|
222
|
+
cc 'Send Write Parity Bit'
|
223
|
+
wdata = reg_or_val.respond_to?(:data) ? reg_or_val.data : reg_or_val
|
224
|
+
parity_bit = swd_xor_calc(32, wdata)
|
225
|
+
swd_dio.drive!(parity_bit)
|
226
|
+
end
|
227
|
+
|
228
|
+
# Shift the data payload
|
229
|
+
#
|
230
|
+
# @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
|
231
|
+
# Value to be shifted. If a reg/bit collection is supplied this can be pre-marked for
|
232
|
+
# read, store or overlay and which will result in the requested action being applied to
|
233
|
+
# the cycles corresponding to those bits only (don't care cycles will be generated for the others).
|
234
|
+
# @option options [String] :overlay String for pattern label to
|
235
|
+
# facilitate pattern overlay
|
236
|
+
def shift_payload(reg_or_val, options)
|
237
|
+
cc options[:arm_debug_comment] if options.key?(:arm_debug_comment)
|
238
|
+
size = 32 # SWD only used to write to DP and AP registers of ARM Debugger (32 bits)
|
239
|
+
contains_bits = (contains_bits?(reg_or_val) || is_a_bit?(reg_or_val))
|
240
|
+
if options.key?(:arm_debug_overlay)
|
241
|
+
options[:overlay] = options[:arm_debug_overlay]
|
242
|
+
options[:overlay_label] = options[:arm_debug_overlay]
|
243
|
+
end
|
244
|
+
if options.key?(:overlay)
|
245
|
+
if options[:overlay_label].nil?
|
246
|
+
options[:overlay_label] = options[:overlay]
|
247
|
+
$tester.label(options[:overlay_label]) if options.key?(:overlay)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
swd_clk.drive(1)
|
251
|
+
size.times do |i|
|
252
|
+
if options[:read]
|
253
|
+
# If it's a register support bit-wise reads
|
254
|
+
if contains_bits
|
255
|
+
if reg_or_val[i].is_to_be_stored?
|
256
|
+
Origen.tester.store_next_cycle(swd_dio)
|
257
|
+
swd_dio.dont_care if Origen.tester.j750?
|
258
|
+
elsif reg_or_val[i].has_overlay?
|
259
|
+
$tester.label(reg_or_val[i].overlay_str)
|
260
|
+
elsif reg_or_val[i].is_to_be_read?
|
261
|
+
swd_dio.assert(reg_or_val[i] ? reg_or_val[i] : 0)
|
262
|
+
elsif options.key?(:compare_data)
|
263
|
+
swd_dio.assert(reg_or_val[i] ? reg_or_val[i] : 0)
|
264
|
+
else
|
265
|
+
swd_dio.dont_care
|
266
|
+
end
|
267
|
+
else
|
268
|
+
if options.key?(:compare_data)
|
269
|
+
swd_dio.assert(reg_or_val[i] ? reg_or_val[i] : 0)
|
270
|
+
else
|
271
|
+
swd_dio.dont_care
|
272
|
+
end
|
273
|
+
end
|
274
|
+
$tester.cycle
|
275
|
+
else
|
276
|
+
$tester.label("// SWD Data Pin #{i}") if options.key?(:overlay) && !Origen.mode.simulation?
|
277
|
+
swd_dio.drive!(reg_or_val[i])
|
278
|
+
end
|
279
|
+
end
|
280
|
+
# Clear read and similar flags to reflect that the request has just
|
281
|
+
# been fulfilled
|
282
|
+
reg_or_val.clear_flags if reg_or_val.respond_to?(:clear_flags)
|
283
|
+
swd_dio.dont_care
|
284
|
+
end
|
285
|
+
|
286
|
+
# Calculate exclusive OR
|
287
|
+
#
|
288
|
+
# @param [Integer] size The number of bits in the number
|
289
|
+
# @param [Integer] number The number being operated on
|
290
|
+
def swd_xor_calc(size, number)
|
291
|
+
xor = 0
|
292
|
+
size.times do |bit|
|
293
|
+
xor ^= (number >> bit) & 0x01
|
294
|
+
end
|
295
|
+
xor
|
296
|
+
end
|
297
|
+
|
298
|
+
# Provided shortname access to top-level SWD clock pin
|
299
|
+
def swd_clk
|
300
|
+
owner.pin(:swd_clk)
|
301
|
+
end
|
302
|
+
|
303
|
+
# Provided shortname access to top-level SWD data I/P pin
|
304
|
+
def swd_dio
|
305
|
+
owner.pin(:swd_dio)
|
306
|
+
end
|
76
307
|
end
|
77
308
|
end
|
data/lib/origen_swd/dut.rb
CHANGED
@@ -11,23 +11,31 @@ module OrigenSWD
|
|
11
11
|
include Origen::Pins
|
12
12
|
|
13
13
|
# Initializes simple dut model with test register and required swd pins
|
14
|
-
# options - any miscellaneous custom arguments
|
15
|
-
# Returns nothing.
|
16
14
|
#
|
17
|
-
#
|
15
|
+
# @param [Hash] options Options to customize the operation
|
18
16
|
#
|
17
|
+
# @example
|
19
18
|
# $dut = OrigenSWD::DUT.new
|
20
19
|
#
|
21
20
|
def initialize(options = {})
|
22
|
-
|
23
|
-
|
21
|
+
# Sample DPACC register
|
22
|
+
add_reg :test, 0x04, 32, data: { pos: 0, bits: 32 },
|
23
|
+
bit: { pos: 2 }
|
24
|
+
|
25
|
+
# Sample DPACC register
|
26
|
+
add_reg :select, 0x08, 32, data: { pos: 0, bits: 32 }
|
27
|
+
|
28
|
+
# Sample APACC register
|
29
|
+
add_reg :stat, 0x00, 32, data: { pos: 0, bits: 32 }
|
30
|
+
add_reg :control, 0x01, 32, data: { pos: 0, bits: 32 }
|
31
|
+
|
24
32
|
add_pin :swd_clk
|
25
33
|
add_pin :swd_dio
|
26
34
|
end
|
27
35
|
|
28
36
|
# Add any custom startup business here.
|
29
|
-
#
|
30
|
-
#
|
37
|
+
#
|
38
|
+
# @param [Hash] options Options to customize the operation
|
31
39
|
def startup(options = {})
|
32
40
|
$tester.set_timeset('swd', 40)
|
33
41
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Pattern.create do
|
2
|
+
DP = 0
|
3
|
+
AP = 1
|
4
|
+
ap_dp = 1
|
5
|
+
address = 0x00002020
|
6
|
+
wdata = 0xAAAA5555
|
7
|
+
|
8
|
+
|
9
|
+
$dut.swd.write(ap_dp, address, wdata, overlay: 'write_ovl')
|
10
|
+
cc 'SWD DIO to 0 for 10 cycles'
|
11
|
+
$dut.swd.swd_dio_to_0(10)
|
12
|
+
$dut.swd.read(ap_dp, address)
|
13
|
+
$dut.swd.swd_dio_to_0(10)
|
14
|
+
$dut.swd.read(ap_dp, address, compare_data: wdata)
|
15
|
+
$dut.swd.swd_dio_to_0(10)
|
16
|
+
|
17
|
+
#$dut.reg(:select).data = 0x01000000
|
18
|
+
$dut.swd.write(DP, $dut.reg(:select), 0x01000000, arm_debug_overlay: 'select_reg')
|
19
|
+
$dut.swd.swd_dio_to_0(10)
|
20
|
+
$dut.swd.read(DP, $dut.reg(:select))
|
21
|
+
$dut.swd.swd_dio_to_0(10)
|
22
|
+
|
23
|
+
$dut.swd.write(DP, $dut.reg(:stat), 0x00000032)
|
24
|
+
$dut.swd.swd_dio_to_0(10)
|
25
|
+
$dut.swd.write(DP, $dut.reg(:control), 0x00000010)
|
26
|
+
$dut.swd.swd_dio_to_0(10)
|
27
|
+
$dut.swd.read(DP, $dut.reg(:control), r_mask: 'store')
|
28
|
+
$dut.swd.swd_dio_to_0(10)
|
29
|
+
$dut.swd.read(DP, $dut.reg(:control), compare_data: 0x00000010)
|
30
|
+
$dut.swd.swd_dio_to_0(10)
|
31
|
+
|
32
|
+
$dut.swd.read(DP, $dut.reg(:control), compare_data: 0x00000010)
|
33
|
+
$dut.swd.swd_dio_to_0(10)
|
34
|
+
$dut.swd.read(DP, $dut.reg(:control), compare_data: 0x00000010)
|
35
|
+
$dut.swd.swd_dio_to_0(10)
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
Pattern.create do
|
2
|
+
|
3
|
+
swd = $dut.swd
|
4
|
+
reg = $dut.reg(:test)
|
5
|
+
|
6
|
+
def test(msg)
|
7
|
+
ss "Test - #{msg}"
|
8
|
+
end
|
9
|
+
|
10
|
+
test "Write to DR register"
|
11
|
+
reg.write(0xFF01FF01)
|
12
|
+
swd.write(0, reg, 0xFF01FF01)
|
13
|
+
|
14
|
+
test "Write to DR register with overlay"
|
15
|
+
reg.overlay("write_overlay")
|
16
|
+
swd.write(0, reg, 0xFF01FF01)
|
17
|
+
|
18
|
+
test "Write to DR register with single bit overlay"
|
19
|
+
reg.overlay(nil)
|
20
|
+
reg.bit(:bit).overlay("write_overlay")
|
21
|
+
swd.write(0, reg, 0xFF01FF01)
|
22
|
+
|
23
|
+
|
24
|
+
test "Read full DR register"
|
25
|
+
cc "Full register (32 bits)"
|
26
|
+
reg.read
|
27
|
+
swd.read(0, reg)
|
28
|
+
|
29
|
+
test "Read single bit out of DR register"
|
30
|
+
reg.bit(:bit).read
|
31
|
+
swd.read(0, reg)
|
32
|
+
|
33
|
+
test "Store full DR register"
|
34
|
+
cc "Full register (32 bits)"
|
35
|
+
reg.store
|
36
|
+
swd.read(0, reg)
|
37
|
+
|
38
|
+
test "Store single bit out of DR register"
|
39
|
+
reg.bit(:bit).store
|
40
|
+
swd.read(0, reg)
|
41
|
+
|
42
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_swd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ronnie Lajaunie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -55,6 +55,8 @@ files:
|
|
55
55
|
- lib/origen_swd/driver.rb
|
56
56
|
- lib/origen_swd/dut.rb
|
57
57
|
- pattern/example.rb
|
58
|
+
- pattern/example_api.rb
|
59
|
+
- pattern/example_reg.rb
|
58
60
|
- templates/web/index.md.erb
|
59
61
|
- templates/web/layouts/_basic.html.erb
|
60
62
|
- templates/web/partials/_navbar.html.erb
|