origen_arm_debug 1.3.0 → 1.3.1

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: 90de517c3d56ac340822b45422164150dc6b5639a9a068608cc8679858eb09bd
4
+ data.tar.gz: 1d8c7b2e21b429a4e90f05813689a743cb00a69caad43c207a46499bcc40414a
5
5
  SHA512:
6
- metadata.gz: a2060517cd1db17b6ef02d89355c0816f9ebe422b03277dc5a7783bb2cb4bca0ebb6aa795e8e6926800bdbd524ec5d9cc1565ded06ed75626ee4fb130dfe991f
7
- data.tar.gz: 78a07d7c55c782ee78b025c20b3caf30956f8a550229479c53b53e6b0049f1fe1cb32525e8fbafd44d69ba691ff7d05e7c87d0e5f0747b786af6268394cf3a2e
6
+ metadata.gz: 906a61042cc140e79a32c2cd82509b9b001efc84cf5eaf6e63b6570740247d56550b8fce74532ffef6c4dc111dba2c2fdfca1487808f7aecbd9efa5e37f9ab86
7
+ data.tar.gz: e8ccad6598ea0da7da0d745d76fe1939df44add8bb002d40e38f8733a5329269818d3433768f67e9293ceb5a92522cc17634542d024bacaa0435692b121db7e5
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,7 +1,7 @@
1
1
  module OrigenARMDebug
2
2
  MAJOR = 1
3
3
  MINOR = 3
4
- BUGFIX = 0
4
+ BUGFIX = 1
5
5
  DEV = nil
6
6
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
7
7
  end
@@ -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
@@ -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,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.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ronnie Lajaunie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-28 00:00:00.000000000 Z
11
+ date: 2022-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: origen
@@ -103,6 +103,7 @@ files:
103
103
  - lib/origen_arm_debug_dev/dut_dual_dp.rb
104
104
  - lib/origen_arm_debug_dev/dut_jtag.rb
105
105
  - lib/origen_arm_debug_dev/dut_jtag_axi.rb
106
+ - lib/origen_arm_debug_dev/dut_jtag_axi_ack.rb
106
107
  - lib/origen_arm_debug_dev/dut_swd.rb
107
108
  - pattern/v6_workout.rb
108
109
  - pattern/workout.rb
@@ -122,14 +123,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
122
123
  requirements:
123
124
  - - ">="
124
125
  - !ruby/object:Gem::Version
125
- version: 1.9.3
126
+ version: '0'
126
127
  required_rubygems_version: !ruby/object:Gem::Requirement
127
128
  requirements:
128
129
  - - ">="
129
130
  - !ruby/object:Gem::Version
130
- version: 1.8.11
131
+ version: '0'
131
132
  requirements: []
132
- rubygems_version: 3.1.4
133
+ rubygems_version: 3.1.6
133
134
  signing_key:
134
135
  specification_version: 4
135
136
  summary: Provides an Origen API to perform register read and write operations via