origen_arm_debug 0.10.1 → 1.0.0.pre1
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.
- checksums.yaml +4 -4
- data/config/application.rb +3 -3
- data/config/boot.rb +5 -0
- data/config/commands.rb +14 -9
- data/config/version.rb +4 -4
- data/lib/origen_arm_debug.rb +7 -11
- data/lib/origen_arm_debug/ap.rb +14 -0
- data/lib/origen_arm_debug/ap_controller.rb +27 -0
- data/lib/origen_arm_debug/dap.rb +89 -0
- data/lib/origen_arm_debug/dap_controller.rb +14 -0
- data/lib/origen_arm_debug/dp_controller.rb +17 -0
- data/lib/origen_arm_debug/helpers.rb +28 -0
- data/lib/origen_arm_debug/jtag_ap.rb +10 -0
- data/lib/origen_arm_debug/jtag_ap_controller.rb +6 -0
- data/lib/origen_arm_debug/jtag_dp.rb +59 -0
- data/lib/origen_arm_debug/jtag_dp_controller.rb +140 -0
- data/lib/origen_arm_debug/mem_ap.rb +33 -283
- data/lib/origen_arm_debug/mem_ap_controller.rb +81 -0
- data/lib/origen_arm_debug/sw_dp.rb +65 -0
- data/lib/origen_arm_debug/sw_dp_controller.rb +47 -0
- data/lib/{origen_arm_debug → origen_arm_debug_dev}/dut.rb +11 -15
- data/lib/origen_arm_debug_dev/dut_jtag.rb +32 -0
- data/lib/{origen_arm_debug → origen_arm_debug_dev}/dut_swd.rb +7 -1
- data/pattern/workout.rb +61 -0
- data/templates/web/index.md.erb +16 -4
- metadata +38 -48
- data/config/development.rb +0 -17
- data/config/environment.rb +0 -3
- data/config/users.rb +0 -19
- data/lib/origen_arm_debug/driver.rb +0 -113
- data/lib/origen_arm_debug/dut_jtag.rb +0 -19
- data/lib/origen_arm_debug/swj_dp.rb +0 -426
- data/pattern/read_write_reg.rb +0 -33
- data/pattern/read_write_reg_jtag.rb +0 -17
- data/pattern/read_write_reg_swd.rb +0 -22
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'origen_arm_debug/dp_controller'
|
2
|
+
module OrigenARMDebug
|
3
|
+
class SW_DPController
|
4
|
+
include Origen::Controller
|
5
|
+
include Helpers
|
6
|
+
include DPController
|
7
|
+
|
8
|
+
def write_register(reg, options = {})
|
9
|
+
unless reg.writable?
|
10
|
+
fail "The :#{reg.name} register is not writeable!"
|
11
|
+
end
|
12
|
+
|
13
|
+
if reg.owner == model
|
14
|
+
log "Write SW-DP register #{reg.name.to_s.upcase}: #{reg.data.to_hex}" do
|
15
|
+
dut.swd.write_dp(reg)
|
16
|
+
end
|
17
|
+
else
|
18
|
+
unless reg.owner.is_a?(AP)
|
19
|
+
fail 'The SW-DP can only write to DP or AP registers!'
|
20
|
+
end
|
21
|
+
|
22
|
+
select_ap_reg(reg)
|
23
|
+
dut.swd.write_ap(reg, options)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def read_register(reg, options = {})
|
28
|
+
unless reg.readable?
|
29
|
+
fail "The :#{reg.name} register is not readable!"
|
30
|
+
end
|
31
|
+
|
32
|
+
if reg.owner == model
|
33
|
+
log "Read SW-DP register #{reg.name.to_s.upcase}: #{Origen::Utility.read_hex(reg)}" do
|
34
|
+
dut.swd.read_dp(reg)
|
35
|
+
end
|
36
|
+
else
|
37
|
+
unless reg.owner.is_a?(AP)
|
38
|
+
fail 'The SW-DP can only write to DP or AP registers!'
|
39
|
+
end
|
40
|
+
|
41
|
+
select_ap_reg(reg)
|
42
|
+
dut.swd.read_ap(address: reg.address)
|
43
|
+
dut.swd.read_dp(reg, options.merge(address: rdbuff.address))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module OrigenARMDebugDev
|
2
2
|
# This is a dummy DUT model which is used
|
3
3
|
# to instantiate and test the ARMDebug locally
|
4
4
|
# during development.
|
@@ -11,27 +11,23 @@ module OrigenARMDebug
|
|
11
11
|
# Initializes simple dut model with test register and required jtag/swd pins
|
12
12
|
#
|
13
13
|
# @example
|
14
|
-
# $dut =
|
14
|
+
# $dut = OrigenARMDebugDev::DUT.new
|
15
15
|
#
|
16
16
|
def initialize
|
17
|
-
add_reg :
|
17
|
+
add_reg :test, 0
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
# arm_debug.add_mem_ap('mem_ap', 0x00000000)
|
26
|
-
# arm_debug.add_mem_ap('mdm_ap', 0x01000000)
|
27
|
-
# arm_debug.add_mem_ap('alt_ahbapi', 0x02000000)
|
19
|
+
reg :test2, 0 do |reg|
|
20
|
+
reg.bit 31, :msb
|
21
|
+
reg.bit 30..1, :data
|
22
|
+
reg.bit 0, :lsb
|
23
|
+
end
|
28
24
|
end
|
29
25
|
|
30
26
|
# Add any custom startup business here.
|
31
27
|
#
|
32
28
|
# @param [Hash] options Options to customize the operation
|
33
29
|
def startup(options)
|
34
|
-
|
30
|
+
tester.set_timeset('arm_debug', 40)
|
35
31
|
end
|
36
32
|
|
37
33
|
# Read data from a register
|
@@ -39,7 +35,7 @@ module OrigenARMDebug
|
|
39
35
|
# @param [Register] reg Register name or address value
|
40
36
|
# @param [Hash] options Options to customize the operation
|
41
37
|
def read_register(reg, options = {})
|
42
|
-
arm_debug.read_register(reg, options)
|
38
|
+
arm_debug.mem_ap.read_register(reg, options)
|
43
39
|
end
|
44
40
|
|
45
41
|
# Write data to a register
|
@@ -47,7 +43,7 @@ module OrigenARMDebug
|
|
47
43
|
# @param [Register] reg Register name or address value
|
48
44
|
# @param [Hash] options Options to customize the operation
|
49
45
|
def write_register(reg, options = {})
|
50
|
-
arm_debug.write_register(reg, options)
|
46
|
+
arm_debug.mem_ap.write_register(reg, options)
|
51
47
|
end
|
52
48
|
end
|
53
49
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module OrigenARMDebugDev
|
2
|
+
# Simple JTAG-specific dut model that inherits from protocol-agnostic DUT model
|
3
|
+
class JTAG_DUT < DUT
|
4
|
+
include OrigenJTAG
|
5
|
+
|
6
|
+
# Adds jtag-required pins to the simple dut model
|
7
|
+
# Returns nothing.
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
add_pin :tclk
|
11
|
+
add_pin :tdi
|
12
|
+
add_pin :tdo
|
13
|
+
add_pin :tms
|
14
|
+
add_pin :trst
|
15
|
+
add_pin :swd_clk
|
16
|
+
add_pin :swd_dio
|
17
|
+
|
18
|
+
# Specify (customize) ARM Debug implementation details
|
19
|
+
sub_block :arm_debug, class_name: 'OrigenARMDebug::DAP',
|
20
|
+
mem_aps: {
|
21
|
+
mem_ap: {
|
22
|
+
base_address: 0x00000000,
|
23
|
+
latency: 16,
|
24
|
+
apreg_access_wait: 8,
|
25
|
+
apmem_access_wait: 8,
|
26
|
+
csw_reset: 0x23000040
|
27
|
+
},
|
28
|
+
mdm_ap: 0x01000000
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module OrigenARMDebugDev
|
2
2
|
# Simple SWD-specific dut model that inherits from protocol-agnostic DUT model
|
3
3
|
class SWD_DUT < DUT
|
4
4
|
include OrigenSWD
|
@@ -14,6 +14,12 @@ module OrigenARMDebug
|
|
14
14
|
add_pin :trst
|
15
15
|
add_pin :swd_clk
|
16
16
|
add_pin :swd_dio
|
17
|
+
|
18
|
+
sub_block :arm_debug, class_name: 'OrigenARMDebug::DAP',
|
19
|
+
mem_aps: {
|
20
|
+
mem_ap: { base_address: 0x00000000, csw_reset: 0x23000042 },
|
21
|
+
mdm_ap: 0x01000000
|
22
|
+
}
|
17
23
|
end
|
18
24
|
end
|
19
25
|
end
|
data/pattern/workout.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
Pattern.create name: "workout_#{dut.arm_debug.dp.name}" do
|
2
|
+
|
3
|
+
ss "Tests of direct DP API"
|
4
|
+
dp = dut.arm_debug.dp
|
5
|
+
|
6
|
+
dp.idcode.partno.read!(0x12)
|
7
|
+
|
8
|
+
dp.ctrlstat.write!(0x50000000)
|
9
|
+
dp.ctrlstat.read!(0xF0000000)
|
10
|
+
|
11
|
+
dp.select.apbanksel.write!(0xF)
|
12
|
+
|
13
|
+
dp.abort.dapabort.write!(1)
|
14
|
+
|
15
|
+
ss "Tests of direct AP API"
|
16
|
+
ap = dut.arm_debug.mem_ap
|
17
|
+
|
18
|
+
ap.tar.write!(0x1234_0000)
|
19
|
+
|
20
|
+
ap.tar.read!
|
21
|
+
|
22
|
+
ss "Tests of high-level register API"
|
23
|
+
|
24
|
+
ss "Test write register, should write value 0xFF01"
|
25
|
+
dut.reg(:test).write!(0x0000FF01)
|
26
|
+
|
27
|
+
ss "Test write register with overlay, no subroutine"
|
28
|
+
dut.reg(:test).overlay('write_overlay')
|
29
|
+
dut.reg(:test).write!(0x0000FF01, no_subr: true)
|
30
|
+
dut.reg(:test).overlay(nil)
|
31
|
+
|
32
|
+
ss "Test write register with overlay, use subroutine if available"
|
33
|
+
dut.reg(:test).overlay('write_overlay_subr')
|
34
|
+
dut.reg(:test).write!(0x0000FF01)
|
35
|
+
dut.reg(:test).overlay(nil)
|
36
|
+
|
37
|
+
ss "Test read register, should read value 0x0000FF01"
|
38
|
+
dut.reg(:test).read!
|
39
|
+
|
40
|
+
ss "Test read register, with overlay, no subroutine, should read value 0x0000FF01"
|
41
|
+
dut.reg(:test).overlay('read_overlay')
|
42
|
+
dut.reg(:test).read!(no_subr: true)
|
43
|
+
dut.reg(:test).overlay(nil)
|
44
|
+
|
45
|
+
ss "Test read register, with overlay, use subroutine if available"
|
46
|
+
dut.reg(:test).overlay('read_overlay_subr')
|
47
|
+
dut.reg(:test).read!
|
48
|
+
dut.reg(:test).overlay(nil)
|
49
|
+
|
50
|
+
ss "Test read register with mask, should read value 0xXXXxxx1"
|
51
|
+
dut.reg(:test).read!(mask: 0x0000_000F)
|
52
|
+
|
53
|
+
ss "Test read register with store"
|
54
|
+
dut.reg(:test).store!
|
55
|
+
|
56
|
+
ss "Test bit level read, should read value 0xXXXxxx1"
|
57
|
+
dut.reg(:test).reset
|
58
|
+
dut.reg(:test).data = 0x0000FF01
|
59
|
+
dut.reg(:test)[0].read!
|
60
|
+
|
61
|
+
end
|
data/templates/web/index.md.erb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
### Purpose
|
8
8
|
|
9
|
-
This library provides register and memory read/write and debug control capability via the ARM
|
9
|
+
This library provides register and memory read/write and debug control capability via the ARM Debug Interface v5 Spec.
|
10
10
|
|
11
11
|
### How To Import
|
12
12
|
|
@@ -57,24 +57,36 @@ class DUT
|
|
57
57
|
reg.bits 7..0, :lower_byte
|
58
58
|
end
|
59
59
|
|
60
|
-
sub_block :arm_debug, class_name: "OrigenARMDebug::
|
60
|
+
sub_block :arm_debug, class_name: "OrigenARMDebug::DAP", mem_aps: { mem_ap: 0x00000000, mem2_ap: 0x01000000 }
|
61
61
|
end
|
62
62
|
|
63
63
|
# Hook the ARMDebug module into the register API, any register read
|
64
64
|
# requests will use the ARM Debug protocol by default
|
65
65
|
def read_register(reg, options={})
|
66
|
-
arm_debug.read_register(reg, options)
|
66
|
+
arm_debug.mem_ap.read_register(reg, options)
|
67
67
|
end
|
68
68
|
|
69
69
|
# As above for write requests
|
70
70
|
def write_register(reg, options={})
|
71
|
-
arm_debug.
|
71
|
+
arm_debug.mem_apwrite_register(reg, options)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
DUT.new.myreg.write!(0x55AA) # => Will generate the required vectors using the ARM debug protocol
|
76
76
|
~~~
|
77
77
|
|
78
|
+
You can also access the lower-level API using conventional Origen register transactions:
|
79
|
+
|
80
|
+
~~~ruby
|
81
|
+
arm_debug.sw_dp.idcode.read!(0x2BA01477)
|
82
|
+
arm_debug.sw_dp.ctrlstat.write!(0x5000_0000) # Power-up
|
83
|
+
arm_debug.sw_dp.ctrlstat.read!(0xF0000000) # Verify
|
84
|
+
arm_debug.ahb_ap.idr.read!(0x24770011)
|
85
|
+
arm_debug.sw_dp.select.write!(0) # Select AHB-AP, bank 0
|
86
|
+
|
87
|
+
# Set the SIZE field of CSW to 0x2 (32-bit transfers) + AddrInc=1
|
88
|
+
arm_debug.ahb_ap.csw.write!(0x23000052)
|
89
|
+
~~~
|
78
90
|
|
79
91
|
### How To Setup a Development Environment
|
80
92
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_arm_debug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ronnie Lajaunie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -17,6 +17,9 @@ dependencies:
|
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.7'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.7.36
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -24,62 +27,43 @@ dependencies:
|
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '0.7'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.7.36
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: origen_jtag
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - ">="
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
39
|
+
version: 0.15.0
|
34
40
|
type: :runtime
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
44
|
- - ">="
|
39
45
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
46
|
+
version: 0.15.0
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: origen_swd
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - "
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 0.5.0
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
51
|
+
- - "~>"
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: origen_doc_helpers
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
53
|
+
version: '1'
|
59
54
|
- - ">="
|
60
55
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
type: :
|
56
|
+
version: 1.1.0
|
57
|
+
type: :runtime
|
63
58
|
prerelease: false
|
64
59
|
version_requirements: !ruby/object:Gem::Requirement
|
65
60
|
requirements:
|
66
|
-
- - "
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 0.2.0
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: origen_testers
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
61
|
+
- - "~>"
|
74
62
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
63
|
+
version: '1'
|
80
64
|
- - ">="
|
81
65
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
66
|
+
version: 1.1.0
|
83
67
|
description:
|
84
68
|
email:
|
85
69
|
- ronnie.lajaunie@nxp.com
|
@@ -88,21 +72,28 @@ extensions: []
|
|
88
72
|
extra_rdoc_files: []
|
89
73
|
files:
|
90
74
|
- config/application.rb
|
75
|
+
- config/boot.rb
|
91
76
|
- config/commands.rb
|
92
|
-
- config/development.rb
|
93
|
-
- config/environment.rb
|
94
|
-
- config/users.rb
|
95
77
|
- config/version.rb
|
96
78
|
- lib/origen_arm_debug.rb
|
97
|
-
- lib/origen_arm_debug/
|
98
|
-
- lib/origen_arm_debug/
|
99
|
-
- lib/origen_arm_debug/
|
100
|
-
- lib/origen_arm_debug/
|
79
|
+
- lib/origen_arm_debug/ap.rb
|
80
|
+
- lib/origen_arm_debug/ap_controller.rb
|
81
|
+
- lib/origen_arm_debug/dap.rb
|
82
|
+
- lib/origen_arm_debug/dap_controller.rb
|
83
|
+
- lib/origen_arm_debug/dp_controller.rb
|
84
|
+
- lib/origen_arm_debug/helpers.rb
|
85
|
+
- lib/origen_arm_debug/jtag_ap.rb
|
86
|
+
- lib/origen_arm_debug/jtag_ap_controller.rb
|
87
|
+
- lib/origen_arm_debug/jtag_dp.rb
|
88
|
+
- lib/origen_arm_debug/jtag_dp_controller.rb
|
101
89
|
- lib/origen_arm_debug/mem_ap.rb
|
102
|
-
- lib/origen_arm_debug/
|
103
|
-
-
|
104
|
-
-
|
105
|
-
-
|
90
|
+
- lib/origen_arm_debug/mem_ap_controller.rb
|
91
|
+
- lib/origen_arm_debug/sw_dp.rb
|
92
|
+
- lib/origen_arm_debug/sw_dp_controller.rb
|
93
|
+
- lib/origen_arm_debug_dev/dut.rb
|
94
|
+
- lib/origen_arm_debug_dev/dut_jtag.rb
|
95
|
+
- lib/origen_arm_debug_dev/dut_swd.rb
|
96
|
+
- pattern/workout.rb
|
106
97
|
- templates/web/index.md.erb
|
107
98
|
- templates/web/layouts/_basic.html.erb
|
108
99
|
- templates/web/partials/_navbar.html.erb
|
@@ -127,10 +118,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
118
|
version: 1.8.11
|
128
119
|
requirements: []
|
129
120
|
rubyforge_project:
|
130
|
-
rubygems_version: 2.6.
|
121
|
+
rubygems_version: 2.6.7
|
131
122
|
signing_key:
|
132
123
|
specification_version: 4
|
133
|
-
summary: Provides
|
134
|
-
ARM_DEBUG protocol.
|
124
|
+
summary: Provides an Origen API to perform register read and write operations via
|
125
|
+
the ARM_DEBUG protocol.
|
135
126
|
test_files: []
|
136
|
-
has_rdoc:
|
data/config/development.rb
DELETED
@@ -1,17 +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 OrigenARMDebug
|
14
|
-
autoload :DUT, "origen_arm_debug/dut"
|
15
|
-
autoload :JTAG_DUT, "origen_arm_debug/dut_jtag"
|
16
|
-
autoload :SWD_DUT, "origen_arm_debug/dut_swd"
|
17
|
-
end
|
data/config/environment.rb
DELETED