origen_arm_debug 1.3.0 → 1.3.1

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
  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