My design includes communication between 5 different modules. Let's say the modules are 1, 2, 3, 4 and 5. The communication takes place between modules 4 and 5 first, they exchange four messages between them but once that is done communication should take place between 4 and 1, then 5 and 1. Once that is done, then 4 and 2, then 5 and 2. And similarly 4 and 3, then 5 and 3. When I started writing the design between 4 and 5 using cthreads and wait(), that worked fine. But once that is done, I can't seem to start the communication between modules 4 and 1. I guess I still didn't wholly understand the concept of processes and wait(), but could someone suggest how to go about this? module4.h module5.h //input and output ports are defined //input and output ports are defined //sc_cthread(func4, clk.pos()) //sc_cthread(func5, clk.pos()) module4.cpp module5.cpp //void module4::func4 //void module5::func5 //while(true) //while(true) //send message1; wait(); //receive message1; send message2; wait(); //receive message2; send message3; wait(); //receive message3; send message4; wait(); //receive message4; wait(); It was working fine when I just had only these two modules at first. I wrote a value to the signal which connects module4 and module5 from the main function and these two started communicating just the way I wanted. Then, module1.h was defined. //input and output ports are defined //sc_cthread(func1, clk.pos()) module4.cpp module1.cpp //send message5; wait(); //receive message5(); wait(); But when I defined module1 just the way I defined modules4 and 5, the communication stopped after sending message1 in module4. Module5 didn't seem to receive message1. Can someone point out how to go about this? I know I probably am not using wait() statements the way they are meant to be used, so any help will be much appreciated. Thanks!