|
@@ -278,7 +278,7 @@ Boolean function solve_scc(model : Element, scc : Element):
|
|
|
// A constant, which we can assume is already computed and thus usable
|
|
|
if (blocktype == "AdditionBlock"):
|
|
|
constant = constant + v2f(read_attribute(model, selected, "signal"))
|
|
|
- dict_overwrite(m[i], read_nr_out(scc), -constant)
|
|
|
+ dict_overwrite(m[i], read_nr_out(scc), constant)
|
|
|
elif (blocktype == "MultiplyBlock"):
|
|
|
constant = constant * v2f(read_attribute(model, selected, "signal"))
|
|
|
// Not written to constant part, as multiplies a variable
|
|
@@ -355,77 +355,77 @@ Void function step_simulation(model : Element, schedule : Element):
|
|
|
else:
|
|
|
block = set_pop(scc)
|
|
|
|
|
|
- // Execute "block"
|
|
|
- blocktype = readType(model, block)
|
|
|
- if (blocktype == "ConstantBlock"):
|
|
|
- signal = read_attribute(model, block, "value")
|
|
|
- elif (blocktype == "AdditionBlock"):
|
|
|
- signal = 0.0
|
|
|
- incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
- while (read_nr_out(incoming) > 0):
|
|
|
- selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = signal + cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
- elif (blocktype == "MultiplyBlock"):
|
|
|
- signal = 1.0
|
|
|
- incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
- while (read_nr_out(incoming) > 0):
|
|
|
- selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = signal * cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
- elif (blocktype == "NegatorBlock"):
|
|
|
- incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
- signal = 0.0
|
|
|
- while (read_nr_out(incoming) > 0):
|
|
|
- selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = float_neg(cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
- elif (blocktype == "InverseBlock"):
|
|
|
- signal = 0.0
|
|
|
- incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
- while (read_nr_out(incoming) > 0):
|
|
|
- selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = float_division(1.0, cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
- elif (blocktype == "DelayBlock"):
|
|
|
- signal = 0.0
|
|
|
- if (element_eq(read_attribute(model, block, "last_in"), read_root())):
|
|
|
- // No memory yet, so use initial condition
|
|
|
- incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
+ // Execute "block"
|
|
|
+ blocktype = readType(model, block)
|
|
|
+ if (blocktype == "ConstantBlock"):
|
|
|
+ signal = read_attribute(model, block, "value")
|
|
|
+ elif (blocktype == "AdditionBlock"):
|
|
|
+ signal = 0.0
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
- else:
|
|
|
- signal = read_attribute(model, block, "last_in")
|
|
|
- unset_attribute(model, block, "last_in")
|
|
|
- set_add(memory_blocks, block)
|
|
|
- elif (blocktype == "IntegratorBlock"):
|
|
|
- if (element_eq(read_attribute(model, block, "last_in"), read_root())):
|
|
|
- // No history yet, so use initial values
|
|
|
- incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
+ signal = signal + cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ elif (blocktype == "MultiplyBlock"):
|
|
|
+ signal = 1.0
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
- else:
|
|
|
- signal = cast_s2f(cast_v2s(read_attribute(model, block, "last_in"))) + (delta_t * cast_s2f(cast_v2s(read_attribute(model, block, "last_out"))))
|
|
|
- unset_attribute(model, block, "last_in")
|
|
|
- unset_attribute(model, block, "last_out")
|
|
|
- instantiate_attribute(model, block, "last_out", signal)
|
|
|
- set_add(memory_blocks, block)
|
|
|
- elif (blocktype == "DerivatorBlock"):
|
|
|
- if (element_eq(read_attribute(model, block, "last_in"), read_root())):
|
|
|
- // No history yet, so use initial values
|
|
|
- incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
+ signal = signal * cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ elif (blocktype == "NegatorBlock"):
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
+ signal = 0.0
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
- else:
|
|
|
+ signal = float_neg(cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
+ elif (blocktype == "InverseBlock"):
|
|
|
+ signal = 0.0
|
|
|
incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
while (read_nr_out(incoming) > 0):
|
|
|
selected = readAssociationSource(model, set_pop(incoming))
|
|
|
- signal = (cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))) - cast_s2f(cast_v2s(read_attribute(model, block, "last_in")))) / delta_t
|
|
|
- unset_attribute(model, block, "last_in")
|
|
|
- set_add(memory_blocks, block)
|
|
|
-
|
|
|
- unset_attribute(model, block, "signal")
|
|
|
- instantiate_attribute(model, block, "signal", signal)
|
|
|
- output((("SIM_PROBE " + cast_v2s(block)) + " ") + cast_v2s(signal))
|
|
|
+ signal = float_division(1.0, cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))))
|
|
|
+ elif (blocktype == "DelayBlock"):
|
|
|
+ signal = 0.0
|
|
|
+ if (element_eq(read_attribute(model, block, "last_in"), read_root())):
|
|
|
+ // No memory yet, so use initial condition
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
+ while (read_nr_out(incoming) > 0):
|
|
|
+ selected = readAssociationSource(model, set_pop(incoming))
|
|
|
+ signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ else:
|
|
|
+ signal = read_attribute(model, block, "last_in")
|
|
|
+ unset_attribute(model, block, "last_in")
|
|
|
+ set_add(memory_blocks, block)
|
|
|
+ elif (blocktype == "IntegratorBlock"):
|
|
|
+ if (element_eq(read_attribute(model, block, "last_in"), read_root())):
|
|
|
+ // No history yet, so use initial values
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
+ while (read_nr_out(incoming) > 0):
|
|
|
+ selected = readAssociationSource(model, set_pop(incoming))
|
|
|
+ signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ else:
|
|
|
+ signal = cast_s2f(cast_v2s(read_attribute(model, block, "last_in"))) + (delta_t * cast_s2f(cast_v2s(read_attribute(model, block, "last_out"))))
|
|
|
+ unset_attribute(model, block, "last_in")
|
|
|
+ unset_attribute(model, block, "last_out")
|
|
|
+ instantiate_attribute(model, block, "last_out", signal)
|
|
|
+ set_add(memory_blocks, block)
|
|
|
+ elif (blocktype == "DerivatorBlock"):
|
|
|
+ if (element_eq(read_attribute(model, block, "last_in"), read_root())):
|
|
|
+ // No history yet, so use initial values
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "InitialCondition")
|
|
|
+ while (read_nr_out(incoming) > 0):
|
|
|
+ selected = readAssociationSource(model, set_pop(incoming))
|
|
|
+ signal = cast_s2f(cast_v2s(read_attribute(model, selected, "signal")))
|
|
|
+ else:
|
|
|
+ incoming = allIncomingAssociationInstances(model, block, "Link")
|
|
|
+ while (read_nr_out(incoming) > 0):
|
|
|
+ selected = readAssociationSource(model, set_pop(incoming))
|
|
|
+ signal = (cast_s2f(cast_v2s(read_attribute(model, selected, "signal"))) - cast_s2f(cast_v2s(read_attribute(model, block, "last_in")))) / delta_t
|
|
|
+ unset_attribute(model, block, "last_in")
|
|
|
+ set_add(memory_blocks, block)
|
|
|
+
|
|
|
+ unset_attribute(model, block, "signal")
|
|
|
+ instantiate_attribute(model, block, "signal", signal)
|
|
|
+ output((("SIM_PROBE " + cast_v2s(block)) + " ") + cast_v2s(signal))
|
|
|
output("SIM_END")
|
|
|
|
|
|
while (read_nr_out(memory_blocks) > 0):
|