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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8129ae2a9371cfed96eeddab0b431b7fabea04648fe690a8e5b71232fa34cb89
4
- data.tar.gz: d605f5cf618b53f2eff53ed0af3eab442d6bfe0a4292abd37895e51ddd1436bc
3
+ metadata.gz: 292e4be7741df68524ba13a6af2058a9ca209688ddf12ca19c63a1e2e795135c
4
+ data.tar.gz: 58fd3ee8010c9cba1bd4675896fd8a5aa0d9e579113aaeac7ceb30c5039467ac
5
5
  SHA512:
6
- metadata.gz: 4cfc2498bad1094ec2e3fc39bceb5f8c0d72fb8f984f98f5934d6fcd4d78db4facaac0e1784f252e5cd301d0faaf9a1b1bfbedab41ba1d1cbc66a0cada20c94c
7
- data.tar.gz: 2642fa31000ef162330132b2acd1ba1ffd2ac75639b96201b31c9800204c7712376bbcfed4ab11039e2577248d040201c68d419b12c032658e34bfe78fe1c41c
6
+ metadata.gz: 880aef44c21b1a5030223b9d7a0155f0284109c9dcc8c711bdab5e95e0dc8f347a4920d93cfb993dcc51e7104fa91b740699c504a3d797a7c3e12252739357e8
7
+ data.tar.gz: 15f565c00daa931914a1b9be94894810a2bdccbd19e1553a013dc1234d1cb01b76484e2bc7e47697cb5ee3307fd03ff7e7484577171120579c35aa37e5e392b5
data/config/boot.rb CHANGED
@@ -4,3 +4,4 @@ require "origen_arm_debug_dev/dut"
4
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
+ require "origen_arm_debug_dev/dut_jtag_axi"
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
@@ -1,7 +1,7 @@
1
1
  module OrigenARMDebug
2
2
  MAJOR = 1
3
- MINOR = 1
4
- BUGFIX = 4
3
+ MINOR = 2
4
+ BUGFIX = 0
5
5
  DEV = nil
6
6
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
7
7
  end
@@ -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 options[:class_name] == 'MemAP'
77
+ if class_name == 'MemAP'
76
78
  mem_aps << ap
77
- elsif options[:class_name] == 'JTAGAP'
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
- if model.select.data != address
13
- model.select.write!(address)
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
- reg :csw, 0x0 do |reg|
24
- reg.bit 31, :dbg_sw_enable
25
- reg.bit 30..24, :prot
26
- reg.bit 23, :spiden
27
- reg.bit 11..8, :mode
28
- reg.bit 7, :tr_in_prog
29
- reg.bit 6, :device_en
30
- reg.bit 5..4, :addr_inc
31
- reg.bit 2..0, :size
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
@@ -1,5 +1,7 @@
1
1
  if Origen.app.target.name == 'dual_dp'
2
2
  pattern_name = 'workout_dual_dp'
3
+ elsif Origen.app.target.name == 'jtag_axi'
4
+ pattern_name = 'workout_jtag_axi'
3
5
  else
4
6
  pattern_name = "workout_#{dut.arm_debug.dp.name}"
5
7
  end
@@ -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.1.4
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: 2020-05-14 00:00:00.000000000 Z
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
- rubyforge_project:
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