origen_arm_debug 1.3.0 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45cc30ad35c5f7785831b3fa516ce4784e43170ccc21229d5d6744adaa7f08fb
4
- data.tar.gz: 3962dec63e6fcdc94de242557b36a34472f152ded5d95a1354e16e61fc04af10
3
+ metadata.gz: aa3ce5cc5d92d65c765cba5bf48f02427fe30335c55dc5b9674e222735f6d923
4
+ data.tar.gz: 71eb47e71ed6b5f3523fc256b0e3078a6d5745d236a18dedb8cc46d49df5ff21
5
5
  SHA512:
6
- metadata.gz: a2060517cd1db17b6ef02d89355c0816f9ebe422b03277dc5a7783bb2cb4bca0ebb6aa795e8e6926800bdbd524ec5d9cc1565ded06ed75626ee4fb130dfe991f
7
- data.tar.gz: 78a07d7c55c782ee78b025c20b3caf30956f8a550229479c53b53e6b0049f1fe1cb32525e8fbafd44d69ba691ff7d05e7c87d0e5f0747b786af6268394cf3a2e
6
+ metadata.gz: 251da1812e326e442c2348d44a5e75916f8f8d8dfe44268124bf394af5f5fea131071bf14f2c839baf6a8be8a972bacb4a5e366b7dea214256221fb6ba05e6de
7
+ data.tar.gz: f33584da53ac0b6e8bbc82e3102bd5de12424f2e3eea33e9b8d554234c16cabb1f6fdf7631061c64945b531792b470dc2fc5c9c0f60a3176a7a18d8d65d8ae71
data/config/boot.rb CHANGED
@@ -5,3 +5,4 @@ require "origen_arm_debug_dev/dut_jtag"
5
5
  require "origen_arm_debug_dev/dut_swd"
6
6
  require "origen_arm_debug_dev/dut_dual_dp"
7
7
  require "origen_arm_debug_dev/dut_jtag_axi"
8
+ require "origen_arm_debug_dev/dut_jtag_axi_ack.rb"
data/config/commands.rb CHANGED
@@ -32,6 +32,8 @@ when "examples", "test"
32
32
  load "#{Origen.top}/lib/origen/commands/generate.rb"
33
33
  ARGV = %w(v6_workout -t jtag_axi.rb -e j750 -r approved)
34
34
  load "#{Origen.top}/lib/origen/commands/generate.rb"
35
+ ARGV = %w(v6_workout -t jtag_ack.rb -e j750 -r approved)
36
+ load "#{Origen.top}/lib/origen/commands/generate.rb"
35
37
  ARGV = %w(workout -t swd -e j750 -r approved)
36
38
  load "#{Origen.top}/lib/origen/commands/generate.rb"
37
39
  ARGV = %w(workout -t dual_dp -e j750 -r approved)
data/config/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module OrigenARMDebug
2
2
  MAJOR = 1
3
- MINOR = 3
3
+ MINOR = 4
4
4
  BUGFIX = 0
5
5
  DEV = nil
6
6
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
@@ -55,6 +55,7 @@ module OrigenARMDebug
55
55
  if klass.nil? || addr.nil?
56
56
  fail "[ARM DEBUG] Error: Must specify class_name and base_address if using 'aps' hash to define APs"
57
57
  end
58
+
58
59
  ap_opts = { class_name: klass, base_address: addr }.merge(opts)
59
60
  else
60
61
  fail "[ARM DEBUG] Error: Must specify class_name and base_address if using 'aps' hash to define APs"
@@ -3,6 +3,7 @@ module OrigenARMDebug
3
3
  include Origen::Controller
4
4
  include Helpers
5
5
 
6
+ # rubocop:disable Lint/DuplicateMethods
6
7
  attr_accessor :dp
7
8
 
8
9
  # Returns the currently enabled DP (or the only DP if only one
@@ -12,6 +13,7 @@ module OrigenARMDebug
12
13
  def dp
13
14
  @dp ||= dps.first
14
15
  end
16
+ # rubocop:enable Lint/DuplicateMethods
15
17
 
16
18
  def set_dp(dp)
17
19
  if dps.size > 1
@@ -14,6 +14,7 @@ module OrigenARMDebug
14
14
  return addr if addr
15
15
  return reg_or_val.address if reg_or_val.respond_to?('address')
16
16
  return reg_or_val.addr if reg_or_val.respond_to?('addr')
17
+
17
18
  fail 'No address given, if supplying a data value instead of a register object, you must supply an :address option'
18
19
  end
19
20
 
@@ -2,7 +2,7 @@ module OrigenARMDebug
2
2
  class JTAG_DP
3
3
  include Origen::Model
4
4
 
5
- attr_reader :dpacc_select, :apacc_select
5
+ attr_reader :dpacc_select, :apacc_select, :read_ack
6
6
 
7
7
  def initialize(options = {})
8
8
  options = {
@@ -14,6 +14,14 @@ module OrigenARMDebug
14
14
  }.merge(options)
15
15
  @dpacc_select = options[:dpacc_select]
16
16
  @apacc_select = options[:apacc_select]
17
+ # the acknowledge signature is LHL (2), but allow an override
18
+ if options[:read_ack]
19
+ if options[:read_ack] == true
20
+ @read_ack = 2
21
+ else
22
+ @read_ack = options[:read_ack]
23
+ end
24
+ end
17
25
  add_reg :ir, 0, size: options[:ir_size]
18
26
 
19
27
  # Virtual reg used to represent all of the various 35-bit scan chains
@@ -92,6 +92,7 @@ module OrigenARMDebug
92
92
  # Part 2 - Now read real data from RDBUFF (DP-Reg)
93
93
  dr.reset
94
94
  dr.overlay(nil)
95
+ # Should compare of ack be added here as well?
95
96
  dr[0].write(1)
96
97
  dr[2..1].write(rdbuff.offset >> 2)
97
98
  dr[34..3].copy_all(reg)
@@ -129,10 +130,21 @@ module OrigenARMDebug
129
130
  # Part 2 - Now read real data from RDBUFF (DP-Reg)
130
131
  dr.reset
131
132
  dr.overlay(nil)
132
- dr[0].write(1)
133
- dr[2..1].write(rdbuff.offset >> 2)
133
+
134
+ read_ack = options[:read_ack] || model.read_ack
135
+ if read_ack
136
+ # Add in check of acknowledge bits (confirms the operation completed)
137
+ dr[2..0].read read_ack
138
+ else
139
+ # Default previous behavior is to mask, no way to know if the operation successfully completed
140
+ dr[0].write(1)
141
+ dr[2..1].write(rdbuff.offset >> 2)
142
+ end
134
143
  dr[34..3].copy_all(reg)
135
- options[:mask] = options[:mask] << 3 unless options[:mask].nil?
144
+ unless options[:mask].nil?
145
+ options[:mask] = options[:mask] << 3
146
+ options[:mask] += 7 if read_ack
147
+ end
136
148
  ir.write!(dpacc_select)
137
149
  dut.jtag.read_dr(dr, options)
138
150
  end
@@ -2,7 +2,7 @@ module OrigenARMDebug
2
2
  class JTAG_DPV6
3
3
  include Origen::Model
4
4
 
5
- attr_reader :dpacc_select, :apacc_select
5
+ attr_reader :dpacc_select, :apacc_select, :read_ack
6
6
 
7
7
  def initialize(options = {})
8
8
  options = {
@@ -14,6 +14,14 @@ module OrigenARMDebug
14
14
  }.merge(options)
15
15
  @dpacc_select = options[:dpacc_select]
16
16
  @apacc_select = options[:apacc_select]
17
+ # the acknowledge signature is HLL (4), but allow an override
18
+ if options[:read_ack]
19
+ if options[:read_ack] == true
20
+ @read_ack = 4
21
+ else
22
+ @read_ack = options[:read_ack]
23
+ end
24
+ end
17
25
  add_reg :ir, 0, size: options[:ir_size]
18
26
 
19
27
  # Virtual reg used to represent all of the various 35-bit scan chains
@@ -122,10 +122,21 @@ module OrigenARMDebug
122
122
  # Part 2 - Now read real data from RDBUFF (DP-Reg)
123
123
  dr.reset
124
124
  dr.overlay(nil)
125
- dr[0].write(1)
126
- dr[2..1].write(rdbuff.offset >> 2)
125
+
126
+ read_ack = options[:read_ack] || model.read_ack
127
+ if read_ack
128
+ # Add in check of acknowledge bits (confirms the operation completed)
129
+ dr[2..0].read read_ack
130
+ else
131
+ # Default previous behavior is to mask, no way to know if the operation successfully completed
132
+ dr[0].write(1)
133
+ dr[2..1].write(rdbuff.offset >> 2)
134
+ end
127
135
  dr[34..3].copy_all(reg)
128
- options[:mask] = options[:mask] << 3 unless options[:mask].nil?
136
+ unless options[:mask].nil?
137
+ options[:mask] = options[:mask] << 3
138
+ options[:mask] += 7 if read_ack
139
+ end
129
140
  ir.write!(dpacc_select)
130
141
  dut.jtag.read_dr(dr, options)
131
142
  end
@@ -1,5 +1,5 @@
1
1
  require 'origen'
2
- require_relative '../config/application.rb'
2
+ require_relative '../config/application'
3
3
  require 'origen_jtag'
4
4
  require 'origen_swd'
5
5
 
@@ -0,0 +1,51 @@
1
+ module OrigenARMDebugDev
2
+ # Simple JTAG-specific dut model that inherits from protocol-agnostic DUT model
3
+ class JTAG_AXI_ACK_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
+ options[:read_ack] = true
32
+ # Specify (customize) ARM Debug implementation details
33
+ sub_block :arm_debug, options
34
+
35
+ options[:dapv6] = true
36
+ options[:class_name] = 'OrigenARMDebug::DAP'
37
+ options[:mem_aps] = {
38
+ mem_ap: {
39
+ base_address: 0x00C2_0000,
40
+ latency: 16,
41
+ apreg_access_wait: 8,
42
+ apmem_access_wait: 8,
43
+ is_axi: true,
44
+ csw_reset: 0x1080_6002
45
+ },
46
+ mdm_ap: 0x00C3_0000
47
+ }
48
+ sub_block :arm_debugv6, options
49
+ end
50
+ end
51
+ end
@@ -1,4 +1,8 @@
1
- pattern_name = "v6_workout_#{dut.arm_debugv6.dp.name}"
1
+ if Origen.app.target.name == 'jtag_axi'
2
+ pattern_name = "v6_workout_#{dut.arm_debugv6.dp.name}"
3
+ elsif Origen.app.target.name == 'jtag_ack'
4
+ pattern_name = "v6_workout_#{dut.arm_debugv6.dp.name}_w_ack"
5
+ end
2
6
 
3
7
  Pattern.create name: pattern_name do
4
8
 
@@ -138,6 +138,21 @@ instantiation_options[:dp_select_reset] = 0xC2_0D00
138
138
  sub_block :arm_debug, instantiation_options
139
139
  ~~~
140
140
 
141
+ By default the acknowledge signature is masked (not compared). To enable comparison of the acknowledge signature during a read operation add this instantiation option:
142
+
143
+ ~~~ruby
144
+ mem_aps = {
145
+ mem_ap: { base_address: 0x00000000 }
146
+ mem2_ap: { base_address: 0x10000000 }
147
+ }
148
+ instantiation_options[:class_name] = 'OrigenARMDebug::DAP'
149
+ instantiation_options[:mem_aps] = mem_aps
150
+
151
+ instantiation_options[:read_ack] = true # Check for the acknowledge signature when reading an AP
152
+
153
+ sub_block :arm_debug, instantiation_options
154
+ ~~~
155
+
141
156
  DAP Version 6 instantiation example:
142
157
 
143
158
  ~~~ruby
metadata CHANGED
@@ -1,22 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen_arm_debug
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ronnie Lajaunie
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2022-02-28 00:00:00.000000000 Z
10
+ date: 2025-12-13 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: origen
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.7'
20
16
  - - ">="
21
17
  - !ruby/object:Gem::Version
22
18
  version: 0.7.36
@@ -24,9 +20,6 @@ dependencies:
24
20
  prerelease: false
25
21
  version_requirements: !ruby/object:Gem::Requirement
26
22
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '0.7'
30
23
  - - ">="
31
24
  - !ruby/object:Gem::Version
32
25
  version: 0.7.36
@@ -34,9 +27,6 @@ dependencies:
34
27
  name: origen_jtag
35
28
  requirement: !ruby/object:Gem::Requirement
36
29
  requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '0.17'
40
30
  - - ">="
41
31
  - !ruby/object:Gem::Version
42
32
  version: 0.17.0
@@ -44,9 +34,6 @@ dependencies:
44
34
  prerelease: false
45
35
  version_requirements: !ruby/object:Gem::Requirement
46
36
  requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '0.17'
50
37
  - - ">="
51
38
  - !ruby/object:Gem::Version
52
39
  version: 0.17.0
@@ -54,9 +41,6 @@ dependencies:
54
41
  name: origen_swd
55
42
  requirement: !ruby/object:Gem::Requirement
56
43
  requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '1'
60
44
  - - ">="
61
45
  - !ruby/object:Gem::Version
62
46
  version: 1.1.0
@@ -64,13 +48,9 @@ dependencies:
64
48
  prerelease: false
65
49
  version_requirements: !ruby/object:Gem::Requirement
66
50
  requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '1'
70
51
  - - ">="
71
52
  - !ruby/object:Gem::Version
72
53
  version: 1.1.0
73
- description:
74
54
  email:
75
55
  - ronnie.lajaunie@nxp.com
76
56
  executables: []
@@ -103,6 +83,7 @@ files:
103
83
  - lib/origen_arm_debug_dev/dut_dual_dp.rb
104
84
  - lib/origen_arm_debug_dev/dut_jtag.rb
105
85
  - lib/origen_arm_debug_dev/dut_jtag_axi.rb
86
+ - lib/origen_arm_debug_dev/dut_jtag_axi_ack.rb
106
87
  - lib/origen_arm_debug_dev/dut_swd.rb
107
88
  - pattern/v6_workout.rb
108
89
  - pattern/workout.rb
@@ -114,7 +95,6 @@ homepage: http://origen-sdk.org/origen_arm_debug
114
95
  licenses:
115
96
  - MIT
116
97
  metadata: {}
117
- post_install_message:
118
98
  rdoc_options: []
119
99
  require_paths:
120
100
  - lib
@@ -122,15 +102,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
102
  requirements:
123
103
  - - ">="
124
104
  - !ruby/object:Gem::Version
125
- version: 1.9.3
105
+ version: '0'
126
106
  required_rubygems_version: !ruby/object:Gem::Requirement
127
107
  requirements:
128
108
  - - ">="
129
109
  - !ruby/object:Gem::Version
130
- version: 1.8.11
110
+ version: '0'
131
111
  requirements: []
132
- rubygems_version: 3.1.4
133
- signing_key:
112
+ rubygems_version: 3.6.3
134
113
  specification_version: 4
135
114
  summary: Provides an Origen API to perform register read and write operations via
136
115
  the ARM_DEBUG protocol.