rggen-systemverilog 0.23.1 → 0.24.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/lib/rggen/systemverilog/common.rb +0 -22
- data/lib/rggen/systemverilog/common/feature.rb +2 -2
- data/lib/rggen/systemverilog/common/utility.rb +4 -0
- data/lib/rggen/systemverilog/ral.rb +20 -28
- data/lib/rggen/systemverilog/ral/bit_field/type.rb +1 -1
- data/lib/rggen/systemverilog/ral/setup.rb +1 -1
- data/lib/rggen/systemverilog/rtl.rb +36 -45
- data/lib/rggen/systemverilog/rtl/bit_field/type.rb +1 -2
- data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.erb +17 -14
- data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.rb +19 -9
- data/lib/rggen/systemverilog/rtl/bit_field/type/reserved.erb +17 -2
- data/lib/rggen/systemverilog/rtl/bit_field/type/ro.erb +15 -4
- data/lib/rggen/systemverilog/rtl/bit_field/type/rof.erb +15 -4
- data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.erb +17 -12
- data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.rb +18 -7
- data/lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.erb +15 -7
- data/lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.rb +2 -2
- data/lib/rggen/systemverilog/rtl/bit_field/type/rwc.erb +15 -7
- data/lib/rggen/systemverilog/rtl/bit_field/type/rwe.erb +16 -8
- data/lib/rggen/systemverilog/rtl/bit_field/type/rwl.erb +16 -8
- data/lib/rggen/systemverilog/rtl/bit_field/type/rws.erb +13 -7
- data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb +19 -0
- data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.rb +37 -0
- data/lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.erb +16 -8
- data/lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.rb +5 -2
- data/lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.erb +15 -6
- data/lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.rb +9 -0
- data/lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.rb +29 -27
- data/lib/rggen/systemverilog/rtl/setup.rb +1 -1
- data/lib/rggen/systemverilog/version.rb +1 -1
- metadata +6 -22
- data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs_wcrs.erb +0 -10
- data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs_wcrs.rb +0 -21
- data/lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.erb +0 -10
- data/lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2cfff9e2a346d5c02dc5a6401e8b36fdd15d20b9d4d4030b5fcc56880521ccd4
|
4
|
+
data.tar.gz: 75bd4c611fa964f30df059fe39d547daf688322ed1076654744381dc38a67068
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c5e0b0b5c3352532161411d2ce6e8ca8728231377c7453953a1c1804b8c08bd134ba487264d7a63c192744278184de7923f598dfbde80096a41b6040467af45
|
7
|
+
data.tar.gz: 37a27563ccee405d16d2778728e186331bdb9a7711b73d017eb1bf3fd4479000c2bf54621dbab43b903897755a05026a3c7ae25cb68b1624cef63a250bf3eda0
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2019-
|
3
|
+
Copyright (c) 2019-2021 Taichi Ishitani
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
@@ -34,7 +34,7 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
|
|
34
34
|
|
35
35
|
## Copyright & License
|
36
36
|
|
37
|
-
Copyright © 2019-
|
37
|
+
Copyright © 2019-2021 Taichi Ishitani. RgGen::SystemVerilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
|
38
38
|
|
39
39
|
## Code of Conduct
|
40
40
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'docile'
|
4
3
|
require 'facets/kernel/attr_singleton'
|
5
4
|
|
6
5
|
require_relative 'version'
|
@@ -21,24 +20,3 @@ require_relative 'common/utility'
|
|
21
20
|
require_relative 'common/component'
|
22
21
|
require_relative 'common/feature'
|
23
22
|
require_relative 'common/factories'
|
24
|
-
|
25
|
-
module RgGen
|
26
|
-
module SystemVerilog
|
27
|
-
module Common
|
28
|
-
def self.register_component(builder, name, feature_class)
|
29
|
-
builder.output_component_registry(name) do
|
30
|
-
register_component [
|
31
|
-
:root, :register_block, :register_file, :register, :bit_field
|
32
|
-
] do |category|
|
33
|
-
component Component, ComponentFactory
|
34
|
-
feature feature_class, FeatureFactory if category != :root
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.load_features(features, root)
|
40
|
-
features.each { |feature| require File.join(root, feature) }
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -8,7 +8,7 @@ module RgGen
|
|
8
8
|
template_engine Core::OutputBase::ERBEngine
|
9
9
|
|
10
10
|
EntityContext =
|
11
|
-
Struct.new(:entity_type, :
|
11
|
+
Struct.new(:entity_type, :method_name, :declaration_type, :default_layer)
|
12
12
|
|
13
13
|
class << self
|
14
14
|
private
|
@@ -58,7 +58,7 @@ module RgGen
|
|
58
58
|
|
59
59
|
def create_entity(context, name, attributes, &block)
|
60
60
|
merged_attributes = { name: name }.merge(Hash(attributes))
|
61
|
-
__send__(context.
|
61
|
+
__send__(context.method_name, context.entity_type, merged_attributes, &block)
|
62
62
|
end
|
63
63
|
|
64
64
|
def add_entity(context, entity, name, layer)
|
@@ -7,37 +7,29 @@ require_relative 'ral/register_common'
|
|
7
7
|
module RgGen
|
8
8
|
module SystemVerilog
|
9
9
|
module RAL
|
10
|
-
|
10
|
+
extend Core::Plugin
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
'ral/bit_field/type/reserved_rof',
|
15
|
-
'ral/bit_field/type/rwc_rws',
|
16
|
-
'ral/bit_field/type/rwe_rwl',
|
17
|
-
'ral/bit_field/type/w0trg_w1trg',
|
18
|
-
'ral/register/type',
|
19
|
-
'ral/register/type/external',
|
20
|
-
'ral/register/type/indirect',
|
21
|
-
'ral/register_block/sv_ral_model',
|
22
|
-
'ral/register_block/sv_ral_package',
|
23
|
-
'ral/register_file/sv_ral_model'
|
24
|
-
].freeze
|
12
|
+
setup_plugin :'rggen-sv-ral' do |plugin|
|
13
|
+
plugin.version SystemVerilog::VERSION
|
25
14
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
def self.register_component(builder)
|
31
|
-
Common.register_component(builder, :sv_ral, Feature)
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.load_features
|
35
|
-
Common.load_features(FEATURES, __dir__)
|
36
|
-
end
|
15
|
+
plugin.register_component :sv_ral do
|
16
|
+
component Common::Component, Common::ComponentFactory
|
17
|
+
feature Feature, Common::FeatureFactory
|
18
|
+
end
|
37
19
|
|
38
|
-
|
39
|
-
|
40
|
-
|
20
|
+
plugin.files [
|
21
|
+
'ral/bit_field/type',
|
22
|
+
'ral/bit_field/type/reserved_rof',
|
23
|
+
'ral/bit_field/type/rwc_rws',
|
24
|
+
'ral/bit_field/type/rwe_rwl',
|
25
|
+
'ral/bit_field/type/w0trg_w1trg',
|
26
|
+
'ral/register/type',
|
27
|
+
'ral/register/type/external',
|
28
|
+
'ral/register/type/indirect',
|
29
|
+
'ral/register_block/sv_ral_model',
|
30
|
+
'ral/register_block/sv_ral_package',
|
31
|
+
'ral/register_file/sv_ral_model'
|
32
|
+
]
|
41
33
|
end
|
42
34
|
end
|
43
35
|
end
|
@@ -29,7 +29,7 @@ RgGen.define_list_feature(:bit_field, :type) do
|
|
29
29
|
|
30
30
|
def model_name
|
31
31
|
name = helper.model_name
|
32
|
-
name
|
32
|
+
name.is_a?(Proc) && instance_eval(&name) || name || :rggen_ral_field
|
33
33
|
end
|
34
34
|
|
35
35
|
def constructors
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'rggen/systemverilog/ral'
|
4
4
|
|
5
|
-
RgGen.
|
5
|
+
RgGen.register_plugin RgGen::SystemVerilog::RAL do |builder|
|
6
6
|
builder.enable :register_block, [:sv_ral_model, :sv_ral_package]
|
7
7
|
builder.enable :register_file, [:sv_ral_model]
|
8
8
|
end
|
@@ -11,54 +11,45 @@ require_relative 'rtl/bit_field_index'
|
|
11
11
|
module RgGen
|
12
12
|
module SystemVerilog
|
13
13
|
module RTL
|
14
|
-
|
14
|
+
extend Core::Plugin
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
'rtl/bit_field/type',
|
19
|
-
'rtl/bit_field/type/rc_w0c_w1c_wc_woc',
|
20
|
-
'rtl/bit_field/type/reserved',
|
21
|
-
'rtl/bit_field/type/ro',
|
22
|
-
'rtl/bit_field/type/rof',
|
23
|
-
'rtl/bit_field/type/rs_w0s_w1s_ws_wos',
|
24
|
-
'rtl/bit_field/type/rw_w1_wo_wo1',
|
25
|
-
'rtl/bit_field/type/rwc',
|
26
|
-
'rtl/bit_field/type/rwe',
|
27
|
-
'rtl/bit_field/type/rwl',
|
28
|
-
'rtl/bit_field/type/rws',
|
29
|
-
'rtl/bit_field/type/w0crs_w1crs_wcrs',
|
30
|
-
'rtl/bit_field/type/w0src_w1src_wsrc',
|
31
|
-
'rtl/bit_field/type/w0t_w1t',
|
32
|
-
'rtl/bit_field/type/w0trg_w1trg',
|
33
|
-
'rtl/bit_field/type/wrc_wrs',
|
34
|
-
'rtl/global/array_port_format',
|
35
|
-
'rtl/global/fold_sv_interface_port',
|
36
|
-
'rtl/register/sv_rtl_top',
|
37
|
-
'rtl/register/type',
|
38
|
-
'rtl/register/type/external',
|
39
|
-
'rtl/register/type/indirect',
|
40
|
-
'rtl/register_block/protocol',
|
41
|
-
'rtl/register_block/protocol/apb',
|
42
|
-
'rtl/register_block/protocol/axi4lite',
|
43
|
-
'rtl/register_block/sv_rtl_top',
|
44
|
-
'rtl/register_file/sv_rtl_top'
|
45
|
-
].freeze
|
16
|
+
setup_plugin :'rggen-sv-rtl' do |plugin|
|
17
|
+
plugin.version SystemVerilog::VERSION
|
46
18
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
def self.register_component(builder)
|
52
|
-
Common.register_component(builder, :sv_rtl, Feature)
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.load_features
|
56
|
-
Common.load_features(FEATURES, __dir__)
|
57
|
-
end
|
19
|
+
plugin.register_component :sv_rtl do
|
20
|
+
component Common::Component, Common::ComponentFactory
|
21
|
+
feature Feature, Common::FeatureFactory
|
22
|
+
end
|
58
23
|
|
59
|
-
|
60
|
-
|
61
|
-
|
24
|
+
plugin.files [
|
25
|
+
'rtl/bit_field/sv_rtl_top',
|
26
|
+
'rtl/bit_field/type',
|
27
|
+
'rtl/bit_field/type/rc_w0c_w1c_wc_woc',
|
28
|
+
'rtl/bit_field/type/reserved',
|
29
|
+
'rtl/bit_field/type/ro',
|
30
|
+
'rtl/bit_field/type/rof',
|
31
|
+
'rtl/bit_field/type/rs_w0s_w1s_ws_wos',
|
32
|
+
'rtl/bit_field/type/rw_w1_wo_wo1',
|
33
|
+
'rtl/bit_field/type/rwc',
|
34
|
+
'rtl/bit_field/type/rwe',
|
35
|
+
'rtl/bit_field/type/rwl',
|
36
|
+
'rtl/bit_field/type/rws',
|
37
|
+
'rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc',
|
38
|
+
'rtl/bit_field/type/w0t_w1t',
|
39
|
+
'rtl/bit_field/type/w0trg_w1trg',
|
40
|
+
'rtl/bit_field/type/wrc_wrs',
|
41
|
+
'rtl/global/array_port_format',
|
42
|
+
'rtl/global/fold_sv_interface_port',
|
43
|
+
'rtl/register/sv_rtl_top',
|
44
|
+
'rtl/register/type',
|
45
|
+
'rtl/register/type/external',
|
46
|
+
'rtl/register/type/indirect',
|
47
|
+
'rtl/register_block/protocol',
|
48
|
+
'rtl/register_block/protocol/apb',
|
49
|
+
'rtl/register_block/protocol/axi4lite',
|
50
|
+
'rtl/register_block/sv_rtl_top',
|
51
|
+
'rtl/register_file/sv_rtl_top'
|
52
|
+
]
|
62
53
|
end
|
63
54
|
end
|
64
55
|
end
|
@@ -1,16 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
.
|
4
|
-
.
|
5
|
-
|
6
|
-
.WIDTH (<%= width %>),
|
7
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
1
|
+
rggen_bit_field #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.SW_READ_ACTION (<%= read_action %>),
|
5
|
+
.SW_WRITE_ACTION (<%= write_action %>)
|
8
6
|
) u_bit_field (
|
9
|
-
.i_clk
|
10
|
-
.i_rst_n
|
11
|
-
.bit_field_if
|
12
|
-
.
|
13
|
-
.
|
14
|
-
.
|
15
|
-
.
|
7
|
+
.i_clk (<%= clock %>),
|
8
|
+
.i_rst_n (<%= reset %>),
|
9
|
+
.bit_field_if (<%= bit_field_if %>),
|
10
|
+
.i_sw_write_enable (<%= write_enable %>),
|
11
|
+
.i_hw_write_enable ('0),
|
12
|
+
.i_hw_write_data ('0),
|
13
|
+
.i_hw_set (<%= set[loop_variables] %>),
|
14
|
+
.i_hw_clear ('0),
|
15
|
+
.i_value ('0),
|
16
|
+
.i_mask (<%= mask %>),
|
17
|
+
.o_value (<%= value_out[loop_variables] %>),
|
18
|
+
.o_value_unmasked (<%= value_out_unmasked %>)
|
16
19
|
);
|
@@ -23,22 +23,32 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rc, :w0c, :w1c, :wc, :woc])
|
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
|
-
def
|
27
|
-
|
26
|
+
def read_action
|
27
|
+
{
|
28
|
+
rc: 'RGGEN_READ_CLEAR',
|
29
|
+
w0c: 'RGGEN_READ_DEFAULT',
|
30
|
+
w1c: 'RGGEN_READ_DEFAULT',
|
31
|
+
wc: 'RGGEN_READ_DEFAULT',
|
32
|
+
woc: 'RGGEN_READ_NONE'
|
33
|
+
}[bit_field.type]
|
28
34
|
end
|
29
35
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
36
|
+
def write_action
|
37
|
+
{
|
38
|
+
rc: 'RGGEN_WRITE_NONE',
|
39
|
+
w0c: 'RGGEN_WRITE_0_CLEAR',
|
40
|
+
w1c: 'RGGEN_WRITE_1_CLEAR',
|
41
|
+
wc: 'RGGEN_WRITE_CLEAR',
|
42
|
+
woc: 'RGGEN_WRITE_CLEAR'
|
43
|
+
}[bit_field.type]
|
33
44
|
end
|
34
45
|
|
35
|
-
def
|
36
|
-
bit_field.
|
46
|
+
def write_enable
|
47
|
+
bit_field.writable? && all_bits_1 || all_bits_0
|
37
48
|
end
|
38
49
|
|
39
50
|
def value_out_unmasked
|
40
|
-
(bit_field.reference? || nil) &&
|
41
|
-
value_unmasked[loop_variables]
|
51
|
+
(bit_field.reference? || nil) && value_unmasked[loop_variables]
|
42
52
|
end
|
43
53
|
end
|
44
54
|
end
|
@@ -1,3 +1,18 @@
|
|
1
|
-
|
2
|
-
.
|
1
|
+
rggen_bit_field #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.SW_READ_ACTION (RGGEN_READ_NONE),
|
4
|
+
.STORAGE (0)
|
5
|
+
) u_bit_field (
|
6
|
+
.i_clk ('0),
|
7
|
+
.i_rst_n ('0),
|
8
|
+
.bit_field_if (<%= bit_field_if %>),
|
9
|
+
.i_sw_write_enable ('0),
|
10
|
+
.i_hw_write_enable ('0),
|
11
|
+
.i_hw_write_data ('0),
|
12
|
+
.i_hw_set ('0),
|
13
|
+
.i_hw_clear ('0),
|
14
|
+
.i_value ('0),
|
15
|
+
.i_mask ('0),
|
16
|
+
.o_value (),
|
17
|
+
.o_value_unmasked ()
|
3
18
|
);
|
@@ -1,6 +1,17 @@
|
|
1
|
-
|
2
|
-
.WIDTH
|
1
|
+
rggen_bit_field #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.STORAGE (0)
|
3
4
|
) u_bit_field (
|
4
|
-
.
|
5
|
-
.
|
5
|
+
.i_clk ('0),
|
6
|
+
.i_rst_n ('0),
|
7
|
+
.bit_field_if (<%= bit_field_if %>),
|
8
|
+
.i_sw_write_enable ('0),
|
9
|
+
.i_hw_write_enable ('0),
|
10
|
+
.i_hw_write_data ('0),
|
11
|
+
.i_hw_set ('0),
|
12
|
+
.i_hw_clear ('0),
|
13
|
+
.i_value (<%= reference_or_value_in %>),
|
14
|
+
.i_mask ('1),
|
15
|
+
.o_value (),
|
16
|
+
.o_value_unmasked ()
|
6
17
|
);
|
@@ -1,6 +1,17 @@
|
|
1
|
-
|
2
|
-
.WIDTH
|
1
|
+
rggen_bit_field #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.STORAGE (0)
|
3
4
|
) u_bit_field (
|
4
|
-
.
|
5
|
-
.
|
5
|
+
.i_clk ('0),
|
6
|
+
.i_rst_n ('0),
|
7
|
+
.bit_field_if (<%= bit_field_if %>),
|
8
|
+
.i_sw_write_enable ('0),
|
9
|
+
.i_hw_write_enable ('0),
|
10
|
+
.i_hw_write_data ('0),
|
11
|
+
.i_hw_set ('0),
|
12
|
+
.i_hw_clear ('0),
|
13
|
+
.i_value (<%= initial_value %>),
|
14
|
+
.i_mask ('1),
|
15
|
+
.o_value (),
|
16
|
+
.o_value_unmasked ()
|
6
17
|
);
|
@@ -1,14 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
.
|
4
|
-
.
|
5
|
-
|
6
|
-
.WIDTH (<%= width %>),
|
7
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
1
|
+
rggen_bit_field #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.SW_READ_ACTION (<%= read_action %>),
|
5
|
+
.SW_WRITE_ACTION (<%= write_action %>)
|
8
6
|
) u_bit_field (
|
9
|
-
.i_clk
|
10
|
-
.i_rst_n
|
11
|
-
.bit_field_if
|
12
|
-
.
|
13
|
-
.
|
7
|
+
.i_clk (<%= clock %>),
|
8
|
+
.i_rst_n (<%= reset %>),
|
9
|
+
.bit_field_if (<%= bit_field_if %>),
|
10
|
+
.i_sw_write_enable (<%= write_enable %>),
|
11
|
+
.i_hw_write_enable ('0),
|
12
|
+
.i_hw_write_data ('0),
|
13
|
+
.i_hw_set ('0),
|
14
|
+
.i_hw_clear (<%= clear[loop_variables] %>),
|
15
|
+
.i_value ('0),
|
16
|
+
.i_mask ('1),
|
17
|
+
.o_value (<%= value_out[loop_variables] %>),
|
18
|
+
.o_value_unmasked ()
|
14
19
|
);
|
@@ -17,17 +17,28 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s, :ws, :wos])
|
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
|
-
def
|
21
|
-
|
20
|
+
def read_action
|
21
|
+
{
|
22
|
+
rs: 'RGGEN_READ_SET',
|
23
|
+
w0s: 'RGGEN_READ_DEFAULT',
|
24
|
+
w1s: 'RGGEN_READ_DEFAULT',
|
25
|
+
ws: 'RGGEN_READ_DEFAULT',
|
26
|
+
wos: 'RGGEN_READ_NONE'
|
27
|
+
}[bit_field.type]
|
22
28
|
end
|
23
29
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
30
|
+
def write_action
|
31
|
+
{
|
32
|
+
rs: 'RGGEN_WRITE_NONE',
|
33
|
+
w0s: 'RGGEN_WRITE_0_SET',
|
34
|
+
w1s: 'RGGEN_WRITE_1_SET',
|
35
|
+
ws: 'RGGEN_WRITE_SET',
|
36
|
+
wos: 'RGGEN_WRITE_SET'
|
37
|
+
}[bit_field.type]
|
27
38
|
end
|
28
39
|
|
29
|
-
def
|
30
|
-
bit_field.
|
40
|
+
def write_enable
|
41
|
+
bit_field.writable? && all_bits_1 || all_bits_0
|
31
42
|
end
|
32
43
|
end
|
33
44
|
end
|
@@ -1,11 +1,19 @@
|
|
1
|
-
|
1
|
+
rggen_bit_field #(
|
2
2
|
.WIDTH (<%= width %>),
|
3
3
|
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
-
.
|
5
|
-
.
|
4
|
+
.SW_READ_ACTION (<%= read_action %>),
|
5
|
+
.SW_WRITE_ONCE (<%= write_once %>)
|
6
6
|
) u_bit_field (
|
7
|
-
.i_clk
|
8
|
-
.i_rst_n
|
9
|
-
.bit_field_if
|
10
|
-
.
|
7
|
+
.i_clk (<%= clock %>),
|
8
|
+
.i_rst_n (<%= reset %>),
|
9
|
+
.bit_field_if (<%= bit_field_if %>),
|
10
|
+
.i_sw_write_enable ('1),
|
11
|
+
.i_hw_write_enable ('0),
|
12
|
+
.i_hw_write_data ('0),
|
13
|
+
.i_hw_set ('0),
|
14
|
+
.i_hw_clear ('0),
|
15
|
+
.i_value ('0),
|
16
|
+
.i_mask ('1),
|
17
|
+
.o_value (<%= value_out[loop_variables] %>),
|
18
|
+
.o_value_unmasked ()
|
11
19
|
);
|
@@ -13,8 +13,8 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rw, :w1, :wo, :wo1]) do
|
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
def
|
17
|
-
bit_field.
|
16
|
+
def read_action
|
17
|
+
bit_field.readable? && 'RGGEN_READ_DEFAULT' || 'RGGEN_READ_NONE'
|
18
18
|
end
|
19
19
|
|
20
20
|
def write_once
|
@@ -1,10 +1,18 @@
|
|
1
|
-
|
1
|
+
rggen_bit_field #(
|
2
2
|
.WIDTH (<%= width %>),
|
3
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.HW_CLEAR_WIDTH (1)
|
4
5
|
) u_bit_field (
|
5
|
-
.i_clk
|
6
|
-
.i_rst_n
|
7
|
-
.bit_field_if
|
8
|
-
.
|
9
|
-
.
|
6
|
+
.i_clk (<%= clock %>),
|
7
|
+
.i_rst_n (<%= reset %>),
|
8
|
+
.bit_field_if (<%= bit_field_if %>),
|
9
|
+
.i_sw_write_enable ('1),
|
10
|
+
.i_hw_write_enable ('0),
|
11
|
+
.i_hw_write_data ('0),
|
12
|
+
.i_hw_set ('0),
|
13
|
+
.i_hw_clear (<%= clear_signal %>),
|
14
|
+
.i_value ('0),
|
15
|
+
.i_mask ('1),
|
16
|
+
.o_value (<%= value_out[loop_variables] %>),
|
17
|
+
.o_value_unmasked ()
|
10
18
|
);
|
@@ -1,10 +1,18 @@
|
|
1
|
-
|
2
|
-
.WIDTH
|
3
|
-
.INITIAL_VALUE
|
1
|
+
rggen_bit_field #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.SW_WRITE_ENABLE_POLARITY (RGGEN_ACTIVE_HIGH)
|
4
5
|
) u_bit_field (
|
5
|
-
.i_clk
|
6
|
-
.i_rst_n
|
7
|
-
.bit_field_if
|
8
|
-
.
|
9
|
-
.
|
6
|
+
.i_clk (<%= clock %>),
|
7
|
+
.i_rst_n (<%= reset %>),
|
8
|
+
.bit_field_if (<%= bit_field_if %>),
|
9
|
+
.i_sw_write_enable (<%= enable_signal %>),
|
10
|
+
.i_hw_write_enable ('0),
|
11
|
+
.i_hw_write_data ('0),
|
12
|
+
.i_hw_set ('0),
|
13
|
+
.i_hw_clear ('0),
|
14
|
+
.i_value ('0),
|
15
|
+
.i_mask ('1),
|
16
|
+
.o_value (<%= value_out[loop_variables] %>),
|
17
|
+
.o_value_unmasked ()
|
10
18
|
);
|
@@ -1,10 +1,18 @@
|
|
1
|
-
|
2
|
-
.WIDTH
|
3
|
-
.INITIAL_VALUE
|
1
|
+
rggen_bit_field #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.SW_WRITE_ENABLE_POLARITY (RGGEN_ACTIVE_LOW)
|
4
5
|
) u_bit_field (
|
5
|
-
.i_clk
|
6
|
-
.i_rst_n
|
7
|
-
.bit_field_if
|
8
|
-
.
|
9
|
-
.
|
6
|
+
.i_clk (<%= clock %>),
|
7
|
+
.i_rst_n (<%= reset %>),
|
8
|
+
.bit_field_if (<%= bit_field_if %>),
|
9
|
+
.i_sw_write_enable (<%= lock_signal %>),
|
10
|
+
.i_hw_write_enable ('0),
|
11
|
+
.i_hw_write_data ('0),
|
12
|
+
.i_hw_set ('0),
|
13
|
+
.i_hw_clear ('0),
|
14
|
+
.i_value ('0),
|
15
|
+
.i_mask ('1),
|
16
|
+
.o_value (<%= value_out[loop_variables] %>),
|
17
|
+
.o_value_unmasked ()
|
10
18
|
);
|
@@ -1,11 +1,17 @@
|
|
1
|
-
|
1
|
+
rggen_bit_field #(
|
2
2
|
.WIDTH (<%= width %>),
|
3
3
|
.INITIAL_VALUE (<%= initial_value %>)
|
4
4
|
) u_bit_field (
|
5
|
-
.i_clk
|
6
|
-
.i_rst_n
|
7
|
-
.bit_field_if
|
8
|
-
.
|
9
|
-
.
|
10
|
-
.
|
5
|
+
.i_clk (<%= clock %>),
|
6
|
+
.i_rst_n (<%= reset %>),
|
7
|
+
.bit_field_if (<%= bit_field_if %>),
|
8
|
+
.i_sw_write_enable ('1),
|
9
|
+
.i_hw_write_enable (<%= set_signal %>),
|
10
|
+
.i_hw_write_data (<%= value_in[loop_variables] %>),
|
11
|
+
.i_hw_set ('0),
|
12
|
+
.i_hw_clear ('0),
|
13
|
+
.i_value ('0),
|
14
|
+
.i_mask ('1),
|
15
|
+
.o_value (<%= value_out[loop_variables] %>),
|
16
|
+
.o_value_unmasked ()
|
11
17
|
);
|
@@ -0,0 +1,19 @@
|
|
1
|
+
rggen_bit_field #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.SW_READ_ACTION (<%= read_action %>),
|
5
|
+
.SW_WRITE_ACTION (<%= write_action %>)
|
6
|
+
) u_bit_field (
|
7
|
+
.i_clk (<%= clock %>),
|
8
|
+
.i_rst_n (<%= reset %>),
|
9
|
+
.bit_field_if (<%= bit_field_if %>),
|
10
|
+
.i_sw_write_enable ('1),
|
11
|
+
.i_hw_write_enable ('0),
|
12
|
+
.i_hw_write_data ('0),
|
13
|
+
.i_hw_set ('0),
|
14
|
+
.i_hw_clear ('0),
|
15
|
+
.i_value ('0),
|
16
|
+
.i_mask ('1),
|
17
|
+
.o_value (<%= value_out[loop_variables] %>),
|
18
|
+
.o_value_unmasked ()
|
19
|
+
);
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(
|
4
|
+
:bit_field, :type, [:w0crs, :w0src, :w1crs, :w1src, :wcrs, :wsrc]
|
5
|
+
) do
|
6
|
+
sv_rtl do
|
7
|
+
build do
|
8
|
+
output :value_out, {
|
9
|
+
name: "o_#{full_name}", data_type: :logic, width: width,
|
10
|
+
array_size: array_size, array_format: array_port_format
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
main_code :bit_field, from_template: true
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def read_action
|
19
|
+
read_set? && 'RGGEN_READ_SET' || 'RGGEN_READ_CLEAR'
|
20
|
+
end
|
21
|
+
|
22
|
+
def read_set?
|
23
|
+
[:w0crs, :w1crs, :wcrs].include?(bit_field.type)
|
24
|
+
end
|
25
|
+
|
26
|
+
def write_action
|
27
|
+
{
|
28
|
+
w0crs: 'RGGEN_WRITE_0_CLEAR',
|
29
|
+
w0src: 'RGGEN_WRITE_0_SET',
|
30
|
+
w1crs: 'RGGEN_WRITE_1_CLEAR',
|
31
|
+
w1src: 'RGGEN_WRITE_1_SET',
|
32
|
+
wcrs: 'RGGEN_WRITE_CLEAR',
|
33
|
+
wsrc: 'RGGEN_WRITE_SET'
|
34
|
+
}[bit_field.type]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,10 +1,18 @@
|
|
1
|
-
|
2
|
-
.
|
3
|
-
.
|
4
|
-
.
|
1
|
+
rggen_bit_field #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.SW_WRITE_ACTION (<%= write_action %>)
|
5
5
|
) u_bit_field (
|
6
|
-
.i_clk
|
7
|
-
.i_rst_n
|
8
|
-
.bit_field_if
|
9
|
-
.
|
6
|
+
.i_clk (<%= clock %>),
|
7
|
+
.i_rst_n (<%= reset %>),
|
8
|
+
.bit_field_if (<%= bit_field_if %>),
|
9
|
+
.i_sw_write_enable ('1),
|
10
|
+
.i_hw_write_enable ('0),
|
11
|
+
.i_hw_write_data ('0),
|
12
|
+
.i_hw_set ('0),
|
13
|
+
.i_hw_clear ('0),
|
14
|
+
.i_value ('0),
|
15
|
+
.i_mask ('1),
|
16
|
+
.o_value (<%= value_out[loop_variables] %>),
|
17
|
+
.o_value_unmasked ()
|
10
18
|
);
|
@@ -13,8 +13,11 @@ RgGen.define_list_item_feature(:bit_field, :type, [:w0t, :w1t]) do
|
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
def
|
17
|
-
|
16
|
+
def write_action
|
17
|
+
{
|
18
|
+
w0t: 'RGGEN_WRITE_0_TOGGLE',
|
19
|
+
w1t: 'RGGEN_WRITE_1_TOGGLE'
|
20
|
+
}[bit_field.type]
|
18
21
|
end
|
19
22
|
end
|
20
23
|
end
|
@@ -1,9 +1,18 @@
|
|
1
|
-
|
1
|
+
rggen_bit_field #(
|
2
2
|
.WIDTH (<%= width %>),
|
3
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.SW_READ_ACTION (<%= read_action %>)
|
4
5
|
) u_bit_field (
|
5
|
-
.i_clk
|
6
|
-
.i_rst_n
|
7
|
-
.bit_field_if
|
8
|
-
.
|
6
|
+
.i_clk (<%= clock %>),
|
7
|
+
.i_rst_n (<%= reset %>),
|
8
|
+
.bit_field_if (<%= bit_field_if %>),
|
9
|
+
.i_sw_write_enable ('1),
|
10
|
+
.i_hw_write_enable ('0),
|
11
|
+
.i_hw_write_data ('0),
|
12
|
+
.i_hw_set ('0),
|
13
|
+
.i_hw_clear ('0),
|
14
|
+
.i_value ('0),
|
15
|
+
.i_mask ('1),
|
16
|
+
.o_value (<%= value_out[loop_variables] %>),
|
17
|
+
.o_value_unmasked ()
|
9
18
|
);
|
@@ -10,5 +10,14 @@ RgGen.define_list_item_feature(:bit_field, :type, [:wrc, :wrs]) do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
main_code :bit_field, from_template: true
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def read_action
|
17
|
+
{
|
18
|
+
wrc: 'RGGEN_READ_CLEAR',
|
19
|
+
wrs: 'RGGEN_READ_SET'
|
20
|
+
}[bit_field.type]
|
21
|
+
end
|
13
22
|
end
|
14
23
|
end
|
@@ -110,33 +110,7 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
|
|
110
110
|
|
111
111
|
main_code :register_block, from_template: true
|
112
112
|
main_code :register_block do |code|
|
113
|
-
|
114
|
-
[
|
115
|
-
[axi4lite_if.awvalid, awvalid],
|
116
|
-
[awready, axi4lite_if.awready],
|
117
|
-
[axi4lite_if.awid, awid],
|
118
|
-
[axi4lite_if.awaddr, awaddr],
|
119
|
-
[axi4lite_if.awprot, awprot],
|
120
|
-
[axi4lite_if.wvalid, wvalid],
|
121
|
-
[wready, axi4lite_if.wready],
|
122
|
-
[axi4lite_if.wdata, wdata],
|
123
|
-
[axi4lite_if.wstrb, wstrb],
|
124
|
-
[bvalid, axi4lite_if.bvalid],
|
125
|
-
[axi4lite_if.bready, bready],
|
126
|
-
[bid, axi4lite_if.bid],
|
127
|
-
[bresp, axi4lite_if.bresp],
|
128
|
-
[axi4lite_if.arvalid, arvalid],
|
129
|
-
[arready, axi4lite_if.arready],
|
130
|
-
[axi4lite_if.arid, arid],
|
131
|
-
[axi4lite_if.araddr, araddr],
|
132
|
-
[axi4lite_if.arprot, arprot],
|
133
|
-
[rvalid, axi4lite_if.rvalid],
|
134
|
-
[axi4lite_if.rready, rready],
|
135
|
-
[rid, axi4lite_if.rid],
|
136
|
-
[rdata, axi4lite_if.rdata],
|
137
|
-
[rresp, axi4lite_if.rresp]
|
138
|
-
].each { |lhs, rhs| code << assign(lhs, rhs) << nl }
|
139
|
-
end
|
113
|
+
configuration.fold_sv_interface_port? || assign_axi4lite_signals(code)
|
140
114
|
end
|
141
115
|
|
142
116
|
private
|
@@ -144,5 +118,33 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
|
|
144
118
|
def id_port_width
|
145
119
|
"((#{id_width}>0)?#{id_width}:1)"
|
146
120
|
end
|
121
|
+
|
122
|
+
def assign_axi4lite_signals(code)
|
123
|
+
[
|
124
|
+
[axi4lite_if.awvalid, awvalid],
|
125
|
+
[awready, axi4lite_if.awready],
|
126
|
+
[axi4lite_if.awid, awid],
|
127
|
+
[axi4lite_if.awaddr, awaddr],
|
128
|
+
[axi4lite_if.awprot, awprot],
|
129
|
+
[axi4lite_if.wvalid, wvalid],
|
130
|
+
[wready, axi4lite_if.wready],
|
131
|
+
[axi4lite_if.wdata, wdata],
|
132
|
+
[axi4lite_if.wstrb, wstrb],
|
133
|
+
[bvalid, axi4lite_if.bvalid],
|
134
|
+
[axi4lite_if.bready, bready],
|
135
|
+
[bid, axi4lite_if.bid],
|
136
|
+
[bresp, axi4lite_if.bresp],
|
137
|
+
[axi4lite_if.arvalid, arvalid],
|
138
|
+
[arready, axi4lite_if.arready],
|
139
|
+
[axi4lite_if.arid, arid],
|
140
|
+
[axi4lite_if.araddr, araddr],
|
141
|
+
[axi4lite_if.arprot, arprot],
|
142
|
+
[rvalid, axi4lite_if.rvalid],
|
143
|
+
[axi4lite_if.rready, rready],
|
144
|
+
[rid, axi4lite_if.rid],
|
145
|
+
[rdata, axi4lite_if.rdata],
|
146
|
+
[rresp, axi4lite_if.rresp]
|
147
|
+
].each { |lhs, rhs| code << assign(lhs, rhs) << nl }
|
148
|
+
end
|
147
149
|
end
|
148
150
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rggen-systemverilog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.24.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:
|
11
|
+
date: 2021-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: docile
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.1.5
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 1.1.5
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: facets
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,10 +109,8 @@ files:
|
|
123
109
|
- lib/rggen/systemverilog/rtl/bit_field/type/rwl.rb
|
124
110
|
- lib/rggen/systemverilog/rtl/bit_field/type/rws.erb
|
125
111
|
- lib/rggen/systemverilog/rtl/bit_field/type/rws.rb
|
126
|
-
- lib/rggen/systemverilog/rtl/bit_field/type/
|
127
|
-
- lib/rggen/systemverilog/rtl/bit_field/type/
|
128
|
-
- lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.erb
|
129
|
-
- lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.rb
|
112
|
+
- lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb
|
113
|
+
- lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.rb
|
130
114
|
- lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.erb
|
131
115
|
- lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.rb
|
132
116
|
- lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.erb
|
@@ -181,8 +165,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
165
|
- !ruby/object:Gem::Version
|
182
166
|
version: '0'
|
183
167
|
requirements: []
|
184
|
-
rubygems_version: 3.
|
168
|
+
rubygems_version: 3.2.3
|
185
169
|
signing_key:
|
186
170
|
specification_version: 4
|
187
|
-
summary: rggen-systemverilog-0.
|
171
|
+
summary: rggen-systemverilog-0.24.0
|
188
172
|
test_files: []
|
@@ -1,10 +0,0 @@
|
|
1
|
-
rggen_bit_field_w01crs_wcrs #(
|
2
|
-
.CLEAR_VALUE (<%= clear_value %>),
|
3
|
-
.WIDTH (<%= width %>),
|
4
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
5
|
-
) u_bit_field (
|
6
|
-
.i_clk (<%= clock %>),
|
7
|
-
.i_rst_n (<%= reset %>),
|
8
|
-
.bit_field_if (<%= bit_field_if %>),
|
9
|
-
.o_value (<%= value_out[loop_variables] %>)
|
10
|
-
);
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:w0crs, :w1crs, :wcrs]) do
|
4
|
-
sv_rtl do
|
5
|
-
build do
|
6
|
-
output :value_out, {
|
7
|
-
name: "o_#{full_name}", data_type: :logic, width: width,
|
8
|
-
array_size: array_size, array_format: array_port_format
|
9
|
-
}
|
10
|
-
end
|
11
|
-
|
12
|
-
main_code :bit_field, from_template: true
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def clear_value
|
17
|
-
value = { w0crs: 0b00, w1crs: 0b01, wcrs: 0b10 }[bit_field.type]
|
18
|
-
bin(value, 2)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
rggen_bit_field_w01src_wsrc #(
|
2
|
-
.SET_VALUE (<%= set_value %>),
|
3
|
-
.WIDTH (<%= width %>),
|
4
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
5
|
-
) u_bit_field (
|
6
|
-
.i_clk (<%= clock %>),
|
7
|
-
.i_rst_n (<%= reset %>),
|
8
|
-
.bit_field_if (<%= bit_field_if %>),
|
9
|
-
.o_value (<%= value_out[loop_variables] %>)
|
10
|
-
);
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:w0src, :w1src, :wsrc]) do
|
4
|
-
sv_rtl do
|
5
|
-
build do
|
6
|
-
output :value_out, {
|
7
|
-
name: "o_#{full_name}", data_type: :logic, width: width,
|
8
|
-
array_size: array_size, array_format: array_port_format
|
9
|
-
}
|
10
|
-
end
|
11
|
-
|
12
|
-
main_code :bit_field, from_template: true
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def set_value
|
17
|
-
value = { w0src: 0b00, w1src: 0b01, wsrc: 0b10 }[bit_field.type]
|
18
|
-
bin(value, 2)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|