Dear SimFlex Users, We invite all of you to attend an upcoming SimFlex tutorial, which will be hosted at PACT 2008 this year (Oct 25 in Toronto, Canada). We encourage you to sign up soon at http://www.eecg.toronto.edu/pact/registration.html. The tutorial will cover the SimFlex infrastructure in detail and how it achieves fast simulation turnaround by leveraging the SMARTS simulation sampling framework. Attendees will be given the opportunity to develop hands-on experience with the infrastructure and will also be given a hands-on technology preview of ProtoFlex, which is our FPGA-accelerated functional simulation platform on the Berkeley Emulation Engine 2. A more detailed description of the tutorial can be found at http://www.eecg.toronto.edu/pact/workshops.html. See you there!
Regards, Eric Chung From venkat.nathan at gmail.com Mon Oct 6 21:46:44 2008 From: venkat.nathan at gmail.com (Venkatanathan Annamalai) List-Post: [email protected] Date: Tue Oct 7 09:58:23 2008 Subject: [Simflex] finding opcode of an x86 instruction Message-ID: <[email protected]> Hi, I am new to simics and flexus. I am simulating an x86 architecture in simics and my aim is to find the opcode of an instruction. I printed the instruction opcode in "dispatchInstruction" function under <flexus-home>/components/Execute/ExecuteImpl.cpp , but I get only 0 as the opcode. I looked at the forums and the code-base and found that reading x86-instruction-opcode is not supported in "SimicsTracer.hpp" . Please guide me on how to proceed. Thanks, Venkat. From evlachos at ece.cmu.edu Tue Oct 7 13:02:39 2008 From: evlachos at ece.cmu.edu (Evangelos Vlachos) List-Post: [email protected] Date: Tue Oct 7 13:02:52 2008 Subject: [Simflex] finding opcode of an x86 instruction In-Reply-To: <[email protected]> References: <[email protected]> Message-ID: <[email protected]> Hi Venkat, Flexus is mainly interested in memory references, and specifically in intruction fetch and data loads and stores. This information is provided by Simics automatically, without having us to identify what instructions access memory. So in general the opcode is not necessary. x86 ISA has a variable size instruction word, so identifying the opcode is a little bit tricky, if you want to be done efficiently. Practically you will need an x86 decoder built in Flexus, which is quite a lot of work. If you decide to do so, then what you need to do is to read the actuall memory of the application where the instruction resides and perform the decoding. For example, check components/InorderSimicsFeeder/SimicsTracer.hpp line 622. There we want to see if the current x86 instruction is a 'hlt' instruction (although 'hlt' is not really an instruction, Simics will treat that as a NOP instruction). In this case, though, we know what the opcode is and we know that it is 1 byte long. In general, if someone was interested to decode x86 instructions, this place is the right place to do so. After disassembling any information generated (e.g., opcode) will have to be added in the "ArchitecturalInstruction" object that it is also built in that place. Alternatively, the easy way to get information about an instruction that has just been fetched is to ask Simics to perform the disassebly of the instruction. Check the documentation of Simics, and specifically simics-reference-manual-public-all.pdf at page 265. There you will find SIM_disassemble(), which will give you a string representation of the instruction. I suspect though, that this way might be expensive in terms of execution time. Again, SimicsTracer.hpp lines 588 - 702 is where we handle instruction fetch. You want to add you code in there, where the instrance of the "ArchitecturalInstruction" object is built. Please let us know if you have any other questions. Regards, Evangelos On Tue, 7 Oct 2008, Venkatanathan Annamalai wrote: > Hi, > I am new to simics and flexus. I am simulating an x86 architecture in > simics and my aim is to find the opcode of an instruction. I printed > the instruction opcode in "dispatchInstruction" function under > <flexus-home>/components/Execute/ExecuteImpl.cpp , but I get only 0 as > the opcode. I looked at the forums and the code-base and found that > reading x86-instruction-opcode is not supported in "SimicsTracer.hpp" > . Please guide me on how to proceed. > > Thanks, > Venkat. > _______________________________________________ > SimFlex mailing list > [email protected] > https://sos.ece.cmu.edu/mailman/listinfo/simflex > SimFlex web page: http://www.ece.cmu.edu/~simflex > From jason.zebchuk at gmail.com Sun Oct 12 23:40:03 2008 From: jason.zebchuk at gmail.com (Jason Zebchuk) List-Post: [email protected] Date: Sun Oct 12 23:40:16 2008 Subject: [Simflex] undefined symbol caused by DBG_() statement Message-ID: <[email protected]> Hi guys, I'm getting an error when I try to load a flexus module: Error loading module 'flexus-VMTileCMP.OoO-v9-iface-gcc': Failed to load module 'flexus-VMTileCMP.OoO-v9-iface-gcc' ('/home/apps/flexus/runs/zebchuk-empty/simics/x86-linux/lib/libflexus_VMTileCMP.OoO_v9_iface_gcc.so'): "undefined symbol: _ZN5boost14dynamic_bitsetImSaImEE4nposE" I can get rid of the error by commenting out all of the "DBG_()" statements in one of my .cpp files. There isn't anything fancy about the statements that should be causing the problem. Simply adding: DBG_(Trace, ( << "Hello World!" )); to the file causes the above error. Interestingly, the same file has a number of "DBG_Assert()" statements that don't seem to cause any problems. I figure I must be missing a header or something related to the debug system, but I have no idea what. Do you have any suggestions? or can I just not have DBG_() statements in this file? Jason
