rggen-default-register-map 0.17.0 → 0.18.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: 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: []