public class ASME2SSME_Translate_Processor extends ASME2SSME_Translate_Property
ACTUAL_CONNECTION_BINDING_ID, ACTUAL_LATENCY_ID, ACTUAL_MEMORY_BINDING_ID, ACTUAL_PROCESSOR_BINDING_ID, CLOCK_PERIOD_ID, COMPUTE_EXECUTION_TIME, COMPUTE_EXECUTION_TIME_PROPERTY_ID, DEADLINE_ID, DEQUEUE_PROTOCOL_ID, DEQUEUE_PROTOCOL_PROPERTY_ID, DEQUEUED_ITEMS_ID, DEQUEUED_ITEMS_PROPERTY_ID, DEVICE_DISPATCH_PROTOCOL_ID, DISPATCH_PROTOCOL_ID, DISPATCH_PROTOCOL_PROPERTY_ID, FAN_OUT_POLICY_ID, FLOWLATENCY_ID, FROZEN_TIME_EVENT_ID, INPUT_TIME_PROPERTY_ID, INPUT_TIME_REFERENCE_TIME_ID, INPUT_TIME_REFERENCE_TIME_PROPERTY_ID, LATENCY_ID, LATENCY_PROPERTY_ID, LATENCY_TIME_EVENT_ID, OUTPUT_TIME_EVENT_ID, OUTPUT_TIME_PROPERTY_ID, OUTPUT_TIME_REFERENCE_TIME_ID, OUTPUT_TIME_REFERENCE_TIME_PROPERTY_ID, OVERFLOW_HANDLING_PROTOCOL_ID, OVERFLOW_HANDLING_PROTOCOL_PROPERTY_ID, PERIOD_ID, PERIOD_PROPERTY, PRIORITY_ID, PROPERTY_ID, QUEUE_PROCESSING_PROTOCOL_ID, QUEUE_PROCESSING_PROTOCOL_PROPERTY_ID, QUEUE_SIZE_ID, QUEUE_SIZE_PROPERTY_ID, READ_TIME_ID, READ_TIME_PROPERTY_ID, REFERENCE_TIME_EVENT_ID, SUPPORTED_DISPATCH_PROTOCOLS, TIME_OFFSET_ID, TIME_OFFSET_PROPERTY_ID, TIME_UNITS_ID, TIMING_ID, TIMING_PROPERTY_ID
ALARM_ID, COMPLETE_ID, COMPLETION_ID, CTL1_ID, CTL2_ID, DISPATCH_ID, ERROR_ID, NameList, RESUME_ID, START_ID, TIME1_ID, TIME2_ID, TOP_ID, TREAD_ID, TRESET_ID, TWRITE_ID
Constructor and Description |
---|
ASME2SSME_Translate_Processor()
Class constructor
|
Modifier and Type | Method and Description |
---|---|
void |
ASME2SSME_Processor_Behavior_Instance(ProcessModelImpl vprocess,
ProcessModelImpl behavior_process)
Adds an instance of a processor behavior Signal process (behavior_process) into a processor process (vprocess).
|
void |
ASME2SSME_Processor_Behavior_Interface(ProcessModelImpl vprocess,
org.osate.aadl2.ProcessorSubcomponent subprocessor,
org.osate.aadl2.SystemImplementation sysimpl,
ProcessModelImpl sysimpl_process)
Adds inputs/outputs to the interface of a Signal process that represents a processor behavior
Gets the processes that bound to this processor subcomponent (Processor_Get_Binding_Process()),
and gets the connections between these processes.
|
ProcessModelImpl |
ASME2SSME_Processor_Behavior(ProcessModelImpl vprocess,
org.osate.aadl2.ProcessorSubcomponent subprocessor,
org.osate.aadl2.SystemImplementation sysimpl,
ProcessModelImpl sysimpl_process)
Returns a Signal process "xx_processor_behavior" that represents the behavior of a processor subcomponenet
This Signal process is named as xx_processor_behavior, where xx is this processor subcomponent's name.
|
void |
ASME2SSME_Processor_InOut_Info(ProcessModelImpl vprocess)
Makes a link between the input/output signals to the local signals.
|
void |
ASME2SSME_Processor_Interface_Refine(ProcessModelImpl vprocess,
org.osate.aadl2.ProcessorSubcomponent subprocessor,
org.osate.aadl2.SystemImplementation sysimpl,
ProcessModelImpl sysimpl_process)
Refines the processor interface, and removes some internal signals from the interface.
|
void |
ASME2SSME_Processor_Interface(ProcessModelImpl vprocess,
org.osate.aadl2.ProcessorSubcomponent subprocessor,
org.osate.aadl2.SystemImplementation sysimpl,
ProcessModelImpl sysimpl_process)
Adds inputs/outputs to the interface of a processor.
|
void |
ASME2SSME_Processor_ProcessType_instances(ProcessModelImpl vprocess,
ProcessModelImpl sysimpl_process,
org.osate.aadl2.ProcessorSubcomponent subprocessor,
org.osate.aadl2.SystemImplementation sysimpl)
Adds process calls of the process types (which represents AADL process components) to the body of a Signal process that represents a processor component.
|
ProcessModelImpl |
ASME2SSME_Processor_property(org.osate.aadl2.ProcessorSubcomponent subprocessor)
Returns a Signal process "xx_property" that represents the properties of a processor component.
|
void |
ASME2SSME_Processor_SimDeadline(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_Deadline Signal process, and adds it to the declaration part of processor behavior process,
and make an instance of Sim_Deadline
(xp_xt_ctl1.Deadline, ... ) := Sim_Deadline(top, xp_xt_ctl1.Dispatch, ...)
|
void |
ASME2SSME_Processor_SimDispatch_Aperiodic(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_Dispatch_Aeriodic Signal process, and adds it to the declaration part of processor behavior process,
and make an instance: (xp_xt_ctl1.Dispatch, ... ) := Sim_Dispatch_Aeriodic{}(top, ...)
|
void |
ASME2SSME_Processor_SimDispatch_Background(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_Dispatch_Background Signal process, and adds it to the declaration part of processor behavior process,
and make an instance: (xp_xt_ctl1.Dispatch, ... ) := Sim_Dispatch_Background{}(top, ...)
|
void |
ASME2SSME_Processor_SimDispatch_Hybrid(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_Dispatch_Hybrid Signal process, and adds it to the declaration part of processor behavior process,
and make an instance: (xp_xt_ctl1.Dispatch, ... ) := Sim_Dispatch_Hybrid{}(top, ...)
|
void |
ASME2SSME_Processor_SimDispatch_Periodic(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_PeriodicDispatch Signal process, and adds it to the declaration part of processor behavior process,
and make an instance
(xp_xt_ctl1.Dispatch, ... ) := SimDispatch_Periodic{p1, ... }(top)
where: p1, ... are the period values coming from the original thread periods (value, unit),
xp is a sub process name, xt is a sub thread name of xp
|
void |
ASME2SSME_Processor_SimDispatch_Sporadic(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_Dispatch_Sporadic Signal process, and adds it to the declaration part of processor behavior process,
and make an instance: (xp_xt_ctl1.Dispatch, ... ) := Sim_Dispatch_Sporadic{}(top, ...)
|
void |
ASME2SSME_Processor_SimDispatch_Timed(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_Dispatch_Timed Signal process, and adds it to the declaration part of processor behavior process,
and make an instance: (xp_xt_ctl1.Dispatch, ... ) := Sim_Dispatch_Timed{}(top, ...)
|
void |
ASME2SSME_Processor_SimDispatch(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Simulate dispatch: make process calls to simulate dispatch signals,
and add it to the body of processor behavior
|
void |
ASME2SSME_Processor_SimInitialize(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_Initialize Signal process, and adds it to the declaration part of processor behavior process,
and make an instance of Sim_Deadline
(xp_xt_ctl1.Initialize, ... ) := Sim_Initialize(top, xp_xt_ctl1.Dispatch, ...)
|
void |
ASME2SSME_Processor_SimResume(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_Resume Signal process, and adds it to the declaration part of processor behavior process,
and make an instance of Sim_Resume
(xp_xt_ctl1.Resume, ... ) := Sim_Resume(top, xp_xt_ctl1.Dispatch, ...)
|
void |
ASME2SSME_Processor_SimTimeEvent(org.osate.aadl2.ProcessorSubcomponent subp,
ProcessModelImpl p_behavior,
org.osate.aadl2.SystemImplementation sysimpl)
Makes a Sim_TimeEvent Signal process, and adds it to the declaration part of processor behavior process,
and make an instance of Sim_TimeEvent: Sim_TimeEvent{},
suppose that the formal parameters and the effective parameters have the same name (to simplifier the code)
|
void |
ASME2SSME_ProcessorImpl_Flows(ProcessModelImpl vprocess,
org.osate.aadl2.ProcessorImplementation p)
Translates flows of a processor implementation
|
void |
ASME2SSME_ProcessorImpl_Modes(org.osate.aadl2.ProcessorImplementation p)
Translate modes of a processor implementation component
|
void |
ASME2SSME_ProcessorImpl_SubBuses(org.osate.aadl2.ProcessorImplementation p,
ProcessModelImpl vprocess,
java.util.ArrayList<org.osate.aadl2.BusSubcomponent> subbus_list)
Translates the sub buses of a processor implementation.
|
void |
ASME2SSME_ProcessorImpl_SubMemorys(org.osate.aadl2.ProcessorImplementation p,
ProcessModelImpl vprocess,
java.util.ArrayList<org.osate.aadl2.MemorySubcomponent> list1)
Translates the sub memorys of a processor implementation.
|
void |
ASME2SSME_ProcessorImpl_Subs(org.osate.aadl2.ProcessorImplementation p,
ProcessModelImpl vprocess)
Translates subcomponents of a processor implementation
|
ProcessModelImpl |
ASME2SSME_ProcessorImpl(org.osate.aadl2.ProcessorImplementation p,
org.osate.aadl2.ProcessorSubcomponent subprocessor,
org.osate.aadl2.SystemImplementation sysimpl,
ProcessModelImpl sysimpl_process)
Returns a Signal process that represents a processor implementation component.
|
void |
ASME2SSME_ProcessorType(org.osate.aadl2.ProcessorType pt)
Translates AADL processor type
|
ASME2SSME_Actual_Connection_Binding_Property, ASME2SSME_Actual_Memory_Binding_Property, ASME2SSME_Actual_Processor_Binding_Property, ASME2SSME_ActualLatency_Property_Call, ASME2SSME_Clock_Period_Property, ASME2SSME_Component_Properties_Call, ASME2SSME_Deadline_Property, ASME2SSME_Dequeue_Protocol_Property_Call, ASME2SSME_Dequeue_Protocol, ASME2SSME_Dequeued_Items_Property_Call, ASME2SSME_Dequeued_Items, ASME2SSME_Device_Dispatch_Protocol_Property, ASME2SSME_Device_property_call, ASME2SSME_Dispatch_Protocol_Property, ASME2SSME_Fan_Out_Policy_Property_Call, ASME2SSME_FlowLatency_Property_Call, ASME2SSME_Input_Time_Reference_Time_Property_Call, ASME2SSME_InputTime, ASME2SSME_Latency_Property_Call, ASME2SSME_Output_Time_Reference_Time_Property_Call, ASME2SSME_OutputTime, ASME2SSME_Overflow_Handling_Protocol_Property_Call, ASME2SSME_Overflow_Handling_Protocol, ASME2SSME_Period_Property, ASME2SSME_Priority_Property_Call, ASME2SSME_Property_Call_withName, ASME2SSME_Property_Call, ASME2SSME_PropertySet, ASME2SSME_Queue_Processing_Protocol_Property_Call, ASME2SSME_Queue_Processing_Protocol, ASME2SSME_Queue_Size_Property_Call, ASME2SSME_Queue_Size, ASME2SSME_Read_Time_Property, ASME2SSME_Source_Name, ASME2SSME_Time_Offset_Property_Call, ASME2SSME_Time_Unit_ConstantEnum, ASME2SSME_Timing_Property_Call, ASME2SSME_Timing, Name_of_Reference_data_classifier, read_PropertyAssociation
Generate_Process_Instance_comment, Get_top_sname, getSname, Name_of_Bus, Name_of_Connection, Name_of_CTL1_type, Name_of_CTL2_type, Name_of_Data, Name_of_DataBundle, Name_of_DataReadTime, Name_of_DataReset, Name_of_DataType, Name_of_DataWriteTime, Name_of_Device, Name_of_FeatureGroup, Name_of_FeatureGroupType, Name_of_Flow, Name_of_Local_Signal, Name_of_Memory, Name_of_ParameterConnection, Name_of_PortGroup, Name_of_PortGroupType, Name_of_Process, Name_of_Processor, Name_of_Subprogram_Struct_In, Name_of_Subprogram_Struct_Out, Name_of_Subprogram, Name_of_SubprogramCall, Name_of_System, Name_of_Thread, Name_of_ThreadDataPort, Name_of_ThreadEventDataPort, Name_of_ThreadEventPort, Name_of_ThreadTimeBundle, Name_of_TriggerDispatch_Event, Name_of_Type_Process, Trace
public ASME2SSME_Translate_Processor()
public void ASME2SSME_ProcessorType(org.osate.aadl2.ProcessorType pt)
pt
- public ProcessModelImpl ASME2SSME_ProcessorImpl(org.osate.aadl2.ProcessorImplementation p, org.osate.aadl2.ProcessorSubcomponent subprocessor, org.osate.aadl2.SystemImplementation sysimpl, ProcessModelImpl sysimpl_process)
This Signal process is named as "xx_processor", where "xx" is the name of the processor subcomponent. This is implemented by the Name_of_Processor() method. From the processor implementation, gets its processor type, and translates it as the interface of this Signal process (ASME2SSME_ComponentInterface() method). Two methods (ASME2SSME_Processor_Interface() and ASME2SSME_Processor_Interface_Refine()) are used to refine this interface.
The processes bound to this processor are represented as process instances (ASME2SSME_Processor_ProcessType_instances()).
Processor behavior and property sub processes are declared and added as process calls in the body (ASME2SSME_Processor_behavior(), ASME2SSME_Processor_Behavior_Instance(), ASME2SSME_Processor_property()).
The connections between these processes are added by ASME2SSME_DataPortConnection() method.
p
- a processor implementation componentsubprocessor
- a processor subcomponent whose classifier is psysimpl
- a system implementation component which is the upper level of this processor subcomponentsysimpl_process
- a Signal process which represents this system implementation componentpublic void ASME2SSME_Processor_Interface(ProcessModelImpl vprocess, org.osate.aadl2.ProcessorSubcomponent subprocessor, org.osate.aadl2.SystemImplementation sysimpl, ProcessModelImpl sysimpl_process)
Gets the processes that bound to this processor subcomponent (subprocessor) by method Processor_Get_Binding_Process(). For each process p1, this interface should not include the inputs: top, p1_xx, where xx is an output of p1, and it ends with "_ctl2", "_Alarm", "_TE" and the outputs: p1_yy, where yy is an input of p1, and it ends with "_ctl1", "_time1"
vprocess
- a Signal process that represents this processor componentsubprocessor
- a processor subcomponentsysimpl
- a system implementation component which is the uppler level component that contains this processor subcomponent (subprocessor)sysimpl_process
- a Signal process that represents this system implementation (sysimpl)public void ASME2SSME_Processor_Interface_Refine(ProcessModelImpl vprocess, org.osate.aadl2.ProcessorSubcomponent subprocessor, org.osate.aadl2.SystemImplementation sysimpl, ProcessModelImpl sysimpl_process)
Gets the processes that bound to this processor subcomponent (Processor_Get_Binding_Process()), and gets the connections between these processes. If a process connection connects two processes that bound to a same processor, then the input/output of the processes are removed from the interface of the processor, they are represented as local signals.
vprocess
- a Signal process that represents this processor subcomponentsubprocessor
- a processor subcomponentsysimpl
- a system implementation component which is the uppler level component that contains this processor subcomponent (subprocessor)sysimpl_process
- a Signal process that represents this system implementation (sysimpl)public void ASME2SSME_Processor_ProcessType_instances(ProcessModelImpl vprocess, ProcessModelImpl sysimpl_process, org.osate.aadl2.ProcessorSubcomponent subprocessor, org.osate.aadl2.SystemImplementation sysimpl)
Gets the processes that bound to this subprocessor (Processor_Get_Binding_Process()). For each process, find out its corresponding translated process type, make a process call and add it in the processor's Signal process body (ASME2SSME_ProcessType_Instance()).
vprocess
- a Signal process that represents this processor subcomponentsysimpl_process
- a Signal process that represents the upper level system implementation componentsubprocessor
- a sub processor componentsysimpl
- an upper level system implementation component that contains this processor subcomponentpublic void ASME2SSME_ProcessorImpl_Subs(org.osate.aadl2.ProcessorImplementation p, ProcessModelImpl vprocess)
p
- public void ASME2SSME_ProcessorImpl_SubMemorys(org.osate.aadl2.ProcessorImplementation p, ProcessModelImpl vprocess, java.util.ArrayList<org.osate.aadl2.MemorySubcomponent> list1)
For each memory subcomponent, get its classifier (a memory type or implementation). If this classifier has already been implemented, get its Signal process declaration, otherwise, create a Signal process (ASME2SSME_MemoryImpl()). Add an instance of this Signal process in the body of sys_process.
vprocess
- list1
- public void ASME2SSME_ProcessorImpl_SubBuses(org.osate.aadl2.ProcessorImplementation p, ProcessModelImpl vprocess, java.util.ArrayList<org.osate.aadl2.BusSubcomponent> subbus_list)
For each bus subcomponent, get its classifier (a device type or implementation). If this classifier has already been implemented, get its Signal process declaration, otherwise, create a Signal process (ASME2SSME_BusImpl()). Add an instance of this Signal process in the body of sys_process.
sys_process
- a Signal process that represents a system implementation componentsubbus_list
- a list of bus subcomponents of a systempublic void ASME2SSME_ProcessorImpl_Flows(ProcessModelImpl vprocess, org.osate.aadl2.ProcessorImplementation p)
p
- a processor implementation componentpublic void ASME2SSME_ProcessorImpl_Modes(org.osate.aadl2.ProcessorImplementation p)
p
- public void ASME2SSME_Processor_InOut_Info(ProcessModelImpl vprocess)
vprocess
- a Signal process that represents an AADL processorpublic ProcessModelImpl ASME2SSME_Processor_Behavior(ProcessModelImpl vprocess, org.osate.aadl2.ProcessorSubcomponent subprocessor, org.osate.aadl2.SystemImplementation sysimpl, ProcessModelImpl sysimpl_process)
This Signal process is named as xx_processor_behavior, where xx is this processor subcomponent's name. An empty process skeleton model is provided. The interface is implemented by ASME2SSME_Processor_Behavior_Interface() method.
vprocess
- a Signal process that represents this processor subcomponentsubprocessor
- a processor subcomponentsysimpl
- a system implementation component which contains this subprocessorsysimpl_process
- a Signal process that represents this sysimpl system implementationpublic void ASME2SSME_Processor_Behavior_Interface(ProcessModelImpl vprocess, org.osate.aadl2.ProcessorSubcomponent subprocessor, org.osate.aadl2.SystemImplementation sysimpl, ProcessModelImpl sysimpl_process)
Gets the processes that bound to this processor subcomponent (Processor_Get_Binding_Process()), and gets the connections between these processes. For each such process p1, the interface should includes the inputs: p1_xx, where xx is an output of p1, and it ends with "_ctl2", "_Alarm", "_TE", and the outputs: p1_yy, where yy is an input of p1, and it ends with "_ctl1", "_time1"
vprocess
- a Signal process that represents this processor subcomponentsubprocessor
- a processor subcomponentsysimpl
- a system implementation component which is the uppler level component that contains this processor subcomponent (subprocessor)sysimpl_process
- a Signal process that represents this system implementation (sysimpl)public void ASME2SSME_Processor_Behavior_Instance(ProcessModelImpl vprocess, ProcessModelImpl behavior_process)
Each formal declaration (parameter,input,output) of behavior_process is taken as an effective parameter of the call, except for the input event top (this event coming from the processor Signal process). They are omitted as implicited parameters (in order to simplify the code). Local signal declarations are added in the (vprocess) body.
vprocess
- a Signal process that represents a processor subcomponentbehavior_process
- a Signal process that represents the behavior part of a processor subcomponentpublic ProcessModelImpl ASME2SSME_Processor_property(org.osate.aadl2.ProcessorSubcomponent subprocessor)
This Signal process is named as "xx_property", where "xx" is a name of a Signal process which represents this processor subcomponent. An empty skeleton process model is provided
p_name
- a String name of a Signal process which represents this processor subcomponentpublic void ASME2SSME_Processor_SimDispatch(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- sysimpl
- public void ASME2SSME_Processor_SimDispatch_Periodic(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- public void ASME2SSME_Processor_SimDispatch_Aperiodic(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- public void ASME2SSME_Processor_SimDispatch_Sporadic(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- public void ASME2SSME_Processor_SimDispatch_Timed(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- public void ASME2SSME_Processor_SimDispatch_Hybrid(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- public void ASME2SSME_Processor_SimDispatch_Background(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- public void ASME2SSME_Processor_SimDeadline(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- public void ASME2SSME_Processor_SimResume(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- public void ASME2SSME_Processor_SimInitialize(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
- public void ASME2SSME_Processor_SimTimeEvent(org.osate.aadl2.ProcessorSubcomponent subp, ProcessModelImpl p_behavior, org.osate.aadl2.SystemImplementation sysimpl)
subp
- p_behavior
-