origen_arm_debug 1.1.4 → 1.2.0

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