HDLRuby 2.6.23 → 2.7.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -264,7 +264,7 @@ module HDLRuby::Low
264
264
  # choice.casts_without_expression
265
265
  # end )
266
266
  self.set_select!(self.select.casts_without_expression!)
267
- sef.map_choices! { |choice| choice.casts_without_expression! }
267
+ self.map_choices! { |choice| choice.casts_without_expression! }
268
268
  return self
269
269
  end
270
270
  end
@@ -221,6 +221,12 @@ module HDLRuby::Low
221
221
  connection
222
222
  end
223
223
 
224
+ # Deletes all the connections.
225
+ def delete_all_conncetions!
226
+ @connections.each { |cnx| cnx.parent = nil }
227
+ @connections = []
228
+ end
229
+
224
230
  # Deletes a behavior.
225
231
  def delete_behavior!(behavior)
226
232
  if @behaviors.include?(behavior) then
@@ -231,6 +237,12 @@ module HDLRuby::Low
231
237
  end
232
238
  end
233
239
 
240
+ # Deletes all the behaviors.
241
+ def delete_all_behaviors!
242
+ @behaviors.each { |beh| beh.parent = nil }
243
+ @behaviors = []
244
+ end
245
+
234
246
  # Deletes the elements related to one of +names+: either they have
235
247
  # one of the names or they use an element with these names.
236
248
  # NOTE: only delete actual instantiated elements, types or
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  require "HDLRuby/hruby_error"
2
4
  require "HDLRuby/hruby_low_mutable"
3
5
  require "HDLRuby/hruby_low2sym"
@@ -88,14 +90,19 @@ module HDLRuby::Low
88
90
  # self.each_scope(&:with_port!)
89
91
  # Gather the references to instance ports.
90
92
  # Also remember if the references were left values or not.
93
+ # And remember where the node was.
91
94
  refs = []
92
95
  ref_sym2leftvalue = {}
96
+ # ref_parents = Set.new
97
+ ref_parents = []
93
98
  self.each_block_deep do |block|
94
99
  block.each_node_deep do |node|
95
100
  if instance_port?(node) then
96
101
  # puts "port for node: #{node.ref.name}.#{node.name}"
97
102
  refs << node
98
103
  ref_sym2leftvalue[node.to_sym] = node.leftvalue?
104
+ ref_parents << node.parent
105
+ # ref_parents[node.parent] = node
99
106
  end
100
107
  end
101
108
  end
@@ -106,6 +113,8 @@ module HDLRuby::Low
106
113
  # puts "leftvalue? #{node.leftvalue?}"
107
114
  refs << node
108
115
  ref_sym2leftvalue[node.to_sym] = node.leftvalue?
116
+ ref_parents << node.parent
117
+ # ref_parents[node.parent] = node
109
118
  end
110
119
  end
111
120
  end
@@ -117,17 +126,23 @@ module HDLRuby::Low
117
126
  # Replace the references by their corresponding port wires.
118
127
  self.each_block_deep do |block|
119
128
  block.each_node_deep do |node|
120
- node.map_nodes! do |expr|
121
- portw = ref_sym2portw[expr.to_sym]
122
- portw ? portw2ref(portw) : expr
129
+ if ref_parents.include?(node) then
130
+ node.map_nodes! do |expr|
131
+ next expr unless instance_port?(expr)
132
+ portw = ref_sym2portw[expr.to_sym]
133
+ portw ? portw2ref(portw) : expr
134
+ end
123
135
  end
124
136
  end
125
137
  end
126
138
  self.each_connection do |connection|
127
139
  connection.each_node_deep do |node|
128
- node.map_nodes! do |expr|
129
- portw = ref_sym2portw[expr.to_sym]
130
- portw ? portw2ref(portw) : expr
140
+ if ref_parents.include?(node) then
141
+ node.map_nodes! do |expr|
142
+ next expr unless instance_port?(expr)
143
+ portw = ref_sym2portw[expr.to_sym]
144
+ portw ? portw2ref(portw) : expr
145
+ end
131
146
  end
132
147
  end
133
148
  end
@@ -133,7 +133,8 @@ module HDLRuby::Low
133
133
  # Get the behaviors.
134
134
  behs = self.each_behavior.to_a
135
135
  # Remove them from the scope.
136
- behs.each { |beh| self.delete_behavior!(beh) }
136
+ # behs.each { |beh| self.delete_behavior!(beh) }
137
+ self.delete_all_behaviors!
137
138
  # Return the behaviors.
138
139
  return behs
139
140
  end
@@ -145,7 +146,8 @@ module HDLRuby::Low
145
146
  # Get the connections.
146
147
  cnxs = self.each_connection.to_a
147
148
  # Remove them from the scope.
148
- cnxs.each { |beh| self.delete_connection!(beh) }
149
+ # cnxs.each { |cnx| self.delete_connection!(cnx) }
150
+ cnxs.delete_all_connections!
149
151
  # Return the connections.
150
152
  return cnxs
151
153
  end
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module HDLRuby
2
4
 
3
5
  ##
@@ -11,16 +13,21 @@ module HDLRuby
11
13
 
12
14
  @@absoluteCounter = -1 # The absolute name counter.
13
15
 
16
+ @@uniq_names = Set.new(Symbol.all_symbols.map {|sym| sym.to_s})
17
+
14
18
  # Generates an absolute uniq name.
15
19
  def self.uniq_name(base = "")
16
20
  @@absoluteCounter += 1
17
21
  name = base.to_s + ":#{@@absoluteCounter}"
18
- if Symbol.all_symbols.find {|symbol| symbol.to_s == name } then
22
+ # if Symbol.all_symbols.find {|symbol| symbol.to_s == name } then
23
+ if @@uniq_names.include?(name) then
19
24
  # The symbol exists, try again.
20
25
  return self.uniq_name
21
26
  else
27
+ @@uniq_names.add(name)
22
28
  return name.to_sym
23
29
  end
30
+ # return base.to_s + ":#{@@absoluteCounter}"
24
31
  end
25
32
 
26
33