Dear Mahmood, Flexus is a cycle-driven simulator meaning that each component moves forward upon receiving a clock tick. This is implemented by the drive function for every component. This function is called once per cycle in the timing simulator. Please read the slides of the following tutorial beginning from slide 82 for more information.
http://parsa.epfl.ch/simflex/doc/SimFlex-tutorial-isca2006.pdf In few words, the MemoryLoopback component pushes memory requests into the outQueue with a delay of the memory latency - 1 cycle (the code explains why decrementing the latency by 1 cycle). The enqueue function which is implemented in the file Common/MessageQueues.hpp pushes the memory request and the cycle time in which the request will be ready. The component's drive function which is called once per cycle checks which messages are ready (i.e., the cycle time is smaller or equal than the ready cycle time of the message). In case it's ready the message is dequeued. Implementation of other timing components may be more complex. Navigating through the code is the best way to understand how Flexus works. The debugging mode can provide more insight in case you cannot follow the code paths. Regards, -Stavros. On Jul 30, 2011, at 8:48 AM, Mahmood Naderan wrote: Hi How does flexus take memory delay into account for IPC calculation? I want to set a delay for my component and see the effect on IPC. For memory, I see the delay is defined as PARAMETER( Delay, int, "Access time", "time", 1 ) The only thing I think is related to that is outQueue->enqueue(aMessageTransport,cfg.Delay -1); Any more information about that? thanks // Naderan *Mahmood;
