origen_swd 0.5.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e19e934c3c7bbb7092cad11d2d69b97be46ee52e
4
- data.tar.gz: 07ff3368c8d0e9ed1904a81602d8d0a52c7a1399
3
+ metadata.gz: c8c309c479f7909b8266f9e642dbbe614b0ef8ed
4
+ data.tar.gz: 0623f5d41b8a0ae7cb9fa527ecbdf1fbdf940ef2
5
5
  SHA512:
6
- metadata.gz: a4f9830d179fdaf7fe1f0cb51edf3b9408a2d2d848c8fa695a02de307f50d7504a28bac50dad2006585d99e7a9a1137044e12fe8ce0e54007d7b976406d58eff
7
- data.tar.gz: 5460db3c0c1388a17f0f5eb1e049f898330c2d56fb7f5c97a151d351580ab41d5d88277cfa2ee96df16abe19ea07e3a887e89ff6e1067a7d1a63c44fd94cd888
6
+ metadata.gz: 9b52f1c3ea5db823849cc1afb0dbea312a7aab30d41a389a101215059b82e4318346395e3443b1aa0557c900ab55705b1d2c4eda7f11721de355a2630c9d503a
7
+ data.tar.gz: f2cc61effbb85769c07d915ca27c44befe1664c86f362e8e8faabd2e417604edfe9e2a6da04b50a2efeb39713b7ea307eec948aef98f6c7285eb3205508013c1
@@ -0,0 +1,2 @@
1
+ require "origen_swd"
2
+ require 'origen_swd_dev/dut'
@@ -22,8 +22,6 @@ when "examples"
22
22
  status = 0
23
23
 
24
24
  # Pattern generator tests
25
- ARGV = %w(example -t debug -r approved)
26
- load "#{Origen.top}/lib/origen/commands/generate.rb"
27
25
  ARGV = %w(example_api -t debug -r approved)
28
26
  load "#{Origen.top}/lib/origen/commands/generate.rb"
29
27
  ARGV = %w(example_reg -t debug -r approved)
@@ -1,6 +1,6 @@
1
1
  module OrigenSWD
2
- MAJOR = 0
3
- MINOR = 5
2
+ MAJOR = 1
3
+ MINOR = 0
4
4
  BUGFIX = 0
5
5
  DEV = nil
6
6
 
@@ -11,6 +11,8 @@ module OrigenSWD
11
11
  # Returns the parent object that instantiated the driver, could be
12
12
  # either a DUT object or a protocol abstraction
13
13
  attr_reader :owner
14
+
15
+ # Customiz-ible 'turn-round cycle' (TRN) parameter (in cycles)
14
16
  attr_accessor :trn
15
17
 
16
18
  # Initialize class variables
@@ -24,13 +26,36 @@ module OrigenSWD
24
26
  #
25
27
  def initialize(owner, options = {})
26
28
  @owner = owner
27
- # validate_pins
28
29
 
29
30
  @current_apaddr = 0
30
31
  @orundetect = 0
31
32
  @trn = 0
32
33
  end
33
34
 
35
+ # Write data from Debug Port
36
+ #
37
+ # @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
38
+ # Value to be shifted. If a reg/bit collection is supplied this can be pre-marked for
39
+ # read, store or overlay and which will result in the requested action being applied to
40
+ # the cycles corresponding to those bits only (don't care cycles will be generated for the others).
41
+ # @param [Hash] options Options to customize the operation
42
+ def read_dp(reg_or_val, options = {})
43
+ reg_or_val, options = nil, reg_or_val if reg_or_val.is_a?(Hash)
44
+ read(0, reg_or_val, options.merge(compare_data: reg_or_val.is_a?(Numeric)))
45
+ end
46
+
47
+ # Write data from Access Port
48
+ #
49
+ # @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
50
+ # Value to be shifted. If a reg/bit collection is supplied this can be pre-marked for
51
+ # read, store or overlay and which will result in the requested action being applied to
52
+ # the cycles corresponding to those bits only (don't care cycles will be generated for the others).
53
+ # @param [Hash] options Options to customize the operation
54
+ def read_ap(reg_or_val, options = {})
55
+ reg_or_val, options = nil, reg_or_val if reg_or_val.is_a?(Hash)
56
+ read(1, reg_or_val, options.merge(compare_data: reg_or_val.is_a?(Numeric)))
57
+ end
58
+
34
59
  # Read data from Debug Port or Access Port
35
60
  #
36
61
  # @param [Integer] ap_dp A single bit indicating whether the Debug Port or the Access Port
@@ -41,10 +66,33 @@ module OrigenSWD
41
66
  # the cycles corresponding to those bits only (don't care cycles will be generated for the others).
42
67
  # @param [Hash] options Options to customize the operation
43
68
  def read(ap_dp, reg_or_val, options = {})
44
- addr = reg_or_val.respond_to?(:address) ? reg_or_val.address : reg_or_val
69
+ addr = extract_address(reg_or_val, options.merge(use_reg_or_val_if_you_must: true))
45
70
  send_header(ap_dp, 1, addr) # send read-specific header (rnw = 1)
46
71
  receive_acknowledgement
47
72
  receive_payload(reg_or_val, options)
73
+ swd_dio.drive(0)
74
+ end
75
+
76
+ # Write data to Debug Port
77
+ #
78
+ # @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
79
+ # Value to be shifted. If a reg/bit collection is supplied this can be pre-marked for
80
+ # read, store or overlay and which will result in the requested action being applied to
81
+ # the cycles corresponding to those bits only (don't care cycles will be generated for the others).
82
+ # @param [Hash] options Options to customize the operation
83
+ def write_dp(reg_or_val, options = {})
84
+ write(0, reg_or_val, options)
85
+ end
86
+
87
+ # Write data to Access Port
88
+ #
89
+ # @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
90
+ # Value to be shifted. If a reg/bit collection is supplied this can be pre-marked for
91
+ # read, store or overlay and which will result in the requested action being applied to
92
+ # the cycles corresponding to those bits only (don't care cycles will be generated for the others).
93
+ # @param [Hash] options Options to customize the operation
94
+ def write_ap(reg_or_val, options = {})
95
+ write(1, reg_or_val, options)
48
96
  end
49
97
 
50
98
  # Write data to Debug Port or Access Port
@@ -55,81 +103,48 @@ module OrigenSWD
55
103
  # Value to be shifted. If a reg/bit collection is supplied this can be pre-marked for
56
104
  # read, store or overlay and which will result in the requested action being applied to
57
105
  # 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
106
  # @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
107
+ def write(ap_dp, reg_or_val, deprecated_wdata = nil, options = {})
108
+ deprecated_wdata, options = nil, deprecated_wdata if deprecated_wdata.is_a?(Hash)
64
109
 
65
- if reg_or_val.respond_to?(:data)
66
- reg_or_val.data = wdata
110
+ if deprecated_wdata
111
+ addr = reg_or_val.respond_to?(:address) ? reg_or_val.address : reg_or_val
67
112
  else
68
- reg_or_val = wdata
113
+ addr = extract_address(reg_or_val, options)
69
114
  end
70
- send_payload(reg_or_val, options)
71
- end
72
115
 
73
- # Sends data stream with SWD protocol
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
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
84
- if options.key?(:overlay)
85
- $tester.label(options[:overlay])
86
- size.times do |bit|
87
- swd_clk.drive(1)
88
- $tester.label("// SWD Data Pin #{bit}")
89
- swd_dio.drive(data[bit])
90
- $tester.cycle
91
- end
92
- swd_dio.dont_care
93
- else
94
- size.times do |bit|
95
- swd_clk.drive(1)
96
- swd_dio.drive(data[bit])
97
- $tester.cycle
116
+ send_header(ap_dp, 0, addr) # send write-specific header (rnw = 0)
117
+ receive_acknowledgement
118
+
119
+ if deprecated_wdata
120
+ if reg_or_val.respond_to?(:data)
121
+ reg_or_val.data = deprecated_wdata
122
+ else
123
+ reg_or_val = deprecated_wdata
98
124
  end
99
- swd_dio.dont_care
100
125
  end
126
+ send_payload(reg_or_val, options)
127
+ swd_dio.drive(0)
101
128
  end
102
129
 
103
- # Recieves data stream with SWD protocol
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
109
- def get_data(size, options = {})
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
115
- size.times do |bit|
116
- $tester.store_next_cycle($dut.pin(:swd_dio)) if should_store
117
- swd_dio.assert(options[:compare_data][bit]) if options.key?(:compare_data)
118
- $tester.cycle
119
- end
120
- end
130
+ private
121
131
 
122
- # Sends specified number of '0' bits
123
- #
124
- # @param [Integer] size The length of data
125
- def swd_dio_to_0(size)
126
- swd_dio.drive(0)
127
- size.times do |bit|
128
- $tester.cycle
132
+ def extract_data_hex(reg_or_val)
133
+ if reg_or_val.respond_to?(:data)
134
+ reg_or_val.data.to_s(16).upcase
135
+ else
136
+ reg_or_val.to_s(16).upcase
129
137
  end
130
138
  end
131
139
 
132
- private
140
+ def extract_address(reg_or_val, options)
141
+ addr = options[:address] || options[:addr]
142
+ return addr if addr
143
+ return reg_or_val.address if reg_or_val.respond_to?(:address)
144
+ return reg_or_val.addr if reg_or_val.respond_to?(:addr)
145
+ return reg_or_val if reg_or_val && options[:use_reg_or_val_if_you_must]
146
+ fail 'No address given, if supplying a data value instead of a register object, you must supply an :address option'
147
+ end
133
148
 
134
149
  # Send SWD Packet header
135
150
  # ------------------------------------------------------------------------
@@ -145,40 +160,44 @@ module OrigenSWD
145
160
  addr = address >> 2
146
161
  parity = apndp ^ rnw ^ (addr >> 3) ^ (addr >> 2) & (0x01) ^ (addr >> 1) & (0x01) ^ addr & 0x01
147
162
 
148
- cc 'Header phase'
163
+ cc '[SWD] -----------------------------------------------------------------'
164
+ cc '[SWD] | Start | AP | Read | AD[2] | AD[3] | Par | Stop | Park |'
165
+ cc "[SWD] | 1 | #{apndp} | #{rnw} | #{addr[0]} | #{addr[1]} | #{parity[0]} | 0 | 1 |"
166
+ cc '[SWD] -----------------------------------------------------------------'
149
167
  swd_clk.drive(1)
150
- cc 'Send Start Bit'
151
168
  swd_dio.drive!(1) # send start bit (always 1)
152
- cc 'Send APnDP Bit (DP or AP Access Register Bit)'
153
169
  swd_dio.drive!(apndp) # send apndp bit
154
- cc 'Send RnW Bit (read or write bit)'
155
170
  swd_dio.drive!(rnw) # send rnw bit
156
- cc 'Send Address Bits (2 bits)'
157
171
  swd_dio.drive!(addr[0]) # send address[2] bit
158
172
  swd_dio.drive!(addr[1]) # send address[3] bit
159
- cc 'Send Parity Bit'
160
173
  swd_dio.drive!(parity[0]) # send parity bit
161
- cc 'Send Stop Bit'
162
174
  swd_dio.drive!(0) # send stop bit
163
- cc 'Send Park Bit'
164
175
  swd_dio.drive!(1) # send park bit
165
176
  swd_dio.dont_care
166
177
  end
167
178
 
168
179
  # Waits appropriate number of cycles for the acknowledgement phase
169
180
  def receive_acknowledgement
170
- cc 'Acknowledge Response phase'
171
181
  wait_trn
182
+ swd_dio.assert!(1)
183
+ swd_dio.assert!(0)
184
+ swd_dio.assert!(0)
172
185
  swd_dio.dont_care
173
- $tester.cycle(repeat: 3)
174
186
  end
175
187
 
176
188
  # Waits for TRN time delay
177
189
  def wait_trn
178
- swd_dio.drive(1)
179
190
  $tester.cycle(repeat: trn + 1)
180
191
  end
181
192
 
193
+ def log(msg)
194
+ cc "[SWD] #{msg}"
195
+ if block_given?
196
+ yield
197
+ cc "[SWD] /#{msg}"
198
+ end
199
+ end
200
+
182
201
  # Get (read) the data payload
183
202
  #
184
203
  # @param [Integer, Origen::Register::Reg, Origen::Register::BitCollection, Origen::Register::Bit] reg_or_val
@@ -188,17 +207,12 @@ module OrigenSWD
188
207
  # @option options [String] :overlay String for pattern label to
189
208
  # facilitate pattern overlay
190
209
  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'
210
+ log "Read: #{Origen::Utility.read_hex(reg_or_val)}" do
211
+ options[:read] = true
212
+ shift_payload(reg_or_val, options)
213
+ end
199
214
  swd_dio.dont_care
200
215
  $tester.cycle
201
- cc 'Send Read ACK bits'
202
216
  wait_trn
203
217
  end
204
218
 
@@ -211,18 +225,17 @@ module OrigenSWD
211
225
  # @option options [String] :overlay String for pattern label to
212
226
  # facilitate pattern overlay
213
227
  def send_payload(reg_or_val, options)
214
- cc 'Write Data Payload phase'
215
- cc 'Send ACK Bits'
216
228
  wait_trn
229
+ wdata = reg_or_val.respond_to?(:data) ? reg_or_val.data : reg_or_val
217
230
 
218
- cc 'SWD 32-Bit Write Start'
219
- options[:read] = false
220
- shift_payload(reg_or_val, options)
231
+ log "Write: #{wdata.to_hex}" do
232
+ options[:read] = false
233
+ shift_payload(reg_or_val, options)
234
+ end
221
235
 
222
- cc 'Send Write Parity Bit'
223
- wdata = reg_or_val.respond_to?(:data) ? reg_or_val.data : reg_or_val
224
236
  parity_bit = swd_xor_calc(32, wdata)
225
237
  swd_dio.drive!(parity_bit)
238
+ swd_dio.dont_care
226
239
  end
227
240
 
228
241
  # Shift the data payload
@@ -259,13 +272,13 @@ module OrigenSWD
259
272
  $tester.label(reg_or_val[i].overlay_str)
260
273
  elsif reg_or_val[i].is_to_be_read?
261
274
  swd_dio.assert(reg_or_val[i] ? reg_or_val[i] : 0)
262
- elsif options.key?(:compare_data)
275
+ elsif options[:compare_data]
263
276
  swd_dio.assert(reg_or_val[i] ? reg_or_val[i] : 0)
264
277
  else
265
278
  swd_dio.dont_care
266
279
  end
267
280
  else
268
- if options.key?(:compare_data)
281
+ if options[:compare_data] && reg_or_val
269
282
  swd_dio.assert(reg_or_val[i] ? reg_or_val[i] : 0)
270
283
  else
271
284
  swd_dio.dont_care
@@ -295,12 +308,12 @@ module OrigenSWD
295
308
  xor
296
309
  end
297
310
 
298
- # Provided shortname access to top-level SWD clock pin
311
+ # Provides shortname access to top-level SWD clock pin
299
312
  def swd_clk
300
313
  owner.pin(:swd_clk)
301
314
  end
302
315
 
303
- # Provided shortname access to top-level SWD data I/P pin
316
+ # Provides shortname access to top-level SWD data I/O pin
304
317
  def swd_dio
305
318
  owner.pin(:swd_dio)
306
319
  end
@@ -1,14 +1,12 @@
1
- module OrigenSWD
1
+ module OrigenSWDDev
2
2
  # This is a dummy DUT model which is used
3
3
  # to instantiate and test the SWD locally
4
4
  # during development.
5
5
  #
6
6
  # It is not included when this library is imported.
7
7
  class DUT
8
+ include Origen::TopLevel
8
9
  include OrigenSWD
9
- include Origen::Callbacks
10
- include Origen::Registers
11
- include Origen::Pins
12
10
 
13
11
  # Initializes simple dut model with test register and required swd pins
14
12
  #
@@ -1,37 +1,21 @@
1
1
  Pattern.create do
2
- DP = 0
3
- AP = 1
4
- ap_dp = 1
5
- address = 0x00002020
6
- wdata = 0xAAAA5555
2
+ dut.control.write(0x00000010)
3
+ dut.swd.write(0, dut.control)
4
+ dut.swd.write(0, 0x55, address: 4)
5
+ dut.swd.write_dp(dut.control)
6
+ dut.swd.write_dp(0x55, address: 4)
7
+ dut.swd.write_ap(dut.control)
8
+ dut.swd.write_ap(0x55, address: 4)
7
9
 
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)
10
+ # Not really supported, can't differentiate between an old-style and new-style
11
+ # call to do things like enable read by default
12
+ #dut.swd.read(DP, dut.control)
13
+ #dut.swd.read(DP, 0x55, address: 4)
14
+ dut.swd.read_dp(dut.control)
15
+ dut.swd.read_dp(0x55, address: 4)
16
+ dut.swd.read_ap(dut.control)
17
+ dut.swd.read_ap(0x55, address: 4)
18
+ dut.swd.read_dp(address: 4)
19
+ dut.swd.read_ap(address: 4)
36
20
 
37
21
  end
@@ -27,7 +27,7 @@ __NOTE:__ You will also need to include <code>require 'origen_swd'</code> somewh
27
27
 
28
28
  ### How To Use
29
29
 
30
- Include the <code>OrigenSWD</code> module to add a JTAG driver to your class and
30
+ Include the <code>OrigenSWD</code> module to add a SWD driver to your class and then
31
31
  define the required pins.
32
32
 
33
33
  Including the module adds a <code>swd</code> method which will return an instance of
@@ -38,8 +38,8 @@ Here is an example integration:
38
38
  ~~~ruby
39
39
 
40
40
  class DUT
41
+ include Origen::TopLevel
41
42
  include OrigenSWD
42
- include Origen::Pins
43
43
 
44
44
  def initialize(options = {})
45
45
  add_pin :swd_clk
@@ -48,7 +48,29 @@ class DUT
48
48
  end
49
49
 
50
50
 
51
- DUT.new.swd # => An instance of OrigenSWD::Driver
51
+ dut.swd # => An instance of OrigenSWD::Driver
52
+
53
+ # Here is the main API for reading and writing the debug and access ports...
54
+
55
+ # Registers objects can be supplied to provide the address and data values.
56
+ # The register bits can be pre-marked for read, store or overlay and which
57
+ # will result in the requested action being applied to the cycles corresponding
58
+ # to those bits only (don't care cycles will be generated for the others).
59
+ dut.swd.write_dp(reg_object)
60
+ dut.swd.read_dp(reg_object)
61
+ dut.swd.write_ap(reg_object)
62
+ dut.swd.read_ap(reg_object)
63
+
64
+ # Alternatively, dumb data values can be supplied.
65
+ dut.swd.write_dp(0x55, address: 10)
66
+ dut.swd.read_dp(0x55, address: 10)
67
+ dut.swd.write_ap(0x55, address: 10)
68
+ dut.swd.read_ap(0x55, address: 10)
69
+
70
+ # In the case of read, the data value can be omitted completely, in which case
71
+ # it will generate a read operation with don't care on all shift out vectors
72
+ dut.swd.read_dp(address: 10)
73
+ dut.swd.read_ap(address: 10)
52
74
  ~~~
53
75
 
54
76
 
@@ -62,7 +84,7 @@ object for use in the console:
62
84
  ~~~
63
85
  origen i
64
86
 
65
- > $dut.swd
87
+ > dut.swd
66
88
  => #<OrigenSWD::Driver:0x0000001ee48e78>
67
89
  ~~~
68
90
 
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen_swd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 1.0.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-24 00:00:00.000000000 Z
11
+ date: 2017-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: origen
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.2'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.2'
27
- - !ruby/object:Gem::Dependency
28
- name: origen_doc_helpers
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - ">="
32
18
  - !ruby/object:Gem::Version
33
- version: 0.2.0
34
- type: :development
19
+ version: 0.7.36
20
+ type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - ">="
39
25
  - !ruby/object:Gem::Version
40
- version: 0.2.0
26
+ version: 0.7.36
41
27
  description:
42
28
  email:
43
29
  - Ronnie.Lajaunie@freescale.com
@@ -46,15 +32,12 @@ extensions: []
46
32
  extra_rdoc_files: []
47
33
  files:
48
34
  - config/application.rb
35
+ - config/boot.rb
49
36
  - config/commands.rb
50
- - config/development.rb
51
- - config/environment.rb
52
- - config/users.rb
53
37
  - config/version.rb
54
38
  - lib/origen_swd.rb
55
39
  - lib/origen_swd/driver.rb
56
- - lib/origen_swd/dut.rb
57
- - pattern/example.rb
40
+ - lib/origen_swd_dev/dut.rb
58
41
  - pattern/example_api.rb
59
42
  - pattern/example_reg.rb
60
43
  - templates/web/index.md.erb
@@ -81,9 +64,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
64
  version: 1.8.11
82
65
  requirements: []
83
66
  rubyforge_project:
84
- rubygems_version: 2.2.2
67
+ rubygems_version: 2.5.2
85
68
  signing_key:
86
69
  specification_version: 4
87
70
  summary: Driver for single-wire-debug interface.
88
71
  test_files: []
89
- has_rdoc:
@@ -1,15 +0,0 @@
1
- # This file is similar to environment.rb and will be loaded
2
- # automatically at the start of each invocation of Origen.
3
- #
4
- # However the major difference is that it will not be loaded
5
- # if the application is imported by a 3rd party app - in that
6
- # case only environment.rb is loaded.
7
- #
8
- # Therefore this file should be used to load anything you need
9
- # to setup a development environment for this app, normally
10
- # this would be used to define some dummy classes to instantiate
11
- # your objects so that they can be tested and/or interacted with
12
- # in the console.
13
- module OrigenSWD
14
- autoload :DUT, "origen_swd/dut"
15
- end
@@ -1 +0,0 @@
1
- require "origen_swd"
@@ -1,19 +0,0 @@
1
- # This file defines the users associated with your project, it is basically the
2
- # mailing list for release notes.
3
- #
4
- # You can split your users into "admin" and "user" groups, the main difference
5
- # between the two is that admin users will get all tag emails, users will get
6
- # emails on external/official releases only.
7
- #
8
- # Users are also prohibited from running the "origen tag" task, but this is
9
- # really just to prevent a casual user from executing it inadvertently and is
10
- # not intended to be a serious security gate.
11
- module Origen
12
- module Users
13
- def users
14
- @users ||= [
15
-
16
- ]
17
- end
18
- end
19
- end
@@ -1,59 +0,0 @@
1
- Pattern.create do
2
-
3
- address = 0x00002020
4
- rwb = 0
5
- ap_dp = 1
6
- wdata = 0xAAAA5555
7
- start = 1
8
- apndp = 1
9
- rnw = rwb
10
- addr = address >> 2
11
- parity_pr = ap_dp ^ rwb ^ (addr >> 3) ^ (addr >> 2) & (0x01) ^ (addr >> 1) & (0x01) ^ addr & 0x01
12
- trn = 0
13
- data = wdata
14
- require_dp = 0
15
- line_reset = 0
16
- stop = 0
17
- park = 1
18
-
19
- cc 'SWD transaction'
20
- cc 'Packet Request Phase'
21
-
22
- annotate 'Send Start Bit'
23
- $dut.swd.send_data(start, 1)
24
- cc('Send APnDP Bit (DP or AP Access Register Bit)', prefix: true)
25
- $dut.swd.send_data(apndp, 1)
26
- c2 'Send RnW Bit (read or write bit)'
27
- $dut.swd.send_data(rnw, 1)
28
- c2 'Send Address Bits (2 bits)'
29
- $dut.swd.send_data(addr, 2)
30
- c2 'Send Parity Bit'
31
- $dut.swd.send_data(parity_pr, 1)
32
- c2 'Send Stop Bit'
33
- $dut.swd.send_data(stop, 1)
34
- c2 'Send Park Bit'
35
- $dut.swd.send_data(park, 1)
36
-
37
- cc 'Acknowledge Response phase'
38
- $dut.swd.send_data(0xf, trn + 1)
39
- $dut.swd.get_data(3)
40
-
41
- cc 'Write Data Phase'
42
- cc 'Write'
43
- cc 'Send ACK Bits'
44
- $dut.swd.send_data(0xf, trn + 1)
45
- cc 'SWD 32-Bit Write Start'
46
- $dut.swd.send_data(data, 32, overlay: 'write_ovl')
47
- cc 'SWD 32-Bit Write End'
48
- cc 'Send Write Parity Bit'
49
- xor = 0
50
- 32.times do |bit|
51
- xor ^= (data >> bit) & 0x01
52
- end
53
- xor
54
- $dut.swd.send_data(xor, 1)
55
-
56
- cc 'SWD DIO to 0 for 10 cycles'
57
- $dut.swd.swd_dio_to_0(10)
58
-
59
- end