HDLRuby 2.7.5 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.