rggen-default-register-map 0.17.0 → 0.18.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: 4ed4f7d03fe2c3b316ce912c5080070214841e66c0b6c6e84d77beb2873c845d
4
- data.tar.gz: 52521afda2eaea55d94fa19310b6c02db2fcb0d5f3ca5af7d7a22f62d5144aa8
3
+ metadata.gz: 5606aceae9565f8ffa80125e9eaa9e5d4eee19296a0438e353d54a6a584600a6
4
+ data.tar.gz: 2f809d1e88bbd7acc788e2308e9b9cf56a5bd571dba191ca1d08e660f05958b8
5
5
  SHA512:
6
- metadata.gz: 29148e29d7cdc8ac258f538a2c4c090746a6350d43d4cec5aa201af6b2dd59de421a916c55d727aad48fc7a52051fd7b8670d6cdd4e7908ae859c403ffb28d7a
7
- data.tar.gz: dd74e27ee704d145f6009e544308c6884361d27a63c4f6e75e428f25a9656b0e62a8098a8982a2efac548a226564787907b20d72865ac97e4b7f549c05d6cb08
6
+ metadata.gz: 784ee0f9741d412d636361bd0a007ab130a383063d8eddd5873cf687b675112a19718805f9d5d3e83814e0338dff7d1901429279aa79af10d26db74aa4de9e98
7
+ data.tar.gz: a44e28a91dbfcc9f9de6334d11589d6452981b4674ad2385d7cb1e3c25311b38894de607b691be9ea49c6f1528d7433c5271a40857a6070e154bfa1b6bb5d4f9
@@ -16,14 +16,14 @@ module RgGen
16
16
  'default_register_map/bit_field/type/ro',
17
17
  'default_register_map/bit_field/type/rof',
18
18
  'default_register_map/bit_field/type/rs',
19
- 'default_register_map/bit_field/type/rw',
19
+ 'default_register_map/bit_field/type/rw_w1',
20
20
  'default_register_map/bit_field/type/rwc_rws',
21
21
  'default_register_map/bit_field/type/rwe_rwl',
22
22
  'default_register_map/bit_field/type/w0c_w1c',
23
23
  'default_register_map/bit_field/type/w0crs_w1crs_w0src_w1src',
24
24
  'default_register_map/bit_field/type/w0s_w1s',
25
25
  'default_register_map/bit_field/type/w0trg_w1trg',
26
- 'default_register_map/bit_field/type/wo',
26
+ 'default_register_map/bit_field/type/wo_wo1',
27
27
  'default_register_map/global/address_width',
28
28
  'default_register_map/global/bus_width',
29
29
  'default_register_map/register/name',
@@ -19,13 +19,13 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
19
19
  end
20
20
 
21
21
  verify(:feature) do
22
- error_condition { [@lsb, @width, @sequence_size, @step].none? }
22
+ error_condition { [@lsb_base, @width, @sequence_size, @step].none? }
23
23
  message { 'no bit assignment is given' }
24
24
  end
25
25
 
26
26
  verify(:feature) do
27
- error_condition { !@lsb }
28
- message { 'no lsb is given' }
27
+ error_condition { [@lsb_base, @width].none? }
28
+ message { 'neither lsb nor width is given' }
29
29
  end
30
30
 
31
31
  verify(:feature) do
@@ -61,7 +61,11 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
61
61
 
62
62
  private
63
63
 
64
- KEYS = [:lsb, :width, :sequence_size, :step].freeze
64
+ VARIABLE_NAMES = {
65
+ lsb: :@lsb_base, width: :@width, sequence_size: :@sequence_size, step: :@step
66
+ }.freeze
67
+
68
+ KEYS = VARIABLE_NAMES.keys.freeze
65
69
 
66
70
  def preprocess(value)
67
71
  if value.is_a?(Hash)
@@ -83,18 +87,38 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
83
87
 
84
88
  def parse_value(input_value, key)
85
89
  input_value.key?(key) &&
86
- instance_variable_set("@#{key}", Integer(input_value[key]))
90
+ instance_variable_set(VARIABLE_NAMES[key], Integer(input_value[key]))
87
91
  rescue ArgumentError, TypeError
88
92
  error "cannot convert #{input_value[key].inspect} into " \
89
93
  "bit assignment(#{key.to_s.tr('_', ' ')})"
90
94
  end
91
95
 
96
+ def lsb_base
97
+ @lsb_base ||=
98
+ ((bit_field.component_index.zero? && 0) || calc_next_lsb(previous_bit_field))
99
+ end
100
+
101
+ def previous_bit_field
102
+ index = bit_field.component_index - 1
103
+ register.bit_fields[index]
104
+ end
105
+
106
+ def calc_next_lsb(bit_field)
107
+ compact_sequential_bit_field?(bit_field) &&
108
+ (bit_field.lsb + bit_field.width * bit_field.sequence_size) ||
109
+ (bit_field.lsb + bit_field.width)
110
+ end
111
+
112
+ def compact_sequential_bit_field?(bit_field)
113
+ bit_field.sequential? && (bit_field.step == bit_field.width)
114
+ end
115
+
92
116
  def lsb_bit(index = 0)
93
- lsb_msb_bit(index, @lsb)
117
+ lsb_msb_bit(index, lsb_base)
94
118
  end
95
119
 
96
120
  def msb_bit(index = 0)
97
- lsb_msb_bit(index, @lsb + width - 1)
121
+ lsb_msb_bit(index, lsb_base + width - 1)
98
122
  end
99
123
 
100
124
  def lsb_msb_bit(index, base)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RgGen.define_list_item_feature(:bit_field, :type, :rw) do
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:rw, :w1]) do
4
4
  register_map do
5
5
  read_write
6
6
  non_volatile
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RgGen.define_list_item_feature(:bit_field, :type, :wo) do
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:wo, :wo1]) do
4
4
  register_map do
5
5
  write_only
6
6
  non_volatile
@@ -2,7 +2,7 @@
2
2
 
3
3
  RgGen.define_simple_feature(:register, :offset_address) do
4
4
  register_map do
5
- property :offset_address
5
+ property :offset_address, initial: -> { default_offset_address }
6
6
  property :address_range, initial: -> { start_address..end_address }
7
7
  property :overlap?, forward_to: :overlap_address_range?
8
8
 
@@ -15,11 +15,6 @@ RgGen.define_simple_feature(:register, :offset_address) do
15
15
  end
16
16
  end
17
17
 
18
- verify(:feature) do
19
- error_condition { !offset_address }
20
- message { 'no offset address is given' }
21
- end
22
-
23
18
  verify(:feature) do
24
19
  error_condition { offset_address.negative? }
25
20
  message { "offset address is less than 0: #{offset_address}" }
@@ -62,6 +57,16 @@ RgGen.define_simple_feature(:register, :offset_address) do
62
57
 
63
58
  private
64
59
 
60
+ def default_offset_address
61
+ register.component_index.zero? && 0 ||
62
+ (previous_register.offset_address + previous_register.byte_size)
63
+ end
64
+
65
+ def previous_register
66
+ index = register.component_index - 1
67
+ register_block.registers[index]
68
+ end
69
+
65
70
  def bus_width
66
71
  configuration.bus_width
67
72
  end
@@ -14,6 +14,6 @@ RgGen.setup :'rggen-defualt-register-map', RgGen::DefaultRegisterMap do |builder
14
14
  :rc, :reserved, :ro, :rof, :rs,
15
15
  :rw, :rwc, :rwe, :rwl, :rws,
16
16
  :w0c, :w0crs, :w0s, :w0src, :w0trg,
17
- :w1c, :w1crs, :w1s, :w1src, :w1trg, :wo
17
+ :w1, :w1c, :w1crs, :w1s, :w1src, :w1trg, :wo, :wo1
18
18
  ]
19
19
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module DefaultRegisterMap
5
- VERSION = '0.17.0'
5
+ VERSION = '0.18.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-default-register-map
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-13 00:00:00.000000000 Z
11
+ date: 2019-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -46,14 +46,14 @@ files:
46
46
  - lib/rggen/default_register_map/bit_field/type/ro.rb
47
47
  - lib/rggen/default_register_map/bit_field/type/rof.rb
48
48
  - lib/rggen/default_register_map/bit_field/type/rs.rb
49
- - lib/rggen/default_register_map/bit_field/type/rw.rb
49
+ - lib/rggen/default_register_map/bit_field/type/rw_w1.rb
50
50
  - lib/rggen/default_register_map/bit_field/type/rwc_rws.rb
51
51
  - lib/rggen/default_register_map/bit_field/type/rwe_rwl.rb
52
52
  - lib/rggen/default_register_map/bit_field/type/w0c_w1c.rb
53
53
  - lib/rggen/default_register_map/bit_field/type/w0crs_w1crs_w0src_w1src.rb
54
54
  - lib/rggen/default_register_map/bit_field/type/w0s_w1s.rb
55
55
  - lib/rggen/default_register_map/bit_field/type/w0trg_w1trg.rb
56
- - lib/rggen/default_register_map/bit_field/type/wo.rb
56
+ - lib/rggen/default_register_map/bit_field/type/wo_wo1.rb
57
57
  - lib/rggen/default_register_map/global/address_width.rb
58
58
  - lib/rggen/default_register_map/global/bus_width.rb
59
59
  - lib/rggen/default_register_map/register/name.rb
@@ -92,5 +92,5 @@ requirements: []
92
92
  rubygems_version: 3.0.3
93
93
  signing_key:
94
94
  specification_version: 4
95
- summary: rggen-default-register-map-0.17.0
95
+ summary: rggen-default-register-map-0.18.0
96
96
  test_files: []