HDLRuby 2.11.11 → 3.0.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 +4 -4
- data/README.html +3274 -0
- data/README.md +608 -99
- data/ext/hruby_sim/hruby_rcsim_build.c +27 -0
- data/ext/hruby_sim/hruby_sim.h +3 -0
- data/ext/hruby_sim/hruby_sim_calc.c +2 -0
- data/ext/hruby_sim/hruby_sim_core.c +17 -5
- data/ext/hruby_sim/hruby_sim_stack_calc.c +1 -1
- data/ext/hruby_sim/hruby_sim_tree_calc.c +8 -1
- data/ext/hruby_sim/hruby_sim_vcd.c +24 -7
- data/ext/hruby_sim/hruby_sim_vizualize.c +9 -1
- data/lib/HDLRuby/backend/hruby_allocator.rb +2 -2
- data/lib/HDLRuby/backend/hruby_c_allocator.rb +7 -7
- data/lib/HDLRuby/hdr_samples/constant_in_function.rb +3 -1
- data/lib/HDLRuby/hdr_samples/counter_dff_bench.rb +3 -1
- data/lib/HDLRuby/hdr_samples/huge_rom.rb +1 -1
- data/lib/HDLRuby/hdr_samples/mei8.rb +11 -11
- data/lib/HDLRuby/hdr_samples/mei8_bench.rb +12 -12
- data/lib/HDLRuby/hdr_samples/neg_arith_bench.rb +4 -4
- data/lib/HDLRuby/hdr_samples/rom_nest.rb +1 -1
- data/lib/HDLRuby/hdr_samples/ruby_fir_hw.rb +4 -4
- data/lib/HDLRuby/hdr_samples/struct.rb +44 -10
- data/lib/HDLRuby/hdr_samples/with_bram.rb +45 -0
- data/lib/HDLRuby/hdr_samples/with_bram_frame_stack.rb +105 -0
- data/lib/HDLRuby/hdr_samples/with_bram_stack.rb +69 -0
- data/lib/HDLRuby/hdr_samples/with_casts.rb +3 -3
- data/lib/HDLRuby/hdr_samples/with_concat.rb +6 -6
- data/lib/HDLRuby/hdr_samples/with_connector_memory.rb +2 -2
- data/lib/HDLRuby/hdr_samples/with_def.rb +10 -3
- data/lib/HDLRuby/hdr_samples/with_define_operator.rb +44 -0
- data/lib/HDLRuby/hdr_samples/with_fixpoint.rb +12 -12
- data/lib/HDLRuby/hdr_samples/with_init.rb +3 -3
- data/lib/HDLRuby/hdr_samples/with_leftright.rb +21 -0
- data/lib/HDLRuby/hdr_samples/with_reduce.rb +13 -13
- data/lib/HDLRuby/hdr_samples/with_ref_array.rb +6 -6
- data/lib/HDLRuby/hdr_samples/with_register_stack.rb +150 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer.rb +190 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_deep.rb +91 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_enumerable.rb +405 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_enumerator.rb +89 -0
- data/lib/HDLRuby/hdr_samples/with_sequencer_sync.rb +120 -0
- data/lib/HDLRuby/hdr_samples/with_subsums.rb +3 -3
- data/lib/HDLRuby/hdr_samples/with_terminate.rb +3 -3
- data/lib/HDLRuby/hdr_samples/with_to_a.rb +10 -10
- data/lib/HDLRuby/hdr_samples/with_values.rb +3 -3
- data/lib/HDLRuby/hdrcc.rb +29 -3
- data/lib/HDLRuby/hdrlib.rb +1 -1
- data/lib/HDLRuby/hruby_bstr.rb +10 -5
- data/lib/HDLRuby/hruby_db.rb +2 -2
- data/lib/HDLRuby/hruby_high.rb +152 -47
- data/lib/HDLRuby/hruby_high_fullname.rb +3 -1
- data/lib/HDLRuby/hruby_low.rb +189 -18
- data/lib/HDLRuby/hruby_low2c.rb +129 -54
- data/lib/HDLRuby/hruby_low2hdr.rb +66 -40
- data/lib/HDLRuby/hruby_low2high.rb +86 -44
- data/lib/HDLRuby/hruby_low2seq.rb +26 -18
- data/lib/HDLRuby/hruby_low2sym.rb +14 -13
- data/lib/HDLRuby/hruby_low2vhd.rb +80 -44
- data/lib/HDLRuby/hruby_low_bool2select.rb +61 -46
- data/lib/HDLRuby/hruby_low_casts_without_expression.rb +56 -44
- data/lib/HDLRuby/hruby_low_cleanup.rb +18 -16
- data/lib/HDLRuby/hruby_low_fix_types.rb +65 -32
- data/lib/HDLRuby/hruby_low_mutable.rb +83 -119
- data/lib/HDLRuby/hruby_low_resolve.rb +38 -30
- data/lib/HDLRuby/hruby_low_with_bool.rb +33 -16
- data/lib/HDLRuby/hruby_low_with_port.rb +3 -3
- data/lib/HDLRuby/hruby_low_with_var.rb +23 -9
- data/lib/HDLRuby/hruby_low_without_concat.rb +45 -19
- data/lib/HDLRuby/hruby_low_without_namespace.rb +47 -32
- data/lib/HDLRuby/hruby_low_without_parinseq.rb +32 -16
- data/lib/HDLRuby/hruby_low_without_select.rb +37 -24
- data/lib/HDLRuby/hruby_low_without_subsignals.rb +280 -0
- data/lib/HDLRuby/hruby_rcsim.rb +158 -134
- data/lib/HDLRuby/hruby_rsim.rb +194 -20
- data/lib/HDLRuby/hruby_rsim_mute.rb +2 -3
- data/lib/HDLRuby/hruby_rsim_vcd.rb +125 -50
- data/lib/HDLRuby/hruby_values.rb +48 -33
- data/lib/HDLRuby/hruby_verilog.rb +90 -48
- data/lib/HDLRuby/soft/stacks.rb +219 -0
- data/lib/HDLRuby/std/bram.rb +26 -0
- data/lib/HDLRuby/std/clocks.rb +1 -1
- data/lib/HDLRuby/std/fixpoint.rb +2 -2
- data/lib/HDLRuby/std/fsm.rb +48 -11
- data/lib/HDLRuby/std/function_generator.rb +2 -2
- data/lib/HDLRuby/std/sequencer.rb +1857 -0
- data/lib/HDLRuby/std/sequencer_sync.rb +400 -0
- data/lib/HDLRuby/std/std.rb +12 -0
- data/lib/HDLRuby/version.rb +1 -1
- data/tuto/adder_sat_flags_vcd.png +0 -0
- data/tuto/addsub_vcd.png +0 -0
- data/tuto/alu_vcd.png +0 -0
- data/tuto/bit_pong_vcd.png +0 -0
- data/tuto/checksum_vcd.png +0 -0
- data/tuto/circuit_hdr.odg +0 -0
- data/tuto/circuit_hdr.png +0 -0
- data/tuto/circuit_hie.odg +0 -0
- data/tuto/circuit_hie.png +0 -0
- data/tuto/circuit_view.odg +0 -0
- data/tuto/circuit_view.png +0 -0
- data/tuto/clock_counter_vcd.png +0 -0
- data/tuto/counter_ext_vcd.png +0 -0
- data/tuto/fact_vcd.png +0 -0
- data/tuto/hw_flow.odg +0 -0
- data/tuto/hw_flow.png +0 -0
- data/tuto/maxxer_vcd.png +0 -0
- data/tuto/pingpong0_vcd.png +0 -0
- data/tuto/pingpong1_vcd.png +0 -0
- data/tuto/pingpong2_vcd.png +0 -0
- data/tuto/ram_vcd.png +0 -0
- data/tuto/serializer_vcd.png +0 -0
- data/tuto/sw_flow.odg +0 -0
- data/tuto/sw_flow.png +0 -0
- data/tuto/the_counter_vcd.png +0 -0
- data/tuto/tutorial_sw.html +2359 -0
- data/tuto/tutorial_sw.md +2684 -0
- data/tuto/tutorial_sw.pdf +0 -0
- data/tuto/tutorial_sw_jp.md +417 -0
- metadata +49 -3
- data/lib/HDLRuby/hdr_samples/sumprod.rb +0 -29
@@ -2,6 +2,9 @@ require "HDLRuby/hruby_error"
|
|
2
2
|
require "HDLRuby/hruby_low_mutable"
|
3
3
|
|
4
4
|
|
5
|
+
module HDLRuby::Low
|
6
|
+
|
7
|
+
|
5
8
|
##
|
6
9
|
# Provides a new boolean type and converts the comparison and operations
|
7
10
|
# on it to this new type.
|
@@ -12,10 +15,11 @@ require "HDLRuby/hruby_low_mutable"
|
|
12
15
|
# * Boolean is weak in type promotion, e.g.: boolean & bit = bit
|
13
16
|
#
|
14
17
|
########################################################################
|
15
|
-
module HDLRuby::Low
|
16
18
|
|
17
|
-
|
19
|
+
|
18
20
|
class Type
|
21
|
+
## Extend Type with check telling if it is a boolean type.
|
22
|
+
|
19
23
|
# Tells if it is a boolean type.
|
20
24
|
def boolean?
|
21
25
|
return false
|
@@ -50,9 +54,10 @@ module HDLRuby::Low
|
|
50
54
|
end
|
51
55
|
|
52
56
|
|
53
|
-
## Extends the SystemT class for converting types of comparison and
|
54
|
-
# operations on it to boolean type.
|
55
57
|
class SystemT
|
58
|
+
## Extends the SystemT class for converting types of comparison and
|
59
|
+
# operations on it to boolean type.
|
60
|
+
|
56
61
|
# Converts to a variable-compatible system.
|
57
62
|
#
|
58
63
|
# NOTE: the result is the same systemT.
|
@@ -65,9 +70,11 @@ module HDLRuby::Low
|
|
65
70
|
end
|
66
71
|
end
|
67
72
|
|
68
|
-
|
69
|
-
# operations on it to boolean type.
|
73
|
+
|
70
74
|
class Behavior
|
75
|
+
## Extends the Behaviour class for converting types of comparison and
|
76
|
+
# operations on it to boolean type.
|
77
|
+
|
71
78
|
# Converts to a variable-compatible system.
|
72
79
|
#
|
73
80
|
# NOTE: the result is the same Behaviour.
|
@@ -76,9 +83,11 @@ module HDLRuby::Low
|
|
76
83
|
end
|
77
84
|
end
|
78
85
|
|
79
|
-
|
80
|
-
# operations on it to boolean type.
|
86
|
+
|
81
87
|
class Statement
|
88
|
+
## Extends the Statement class for converting types of comparison and
|
89
|
+
# operations on it to boolean type.
|
90
|
+
|
82
91
|
# Converts to a variable-compatible system.
|
83
92
|
#
|
84
93
|
# NOTE: the result is the same Behaviour.
|
@@ -91,27 +100,33 @@ module HDLRuby::Low
|
|
91
100
|
end
|
92
101
|
end
|
93
102
|
|
94
|
-
|
95
|
-
# or not.
|
103
|
+
|
96
104
|
class Expression
|
105
|
+
## Extends the Expression class for checking if it a boolean expression
|
106
|
+
# or not.
|
107
|
+
|
97
108
|
# Tells if the expression is boolean.
|
98
109
|
def boolean?
|
99
110
|
return false
|
100
111
|
end
|
101
112
|
end
|
102
113
|
|
103
|
-
|
104
|
-
# or not.
|
114
|
+
|
105
115
|
class Unary
|
116
|
+
## Extends the Unary class for checking if it is a boolean expression
|
117
|
+
# or not.
|
118
|
+
|
106
119
|
# Tells if the expression is boolean.
|
107
120
|
def boolean?
|
108
121
|
return self.child.boolean?
|
109
122
|
end
|
110
123
|
end
|
111
124
|
|
112
|
-
|
113
|
-
# or not.
|
125
|
+
|
114
126
|
class Binary
|
127
|
+
## Extends the Binary class for checking if it is a boolean expression
|
128
|
+
# or not.
|
129
|
+
|
115
130
|
# Tells if the expression is boolean.
|
116
131
|
def boolean?
|
117
132
|
case(self.operator)
|
@@ -128,9 +143,11 @@ module HDLRuby::Low
|
|
128
143
|
end
|
129
144
|
end
|
130
145
|
|
131
|
-
|
132
|
-
# or not.
|
146
|
+
|
133
147
|
class Select
|
148
|
+
## Extends the Select class for checking if it a boolean epression
|
149
|
+
# or not.
|
150
|
+
|
134
151
|
# Tells if the expression is boolean.
|
135
152
|
def boolean?
|
136
153
|
# Boolean if all the choices are boolean.
|
@@ -20,8 +20,8 @@ module HDLRuby::Low
|
|
20
20
|
|
21
21
|
|
22
22
|
|
23
|
-
## Extends SystemT with generation of port wires.
|
24
23
|
class SystemT
|
24
|
+
## Extends SystemT with generation of port wires.
|
25
25
|
|
26
26
|
# Converts to a port-compatible system.
|
27
27
|
#
|
@@ -33,8 +33,8 @@ module HDLRuby::Low
|
|
33
33
|
end
|
34
34
|
|
35
35
|
|
36
|
-
## Extends the Scope class with retrival conversion to symbol.
|
37
36
|
class Scope
|
37
|
+
## Extends the Scope class with retrival conversion to symbol.
|
38
38
|
|
39
39
|
# Converts a port wire to a reference to it.
|
40
40
|
def portw2ref(portw)
|
@@ -170,8 +170,8 @@ module HDLRuby::Low
|
|
170
170
|
|
171
171
|
|
172
172
|
|
173
|
-
## Extends SystemT with generation of port wires.
|
174
173
|
class SystemI
|
174
|
+
## Extends SystemT with generation of port wires.
|
175
175
|
|
176
176
|
def with_port!
|
177
177
|
self.systemT.with_port!
|
@@ -4,6 +4,8 @@ require "HDLRuby/hruby_low2sym"
|
|
4
4
|
require "HDLRuby/hruby_low2seq"
|
5
5
|
|
6
6
|
|
7
|
+
module HDLRuby::Low
|
8
|
+
|
7
9
|
##
|
8
10
|
# Explicitely seperate variables from signals in an HDLRuby::Low
|
9
11
|
# description.
|
@@ -11,10 +13,12 @@ require "HDLRuby/hruby_low2seq"
|
|
11
13
|
# NOTE: variable and signal are to be taken in the VHDL meaning.
|
12
14
|
#
|
13
15
|
########################################################################
|
14
|
-
module HDLRuby::Low
|
15
16
|
|
16
|
-
|
17
|
+
|
17
18
|
class SystemT
|
19
|
+
## Extends the SystemT class with separation between signals and
|
20
|
+
# variables.
|
21
|
+
|
18
22
|
# Converts to a variable-compatible system.
|
19
23
|
#
|
20
24
|
# NOTE: the result is the same systemT.
|
@@ -25,8 +29,10 @@ module HDLRuby::Low
|
|
25
29
|
end
|
26
30
|
|
27
31
|
|
28
|
-
## Extends the SystemI class with separation between signals and variables.
|
29
32
|
class SystemI
|
33
|
+
## Extends the SystemI class with separation between signals and
|
34
|
+
# variables.
|
35
|
+
|
30
36
|
# Converts to a variable-compatible system.
|
31
37
|
#
|
32
38
|
# NOTE: the result is the same systemT.
|
@@ -37,8 +43,10 @@ module HDLRuby::Low
|
|
37
43
|
end
|
38
44
|
|
39
45
|
|
40
|
-
## Extends the Behavior class with separation between signals and variables.
|
41
46
|
class Behavior
|
47
|
+
## Extends the Behavior class with separation between signals and
|
48
|
+
# variables.
|
49
|
+
|
42
50
|
# Converts to a variable-compatible behavior.
|
43
51
|
#
|
44
52
|
# NOTE: the result is the same systemT.
|
@@ -50,8 +58,9 @@ module HDLRuby::Low
|
|
50
58
|
end
|
51
59
|
|
52
60
|
|
53
|
-
## Extends the Block class with separation between signals and variables.
|
54
61
|
class Block
|
62
|
+
## Extends the Block class with separation between signals and variables.
|
63
|
+
|
55
64
|
|
56
65
|
# Converts a variable to a reference to it.
|
57
66
|
def var2ref(var)
|
@@ -248,8 +257,10 @@ module HDLRuby::Low
|
|
248
257
|
end
|
249
258
|
|
250
259
|
|
251
|
-
## Extends the TimeBlock class with separation between signals and variables.
|
252
260
|
class TimeBlock
|
261
|
+
## Extends the TimeBlock class with separation between signals and
|
262
|
+
# variables.
|
263
|
+
|
253
264
|
# Converts to a variable-compatible block where +upper+ is
|
254
265
|
# the upper block if any.
|
255
266
|
#
|
@@ -262,8 +273,9 @@ module HDLRuby::Low
|
|
262
273
|
end
|
263
274
|
|
264
275
|
|
265
|
-
## Extends the If class with separation between signals and variables.
|
266
276
|
class If
|
277
|
+
## Extends the If class with separation between signals and variables.
|
278
|
+
|
267
279
|
# Converts to a variable-compatible if where +upper+ is
|
268
280
|
# the upper block if any.
|
269
281
|
#
|
@@ -290,8 +302,9 @@ module HDLRuby::Low
|
|
290
302
|
end
|
291
303
|
|
292
304
|
|
293
|
-
## Extends the When class with separation between signals and variables.
|
294
305
|
class When
|
306
|
+
## Extends the When class with separation between signals and variables.
|
307
|
+
|
295
308
|
# Converts to a variable-compatible case where +upper+ is
|
296
309
|
# the upper block if any.
|
297
310
|
#
|
@@ -302,8 +315,9 @@ module HDLRuby::Low
|
|
302
315
|
end
|
303
316
|
|
304
317
|
|
305
|
-
## Extends the Case class with separation between signals and variables.
|
306
318
|
class Case
|
319
|
+
## Extends the Case class with separation between signals and variables.
|
320
|
+
|
307
321
|
# Converts to a variable-compatible case where +upper+ is
|
308
322
|
# the upper block if any.
|
309
323
|
#
|
@@ -7,15 +7,15 @@ module HDLRuby::Low
|
|
7
7
|
|
8
8
|
|
9
9
|
##
|
10
|
-
# Breaks the concat
|
10
|
+
# Breaks the concat assignments.
|
11
11
|
# Makes handling by some synthesis tools easier.
|
12
12
|
#
|
13
13
|
########################################################################
|
14
14
|
|
15
15
|
|
16
|
-
## Extends the SystemT class with functionality for breaking assingments
|
17
|
-
# to concats.
|
18
16
|
class SystemT
|
17
|
+
## Extends the SystemT class with functionality for breaking assignments
|
18
|
+
# to concats.
|
19
19
|
|
20
20
|
# Breaks the assignments to concats.
|
21
21
|
def break_concat_assigns!
|
@@ -33,16 +33,19 @@ module HDLRuby::Low
|
|
33
33
|
|
34
34
|
end
|
35
35
|
|
36
|
-
|
37
|
-
# to concats.
|
36
|
+
|
38
37
|
class Scope
|
38
|
+
## Extends the Scope class with functionality for breaking assignments
|
39
|
+
# to concats.
|
40
|
+
|
39
41
|
# Breaks the assignments to concats.
|
40
42
|
def break_concat_assigns!
|
41
43
|
# Recruse on the sub scopes.
|
42
44
|
self.each_scope(&:break_concat_assigns!)
|
43
45
|
# Recurse on the statements.
|
44
46
|
self.each_behavior do |behavior|
|
45
|
-
behavior.block.each_block_deep(&:break_concat_assigns!)
|
47
|
+
# behavior.block.each_block_deep(&:break_concat_assigns!)
|
48
|
+
behavior.break_concat_assigns!
|
46
49
|
end
|
47
50
|
# Work on the connections.
|
48
51
|
self.each_connection.to_a.each do |connection|
|
@@ -100,32 +103,53 @@ module HDLRuby::Low
|
|
100
103
|
end
|
101
104
|
end
|
102
105
|
|
103
|
-
|
104
|
-
|
106
|
+
|
107
|
+
class Behavior
|
108
|
+
## Extends the Behavior class with functionality for breaking assignments
|
109
|
+
# to concats.
|
110
|
+
|
111
|
+
# Breaks the assignments to concats.
|
112
|
+
def break_concat_assigns!
|
113
|
+
# Recruse on the block.
|
114
|
+
self.block.each_block_deep(&:break_concat_assigns!)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
|
119
|
+
|
105
120
|
class Block
|
121
|
+
## Extends the Block class with functionality for breaking assignments
|
122
|
+
# to concats.
|
123
|
+
|
106
124
|
# Breaks the assignments to concats.
|
107
125
|
#
|
108
126
|
# NOTE: work on the direct sub statement only, not deeply.
|
109
127
|
def break_concat_assigns!
|
128
|
+
# puts "breack_concat_assigns! with block=#{self} with #{self.each_statement.count} statements"
|
110
129
|
# Check each transmit.
|
111
|
-
self.each_statement.
|
130
|
+
self.each_statement.to_a.each_with_index do |stmnt|
|
131
|
+
# puts "stmnt=#{stmnt}"
|
112
132
|
if stmnt.is_a?(Transmit) then
|
113
133
|
# Transmit, breaking may be necessary.
|
114
134
|
nstmnt = stmnt.break_concat_assigns
|
115
135
|
if nstmnt.is_a?(Block) then
|
116
136
|
# The transmit has been broken, remove the former
|
117
137
|
# version and add the generated block as a behavior.
|
118
|
-
self.set_statement!(i,nstmnt)
|
138
|
+
# self.set_statement!(i,nstmnt)
|
139
|
+
self.replace_statement!(stmnt,nstmnt)
|
140
|
+
# puts "nstmnt.parent=#{nstmnt.parent}"
|
119
141
|
end
|
120
142
|
end
|
121
143
|
end
|
144
|
+
return self
|
122
145
|
end
|
123
146
|
end
|
124
147
|
|
125
148
|
|
126
|
-
## Extends the Transmit class with functionality for breaking assingments
|
127
|
-
# to concats.
|
128
149
|
class Transmit
|
150
|
+
## Extends the Transmit class with functionality for breaking assignments
|
151
|
+
# to concats.
|
152
|
+
|
129
153
|
# Break the assignments to concats.
|
130
154
|
#
|
131
155
|
# NOTE: when breaking generates a new Block containing the broken
|
@@ -144,11 +168,12 @@ module HDLRuby::Low
|
|
144
168
|
top_scope = top_block.top_scope
|
145
169
|
aux = top_scope.add_inner(
|
146
170
|
SignalI.new(HDLRuby.uniq_name,self.right.type) )
|
147
|
-
# puts "new signal: #{aux.name}"
|
148
171
|
aux = RefName.new(aux.type,RefThis.new,aux.name)
|
149
172
|
# Is a default value required to avoid latch generation?
|
150
|
-
unless top_block.
|
151
|
-
|
173
|
+
unless top_block.is_a?(TimeBlock) ||
|
174
|
+
top_block.parent.each_event.
|
175
|
+
# find {|ev| ev.type!=:change} then
|
176
|
+
find {|ev| ev.type!=:anyedge} then
|
152
177
|
# Yes, generate it.
|
153
178
|
top_block.insert_statement!(0,
|
154
179
|
Transmit.new(aux.clone,Value.new(aux.type,0)))
|
@@ -204,8 +229,8 @@ module HDLRuby::Low
|
|
204
229
|
end
|
205
230
|
pos += ref.type.width
|
206
231
|
end
|
207
|
-
# puts "Resulting block=#{block.to_vhdl}"
|
208
232
|
# Return the resulting block
|
233
|
+
# puts "new block=#{block}"
|
209
234
|
return block
|
210
235
|
end
|
211
236
|
end
|
@@ -215,9 +240,10 @@ module HDLRuby::Low
|
|
215
240
|
end
|
216
241
|
|
217
242
|
|
218
|
-
## Extends the Connection class with functionality for breaking assingments
|
219
|
-
# to concats.
|
220
243
|
class Connection
|
244
|
+
## Extends the Connection class with functionality for breaking
|
245
|
+
# assignments to concats.
|
246
|
+
|
221
247
|
# Break the assignments to concats.
|
222
248
|
#
|
223
249
|
# NOTE: when breaking generates a new Block containing the broken
|
@@ -229,7 +255,7 @@ module HDLRuby::Low
|
|
229
255
|
if node.is_a?(RefConcat) then
|
230
256
|
# Yes, must break. Create the resulting sequential
|
231
257
|
# block that will contain the new assignements.
|
232
|
-
block = Block.new(:
|
258
|
+
block = Block.new(:par)
|
233
259
|
# Create an intermediate signal for storing the
|
234
260
|
# right value. Put it in the top scope.
|
235
261
|
top_scope = self.top_scope
|
@@ -27,9 +27,10 @@ module HDLRuby::Low
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
# to the upper namespace.
|
30
|
+
|
32
31
|
class SystemT
|
32
|
+
## Extends the SystemT class with functionality for moving the
|
33
|
+
# declarations to the upper namespace.
|
33
34
|
|
34
35
|
include ForceName
|
35
36
|
|
@@ -78,9 +79,10 @@ module HDLRuby::Low
|
|
78
79
|
end
|
79
80
|
end
|
80
81
|
|
81
|
-
|
82
|
-
# to the upper namespace.
|
82
|
+
|
83
83
|
class Scope
|
84
|
+
## Extends the Scope class with functionality for moving the declarations
|
85
|
+
# to the upper namespace.
|
84
86
|
|
85
87
|
include ForceName
|
86
88
|
|
@@ -280,9 +282,10 @@ module HDLRuby::Low
|
|
280
282
|
end
|
281
283
|
end
|
282
284
|
|
283
|
-
|
284
|
-
# types.
|
285
|
+
|
285
286
|
class Type
|
287
|
+
## Extends the Type class with functionality for breaking hierarchical
|
288
|
+
# types.
|
286
289
|
|
287
290
|
# Breaks the hierarchical types into sequences of type definitions.
|
288
291
|
# Assumes to_upper_space! has been called before.
|
@@ -293,9 +296,10 @@ module HDLRuby::Low
|
|
293
296
|
end
|
294
297
|
end
|
295
298
|
|
296
|
-
|
297
|
-
# types.
|
299
|
+
|
298
300
|
class TypeVector
|
301
|
+
## Extends the TypeVector class with functionality for breaking hierarchical
|
302
|
+
# types.
|
299
303
|
|
300
304
|
# Breaks the hierarchical types into sequences of type definitions.
|
301
305
|
# Assumes to_upper_space! has been called before.
|
@@ -333,9 +337,10 @@ module HDLRuby::Low
|
|
333
337
|
end
|
334
338
|
end
|
335
339
|
|
336
|
-
|
337
|
-
# types.
|
340
|
+
|
338
341
|
class TypeTuple
|
342
|
+
## Extends the TypeTuple class with functionality for breaking
|
343
|
+
# hierarchical types.
|
339
344
|
|
340
345
|
# Breaks the hierarchical types into sequences of type definitions.
|
341
346
|
# Assumes to_upper_space! has been called before.
|
@@ -365,9 +370,10 @@ module HDLRuby::Low
|
|
365
370
|
end
|
366
371
|
end
|
367
372
|
|
368
|
-
|
369
|
-
# types.
|
373
|
+
|
370
374
|
class TypeStruct
|
375
|
+
## Extends the TypeStruct class with functionality for breaking
|
376
|
+
# hierarchical types.
|
371
377
|
|
372
378
|
# Breaks the hierarchical types into sequences of type definitions.
|
373
379
|
# Assumes to_upper_space! has been called before.
|
@@ -397,9 +403,10 @@ module HDLRuby::Low
|
|
397
403
|
end
|
398
404
|
end
|
399
405
|
|
400
|
-
|
401
|
-
# to the upper namespace.
|
406
|
+
|
402
407
|
class SignalI
|
408
|
+
## Extends the SignalI class with functionality for moving the
|
409
|
+
# declarations to the upper namespace.
|
403
410
|
|
404
411
|
# Replaces recursively +former+ name by +nname+ until it is redeclared.
|
405
412
|
def replace_names!(former,nname)
|
@@ -412,9 +419,10 @@ module HDLRuby::Low
|
|
412
419
|
end
|
413
420
|
end
|
414
421
|
|
415
|
-
|
416
|
-
# to the upper namespace.
|
422
|
+
|
417
423
|
class SystemI
|
424
|
+
## Extends the SystemI class with functionality for moving the
|
425
|
+
# declarations to the upper namespace.
|
418
426
|
|
419
427
|
# Replaces recursively +former+ name by +nname+ until it is redeclared.
|
420
428
|
def replace_names!(former,nname)
|
@@ -429,9 +437,9 @@ module HDLRuby::Low
|
|
429
437
|
end
|
430
438
|
|
431
439
|
|
432
|
-
## Extends the Behavior class with functionality for moving the declarations
|
433
|
-
# to the upper namespace.
|
434
440
|
class Behavior
|
441
|
+
## Extends the Behavior class with functionality for moving the
|
442
|
+
# declarations to the upper namespace.
|
435
443
|
|
436
444
|
# Moves the declarations to the upper namespace.
|
437
445
|
def to_upper_space!
|
@@ -454,9 +462,10 @@ module HDLRuby::Low
|
|
454
462
|
end
|
455
463
|
end
|
456
464
|
|
457
|
-
|
458
|
-
# declarations to the upper namespace.
|
465
|
+
|
459
466
|
class Statement
|
467
|
+
## Extends the Statement class with functionality for moving the
|
468
|
+
# declarations to the upper namespace.
|
460
469
|
|
461
470
|
# Moves the declarations to the upper namespace.
|
462
471
|
def to_upper_space!
|
@@ -491,9 +500,10 @@ module HDLRuby::Low
|
|
491
500
|
end
|
492
501
|
end
|
493
502
|
|
494
|
-
|
495
|
-
# declarations to the upper namespace.
|
503
|
+
|
496
504
|
class Expression
|
505
|
+
## Extends the Expression class with functionality for moving the
|
506
|
+
# declarations to the upper namespace.
|
497
507
|
|
498
508
|
# Replaces recursively +former+ name by +nname+ until it is redeclared.
|
499
509
|
def replace_names!(former,nname)
|
@@ -518,10 +528,11 @@ module HDLRuby::Low
|
|
518
528
|
end
|
519
529
|
end
|
520
530
|
end
|
531
|
+
|
521
532
|
|
522
|
-
## Extends the If class with functionality for moving the declarations
|
523
|
-
# to the upper namespace.
|
524
533
|
class If
|
534
|
+
## Extends the If class with functionality for moving the declarations
|
535
|
+
# to the upper namespace.
|
525
536
|
|
526
537
|
# Moves the declarations to the upper namespace.
|
527
538
|
def to_upper_space!
|
@@ -569,9 +580,10 @@ module HDLRuby::Low
|
|
569
580
|
end
|
570
581
|
end
|
571
582
|
|
572
|
-
|
573
|
-
# to the upper namespace.
|
583
|
+
|
574
584
|
class When
|
585
|
+
## Extends the When class with functionality for moving the declarations
|
586
|
+
# to the upper namespace.
|
575
587
|
|
576
588
|
# Moves the declarations to the upper namespace.
|
577
589
|
def to_upper_space!
|
@@ -608,9 +620,10 @@ module HDLRuby::Low
|
|
608
620
|
end
|
609
621
|
end
|
610
622
|
|
611
|
-
|
612
|
-
# to the upper namespace.
|
623
|
+
|
613
624
|
class Case
|
625
|
+
## Extends the When class with functionality for moving the declarations
|
626
|
+
# to the upper namespace.
|
614
627
|
|
615
628
|
# Moves the declarations to the upper namespace.
|
616
629
|
def to_upper_space!
|
@@ -644,9 +657,10 @@ module HDLRuby::Low
|
|
644
657
|
end
|
645
658
|
end
|
646
659
|
|
647
|
-
|
648
|
-
# to the upper namespace.
|
660
|
+
|
649
661
|
class TimeRepeat
|
662
|
+
## Extends the When class with functionality for moving the declarations
|
663
|
+
# to the upper namespace.
|
650
664
|
|
651
665
|
# Moves the declarations to the upper namespace.
|
652
666
|
def to_upper_space!
|
@@ -669,9 +683,10 @@ module HDLRuby::Low
|
|
669
683
|
end
|
670
684
|
end
|
671
685
|
|
672
|
-
|
673
|
-
# to the upper namespace.
|
686
|
+
|
674
687
|
class Block
|
688
|
+
## Extends the When class with functionality for moving the declarations
|
689
|
+
# to the upper namespace.
|
675
690
|
|
676
691
|
include ForceName
|
677
692
|
|