HDLRuby 2.7.5 → 2.9.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.
@@ -135,6 +135,8 @@ module HDLRuby::Low
135
135
  objs.each { |obj| res << " " << Low2C.make_name(obj) << "();\n" }
136
136
  # Sets the top systemT.
137
137
  res << " top_system = " << Low2C.obj_name(top) << ";\n"
138
+ # Enable it.
139
+ res << " set_enable_system(top_system,1);\n"
138
140
  # Starts the simulation.
139
141
  res<< " hruby_sim_core(\"#{name}\",#{init_visualizer},-1);\n"
140
142
  # Close the main.
@@ -170,6 +172,7 @@ module HDLRuby::Low
170
172
  # is the list of extra h files to include.
171
173
  # def to_c(level = 0, *hnames)
172
174
  def to_c(res, level = 0, *hnames)
175
+ # puts "SystemT.to_c with name=#{Low2C.obj_name(self)}#{@wrapper ? " and wrapper=#{Low2C.obj_name(@wrapper)}" : ""}"
173
176
  # The header
174
177
  # res = Low2C.includes(*hnames)
175
178
  res << Low2C.includes(*hnames)
@@ -179,7 +182,16 @@ module HDLRuby::Low
179
182
 
180
183
  # Generate the signals of the system.
181
184
  # self.each_signal { |signal| signal.to_c(level) }
182
- self.each_signal { |signal| signal.to_c(res,level) }
185
+ if ((defined? @wrapper) && @wrapper) then
186
+ # It is a reconfiguring system, alias the signals.
187
+ wrap_signals = @wrapper.each_signal.to_a
188
+ self.each_signal.with_index do |signal,i|
189
+ signal.to_c_alias(res,wrap_signals[i],level)
190
+ end
191
+ else
192
+ # It is a single system, default generation.
193
+ self.each_signal { |signal| signal.to_c(res,level) }
194
+ end
183
195
 
184
196
  # Generate the code for all the blocks included in the system.
185
197
  self.scope.each_scope_deep do |scope|
@@ -356,8 +368,13 @@ module HDLRuby::Low
356
368
  end
357
369
  self.scope.each_block_deep do |block|
358
370
  block.each_inner do |signal|
359
- # res << signal.value.to_ch if signal.value
360
- signal.value.to_ch(res) if signal.value
371
+ # signal.value.to_ch(res) if signal.value
372
+ if signal.value then
373
+ signal.value.each_node_deep do |node|
374
+ # res << node.to_ch if node.is_a?(Value)
375
+ node.to_ch(res) if node.is_a?(Value)
376
+ end
377
+ end
361
378
  end
362
379
  block.each_node_deep do |node|
363
380
  # res << node.to_ch if node.is_a?(Value)
@@ -681,6 +698,10 @@ module HDLRuby::Low
681
698
  res << "behavior->owner = NULL;\n"
682
699
  end
683
700
 
701
+ # Set the behavior as not enabled. */
702
+ res << " " * (level+1)*3
703
+ res << "behavior->enabled = 0;\n"
704
+
684
705
  # Set the behavior as inactive. */
685
706
  res << " " * (level+1)*3
686
707
  res << "behavior->activated = 0;\n"
@@ -702,6 +723,10 @@ module HDLRuby::Low
702
723
  end.to_a
703
724
  # Keep only one ref per signal.
704
725
  refs.uniq! { |node| node.full_name }
726
+ # Remove the inner signals from the list.
727
+ self.block.each_inner do |inner|
728
+ refs.delete_if {|r| r.name == inner.name }
729
+ end
705
730
  # Generate the event.
706
731
  events = refs.map {|ref| Event.new(:anyedge,ref.clone) }
707
732
  # Add them to the behavior for further processing.
@@ -833,11 +858,8 @@ module HDLRuby::Low
833
858
  # +level+ is the hierachical level of the object.
834
859
  # def to_c(level = 0)
835
860
  def to_c(res,level = 0)
836
- # The resulting string.
837
- # res = ""
838
-
861
+ # puts "Signal.to_c with name: #{Low2C.obj_name(self)}"
839
862
  # Declare the global variable holding the signal.
840
- # res << "SignalI #{self.to_c_signal(level+1)};\n\n"
841
863
  res << "SignalI "
842
864
  self.to_c_signal(res,level+1)
843
865
  res << ";\n\n"
@@ -845,6 +867,7 @@ module HDLRuby::Low
845
867
  # The header of the signal generation.
846
868
  res << " " * level*3
847
869
  res << "SignalI " << Low2C.make_name(self) << "() {\n"
870
+
848
871
  # res << " " * level*3
849
872
  # res << "Value l,r,d;\n"
850
873
  # res << " " * (level+1)*3
@@ -857,7 +880,6 @@ module HDLRuby::Low
857
880
  # Sets the global variable of the signal.
858
881
  res << "\n"
859
882
  res << " " * (level+1)*3
860
- # res << "#{self.to_c_signal(level+1)} = signalI;\n"
861
883
  self.to_c_signal(res,level+1)
862
884
  res << " = signalI;\n"
863
885
 
@@ -891,11 +913,12 @@ module HDLRuby::Low
891
913
  if self.value then
892
914
  # There is an initial value.
893
915
  res << " " * (level+1)*3
894
- # res << "copy_value(#{self.value.to_c(level+2)}," +
895
- # "signalI->c_value);\n"
916
+ # res << "copy_value("
917
+ # self.value.to_c_expr(res,level+2)
918
+ # res << ",signalI->c_value);\n"
896
919
  res << "copy_value("
897
920
  self.value.to_c_expr(res,level+2)
898
- res << ",signalI->c_value);\n"
921
+ res << ",signalI->f_value);\n"
899
922
  end
900
923
 
901
924
  # Initially the signal can be overwritten by anything.
@@ -948,6 +971,43 @@ module HDLRuby::Low
948
971
 
949
972
  return res;
950
973
  end
974
+
975
+ ## Generates the C text of the equivalent HDLRuby code in case
976
+ # the signals is actually an alias to another signal.
977
+ # +other+ is the target signal of the alias.
978
+ # +level+ is the hierachical level of the object.
979
+ def to_c_alias(res,target,level = 0)
980
+ # puts "Signal.to_c_alias with name: #{Low2C.obj_name(self)}"
981
+ # The resulting string.
982
+ # res = ""
983
+
984
+ # Declare the global variable holding the signal.
985
+ res << "SignalI "
986
+ self.to_c_signal(res,level+1)
987
+ res << ";\n\n"
988
+
989
+ # The header of the signal generation.
990
+ res << " " * level*3
991
+ res << "SignalI " << Low2C.make_name(self) << "() {\n"
992
+
993
+ res << "SignalI signalI = #{Low2C.obj_name(target)};\n"
994
+
995
+ # Sets the global variable of the signal.
996
+ res << "\n"
997
+ res << " " * (level+1)*3
998
+ self.to_c_signal(res,level+1)
999
+ res << " = signalI;\n"
1000
+
1001
+ # Generate the return of the signal.
1002
+ res << "\n"
1003
+ res << " " * (level+1)*3
1004
+ res << "return signalI;\n"
1005
+
1006
+ # Close the signal.
1007
+ res << " " * level*3
1008
+ res << "};\n\n"
1009
+ return res
1010
+ end
951
1011
  end
952
1012
 
953
1013
 
@@ -989,9 +1049,22 @@ module HDLRuby::Low
989
1049
  # Set the name
990
1050
  res << " " * (level+1)*3
991
1051
  res << "systemI->name = \"#{self.name}\";\n"
992
- # Set the type.
1052
+ # # Set the type.
1053
+ # res << " " * (level+1)*3
1054
+ # res << "systemI->system = " << Low2C.obj_name(self.systemT) << ";\n"
1055
+ # Set the systems.
1056
+ num_sys = self.each_systemT.to_a.size
993
1057
  res << " " * (level+1)*3
994
- res << "systemI->system = " << Low2C.obj_name(self.systemT) << ";\n"
1058
+ res << "systemI->num_systems = #{num_sys};\n"
1059
+ res << " " * (level+1)*3
1060
+ res << "systemI->systems = calloc(sizeof(SystemT), #{num_sys});\n"
1061
+ self.each_systemT.with_index do |sysT,i|
1062
+ res << " " * (level+1)*3
1063
+ res << "systemI->systems[#{i}] = #{Low2C.obj_name(sysT)};\n"
1064
+ end
1065
+
1066
+ # Configure the instance to current systemT.
1067
+ res << (" " * (level*3)) << "configure(systemI,0);\n"
995
1068
 
996
1069
  # Generate the return of the signal.
997
1070
  res << "\n"
@@ -1090,6 +1163,10 @@ module HDLRuby::Low
1090
1163
  res << "code->owner = NULL;\n"
1091
1164
  end
1092
1165
 
1166
+ # Set the code as enabled (for now, may change in a near future). */
1167
+ res << " " * (level+1)*3
1168
+ res << "code->enabled = 1;\n"
1169
+
1093
1170
  # Set the code as inactive. */
1094
1171
  res << " " * (level+1)*3
1095
1172
  res << "code->activated = 0;\n"
@@ -1382,6 +1459,28 @@ module HDLRuby::Low
1382
1459
  end
1383
1460
  end
1384
1461
 
1462
+ ## Extends the TimeTerminate class with generation of C text.
1463
+ class TimeTerminate
1464
+
1465
+ # Generates the C text of the equivalent HDLRuby code.
1466
+ # +level+ is the hierachical level of the object.
1467
+ def to_c(res,level = 0)
1468
+ # Save the value pool state.
1469
+ res << (" " * (level*3)) << "terminate();\n"
1470
+ end
1471
+ end
1472
+
1473
+ ## Extends the Configure class with generation of C text.
1474
+ class Configure
1475
+
1476
+ # Generates the C text of the equivalent HDLRuby code.
1477
+ # +level+ is the hierachical level of the object.
1478
+ def to_c(res,level = 0)
1479
+ # Save the value pool state.
1480
+ res << (" " * (level*3)) << "configure(#{Low2C.obj_name(self.ref.resolve)},#{self.index});\n"
1481
+ end
1482
+ end
1483
+
1385
1484
 
1386
1485
  ## Extends the If class with generation of C text.
1387
1486
  class If
@@ -1893,6 +1992,16 @@ module HDLRuby::Low
1893
1992
  # Should never be here.
1894
1993
  raise AnyError, "Internal error: to_c should be implemented in class :#{self.class}"
1895
1994
  end
1995
+
1996
+ ## Generates the C text for an expression access to the expression,
1997
+ # default case.
1998
+ # +level+ is the hierachical level of the object.
1999
+ def to_c_expr(res,level = 0)
2000
+ res << "({"
2001
+ self.to_c(res,level+1)
2002
+ res << (" " * ((level+1)*3))
2003
+ res << "pop();})"
2004
+ end
1896
2005
  end
1897
2006
 
1898
2007
 
@@ -2455,46 +2564,64 @@ module HDLRuby::Low
2455
2564
  return res
2456
2565
  end
2457
2566
 
2458
- # Generates the C text of expression for the equivalent HDLRuby code.
2459
- # +level+ is the hierachical level of the object.
2460
- def to_c_expr(res,level = 0)
2461
- # Gather the content to concat.
2462
- expressions = self.each_expression.to_a
2463
- # Create the resulting string.
2464
- res << "({\n"
2465
- # Overrides the upper src0, src1, ..., and dst...
2466
- # And allocates a new value for dst.
2467
- res << (" " * ((level+1)*3))
2468
- res << "Value "
2469
- res << expressions.size.times.map do |i|
2470
- "src#{i}"
2471
- end.join(",")
2472
- res << ";\n"
2473
- res << (" " * ((level+1)*3))
2474
- res << "Value dst = get_value();\n"
2475
- # Save the value pool state.
2476
- res << (" " * (level*3)) << "SV;\n"
2477
- # Compute each sub expression.
2478
- expressions.each_with_index do |expr,i|
2479
- res << (" " * ((level+1)*3))
2480
- res << "src#{i} = "
2481
- expr.to_c_expr(res,level+2)
2482
- res << ";\n"
2483
- end
2484
- # Compute the direction.
2485
- # Compute the resulting concatenation.
2486
- res << (" " * ((level+1)*3))
2487
- res << "concat_value(#{expressions.size},"
2488
- res << "#{self.type.direction == :little ? 1 : 0},dst,"
2489
- res << expressions.size.times.map { |i| "src#{i}" }.join(",")
2490
- res << ");\n"
2491
- # Save the value pool state.
2492
- res << (" " * (level*3)) << "SV;\n"
2493
- # Close the computation.
2494
- res << (" " * (level*3))
2495
- res << "dst; })"
2496
- return res
2497
- end
2567
+ # # # Generates the C text of expression for the equivalent HDLRuby code.
2568
+ # # # +level+ is the hierachical level of the object.
2569
+ # # def to_c_expr(res,level = 0)
2570
+ # # # Gather the content to concat.
2571
+ # # expressions = self.each_expression.to_a
2572
+ # # # Create the resulting string.
2573
+ # # res << "({\n"
2574
+ # # # Overrides the upper src0, src1, ..., and dst...
2575
+ # # # And allocates a new value for dst.
2576
+ # # res << (" " * ((level+1)*3))
2577
+ # # res << "Value "
2578
+ # # res << expressions.size.times.map do |i|
2579
+ # # "src#{i}"
2580
+ # # end.join(",")
2581
+ # # res << ";\n"
2582
+ # # res << (" " * ((level+1)*3))
2583
+ # # res << "Value dst = get_value();\n"
2584
+ # # # Save the value pool state.
2585
+ # # res << (" " * (level*3)) << "SV;\n"
2586
+ # # # Compute each sub expression.
2587
+ # # expressions.each_with_index do |expr,i|
2588
+ # # res << (" " * ((level+1)*3))
2589
+ # # res << "src#{i} = "
2590
+ # # expr.to_c_expr(res,level+2)
2591
+ # # res << ";\n"
2592
+ # # end
2593
+ # # # Compute the direction.
2594
+ # # # Compute the resulting concatenation.
2595
+ # # res << (" " * ((level+1)*3))
2596
+ # # res << "concat_value(#{expressions.size},"
2597
+ # # res << "#{self.type.direction == :little ? 1 : 0},dst,"
2598
+ # # res << expressions.size.times.map { |i| "src#{i}" }.join(",")
2599
+ # # res << ");\n"
2600
+ # # # Save the value pool state.
2601
+ # # res << (" " * (level*3)) << "SV;\n"
2602
+ # # # Close the computation.
2603
+ # # res << (" " * (level*3))
2604
+ # # res << "dst; })"
2605
+ # # return res
2606
+ # # end
2607
+ # def to_c_expr(res,level = 0)
2608
+ # # Save the value pool state.
2609
+ # res << "({ PV;"
2610
+ # # Gather the content to concat.
2611
+ # expressions = self.each_expression.to_a
2612
+ # # Compute each sub expression.
2613
+ # expressions.each_with_index do |expr,i|
2614
+ # expr.to_c(res,level+2)
2615
+ # end
2616
+ # # Compute the resulting concatenation.
2617
+ # res << (" " * ((level+1)*3))
2618
+ # res << "sconcat(#{expressions.size},"
2619
+ # res << (self.type.direction == :little ? "1" : "0")
2620
+ # res << ");\n"
2621
+ # # Restore the value pool state.
2622
+ # res << "RV; pop();})"
2623
+ # return res
2624
+ # end
2498
2625
  end
2499
2626
 
2500
2627
 
@@ -2778,17 +2905,11 @@ module HDLRuby::Low
2778
2905
  # +left+ tells if it is a left value or not.
2779
2906
  # def to_c(level = 0, left = false)
2780
2907
  def to_c(res,level = 0, left = false)
2781
- # # puts "RefName to_c for #{self.name}"
2782
- # self.resolve.to_c_signal(res,level+1)
2783
- # res << "->" << (left ? "f_value" : "c_value")
2784
- # return res
2785
2908
  # puts "RefName to_c for #{self.name}"
2786
2909
  res << (" " * (level*3))
2787
- # res << "d="
2788
2910
  res << "push("
2789
2911
  self.resolve.to_c_signal(res,level+1)
2790
2912
  res << "->" << (left ? "f_value" : "c_value")
2791
- # res << ";\n"
2792
2913
  res << ");\n"
2793
2914
  return res
2794
2915
  end
@@ -925,6 +925,18 @@ module HDLRuby::Low
925
925
  end.join(" & ") + ";\n"
926
926
  end
927
927
  end
928
+
929
+ ## Extends the TimeTerminate class with generation of HDLRuby::High text.
930
+ class TimeTerminate
931
+
932
+ # Generates the text of the equivalent HDLRuby::High code.
933
+ # +vars+ is the list of the variables and
934
+ # +level+ is the hierachical level of the object.
935
+ def to_vhdl(vars,level = 0)
936
+ # Generate a report statement.
937
+ return " " * (level*3) + "finish;\n"
938
+ end
939
+ end
928
940
 
929
941
  ## Extends the If class with generation of HDLRuby::High text.
930
942
  class If
@@ -75,6 +75,18 @@ module HDLRuby::Low
75
75
  end
76
76
  end
77
77
 
78
+
79
+ ## Extends the TimeTerminate class with functionality for converting booleans
80
+ # in assignments to select operators.
81
+ class TimeTerminate
82
+
83
+ # Converts booleans in assignments to select operators.
84
+ def boolean_in_assign2select!
85
+ # Nothing to do.
86
+ return self
87
+ end
88
+ end
89
+
78
90
 
79
91
  ## Extends the If class with functionality for converting booleans
80
92
  # in assignments to select operators.
@@ -71,7 +71,7 @@ module HDLRuby::Low
71
71
  class Statement
72
72
  # Explicit the types conversions in the statement.
73
73
  def explicit_types!
74
- raise "Should implement explicit_types for class #{self.class}."
74
+ raise "Should implement explicit_types! for class #{self.class}."
75
75
  end
76
76
  end
77
77
 
@@ -98,7 +98,26 @@ module HDLRuby::Low
98
98
  self.map_args!(&:explicit_types)
99
99
  return self
100
100
  end
101
+ end
102
+
103
+
104
+ ## Extends the Configure class with fixing of types and constants.
105
+ class Configure
106
+ # Explicit the types conversions in the statement.
107
+ def explicit_types!
108
+ # Nothing to do.
109
+ return self
110
+ end
111
+ end
101
112
 
113
+
114
+ ## Extends the TimeTerminate class with fixing of types and constants.
115
+ class TimeTerminate
116
+ # Explicit the types conversions in the statement.
117
+ def explicit_types!
118
+ # Nothing to do.
119
+ return self
120
+ end
102
121
  end
103
122
 
104
123
 
@@ -50,9 +50,25 @@ module HDLRuby::Low
50
50
  return found if found
51
51
  # Maybe it is a sub scope.
52
52
  return self.each_scope.find { |scope| scope.name == name }
53
+ # Maybe it in the behavior.
54
+ return self.behavior.get_by_name
53
55
  end
54
56
  end
55
57
 
58
+ ##
59
+ # Extends Behavior with the capability of finding one of its inner object
60
+ # by name.
61
+ class Behavior
62
+
63
+ ## Find an inner object by +name+.
64
+ # NOTE: return nil if not found.
65
+ def get_by_name(name)
66
+ if (self.block.name == name.to_sym) then
67
+ return self.block
68
+ end
69
+ return self.block.get_by_name(name)
70
+ end
71
+ end
56
72
 
57
73
  ##
58
74
  # Extends SystemI with the capability of finding one of its inner object
@@ -79,7 +95,16 @@ module HDLRuby::Low
79
95
  # Ensure the name is a symbol.
80
96
  name = name.to_sym
81
97
  # Look in the signals.
82
- return self.get_inner(name)
98
+ found = self.get_inner(name)
99
+ return found if found
100
+ # Check the sub blocks names.
101
+ self.each_block do |block|
102
+ # puts "block=#{block.name}"
103
+ if (block.name == name) then
104
+ return block
105
+ end
106
+ end
107
+ return nil
83
108
  end
84
109
  end
85
110
 
@@ -199,6 +224,7 @@ module HDLRuby::Low
199
224
  if self.ref.is_a?(RefName) then
200
225
  # puts "ref name=#{self.ref.name}"
201
226
  obj = self.ref.resolve
227
+ # puts "obj=#{obj}"
202
228
  # Look into the object for the name.
203
229
  return obj.get_by_name(self.name)
204
230
  else
@@ -208,12 +234,15 @@ module HDLRuby::Low
208
234
  while parent
209
235
  # puts "parent=#{parent}"
210
236
  if parent.respond_to?(:get_by_name) then
237
+ # puts "get_by_name"
211
238
  found = parent.get_by_name(self.name)
239
+ # puts "found" if found
212
240
  return found if found
213
241
  end
214
242
  parent = parent.parent
215
243
  end
216
244
  # Not found.
245
+ puts "Not found!"
217
246
  return nil
218
247
  end
219
248
  end
@@ -163,7 +163,7 @@ module HDLRuby::Low
163
163
  end
164
164
  end
165
165
 
166
- ## Extends the String class with functionality for converting select
166
+ ## Extends the Print class with functionality for converting select
167
167
  # expressions to case statements.
168
168
  class Print
169
169
  # Extract the Select expressions.
@@ -175,6 +175,16 @@ module HDLRuby::Low
175
175
  return selects
176
176
  end
177
177
  end
178
+
179
+ ## Extends the TimeTerminate class with functionality for converting select
180
+ # expressions to case statements.
181
+ class TimeTerminate
182
+ # Extract the Select expressions.
183
+ def extract_selects!
184
+ # Nothing to extract.
185
+ return []
186
+ end
187
+ end
178
188
 
179
189
  ## Extends the If class with functionality for converting select
180
190
  # expressions to case statements.
@@ -1,5 +1,6 @@
1
1
  require 'set'
2
2
 
3
+
3
4
  module HDLRuby
4
5
 
5
6
  ##
@@ -171,7 +171,7 @@ module HDLRuby::Low
171
171
 
172
172
  # Enhance Print with generation of verilog code.
173
173
  class Print
174
- # Converts the system to Verilog code.
174
+ # Converts the print to Verilog code.
175
175
  def to_verilog(spc = 3)
176
176
  code = "#{" " * spc}$write(#{self.each_arg.map do |arg|
177
177
  arg.to_verilog
@@ -180,6 +180,14 @@ module HDLRuby::Low
180
180
  end
181
181
  end
182
182
 
183
+ # Enhance TimeTerminate with generation of verilog code.
184
+ class TimeTerminate
185
+ # Converts the terminate to Verilog code.
186
+ def to_verilog(spc = 3)
187
+ return "#{" " * spc}$finish;"
188
+ end
189
+ end
190
+
183
191
  # To scheduling to the Block.
184
192
  # Enhance Block with generation of verilog code.
185
193
  class Block
@@ -467,7 +467,10 @@ typedef struct SystemIS_ {
467
467
  Object owner; /* The owner if any. */
468
468
 
469
469
  char* name; /* The name of the signal. */
470
- SystemT system; /* The instantiated system. */
470
+ SystemT system; /* The currently instantiated system. */
471
+
472
+ int num_systems; /* The number of systems possibly instantiated here. */
473
+ SystemT* systems; /* The systems possibly instantiated here. */
471
474
  } SystemIS;
472
475
 
473
476
 
@@ -499,6 +502,8 @@ typedef struct BehaviorS_ {
499
502
  Event* events; /* The events of the behavior. */
500
503
  Block block; /* The block of the behavior. */
501
504
 
505
+ int enabled; /* Tells if the behavior is enabled or not. */
506
+
502
507
  int activated; /* Tells if the behavior is activated or not. */
503
508
 
504
509
  int timed; /* Tell if the behavior is timed or not:
@@ -519,6 +524,8 @@ typedef struct CodeS_ {
519
524
  Event* events; /* The events of the behavior. */
520
525
  void (*function)(); /* The function to execute for the code. */
521
526
 
527
+ int enabled; /* Tells if the behavior is enabled or not. */
528
+
522
529
  int activated; /* Tells if the code is activated or not. */
523
530
  } CodeS;
524
531
 
@@ -623,6 +630,16 @@ extern unsigned long long make_delay(int value, Unit unit);
623
630
  * @param func function to applie on each signal. */
624
631
  extern void each_all_signal(void (*func)(SignalI));
625
632
 
633
+
634
+ /** Configure a system instance.
635
+ * @param systemI the system instance to configure.
636
+ * @param idx the index of the target system. */
637
+ extern void configure(SystemI systemI, int idx);
638
+
639
+
640
+ /** Terminates the simulation. */
641
+ extern void terminate();
642
+
626
643
  /* Interface to the visualization engine. */
627
644
 
628
645
  typedef struct {
@@ -701,6 +718,11 @@ extern void init_vcd_visualizer(char* name);
701
718
 
702
719
  /* The interface to the simulator core. */
703
720
 
721
+ /** Sets the enable status of the behaviors of a system type.
722
+ * @param systemT the system type to process.
723
+ * @param status the enable status. */
724
+ extern void set_enable_system(SystemT systemT, int status);
725
+
704
726
  /** The simulation core function.
705
727
  * @param name the name of the simulation.
706
728
  * @param init_vizualizer the vizualizer engine initializer.