origen_arm 0.1.0 → 0.1.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: aac2a9ad38cd6455af8072078ce1323050ffa8ccd807a309aa162f7a495a1d04
4
- data.tar.gz: 40fcc38125de73c08bccb499ffda8e60815ccb46b44b0e96abe50e4e5f8dc2d5
3
+ metadata.gz: e94c021eca23399846f9247e568c125e30ec67bb7c08b710111a34f6cf78eeec
4
+ data.tar.gz: eebec830498c20852c7a7a8582d89caebfde420d18b599b2300ddf93736eff49
5
5
  SHA512:
6
- metadata.gz: d558d399e03bd7da9209cf3872801c3d975424682982bdeb5744649ad06a916bacc2e203c9a816c06b9c3d25c57bb3d34d647f196f9799e07789f037c03fdb4d
7
- data.tar.gz: 5271ac914b8d3df3e8e5fd9f0c0a2f9c2fec65166e5c235c66f73187ecb14bf85b6aa17c248f25c5ab8fd34a3c4611c5319eb7e782a2ffa25df08ecb0d74a371
6
+ metadata.gz: 88e77a2be08addf1f9473821c9a937f7a888c048f13a9c1498cf7acb70fb738668aa528efee852ea739536134fbd2065955d4af8f445734afb8901a22c35ff2e
7
+ data.tar.gz: 0d1b6a98450c087fd9bee342a5bb2899ba1e91e0ebacf1d2ebf4d659982c2210fb4dfbfcb2ebf14ed86a1ec774a3ef243f91bb41e9d8fadc7a116e7e63e48e8e
@@ -1,8 +1,7 @@
1
1
  module OrigenARM
2
2
  MAJOR = 0
3
3
  MINOR = 1
4
- BUGFIX = 0
4
+ BUGFIX = 1
5
5
  DEV = nil
6
-
7
6
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
8
7
  end
@@ -1,8 +1,17 @@
1
1
  module OrigenARM
2
2
  module Cores
3
3
  class Base
4
+ include Origen::Model
5
+
4
6
  def initialize(options = {})
5
7
  end
8
+
9
+ #
10
+ # def mpu?
11
+ # end
12
+ #
13
+ # def mcu?
14
+ # end
6
15
  end
7
16
  end
8
17
  end
@@ -1,8 +1,27 @@
1
1
  module OrigenARM
2
2
  module Cores
3
3
  class BaseController
4
+ include Origen::Controller
5
+
4
6
  def initialize(options = {})
5
7
  end
8
+ # def halt!(options={})
9
+ # end
10
+ #
11
+ # def release!(options={})
12
+ # end
13
+ #
14
+ # def set_pc!(pc, options={})
15
+ # end
16
+ #
17
+ # def set_sp!(sp, options={})
18
+ # end
19
+ #
20
+ # def with_debug_mode(options={}, &block)
21
+ # end
22
+ #
23
+ # def initialize_core(pc: nil, sp: nil, **options)
24
+ # end
6
25
  end
7
26
  end
8
27
  end
@@ -0,0 +1,42 @@
1
+ module OrigenARM
2
+ module Cores
3
+ module CortexA
4
+ class CA35 < OrigenARM::Cores::Base
5
+ TRACE_DBG_EDPRSR_OFFSET = 0x314
6
+ TRACE_LAR_OFFSET = 0xFB0
7
+ TRACE_OSLAR_OFFSET = 0x300
8
+ TRACE_CTI_CTRL_OFFSET = 0x000
9
+ TRACE_CTI_OUTEN0_OFFSET = 0x0A0
10
+ TRACE_CTI_APPPULSE_OFFSET = 0x01C
11
+ TRACE_CTI_INTACK_OFFSET = 0x010
12
+ TRACE_DBG_EDITR_OFFSET = 0x84
13
+ TRACE_DBG_EDSCR_OFFSET = 0x88
14
+ TRACE_DBG_DTRTX_OFFSET = 0x8C
15
+ TRACE_DBG_DTRRX_OFFSET = 0x80
16
+ CTI_BASE = 0x0042_0000
17
+ DBG_BASE = 0x0041_0000
18
+
19
+ def initialize(options = {})
20
+ super
21
+ instantiate_registers(options)
22
+ end
23
+
24
+ def instantiate_registers(options)
25
+ add_reg(:trace_dbg_edprsr, DBG_BASE + TRACE_DBG_EDPRSR_OFFSET, size: 32)
26
+ add_reg(:trace_dbg_editr, DBG_BASE + TRACE_DBG_EDITR_OFFSET, size: 32)
27
+ add_reg(:trace_dbg_edscr, DBG_BASE + TRACE_DBG_EDSCR_OFFSET, size: 32)
28
+ add_reg(:trace_dbg_dtrtx, DBG_BASE + TRACE_DBG_DTRTX_OFFSET, size: 32)
29
+ add_reg(:trace_dbg_dtrrx, DBG_BASE + TRACE_DBG_DTRRX_OFFSET, size: 32)
30
+ add_reg(:trace_dbg_lar, DBG_BASE + TRACE_LAR_OFFSET, size: 32)
31
+ add_reg(:trace_dbg_oslar, DBG_BASE + TRACE_OSLAR_OFFSET, size: 32)
32
+ add_reg(:trace_cti_ctrl, CTI_BASE + TRACE_CTI_CTRL_OFFSET, size: 32)
33
+ add_reg(:trace_cti_outen0, CTI_BASE + TRACE_CTI_OUTEN0_OFFSET, size: 32)
34
+ add_reg(:trace_cti_outen1, CTI_BASE + TRACE_CTI_OUTEN0_OFFSET + 0x4, size: 32)
35
+ add_reg(:trace_cti_apppulse, CTI_BASE + TRACE_CTI_APPPULSE_OFFSET, size: 32)
36
+ add_reg(:trace_cti_intack, CTI_BASE + TRACE_CTI_INTACK_OFFSET, size: 32)
37
+ add_reg(:trace_cti_lar, CTI_BASE + TRACE_LAR_OFFSET, size: 32)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,57 @@
1
+ module OrigenARM
2
+ module Cores
3
+ module CortexA
4
+ class CA35Controller < OrigenARM::Cores::BaseController
5
+ def initialize_core(pc:, release_core: false, **options)
6
+ halt_core!
7
+ set_pc!(pc)
8
+
9
+ if release_core
10
+ release_core!
11
+ end
12
+ end
13
+
14
+ def halt_core!
15
+ ss 'Halt core - channel 0'
16
+ reg(:trace_cti_lar).write!(0xC5AC_CE55)
17
+ reg(:trace_cti_ctrl).write!(0x1)
18
+ reg(:trace_cti_outen0).write!(0x1)
19
+ reg(:trace_cti_apppulse).write!(0x1)
20
+ tester.cycle(repeat: 10_000)
21
+
22
+ ss 'Check that the core is halted'
23
+ reg(:trace_dbg_edprsr).read!(0x10, mask: 0x0000_0010)
24
+
25
+ ss 'Acknowledge'
26
+ reg(:trace_cti_intack).write!(0x1)
27
+ tester.cycle(repeat: 100)
28
+
29
+ reg(:trace_dbg_lar).write!(0xC5AC_CE55)
30
+ reg(:trace_dbg_oslar).write!(0xABCD_1234)
31
+ tester.cycle(repeat: 100)
32
+ end
33
+
34
+ def release_core!
35
+ ss 'Release core - channel 2'
36
+ reg(:trace_cti_lar).write!(0xC5AC_CE55)
37
+ reg(:trace_cti_ctrl).write!(0x1)
38
+ reg(:trace_cti_outen1).write!(0x4)
39
+ reg(:trace_cti_apppulse).write!(0x4)
40
+ tester.cycle(repeat: 100)
41
+ ss 'Check that the core has been released'
42
+ reg(:trace_dbg_edprsr).read!(0x0, mask: 0x0000_0010)
43
+ end
44
+
45
+ def set_pc!(pc)
46
+ ss 'Move the PC'
47
+ reg(:trace_dbg_dtrtx).write!((pc >> 32) & 0xFFFF_FFFF)
48
+ reg(:trace_dbg_dtrrx).write!(pc & 0xFFFF_FFFF)
49
+ reg(:trace_dbg_editr).write!(0xD533_0401)
50
+ tester.cycle(repeat: 100)
51
+ reg(:trace_dbg_editr).write!(0xD51B_4521)
52
+ tester.cycle(repeat: 100)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -16,10 +16,27 @@ module OrigenARM
16
16
  # @todo Implement lower and upper stack pointer limit setting.
17
17
  def initialize_core(pc:, sp:, release_core: false, sp_lower_limit: nil, sp_upper_limit: nil)
18
18
  enter_debug_mode
19
+
20
+ # clear_state
21
+ # clear_state
22
+
23
+ # ss 'Disable the MPU and the SAU'
24
+ # mem(0xE000_ED94).write!(0x0, force_arm_debug: true)
25
+ # mem(0xE000_EDD0).write!(0x0, force_arm_debug: true)
26
+
27
+ # ss 'Move the stack pointer limits'
28
+ # mem(0xE000_EDF8).write!(0x1400_6800, force_arm_debug: true)
29
+ # mem(0xE000_EDF4).write!(0x0001_0000 + 0x1C, force_arm_debug: true)
30
+
19
31
  set_sp(sp)
20
32
  set_pc(pc)
33
+
21
34
  # set_stack_limits(sp_lower_limit, sp_upper_limit) if (sp_lower_limit || sp_upper_limit)
22
35
  exit_debug_mode(release_core: release_core)
36
+
37
+ # reg(:aircr).bits(:vectkey).write(CM33::Registers::AIRCR_WRITE_KEY)
38
+ # reg(:aircr).bits(:sysresetreq).write(1)
39
+ # reg(:aircr).write!
23
40
  end
24
41
  alias_method :initialize_for_lre, :initialize_core
25
42
 
@@ -88,6 +105,17 @@ module OrigenARM
88
105
  end
89
106
  end
90
107
 
108
+ # def clear_state
109
+ # pp("Clear the core's current state") do
110
+ # reg(:aircr).bits(:vectkey).write(CM33::Registers::AIRCR_WRITE_KEY)
111
+ # reg(:aircr).bits(:sysresetreq).write(1)
112
+ # #reg(:aircr).bits(:vectclractive).write(1)
113
+ # reg(:aircr).write!
114
+ #
115
+ # tester.cycle(repeat: 1000)
116
+ # end
117
+ # end
118
+
91
119
  # def set_stack_limits(lower_limit, upper_limits, stack: :msp, **options)
92
120
  # end
93
121
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen_arm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corey Engelken
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-11 00:00:00.000000000 Z
11
+ date: 2020-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: origen
@@ -53,6 +53,8 @@ files:
53
53
  - lib/origen_arm/cores/base_core/core.rb
54
54
  - lib/origen_arm/cores/base_core/core_controller.rb
55
55
  - lib/origen_arm/cores/base_core/core_registers.rb
56
+ - lib/origen_arm/cores/cortexa/ca35/ca35.rb
57
+ - lib/origen_arm/cores/cortexa/ca35/ca35_controller.rb
56
58
  - lib/origen_arm/cores/cortexm/base_cortexm/cortexm.rb
57
59
  - lib/origen_arm/cores/cortexm/base_cortexm/cortexm_controller.rb
58
60
  - lib/origen_arm/cores/cortexm/base_cortexm/cortexm_registers.rb
@@ -85,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
87
  version: 1.8.11
86
88
  requirements: []
87
89
  rubyforge_project:
88
- rubygems_version: 2.7.7
90
+ rubygems_version: 2.7.6
89
91
  signing_key:
90
92
  specification_version: 4
91
93
  summary: Origen subblocks modeling ARM cores.