origen_arm_debug 1.1.4 → 1.2.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.
- checksums.yaml +4 -4
- data/config/boot.rb +1 -0
- data/config/commands.rb +3 -1
- data/config/version.rb +2 -2
- data/lib/origen_arm_debug/dap.rb +4 -2
- data/lib/origen_arm_debug/dp_controller.rb +8 -2
- data/lib/origen_arm_debug/jtag_dp.rb +3 -0
- data/lib/origen_arm_debug/mem_ap.rb +40 -9
- data/lib/origen_arm_debug/mem_ap_controller.rb +4 -0
- data/lib/origen_arm_debug_dev/dut_jtag_axi.rb +35 -0
- data/pattern/workout.rb +2 -0
- data/templates/web/index.md.erb +2 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 292e4be7741df68524ba13a6af2058a9ca209688ddf12ca19c63a1e2e795135c
|
4
|
+
data.tar.gz: 58fd3ee8010c9cba1bd4675896fd8a5aa0d9e579113aaeac7ceb30c5039467ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 880aef44c21b1a5030223b9d7a0155f0284109c9dcc8c711bdab5e95e0dc8f347a4920d93cfb993dcc51e7104fa91b740699c504a3d797a7c3e12252739357e8
|
7
|
+
data.tar.gz: 15f565c00daa931914a1b9be94894810a2bdccbd19e1553a013dc1234d1cb01b76484e2bc7e47697cb5ee3307fd03ff7e7484577171120579c35aa37e5e392b5
|
data/config/boot.rb
CHANGED
data/config/commands.rb
CHANGED
@@ -26,7 +26,9 @@ when "examples", "test"
|
|
26
26
|
status = 0
|
27
27
|
|
28
28
|
# Pattern generator tests
|
29
|
-
ARGV = %w(workout -t jtag -e j750 -r approved)
|
29
|
+
ARGV = %w(workout -t jtag.rb -e j750 -r approved)
|
30
|
+
load "#{Origen.top}/lib/origen/commands/generate.rb"
|
31
|
+
ARGV = %w(workout -t jtag_axi.rb -e j750 -r approved)
|
30
32
|
load "#{Origen.top}/lib/origen/commands/generate.rb"
|
31
33
|
ARGV = %w(workout -t swd -e j750 -r approved)
|
32
34
|
load "#{Origen.top}/lib/origen/commands/generate.rb"
|
data/config/version.rb
CHANGED
data/lib/origen_arm_debug/dap.rb
CHANGED
@@ -70,11 +70,13 @@ module OrigenARMDebug
|
|
70
70
|
#
|
71
71
|
def add_ap(name, options)
|
72
72
|
domain name.to_sym
|
73
|
+
# class name is deleted from options in sub_block call
|
74
|
+
class_name = options[:class_name]
|
73
75
|
ap = sub_block(name.to_sym, options)
|
74
76
|
|
75
|
-
if
|
77
|
+
if class_name == 'MemAP'
|
76
78
|
mem_aps << ap
|
77
|
-
elsif
|
79
|
+
elsif class_name == 'JTAGAP'
|
78
80
|
jtag_aps << ap
|
79
81
|
else
|
80
82
|
ext_aps << ap
|
@@ -9,8 +9,14 @@ module OrigenARMDebug
|
|
9
9
|
# @api private
|
10
10
|
def select_ap_reg(reg)
|
11
11
|
address = reg.address & 0xFFFF_FFF0
|
12
|
-
|
13
|
-
|
12
|
+
apsel = (reg.address & 0xFF00_0000) >> 24
|
13
|
+
apbanksel = (reg.address & 0xF0) >> 4
|
14
|
+
# if model.select.data != address
|
15
|
+
if model.select.apsel.data != apsel || model.select.apbanksel.data != apbanksel
|
16
|
+
model.select.write! do |r|
|
17
|
+
r.apsel.write apsel
|
18
|
+
r.apbanksel.write apbanksel
|
19
|
+
end
|
14
20
|
end
|
15
21
|
end
|
16
22
|
end
|
@@ -48,9 +48,12 @@ module OrigenARMDebug
|
|
48
48
|
|
49
49
|
reg :select, 0x8 do |reg|
|
50
50
|
reg.bit 31..24, :apsel
|
51
|
+
reg.bit 23..8, :reserved
|
51
52
|
reg.bit 7..4, :apbanksel
|
52
53
|
end
|
53
54
|
|
55
|
+
select.write options[:dp_select_reset] if options[:dp_select_reset]
|
56
|
+
|
54
57
|
add_reg :rdbuff, 0xC, access: :ro, reset: 0
|
55
58
|
|
56
59
|
reg :abort, options[:abort_select], access: :wo do |reg|
|
@@ -14,21 +14,52 @@ module OrigenARMDebug
|
|
14
14
|
# For SWD, this is the wait states in between setting the AP, initiating and completing a dummy read, and beginning the actual read transaction.
|
15
15
|
attr_accessor :apacc_wait_states
|
16
16
|
|
17
|
+
# Boolean value indicating whether this is an AXI-AP
|
18
|
+
attr_accessor :is_axi
|
19
|
+
|
20
|
+
# Value to be read from DP CSW for interleaved status checks (debug feature)
|
21
|
+
attr_accessor :csw_status_check
|
22
|
+
|
23
|
+
# Boolean value indicating whether to interleave status checks during transactions (debug feature)
|
24
|
+
attr_accessor :interleave_status_check
|
25
|
+
|
17
26
|
def initialize(options = {})
|
18
27
|
super
|
19
28
|
|
29
|
+
@is_axi = options[:is_axi]
|
30
|
+
@csw_status_check = options[:csw_status_check]
|
31
|
+
@interleave_status_check = options[:interleave_status_check]
|
32
|
+
|
20
33
|
@latency = options[:latency] || 0
|
21
34
|
@apmem_access_wait = options[:apmem_access_wait] || 0
|
22
35
|
|
23
|
-
|
24
|
-
reg
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
36
|
+
if @is_axi
|
37
|
+
reg :csw, 0x0 do |reg|
|
38
|
+
reg.bit 31, :reserved
|
39
|
+
reg.bit 30..28, :prot, res: 3
|
40
|
+
reg.bit 27..24, :cache
|
41
|
+
reg.bit 23, :spiden
|
42
|
+
reg.bit 22..15, :reserved2
|
43
|
+
reg.bit 14..13, :domain, res: 3
|
44
|
+
reg.bit 12, :ace_enable
|
45
|
+
reg.bit 11..8, :mode
|
46
|
+
reg.bit 7, :tr_in_prog
|
47
|
+
reg.bit 6, :dbg_status, res: 1
|
48
|
+
reg.bit 5..4, :addr_inc
|
49
|
+
reg.bit 3, :reserved3
|
50
|
+
reg.bit 2..0, :size, res: 2
|
51
|
+
end
|
52
|
+
else
|
53
|
+
reg :csw, 0x0 do |reg|
|
54
|
+
reg.bit 31, :dbg_sw_enable
|
55
|
+
reg.bit 30..24, :prot
|
56
|
+
reg.bit 23, :spiden
|
57
|
+
reg.bit 11..8, :mode
|
58
|
+
reg.bit 7, :tr_in_prog
|
59
|
+
reg.bit 6, :device_en
|
60
|
+
reg.bit 5..4, :addr_inc
|
61
|
+
reg.bit 2..0, :size
|
62
|
+
end
|
32
63
|
end
|
33
64
|
reg(:csw).write(options[:csw_reset]) if options[:csw_reset]
|
34
65
|
|
@@ -18,11 +18,13 @@ module OrigenARMDebug
|
|
18
18
|
log "Write MEM-AP (#{model.name}) address #{addr.to_hex}: #{data.to_hex}" do
|
19
19
|
csw.bits(:size).write!(0b010) if csw.bits(:size).data != 0b010
|
20
20
|
tar.write!(addr) unless tar.data == addr
|
21
|
+
parent.dp.ctrlstat.read! model.csw_status_check if model.interleave_status_check
|
21
22
|
drw.reset
|
22
23
|
drw.overlay(nil)
|
23
24
|
drw.copy_all(reg_or_val)
|
24
25
|
drw.write!(options)
|
25
26
|
latency.cycles
|
27
|
+
parent.dp.ctrlstat.read! model.csw_status_check if model.interleave_status_check
|
26
28
|
end
|
27
29
|
increment_addr
|
28
30
|
end
|
@@ -43,11 +45,13 @@ module OrigenARMDebug
|
|
43
45
|
csw.bits(:size).write!(0b010) if csw.bits(:size).data != 0b010
|
44
46
|
unless tar.data == addr
|
45
47
|
tar.write!(addr)
|
48
|
+
parent.dp.ctrlstat.read! model.csw_status_check if model.interleave_status_check
|
46
49
|
end
|
47
50
|
drw.reset
|
48
51
|
drw.overlay(nil)
|
49
52
|
drw.copy_all(reg_or_val)
|
50
53
|
parent.dp.read_register(drw, options.merge(apacc_wait_states: (apmem_access_wait + apreg_access_wait)))
|
54
|
+
parent.dp.ctrlstat.read! model.csw_status_check if model.interleave_status_check
|
51
55
|
end
|
52
56
|
increment_addr
|
53
57
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module OrigenARMDebugDev
|
2
|
+
# Simple JTAG-specific dut model that inherits from protocol-agnostic DUT model
|
3
|
+
class JTAG_AXI_DUT < DUT
|
4
|
+
include OrigenJTAG
|
5
|
+
|
6
|
+
# Adds jtag-required pins to the simple dut model
|
7
|
+
# Returns nothing.
|
8
|
+
def initialize(options = {})
|
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
|
+
options[:class_name] = 'OrigenARMDebug::DAP'
|
19
|
+
options[:mem_aps] = {
|
20
|
+
mem_ap: {
|
21
|
+
base_address: 0x00000000,
|
22
|
+
latency: 16,
|
23
|
+
apreg_access_wait: 8,
|
24
|
+
apmem_access_wait: 8,
|
25
|
+
is_axi: true,
|
26
|
+
csw_reset: 0x1080_6002
|
27
|
+
},
|
28
|
+
mdm_ap: 0x01000000
|
29
|
+
}
|
30
|
+
options[:dp_select_reset] = 0xC2_0D00
|
31
|
+
# Specify (customize) ARM Debug implementation details
|
32
|
+
sub_block :arm_debug, options
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/pattern/workout.rb
CHANGED
data/templates/web/index.md.erb
CHANGED
@@ -52,7 +52,7 @@ class DUT
|
|
52
52
|
|
53
53
|
# Simple example using default wait-states and latency:
|
54
54
|
# mem_ap: APSEL = 0x00 (base_address[31:24])
|
55
|
-
# mem2_ap: APSEL = 0x01 (base_address[31:24])
|
55
|
+
# mem2_ap: APSEL = 0x01 (base_address[31:24], is_axi: true) # is_axi: true for AXI-AP
|
56
56
|
mem_aps = {
|
57
57
|
mem_ap: { base_address: 0x00000000 },
|
58
58
|
mem2_ap: { base_address: 0x10000000 }
|
@@ -133,6 +133,7 @@ instantiation_options[:idcode_select] = 0xFE
|
|
133
133
|
instantiation_options[:abort_select] = 0xF8
|
134
134
|
instantiation_options[:dpacc_select] = 0xFA
|
135
135
|
instantiation_options[:apacc_select] = 0xFB
|
136
|
+
instantiation_options[:dp_select_reset] = 0xC2_0D00
|
136
137
|
|
137
138
|
sub_block :arm_debug, instantiation_options
|
138
139
|
~~~
|
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: 1.
|
4
|
+
version: 1.2.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:
|
11
|
+
date: 2022-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -99,6 +99,7 @@ files:
|
|
99
99
|
- lib/origen_arm_debug_dev/dut.rb
|
100
100
|
- lib/origen_arm_debug_dev/dut_dual_dp.rb
|
101
101
|
- lib/origen_arm_debug_dev/dut_jtag.rb
|
102
|
+
- lib/origen_arm_debug_dev/dut_jtag_axi.rb
|
102
103
|
- lib/origen_arm_debug_dev/dut_swd.rb
|
103
104
|
- pattern/workout.rb
|
104
105
|
- templates/web/index.md.erb
|
@@ -124,8 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
125
|
- !ruby/object:Gem::Version
|
125
126
|
version: 1.8.11
|
126
127
|
requirements: []
|
127
|
-
|
128
|
-
rubygems_version: 2.7.7
|
128
|
+
rubygems_version: 3.1.4
|
129
129
|
signing_key:
|
130
130
|
specification_version: 4
|
131
131
|
summary: Provides an Origen API to perform register read and write operations via
|