Dear Brian,

Thanks for your help.

I succeeded to add a wait-state to the doCommit() function.
I'm still not sure where to inspect the opcode to decide if wait-state 
should be enabled though.
Should I inspect it in the doCommit() or somewhere else like inside 
"SimicsTracer.hpp" around line 588?

Another question I have is about performing a multiprocessor simulation 
using this wait-state approach.
Can I selectively control the behaviour of every processor instance to 
decide if a given instruction should be performed in one cycle or two 
cycles?

Thanks.

Sergio


Brian Gold wrote:

> 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
>
>
>

Reply via email to