Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National...
-
Upload
jane-campbell -
Category
Documents
-
view
214 -
download
0
description
Transcript of Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National...
![Page 1: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/1.jpg)
Automatic Code Generation for CSP# Models in PAT
LIN Shang-Wei
Temasek LaboratoriesNational University of Singapore
![Page 2: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/2.jpg)
Outline
• Code Generation Approach• Example• Demo• Future Work
![Page 3: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/3.jpg)
Code Generation Approach
Quantum Platform (QP)
Linux/BSD Windows/WinCE μC/OS-II …
80x86 ARM-Cortex/ARM9/ARM7 …
Application(Active Objects)
Generated code is OS-independent and hardware-independent!
CSP# state machines QP active objects
Both shared memory and message passing are supported
![Page 4: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/4.jpg)
4
Interleave Process
P = Q1 ||| Q2 ||| … ||| Qn
SM1 SM2 SMn…
SM: State Machine
![Page 5: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/5.jpg)
5
Guarded Process
P = [b] Q
P
Q
TIMEOUT [!b] /
TIMEOUT [b] /
![Page 6: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/6.jpg)
6
General Choice
P = Q1 [] Q2 [] … [] Qn
P
Q1 Q2 Qn…
TIMEOUT [op == 1] /
TIMEOUT [op == 2] /
TIMEOUT [op == n] /
op = rand(1,n)
![Page 7: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/7.jpg)
7
Conditional Choice Process
P = if b {Q1} else {Q2}
P
Q1 Q2
TIMEOUT [b] / TIMEOUT [!b] /
![Page 8: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/8.jpg)
8
Case ProcessP = case {
b1: Q1
b2: Q2
…bn: Qn
}
P
Q1 Q2 Qn…
TIMEOUT [b1] /
TIMEOUT [!b1 && b2] /
TIMEOUT [!b1 && !b2 … && bn] /
![Page 9: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/9.jpg)
9
Sequence Process
P = Q1 ; Q2
P
Q1
TIMEOUT/
Q2
TIMEOUT/
![Page 10: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/10.jpg)
10
Event Prefixing Process
P = e Q
P
Q
TIMEOUT / e();
![Page 11: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/11.jpg)
11
Data Operation Process
P = e { prog } Q
P
Q
TIMEOUT / e();prog();
![Page 12: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/12.jpg)
12
Channel Input Process
P = ch?x Q
P
Q
ch_sig /
![Page 13: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/13.jpg)
13
Channel Output Process
P = ch!x Q
P
Q
TIMEOUT / PUBLISH(ch_sig)
![Page 14: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/14.jpg)
Outline
• Code Generation Approach• Example• Demo• Future Work
![Page 15: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/15.jpg)
Peterson’s Protocol
#define N 2;var turn;var pos[N];
P0() = req.0{pos[0] = 1; turn=1} -> Wait0(); cs.0 -> reset.0{pos[0] = 0} -> P0();
Wait0() = if (pos[1]==1 && turn == 1) { Wait0() };
P1() = req.1{pos[1] = 1; turn=0} -> Wait1(); cs.1 -> reset.1{pos[1] = 0} -> P1();
Wait1() = if (pos[0]==1 && turn == 0) { Wait1() };
Peterson() = P0() ||| P1();
![Page 16: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/16.jpg)
Peterson’s Protocol (cont.)
0
1 2 3
TIMEOUT /req_0() ; pos[0] = 1 ; turn = 1;
TIMEOUT [pos[1] = 1 && turn == 1] /
TIMEOUT [pos[1] = 0 || turn == 0] /
TIMEOUT / cs_0();
TIMEOUT /reset_0() ; pos[0] = 0;
Generated state machine for the P0() process
![Page 17: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/17.jpg)
Peterson’s Protocol (cont.)class P0 : public QActive { /** P0.h **/ public: P0(); ~P0();
private: static QState initial(P0 *me, QEvent const *e); static QState P0_0(P0 *me, QEvent const *e); static QState P0_1(P0 *me, QEvent const *e); static QState P0_2(P0 *me, QEvent const *e); static QState P0_3(P0 *me, QEvent const *e);
public: void req_0(); void cs_0(); void reset_0();
private: QTimeEvt m_timeEvt;};
![Page 18: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/18.jpg)
Peterson’s Protocol (cont.)P0::P0() : /** P0.cpp **/QActive((QStateHandler)&P0::initial),m_timeEvt(TIMEOUT_SIG){}
P0::~P0(){}
QState P0::initial(P0 *me, QEvent const *){ return Q_TRAN(&P0::P0_0);}
void P0::req_0(){ std::cout<<"req_0"<<std::endl;}
void P0::cs_0(){ std::cout<<"cs_0"<<std::endl;}
void P0::reset_0(){ std::cout<<"reset_0"<<std::endl;}
![Page 19: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/19.jpg)
Peterson’s Protocol (cont.)QState P0:: /** P0.cpp (cont.)**/P0_0(P0 *me, QEvent const *e){ QEvent *pe;
switch(e->sig){ case Q_ENTRY_SIG: me->m_timeEvt.postIn(me, WAIT_TIME); return Q_HANDLED();
case Q_EXIT_SIG: return Q_HANDLED();
case TIMEOUT_SIG: me->req_0(); pos[0]=1;turn=1; return Q_TRAN(&P0::P0_1); }
return Q_SUPER(&QHsm::top);}
![Page 20: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/20.jpg)
Peterson’s Protocol (cont.)QState P0:: /** P0.cpp (cont.)**/P0_1(P0 *me, QEvent const *e){ QEvent *pe;
switch(e->sig){ case Q_ENTRY_SIG: me->m_timeEvt.postIn(me, WAIT_TIME); return Q_HANDLED();
case Q_EXIT_SIG: return Q_HANDLED();
case TIMEOUT_SIG: if(((pos[1] == 1) && (turn == 1))){ return Q_TRAN(&P0::P0_1); } if(!(((pos[1] == 1) && (turn == 1)))){ return Q_TRAN(&P0::P0_2); } } return Q_SUPER(&QHsm::top);}
![Page 21: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/21.jpg)
Peterson’s Protocol (cont.)
QState P0::P0_2(P0 *me, QEvent const *e){ QEvent *pe;
switch(e->sig){ case Q_ENTRY_SIG: me->m_timeEvt.postIn(me, WAIT_TIME); return Q_HANDLED();
case Q_EXIT_SIG: return Q_HANDLED();
case TIMEOUT_SIG: me->cs_0(); return Q_TRAN(&P0::P0_3); } return Q_SUPER(&QHsm::top);}
![Page 22: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/22.jpg)
Peterson’s Protocol (cont.)QState P0::P0_3(P0 *me, QEvent const *e){ QEvent *pe;
switch(e->sig){ case Q_ENTRY_SIG: me->m_timeEvt.postIn(me, WAIT_TIME); return Q_HANDLED(); case Q_EXIT_SIG: return Q_HANDLED();
case TIMEOUT_SIG: me->reset_0(); pos[0]=0; return Q_TRAN(&P0::P0_0); } return Q_SUPER(&QHsm::top);}
![Page 23: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/23.jpg)
23
Peterson’s Protocol (cont.)// Main.cpp
static P0 __P0;static P1 __P1;
static QEvent const *l_P0_QueueSto[10]; static QEvent const *l_P1_QueueSto[10];
static QSubscrList l_subscrSto[MAX_PUB_SIG];
static union SmallEvents { void *e0; uint8_t e1[sizeof(DataEvent)]; // other event types to go into this pool} l_smlPoolSto[2 * (1 + 0) * 2]; // storage for the small event pool
…
![Page 24: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/24.jpg)
24
Peterson’s Protocol (cont.)int main(int argc, char *argv[]) {
QF::init(); QF::psInit(l_subscrSto, Q_DIM(l_subscrSto)); QF::poolInit(l_smlPoolSto, sizeof(l_smlPoolSto), sizeof(l_smlPoolSto[0]));
__P0.start((uint8_t)(1), l_tableQueueSto, Q_DIM(l_tableQueueSto),
(void *)0, 0, (QEvent *)0);
__P1.start((uint8_t)(2), l_tableQueueSto, Q_DIM(l_tableQueueSto),
(void *)0, 0, (QEvent *)0);
QF::run(); return 0;}
![Page 25: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/25.jpg)
Outline
• Code Generation Approach• Example• Demo• Future Work
![Page 26: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/26.jpg)
Outline
• Code Generation Approach• Example• Demo• Future Work
![Page 27: Automatic Code Generation for CSP# Models in PAT LIN Shang-Wei Temasek Laboratories National University…](https://reader035.fdocuments.us/reader035/viewer/2022070616/5a4d1c0b7f8b9ab0599f3d3d/html5/thumbnails/27.jpg)
Future Work• Deployment on different platforms
– Providing generic hardware APIs– For verification
• Abstract hardware models with equivalent semantics– For code generation
• Linking generic hardware APIs and their implementation
• Non-functional behavior modeling and verification– Power consumption
• Profiling to get the estimation• Additional global variables to capture the cost
– Time constraints• RTS or Timed automata
• Multi-core Platforms