Hi Sergio, I recommend you look at the Execute module (components/Execute/ ExecuteImpl.cpp). Look at the doCommit() function around line 866. This function gets called every cycle, so you can simply insert wait states after inspecting the opcode accordingly. You can alternatively stall the dispatch() side of the pipeline in the Execute module, but it may take a little bit more work. Let us know if you have further questions.
- Brian On Dec 12, 2008, at 12:00 PM, Sergio Tota wrote: > Hi, > > I'm quite new to Simics & Flexus so probably some of my assumptions > are wrong. > What I'm trying to do is to make some instructions multi-cycle. > For what I got Flexus increases the cycles-counter every new > instruction fetch. > > What I would like to do is to analyze every instruction and > selectively decide if the given instruction > is one cycle (cycles-counter= cycles-counter +1) or multi-cycle > (cycles-counter= cycles-counter +2). > (For now my multi-cycle is 2 c.c. instead of normal 1 c.c.) > > To implement this behavior I can see two main steps: > 1)Analyze the op-code every instruction fetch > 2)Selectively increase Flexus cycles-counter of 1 or 2. > > For both the points I think that I have to work at the > "SimicsTracer.hpp", > in the Instruction Fetch section starting from line 588. > > What I would do for Point-1 is to use the "SIM_read_phys_memory()" > function > to inspect the opcode at every instruction fetch in order to decide > if the given instruction > will be 1-cycle or 2-cycles. > Once I have decided the cycle-length of the instruction I would use > the Flexus function > "theCycleManager->advanceFlexus()" twice instead of only one as it > is in the original code > in case of 2-cycles operations to perform Point-2. > > For what I got, at every instruction fetch this function is called > at the very beginning of the code. > I would add a second call to this function every time I detect a > particular op-code that I want to make 2-cycles. > > I'm particularly worried about synchronization problems between > Flexus and Simics, > especially in case of CMP simulation where more instances of the > processor are running. > > Can you give me some advices about what I'm trying to do? > > Thanks. > > Sergio > _______________________________________________ > SimFlex mailing list > SimFlex at ece.cmu.edu > https://sos.ece.cmu.edu/mailman/listinfo/simflex > SimFlex web page: http://www.ece.cmu.edu/~simflex
